/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/tangy-form-editor@7.22.6/tangy-form-editor.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
import{html,PolymerElement}from"@polymer/polymer/polymer-element.js";import"@polymer/paper-toggle-button/paper-toggle-button.js";import"@polymer/iron-pages/iron-pages.js";import"@material/mwc-fab";import"@material/mwc-icon";import"juicy-ace-editor/juicy-ace-editor-module.js";import"dr-niels-paper-expansion-panel/paper-expansion-panel.js";import{tangyFormEditorReducer}from"./tangy-form-editor-reducer.js";import"./tangy-form-item-editor.js";import"./tangy-form-html-editor.js";import"./tangy-code.js";import"tangy-translate";import"file-list-component/file-list.js";import"file-list-component/file-list-http.js";import"file-list-component/file-list-select.js";import"tangy-form/tangy-form.js";import"tangy-form/input/tangy-box.js";import"tangy-form/input/tangy-input.js";import"tangy-form/input/tangy-timed.js";import"tangy-form/input/tangy-untimed-grid.js";import"tangy-form/input/tangy-toggle.js";import"tangy-form/input/tangy-checkbox.js";import"tangy-form/input/tangy-checkboxes.js";import"tangy-form/input/tangy-radio-buttons.js";import"tangy-form/input/tangy-select.js";import"tangy-form/input/tangy-location.js";import"tangy-form/input/tangy-gps.js";import"tangy-form/input/tangy-acasi.js";import"tangy-form/input/tangy-eftouch.js";import"tangy-form/input/tangy-photo-capture.js";import"tangy-form/input/tangy-video-capture.js";import"tangy-form/input/tangy-qr.js";import"tangy-form/input/tangy-gate.js";import"tangy-form/input/tangy-consent.js";import"tangy-form/input/tangy-signature.js";import"tangy-form/input/tangy-audio-playback.js";import"tangy-form/input/tangy-audio-recording.js";import"tangy-form/input/tangy-audio-recording-nlp.js";class TangyFormEditor extends PolymerElement{static get template(){return html`
      <style>
        :host {
          display: block;
          color: var(--primary-text-color);
          font-size: medium;
        }
        :host([show-preview]) .show-preview {
          display: none;
        }
        :host(:not([show-preview])) .hide-preview {
          display: none;
        }
        :host(:not([show-preview])) #form-preview {
          display: none;
        }
        :host([has-warning]) #warning {
          visibility: visible;
          background: #ffffed;
          border: solid 5px yellow;
          padding: 15px;
          margin: 5px;
        }
        :host(:not([has-warning])) #warning {
          visibility: hidden;
        }
        paper-input {
          --paper-input-container-underline-focus: {
            border-color: var(--accent-color);
          }
        }
        .rightCategories {
          margin-left: 2em;
        }
        .tangy-spacer {
          flex: 1 1 auto;
        }
        .sortable {
          display: inline-flex;
          cursor: move;
          margin-left: 4px;
          margin-bottom: 10px;
          width: 100%;
        }
        .list-item-text {
          padding-top: 0.9rem;
          font-size: 128%;
          font-weight: bold;
        }
        .tangy-icons {
          background-color: var(--accent-text-color);
          color: var(--lighter-accent-color);
        }
        .tangy-action-buttons {
          color: var(--accent-text-color);
          background-color: var(--accent-color);
          font-size: 12px;
          font-weight: 500;
          height: 2rem;
        }
        paper-icon-button {
          margin-top: 0.4rem;
        }
        .form-actions-container {
          display: flex;
          justify-content: space-between;
        }
        .form-actions {
          margin-top: 1rem;
        }
        sortable-list {
          width: 100%;
        }
      </style>
      <div id="warning"></div>
      <!-- FORM ITEM LISTING -->
      <div id="container"></div>
      <div id="editor-region">
        <slot></slot>
      </div>
      <div id="form-preview"></div>
    `}static get properties(){return{print:{type:Boolean,value:!1,reflectToAttribute:!0},hideShowIf:{type:Boolean,value:!1,reflectToAttribute:!0},hideSkipIf:{type:Boolean,value:!1,reflectToAttribute:!0},showPreview:{type:Boolean,value:!1,reflectToAttribute:!0},categories:{type:Array,value:!1,reflectToAttribute:!0},filesEndpoint:{type:String,value:""},locationListsMetadata:{type:Object,value:""}}}get formHtml(){const e=this.store.getState();return`\n      <tangy-form id="${e.form.id}" title="${e.form.title}" category="${e.form.category}"\n        ${e.form.fullscreen?" fullscreen":""}\n        ${e.form.openInFullscreen?" open-in-fullscreen":""}\n        ${e.form.fullscreenInline?" fullscreen-inline":""}\n        fullscreen-nav-align="${"bottom"===e.form.fullscreenNavAlign?"bottom":"top"}"\n        ${e.form.recordItemFirstOpenTimes?" record-item-first-open-times":""}\n        on-open="\n          ${e.form.onOpen}\n        "\n        exit-clicks="${e.form.exitClicks}"\n        cycle-sequences="${e.form.cycleSequences}"\n        on-change="\n          ${e.form.onChange}\n        "\n        on-submit="\n          ${e.form.onSubmit}\n        "\n        on-resubmit="\n          ${e.form.onResubmit}\n        "\n      >\n        ${e.items.map((e=>`\n          <tangy-form-item id="${e.id}" \n            title="${e.title}"\n            ${e.hideBackButton?" hide-back-button":""}\n            ${e.hideNextButton?" hide-next-button":""}\n            ${e.hideNavLabels?" hide-nav-labels":""}\n            ${e.hideNavIcons?" hide-nav-icons":""}\n            ${e.scoringSection?" scoring-section":""}\n            ${e.summary?" summary":""}\n            ${e.rightToLeft?" right-to-left":""}\n            ${e.incorrectThreshold?` incorrect-threshold="${e.incorrectThreshold}"`:""}\n            scoring-fields="${e.scoringFields}"\n            custom-scoring-logic="${e.customScoringLogic}"\n            on-open="\n              ${e.onOpen}\n            "\n            on-change="\n              ${e.onChange}\n            "\n            category="\n              ${e.category}\n            "\n          >\n            <template>\n              ${e.template}\n            </template>\n          </tangy-form-item>\n        `)).join("")}\n      </tangy-form>\n    `}set formHtml(e){let t=document.createElement("template");t.innerHTML=e;let n=[];t.content.querySelectorAll("tangy-form-item").forEach((e=>n.push(Object.assign({},e.getProps(),{template:e.querySelector("template")?e.querySelector("template").innerHTML:e.innerHTML,onOpen:e.hasAttribute("on-open")?e.getAttribute("on-open"):"",onChange:e.hasAttribute("on-change")?e.getAttribute("on-change"):"",category:e.hasAttribute("category")?e.getAttribute("category"):"",summary:e.hasAttribute("summary"),rightToLeft:e.hasAttribute("right-to-left"),incorrectThreshold:e.hasAttribute("incorrect-threshold")?e.getAttribute("incorrect-threshold"):"",hideNavIcons:e.hasAttribute("hide-nav-icons"),hideNavLabels:e.hasAttribute("hide-nav-labels"),scoringSection:e.hasAttribute("scoring-section"),scoringFields:e.hasAttribute("scoring-fields")?e.getAttribute("scoring-fields"):"",customScoringLogic:e.hasAttribute("custom-scoring-logic")?e.getAttribute("custom-scoring-logic"):"",hideBackButton:e.hasAttribute("hide-back-button"),hideNextButton:e.hasAttribute("hide-next-button")}))));let i=Object.assign({},this.formJson,{form:Object.assign({},t.content.querySelector("tangy-form").getProps(),{title:t.content.querySelector("tangy-form").getAttribute("title"),fullscreen:t.content.querySelector("tangy-form").hasAttribute("fullscreen"),openInFullscreen:t.content.querySelector("tangy-form").hasAttribute("open-in-fullscreen"),fullscreenInline:t.content.querySelector("tangy-form").hasAttribute("fullscreen-inline"),fullscreenNavAlign:t.content.querySelector("tangy-form").hasAttribute("fullscreen-nav-align")&&"top"!==t.content.querySelector("tangy-form").getAttribute("fullscreen-nav-align")?"bottom":"top",recordItemFirstOpenTimes:t.content.querySelector("tangy-form").hasAttribute("record-item-first-open-times"),exitClicks:t.content.querySelector("tangy-form").hasAttribute("exit-clicks")?t.content.querySelector("tangy-form").getAttribute("exit-clicks"):"",cycleSequences:t.content.querySelector("tangy-form").hasAttribute("cycle-sequences")?t.content.querySelector("tangy-form").getAttribute("cycle-sequences"):"",onOpen:t.content.querySelector("tangy-form").hasAttribute("on-open")?t.content.querySelector("tangy-form").getAttribute("on-open"):"",onChange:t.content.querySelector("tangy-form").hasAttribute("on-change")?t.content.querySelector("tangy-form").getAttribute("on-change"):"",onSubmit:t.content.querySelector("tangy-form").hasAttribute("on-submit")?t.content.querySelector("tangy-form").getAttribute("on-submit"):"",onResubmit:t.content.querySelector("tangy-form").hasAttribute("on-resubmit")?t.content.querySelector("tangy-form").getAttribute("on-resubmit"):"",category:t.content.querySelector("tangy-form").hasAttribute("category")?t.content.querySelector("tangy-form").getAttribute("category"):""}),items:n});this.store.dispatch({type:"FORM_OPEN",payload:i})}ready(){super.ready(),this.store=Redux.createStore(tangyFormEditorReducer,window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__()),this.unsubscribe=this.store.subscribe((e=>{this.render(this.store.getState())})),this.querySelector("template")?(this.formHtml=this.querySelector("template").innerHTML,this.innerHTML=""):this.store.dispatch({type:"FORM_OPEN",payload:this.formJson}),this.hasAttribute("print")&&this.store.dispatch({type:"FORM_PRINT"})}render(e){if(e.warningMessage?(this.$.warning.innerHTML=e.warningMessage,this.setAttribute("has-warning","")):(this.$.warning.innerHTML="",this.removeAttribute("has-warning")),e.print)this.$.container.innerHTML=`\n        <h1>${e.form.title}</h1> \n        ${e.items.map((e=>`\n          <h2>${e.title}</h2>\n          <tangy-form-condensed-editor print>\n            <template>\n              ${e.template}\n            </template>\n          </tangy-form-condensed-editor>\n        `)).join("")}\n      `;else if(""===e.openItem){this.innerHTML="",this.$.container.querySelector(".item-create")&&this.$.container.querySelector(".item-create").removeEventListener("click",this.onItemCreateClick.bind(this)),this.$.container.querySelector("sortable-list")&&this.$.container.querySelector("sortable-list").removeEventListener("sort-finish",this.onSortFinish.bind(this)),this.$.container.innerHTML=`\n        <div class="form-actions-container">\n          <span style="width:40%;">\n            <paper-input label="Form Title" id="form-title" value="${e.form.title}"></paper-input>\n          </span>\n          \n          <span class="form-actions">\n            <paper-button\n                class="form-html-edit tangy-action-buttons">\n                <iron-icon icon="icons:code"></iron-icon>\n                ${t("Edit HTML")}\n            </paper-button>\n            <paper-button\n                class="show-preview tangy-action-buttons">\n                <iron-icon icon="image:remove-red-eye"></iron-icon>\n                ${t("Preview")}\n            </paper-button>\n            <paper-button\n                class="hide-preview tangy-action-buttons">\n                <iron-icon icon="av:pause-circle-filled"></iron-icon>\n                 ${t("Preview")}\n            </paper-button>\n            <paper-button\n                class="save-form tangy-action-buttons">\n                <iron-icon icon="icons:save"></iron-icon>\n                 ${t("Save")}\n            </paper-button>\n            <paper-button\n                class="advanced tangy-action-buttons">\n                <iron-icon icon="icons:settings"></iron-icon>\n                Advanced \n            </paper-button>\n          </span>\n        </div>\n        <paper-expansion-panel header="advanced settings" id="main-expansion-panel">\n          <paper-checkbox style="margin:15px;" id="record-item-first-open-times-checkbox" ${e.form.recordItemFirstOpenTimes?"checked":""}>${t('Enable recording "first opened time" on all sections')}</paper-checkbox><br>\n          <paper-checkbox style="margin:15px;" id="open-in-fullscreen-checkbox" ${e.form.openInFullscreen?"checked":""}>${t("Open in fullscreen mode")}</paper-checkbox><br>\n          <paper-checkbox style="margin:15px;" id="fullscreen-inline-checkbox" ${e.form.fullscreenInline?"checked":""}>${t("Use fullscreen mode without blocking control to the menu")}</paper-checkbox><br>\n          <paper-checkbox style="margin:15px;" id="fullscreen-checkbox" ${e.form.fullscreen?"checked":""}>${t("Allow switching in and out of fullscreen mode")}</paper-checkbox><br>\n          <select id="fullscreen-nav-align-select" name="fullscreen-nav-align-select" style="margin:15px;">\n            <option value="top" ${e.form.fullscreenNavAlign&&"top"!==e.form.fullscreenNavAlign?"":"selected"}>${t("Top")}</option>\n            <option value="bottom" ${"bottom"===e.form.fullscreenNavAlign?"selected":""}>${t("Bottom")}</option>\n          </select><label for="fullscreen-nav-align-select">${t("Navigation alignment in fullscreen mode")}</label><br>\n          <paper-input \n            style="margin: 15px;"\n            label="${t("Number of clicks required to exit fullscreen mode")}"\n            id="exit-clicks-input" \n            value="${e.form.exitClicks}"\n          ></paper-input>\n          <paper-textarea \n            style="margin: 15px;"\n            label="${t("Cycle Sequences")}"\n            placeholder="${t("This is a list of acceptable orders of sections(i.e from 1 to the length of the items), which will be selected each time an assessment is run.\n Section indices are separated by commas, new lines separate sequences. Once the full list of sequences is executed it will start back from the first line. Example sequences is 1,2,3,4\n4,1,2,3 ")}"\n            id="cycle-sequences" \n            rows="5"\n            value="${e.form.cycleSequences}"\n          ></paper-textarea>\n          <paper-expansion-panel header="on-open logic" id="on-open-editor"></paper-expansion-panel>\n          <paper-expansion-panel header="on-change logic" id="on-change-editor"></paper-expansion-panel>\n          <paper-expansion-panel header="on-submit logic" id="on-submit-editor"></paper-expansion-panel>\n          <paper-expansion-panel header="on-resubmit logic" id="on-resubmit-editor"></paper-expansion-panel>\n        </paper-expansion-panel>\n        \n        <sortable-list >\n        ${e.items.map(((e,t)=>`\n          <paper-card\n            class="sortable"\n            data-item-id="${e.id}"\n            data-item-title="${e.title}">\n            <span >\n                <span \n                  data-item-id="${e.id}"\n                >\n                  <paper-icon-button data-item-id="${e.id}" icon="icons:reorder"></paper-icon-button></span>\n                  </span>\n            \n                <span class="tangy-spacer list-item-text">${t+1+". "+e.title}</span>\n                \n                <span>\n                <a\n                  class="tangy-icons item-copy"\n                  data-item-id="${e.id}"\n                >\n                  <paper-icon-button data-item-id="${e.id}" icon="icons:content-copy"></paper-icon-button></a>\n                <a class="tangy-icons item-edit"\n                  data-item-id="${e.id}"\n                >\n                  <paper-icon-button data-item-id="${e.id}" icon="editor:mode-edit"></paper-icon-button></a>\n                  \n                <a\n                  class="tangy-icons item-delete"\n                  data-item-id="${e.id}"\n                >\n                  <paper-icon-button data-item-id="${e.id}" icon="icons:delete"></paper-icon-button></a>\n                  </span>\n            \n          </paper-card>\n        `)).join("")}\n        </sortable-list>\n        <div>\n          <paper-button\n              class="item-create tangy-action-buttons">\n              <iron-icon icon="add-circle-outline"></iron-icon>\n              ${t("Add section")}\n          </paper-button>\n        </div>\n        \n      `;let n=document.createElement("juicy-ace-editor");n.setAttribute("mode","ace/mode/javascript"),n.value=e.form.onOpen?e.form.onOpen.replace(/&#34;/g,'"'):"",n.style.height=.6*window.innerHeight+"px",n.addEventListener("change",(e=>e.stopPropagation())),this.shadowRoot.querySelector("#on-open-editor").appendChild(n);let i=document.createElement("juicy-ace-editor");i.setAttribute("mode","ace/mode/javascript"),i.value=e.form.onChange?e.form.onChange.replace(/&#34;/g,'"'):"",i.style.height=.6*window.innerHeight+"px",i.addEventListener("change",(e=>e.stopPropagation())),this.shadowRoot.querySelector("#on-change-editor").appendChild(i);let o=document.createElement("juicy-ace-editor");o.setAttribute("mode","ace/mode/javascript"),o.value=e.form.onSubmit?e.form.onSubmit.replace(/&#34;/g,'"'):"",o.style.height=.6*window.innerHeight+"px",o.addEventListener("change",(e=>e.stopPropagation())),this.shadowRoot.querySelector("#on-submit-editor").appendChild(o);let r=document.createElement("juicy-ace-editor");r.setAttribute("mode","ace/mode/javascript"),r.value=e.form.onResubmit?e.form.onResubmit.replace(/&#34;/g,'"'):"",r.style.height=.6*window.innerHeight+"px",r.addEventListener("change",(e=>e.stopPropagation())),this.shadowRoot.querySelector("#on-resubmit-editor").appendChild(r),this.$.container.querySelector(".advanced").addEventListener("click",this.onClickAdvancedSettings.bind(this)),this.$.container.querySelector("sortable-list").addEventListener("sort-finish",this.onSortFinish.bind(this)),this.$.container.querySelectorAll(".item-edit").forEach((e=>e.addEventListener("click",this.onItemEditClick.bind(this)))),this.$.container.querySelectorAll(".item-copy").forEach((e=>e.addEventListener("click",this.onItemCopyClick.bind(this)))),this.$.container.querySelectorAll(".item-delete").forEach((e=>e.addEventListener("click",this.onItemDeleteClick.bind(this)))),this.$.container.querySelector(".show-preview").addEventListener("click",this.togglePreview.bind(this)),this.$.container.querySelector(".hide-preview").addEventListener("click",this.togglePreview.bind(this)),this.$.container.querySelector(".save-form").addEventListener("click",this.onSaveFormClick.bind(this)),this.$.container.querySelector(".item-create").addEventListener("click",this.onItemCreateClick.bind(this)),this.$.container.querySelector(".form-html-edit").addEventListener("click",this.onFormHtmlEditClick.bind(this)),e.form.openInFullscreen||e.form.fullscreen?this.$["form-preview"].innerHTML="\n          <h2>Form preview is not compatible with fullscreen mode.</h2>\n        ":(this.$["form-preview"].innerHTML=`\n          <h2>Form preview</h2>\n          ${this.formHtml}\n        `,this.$["form-preview"].querySelector("tangy-form").setAttribute("error-logging",""))}else"form.html"===e.openItem?(this.$["form-preview"].innerHTML="",this.innerHTML="",this.$.container.innerHTML="\n        <tangy-form-html-editor></tangy-form-html-editor>\n      ",this.$.container.querySelector("tangy-form-html-editor").form={title:e.form.title,markup:this.formHtml},this.$.container.querySelector("tangy-form-html-editor").addEventListener("save",this.onFormHtmlEditorSave.bind(this)),this.$.container.querySelector("tangy-form-html-editor").addEventListener("close",this.onFormHtmlEditorCancel.bind(this))):""!==e.openItem&&(this.$.container.innerHTML="",this.innerHTML=`\n        <tangy-form-item-editor\n          files-endpoint="${this.filesEndpoint}"\n          location-lists-metadata='${JSON.stringify(this.locationListsMetadata)}'\n          ${this.hideSkipIf?"hide-skip-if":""}\n          ${this.hideShowIf?"hide-show-if":""}\n        >\n        </tangy-form-item-editor>\n      `,this.querySelector("tangy-form-item-editor").categories=this.categories,this.querySelector("tangy-form-item-editor").item=e.items.find((t=>t.id===e.openItem)),this.querySelector("tangy-form-item-editor").addEventListener("save",this.onItemEditorSave.bind(this)),this.querySelector("tangy-form-item-editor").addEventListener("cancel",this.onItemEditorCancel.bind(this)),this.$["form-preview"].innerHTML="")}togglePreview(){this.showPreview?this.showPreview=!1:(this.showPreview=!0,setTimeout((e=>this.shadowRoot.querySelector("#form-preview").scrollIntoView({behavior:"smooth",block:"start"})),50))}dispatchChangeEvent(){this.dispatchEvent(new CustomEvent("tangy-form-editor-change",{detail:this.formHtml}))}dispatchSaveEvent(){this.dispatchEvent(new CustomEvent("tangy-form-editor-save",{detail:this.formHtml}))}onItemEditorSave(e){this.store.dispatch({type:"ITEM_UPDATE",payload:e.detail}),this.dispatchChangeEvent()}onSaveFormClick(e){let t=this.shadowRoot.querySelector("#category"),n=null;null!=t&&(n=t.value),this.store.dispatch({type:"FORM_UPDATE",payload:{title:this.shadowRoot.querySelector("#form-title").value,exitClicks:this.$.container.querySelector("#exit-clicks-input").value,cycleSequences:this.$.container.querySelector("#cycle-sequences").value,fullscreen:this.$.container.querySelector("#fullscreen-checkbox").hasAttribute("checked"),openInFullscreen:this.$.container.querySelector("#open-in-fullscreen-checkbox").hasAttribute("checked"),fullscreenInline:this.$.container.querySelector("#fullscreen-inline-checkbox").hasAttribute("checked"),fullscreenNavAlign:this.$.container.querySelector("#fullscreen-nav-align-select").value,recordItemFirstOpenTimes:this.$.container.querySelector("#record-item-first-open-times-checkbox").hasAttribute("checked"),onOpen:this.shadowRoot.querySelector("#on-open-editor juicy-ace-editor").value.replace(/"/g,"&#34;"),onChange:this.shadowRoot.querySelector("#on-change-editor juicy-ace-editor").value.replace(/"/g,"&#34;"),onSubmit:this.shadowRoot.querySelector("#on-submit-editor juicy-ace-editor").value.replace(/"/g,"&#34;"),onResubmit:this.shadowRoot.querySelector("#on-resubmit-editor juicy-ace-editor").value.replace(/"/g,"&#34;"),category:n}});const i=this.findDuplicateVariableNames();i.length>0&&this.store.dispatch({type:"WARN",payload:`\n          <b>WARNING</b> Duplicate variables names detected: \n            ${1===i.length?i[0]:i.join(", ")}\n        `}),this.dispatchChangeEvent(),this.dispatchSaveEvent()}onItemEditorCancel(e){this.store.dispatch({type:"ITEM_CLOSE"})}onItemCreateClick(){this.store.dispatch({type:"ITEM_CREATE"})}onFormHtmlEditorSave(e){this.formHtml=e.detail,this.store.dispatch({type:"_UPDATE",payload:e.detail}),this.dispatchChangeEvent()}onFormHtmlEditorCancel(e){this.store.dispatch({type:"ITEM_CLOSE"})}onFormHtmlEditClick(){this.store.dispatch({type:"FORM_EDIT"})}onSortFinish(e){this.store.dispatch({type:"SORT_ITEMS",payload:[].slice.call(this.$.container.querySelectorAll(".sortable")).map((e=>e.dataset.itemId))})}onItemEditClick(e){this.store.dispatch({type:"ITEM_OPEN",payload:e.target.dataset.itemId})}onItemCopyClick(e){this.store.dispatch({type:"ITEM_COPY",payload:e.target.dataset.itemId})}onItemDeleteClick(e){confirm("Are you sure you want to delete this item?")&&this.store.dispatch({type:"ITEM_DELETE",payload:e.target.dataset.itemId})}onClickAdvancedSettings(){this.$.container.querySelector("#main-expansion-panel").opened=!this.$.container.querySelector("#main-expansion-panel").opened}findDuplicateVariableNames(){const e=document.createElement("div");document.body.appendChild(e),e.innerHTML=this.formHtml;const t=e.querySelector("tangy-form").getMeta().items.reduce(((e,t)=>{for(let n of t.inputs)e.names.includes(n.name)?e.duplicateNames.push(n.name):e.names.push(n.name);return e}),{names:[],duplicateNames:[]});return e.remove(),t.duplicateNames}}window.customElements.define("tangy-form-editor",TangyFormEditor);
//# sourceMappingURL=/sm/dba7b2ab29ded497861b4a124b7a93630e43366e7342c9614ea1cd40ee9167d3.map