{"version":3,"names":["HaloControlPointItem","__SystemJSRewritingHack","_export","setters","_srcComponentsHaloLivelyHaloItemJs","HaloItem","default","_srcClientMorphicNodeHelpersJs","nodes","_srcClientMorphicEventHelpersJs","events","_srcClientGraphicsJs","pt","_srcClientMorphicSnappingJs","Grid","_srcClientStringsJs","Strings","_srcClientSvgJs","SVG","_srcExternalLodashLodashJs","_","_srcComponentsHaloLivelyHaloJs","HaloService","execute","_recorder_","_src_components_halo_lively_halo_control_point_item_js","Object","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable","isMetaNode","initialize","lively","addEventListener","e","onMouseDown","setup","halo","path","index","setPosition","offset","getClientPosition","subPt","updatePosition","isConnector","classList","add","curveIndex","getCurvePoint","cp","undefined","setCurvePoint","pos","x","y","v","getPathVertices","cpPos","addPt","evt","preventDefault","start","document","documentElement","move","onPointerUp","removeEventListener","stop","target","window","that","shiftKey","ctrlKey","addCurvePoint","addControlPoint","removeControlPoint","vertices","original","eventOffset","globalPosition","shadowRoot","querySelectorAll","forEach","ea","style","visibility","pointerEvents","targetPointerEvents","findTargetAt","curvePoint","assign","c","x2","x1","splice","setPathVertices","cp2","y2","x3","remove","showHighlight","element","highlight","showElement","innerHTML","id","moveBy","border","setExtent","getExtent","hideHighlight","world","body","p","clientX","clientY","tagName","getClientBounds","containsPoint","targetElement","findControlPoints","controlPoints","eaPath","parentElement","push","y1","snapRange","findWorldContext","setClientPosition","hand","delta","newPos","snapPt","setVerticePosition","connectMethod","points","myPos","pointsDist","map","point","dist","nearPoints","sortBy","filter","disconnectMethod","resetBounds","showHalos","stopPropagation","svg","getPosition"],"sources":["lively-halo-control-point-item.js"],"sourcesContent":["import HaloItem from 'src/components/halo/lively-halo-item.js';\nimport * as nodes from 'src/client/morphic/node-helpers.js'\nimport * as events from 'src/client/morphic/event-helpers.js'\nimport {pt} from 'src/client/graphics.js';\nimport {Grid} from 'src/client/morphic/snapping.js';\nimport Strings from 'src/client/strings.js';\nimport SVG from \"src/client/svg.js\"\nimport _ from 'src/external/lodash/lodash.js'\nimport {default as HaloService} from \"src/components/halo/lively-halo.js\"\n\nexport default class HaloControlPointItem extends HaloItem {\n  \n  get isMetaNode() {\n    return true\n  }\n  \n  initialize() {\n    lively.addEventListener(\"Morphic\", this, 'pointerdown',  e => this.onMouseDown(e));\n  }\n  \n  setup(halo, path, index) {\n    this.halo = halo\n    this.path = path\n    this.index = index\n    lively.setPosition(this, pt(0,0))\n//    this.offset = lively.getClientPosition(this.path.parentElement).subPt(lively.getClientPosition(this))\n    this.offset = lively.getClientPosition(this.path)\n      .subPt(lively.getClientPosition(this))\n    this.updatePosition()\n    if (this.isConnector) {\n      this.get(\"#shape\").classList.add(\"connector\")\n    } \n    if (this.curveIndex > 1) {\n      this.get(\"#shape\").classList.add(\"curve\")\n    }\n\n  }\n  \n  getCurvePoint(cp, curveIndex) {\n    if (curveIndex === undefined) curveIndex = 1;\n    return pt(cp[\"x\" + curveIndex],cp[\"y\" + curveIndex])\n  }\n  \n \n  setCurvePoint(cp, curveIndex, pos) {\n    if (curveIndex === undefined) curveIndex = 1;\n    cp[\"x\" + curveIndex] = pos.x \n    cp[\"y\" + curveIndex] = pos.y  \n  }\n  \n  updatePosition() {\n    var v = SVG.getPathVertices(this.path)\n    var cp = v[this.index]\n    let cpPos = this.getCurvePoint(cp, this.curveIndex)\n    lively.setPosition(this, this.offset.addPt(cpPos))\n    // lively.showPoint(lively.getClientPosition(this))\n  }\n\n  onMouseDown(evt) {\n    evt.preventDefault();\n    this.start(evt);\n\n    // attach mousemove handler to body only after mousedown occured\n    lively.addEventListener(\"HaloControlPoint\", document.documentElement, 'pointermove', (evt) => {\n      evt.preventDefault();\n      this.move(evt);\n    });\n    // and capture the following mouse up anywere \n    lively.addEventListener(\"HaloControlPoint\", document.documentElement, 'pointerup',  e => this.onPointerUp(e));\n  }\n\n  onPointerUp(evt) {\n    lively.removeEventListener(\"HaloControlPoint\", document.documentElement);\n    this.stop(evt);\n  }\n\n  start(evt, target) {    \n    this.target = target || window.that\n    // lively.notify(\"svg start \" + lively.getPosition(this.target))\n\n    // this.snapping = new Snapping(this.target) \n    if (evt.shiftKey && evt.ctrlKey) {\n      this.addCurvePoint(evt)\n    } else if (evt.shiftKey) {\n      this.addControlPoint(evt)\n    } else if (evt.ctrlKey) {\n      this.removeControlPoint(evt)     \n    }\n    \n    this.vertices = SVG.getPathVertices(this.path)\n    var cp = this.vertices[this.index]\n    if (!cp) return\n    \n    this.original = this.getCurvePoint(cp, this.curveIndex)\n    // lively.notify(\"original \" + this.original)\n    \n    this.eventOffset = events.globalPosition(evt)\n    // lively.notify(\"eventOffset \" + this.eventOffset)\n\n    if (this.halo) {\n      this.halo.shadowRoot.querySelectorAll(\".halo\").forEach(ea => {\n        ea.style.visibility = \"hidden\"\n        // if (ea !== this) ea.style.visibility = \"hidden\"\n      })      \n    }\n    \n    // this.halo.shadowRoot.querySelectorAll(\"lively-halo-control-point-item\").forEach(ea => {\n    //  ea.style.visibility = \"hidden\"\n    //   // if (ea !== this) ea.style.visibility = \"hidden\"\n    // })\n\n    this.style.pointerEvents = \"none\"\n\n    this.targetPointerEvents = this.target.style.pointerEvents\n    this.target.style.pointerEvents = \"none\"; // disable mouse events while dragging...\n    \n    if (this.isConnector) {\n      // lively.notify(\"find target\")\n      this.findTargetAt(evt)\n    }\n  }\n  \n  addCurvePoint() {\n    this.vertices = SVG.getPathVertices(this.path)\n    var cp = this.vertices[this.index]\n    var curvePoint = Object.assign({}, cp)\n    curvePoint.c = \"Q\"\n    curvePoint.x2 = cp.x1\n    curvePoint.x2 = cp.x2\n    this.curveIndex = 2\n    this.vertices.splice(this.index, 0, curvePoint) \n    SVG.setPathVertices(this.path, this.vertices)\n  }\n  \n  \n  addControlPoint() {\n    this.vertices = SVG.getPathVertices(this.path)\n    var cp = this.vertices[this.index]\n    var cp2 = Object.assign({}, cp)\n    cp2.c = \"L\"\n    this.vertices.splice(this.index + 1, 0, cp2) \n    SVG.setPathVertices(this.path, this.vertices)\n    this.index++\n  }\n\n  removeControlPoint() {\n    this.vertices = SVG.getPathVertices(this.path)\n    if (this.index == 0) {\n      this.vertices[1].c = \"M\" // the first one has to be M\n    }\n    \n    if (this.curveIndex > 1) {\n      var cp = this.vertices[this.index]\n      cp.c = \"L\"\n      delete cp.x2\n      delete cp.y2\n      delete cp.x3\n      delete cp.y2\n    } else {\n      this.vertices.splice(this.index, 1)     \n    }\n    SVG.setPathVertices(this.path, this.vertices)\n    this.remove()\n  }\n\n  \n  showHighlight(element) {\n    this.highlight = lively.showElement(element,100000)\n    this.highlight.innerHTML = \"\" + element.id\n    lively.moveBy(this.highlight, pt(-2,-2))\n    this.highlight.style.border = \"1px dashed rgba(0,0,100,0.5)\"\n    lively.setExtent(this.highlight, lively.getExtent(this.highlight).addPt(pt(2,2)))\n    return this.highlight\n  }\n\n  hideHighlight() {\n    if (this.highlight) this.highlight.remove();\n  }\n\n  findTargetAt(evt, world=document.body) {\n    this.hideHighlight()\n    \n    // does only work with \"mousemove\" but not with \"pointermove\"\n    // var element = evt.composedPath().find(ea => {\n    //   lively.showElement(ea)\n    //   return ea.classList && ea.classList.contains(\"lively-content\") && ea !== this \n    // }) \n    var p = pt(evt.clientX, evt.clientY)\n    var element\n    world.querySelectorAll(\".lively-content, lively-table\").forEach(ea => {\n      if (ea.tagName !== \"LIVELY-CONNECTOR\" && \n          lively.getClientBounds(ea).containsPoint(p)) element = ea;\n    })\n    \n    if (element) {\n      this.showHighlight(element)\n      this.targetElement = element\n    } else {\n      if (this.targetElement) this.targetElement = null\n    }\n    return element\n  }\n\n  findControlPoints(evt, world=document.body) {\n    var controlPoints = []\n    \n    world.querySelectorAll(\":not(marker) > path\").forEach(eaPath => {\n      var offset = lively.getClientPosition(eaPath.parentElement)\n      SVG.getPathVertices(eaPath).forEach((ea, index) => {\n        if (this.path == eaPath && index == this.index) {\n           // ignore me\n        } else {\n          controlPoints.push(offset.addPt(pt(ea.x1, ea.y1)))\n        }\n        \n      })\n    })\n    return controlPoints\n  }\n\n  move(evt) {\n    // lively.notify(\"svg \" + lively.getPosition(this.target))\n\n    const snapRange = 20; // #TODO make preference\n    \n    var world = lively.findWorldContext(this.target)\n    if (!this.original) return\n    \n    lively.setClientPosition(lively.hand, pt(evt.clientX, evt.clientY))\n    \n    // non-connector path\n    var delta = events.globalPosition(evt).subPt(this.eventOffset)\n\n    var newPos = pt(this.original.x + delta.x, this.original.y + delta.y)\n    if (!evt.ctrlKey) { // #TODO alt does not work with pointer events\n      newPos = Grid.snapPt(newPos, 10, 5) \n    }\n    \n   //  lively.notify(\"newPos \" + newPos)\n    this.setVerticePosition(newPos)\n    \n    if (this.isConnector) {\n      this.findTargetAt(evt, world)\n      // lively.showPoint(pt(evt.clientX, evt.clientY))\n\n      var connectMethod = this.index == 0 ? \"connectFrom\" : \"connectTo\";\n      if (this.targetElement) {\n        this.target[connectMethod](this.targetElement); \n        this.style.visibility = \"hidden\"\n      } else {\n        this.style.visibility = \"visible\"\n        this.target[connectMethod](lively.hand); \n      } \n    } else {\n      var points = this.findControlPoints(world)\n      var myPos = lively.getClientPosition(this)\n      var pointsDist = points.map(ea => {return {point: ea, dist: ea.dist(myPos)}})\n      \n      \n      if (!evt.ctrlKey) {\n        var nearPoints = _.sortBy(pointsDist.filter(ea => ea.dist < snapRange), ea => ea.dist).map(ea => ea.point)\n\n        // nearPoints.forEach(ea => lively.showPoint(ea))\n        if (nearPoints[0]) {\n          // lively.showPoint(nearPoints[0])\n          var p = nearPoints[0].subPt(lively.getClientPosition(this.path.parentElement))\n          this.setVerticePosition(p)\n\n        }        \n      }\n      \n    }\n  }\n\n  setVerticePosition(pos) {\n    if (!this.vertices)\n      this.vertices = SVG.getPathVertices(this.path);\n    var cp = this.vertices[this.index]\n    if (!cp) return;\n    this.setCurvePoint(cp, this.curveIndex, pos)\n    SVG.setPathVertices(this.path, this.vertices)\n    this.updatePosition()\n  }\n\n  stop(evt) {\n    this.hideHighlight()\n    this.style.pointerEvents = null\n    this.target.style.pointerEvents = this.targetPointerEvents; // receive mouse events again\n    \n    if (this.targetElement) {\n        var connectMethod = this.index == 0 ? \"connectFrom\" : \"connectTo\";\n        if (this.target[connectMethod]) {\n          this.target[connectMethod](this.targetElement) \n        }\n    } else {\n        var disconnectMethod = this.index == 0 ? \n            \"disconnectFromElement\" : \"disconnectToElement\";\n        if (this.target[disconnectMethod]) {\n          this.target[disconnectMethod](this.targetElement) \n        }\n    }\n    if (this.isConnector) {\n      this.target.resetBounds()\n    } else {\n      this.resetBounds(this.path)\n    }\n    if (this.halo) {\n      this.halo.shadowRoot.querySelectorAll(\".halo\").forEach(ea => {\n        if (ea !== this) ea.style.visibility = null\n      })      \n    }\n\n    HaloService.showHalos(window.that);\n\n    // this.halo.info.stop()\n    evt.preventDefault();\n    evt.stopPropagation()\n  }\n\n  resetBounds(path) {\n    // assuming `svg.style.overflow == \"visible\"` during move\n    var svg = path.parentElement\n    // lively.showElement(svg)\n\n    SVG.resetBounds(svg, path)\n    lively.setExtent(this, lively.getExtent(svg))\n    var pos = lively.getPosition(svg)\n    lively.moveBy(this, pos)\n    // lively.setPosition(svg, pt(0,0))\n  }\n  \n    \n}"],"mappings":";;;uEAUqBA,oBAAoB,EAAAC,uBAAA;EAAAC,OAAA;EAAA;IAAAC,OAAA,aAAAC,kCAAA;MAVlCC,QAAQ,GAAAD,kCAAA,CAAAE,OAAA;IAAA,aAAAC,8BAAA;MACHC,KAAK,GAAAD,8BAAA;IAAA,aAAAE,+BAAA;MACLC,MAAM,GAAAD,+BAAA;IAAA,aAAAE,oBAAA;MACVC,EAAE,GAAAD,oBAAA,CAAFC,EAAE;IAAA,aAAAC,2BAAA;MACFC,IAAI,GAAAD,2BAAA,CAAJC,IAAI;IAAA,aAAAC,mBAAA;MACLC,OAAO,GAAAD,mBAAA,CAAAT,OAAA;IAAA,aAAAW,eAAA;MACPC,GAAG,GAAAD,eAAA,CAAAX,OAAA;IAAA,aAAAa,0BAAA;MACHC,CAAC,GAAAD,0BAAA,CAAAb,OAAA;IAAA,aAAAe,8BAAA;MACWC,WAAW,GAAAD,8BAAA,CAAtBf,OAAO;IAAA;IAAAiB,OAAA,WAAAA,CAAA;MAAAtB,uBAAA;MAAAuB,UAAA,CAAAC,sDAAA,GAAAD,UAAA,CAAAC,sDAAA;MAAAC,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAvB,QAAA;QAAA;QAAAwB,IAAAC,8BAAA;UARRzB,QAAA,CAAAA,CAAA,CAAAA,8BAAQ;UAAA;QAAA;QAAA0B,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAApB,KAAA;QAAA;QAAAqB,IAAAC,8BAAA;UACHtB,KAAA,CAAAA,CAAA,CAAAA,8BAAK;UAAA;QAAA;QAAAuB,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAlB,MAAA;QAAA;QAAAmB,IAAAC,8BAAA;UACLpB,MAAA,CAAAA,CAAA,CAAAA,8BAAM;UAAA;QAAA;QAAAqB,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAhB,EAAA;QAAA;QAAAiB,IAAAC,8BAAA;UACVlB,EAAA,CAAAA,CAAA,CAAAA,8BAAE;UAAA;QAAA;QAAAmB,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAd,IAAA;QAAA;QAAAe,IAAAC,8BAAA;UACFhB,IAAA,CAAAA,CAAA,CAAAA,8BAAI;UAAA;QAAA;QAAAiB,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAZ,OAAA;QAAA;QAAAa,IAAAC,8BAAA;UACLd,OAAA,CAAAA,CAAA,CAAAA,8BAAO;UAAA;QAAA;QAAAe,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAV,GAAA;QAAA;QAAAW,IAAAC,8BAAA;UACPZ,GAAA,CAAAA,CAAA,CAAAA,8BAAG;UAAA;QAAA;QAAAa,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAR,CAAA;QAAA;QAAAS,IAAAC,8BAAA;UACHV,CAAA,CAAAA,CAAA,CAAAA,8BAAC;UAAA;QAAA;QAAAW,UAAA;QAAAC,YAAA;MAAA;MAAAN,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAAN,WAAA;QAAA;QAAAO,IAAAC,8BAAA;UACWR,WAAA,CAAAA,CAAA,CAAAA,8BAAW;UAAA;QAAA;QAAAS,UAAA;QAAAC,YAAA;MAAA;MAAA9B,OAAA,YAETF,oBAAoB,GAA1B,MAAMA,oBAAoB,SAASK,QAAQ,CAAC;QAEzD,IAAI4B,UAAUA,CAAA,EAAG;UACf,OAAO,IAAI;QACb;QAEAC,UAAUA,CAAA,EAAG;UACXC,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,EAAGC,CAAC,IAAI,IAAI,CAACC,WAAW,CAACD,CAAC,CAAC,CAAC;QACpF;QAEAE,KAAKA,CAACC,IAAI,EAAEC,IAAI,EAAEC,KAAK,EAAE;UACvB,IAAI,CAACF,IAAI,GAAGA,IAAI;UAChB,IAAI,CAACC,IAAI,GAAGA,IAAI;UAChB,IAAI,CAACC,KAAK,GAAGA,KAAK;UAClBP,MAAM,CAACQ,WAAW,CAAC,IAAI,EAAE/B,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;UACrC;UACI,IAAI,CAACgC,MAAM,GAAGT,MAAM,CAACU,iBAAiB,CAAC,IAAI,CAACJ,IAAI,CAAC,CAC9CK,KAAK,CAACX,MAAM,CAACU,iBAAiB,CAAC,IAAI,CAAC,CAAC;UACxC,IAAI,CAACE,cAAc,CAAC,CAAC;UACrB,IAAI,IAAI,CAACC,WAAW,EAAE;YACpB,IAAI,CAACpB,GAAG,CAAC,QAAQ,CAAC,CAACqB,SAAS,CAACC,GAAG,CAAC,WAAW,CAAC;UAC/C;UACA,IAAI,IAAI,CAACC,UAAU,GAAG,CAAC,EAAE;YACvB,IAAI,CAACvB,GAAG,CAAC,QAAQ,CAAC,CAACqB,SAAS,CAACC,GAAG,CAAC,OAAO,CAAC;UAC3C;QAEF;QAEAE,aAAaA,CAACC,EAAE,EAAEF,UAAU,EAAE;UAC5B,IAAIA,UAAU,KAAKG,SAAS,EAAEH,UAAU,GAAG,CAAC;UAC5C,OAAOvC,EAAE,CAACyC,EAAE,CAAC,GAAG,GAAGF,UAAU,CAAC,EAACE,EAAE,CAAC,GAAG,GAAGF,UAAU,CAAC,CAAC;QACtD;QAGAI,aAAaA,CAACF,EAAE,EAAEF,UAAU,EAAEK,GAAG,EAAE;UACjC,IAAIL,UAAU,KAAKG,SAAS,EAAEH,UAAU,GAAG,CAAC;UAC5CE,EAAE,CAAC,GAAG,GAAGF,UAAU,CAAC,GAAGK,GAAG,CAACC,CAAC;UAC5BJ,EAAE,CAAC,GAAG,GAAGF,UAAU,CAAC,GAAGK,GAAG,CAACE,CAAC;QAC9B;QAEAX,cAAcA,CAAA,EAAG;UACf,IAAIY,CAAC,GAAGzC,GAAG,CAAC0C,eAAe,CAAC,IAAI,CAACnB,IAAI,CAAC;UACtC,IAAIY,EAAE,GAAGM,CAAC,CAAC,IAAI,CAACjB,KAAK,CAAC;UACtB,IAAImB,KAAK,GAAG,IAAI,CAACT,aAAa,CAACC,EAAE,EAAE,IAAI,CAACF,UAAU,CAAC;UACnDhB,MAAM,CAACQ,WAAW,CAAC,IAAI,EAAE,IAAI,CAACC,MAAM,CAACkB,KAAK,CAACD,KAAK,CAAC,CAAC;UAClD;QACF;;QAEAvB,WAAWA,CAACyB,GAAG,EAAE;UACfA,GAAG,CAACC,cAAc,CAAC,CAAC;UACpB,IAAI,CAACC,KAAK,CAACF,GAAG,CAAC;;UAEf;UACA5B,MAAM,CAACC,gBAAgB,CAAC,kBAAkB,EAAE8B,QAAQ,CAACC,eAAe,EAAE,aAAa,EAAGJ,GAAG,IAAK;YAC5FA,GAAG,CAACC,cAAc,CAAC,CAAC;YACpB,IAAI,CAACI,IAAI,CAACL,GAAG,CAAC;UAChB,CAAC,CAAC;UACF;UACA5B,MAAM,CAACC,gBAAgB,CAAC,kBAAkB,EAAE8B,QAAQ,CAACC,eAAe,EAAE,WAAW,EAAG9B,CAAC,IAAI,IAAI,CAACgC,WAAW,CAAChC,CAAC,CAAC,CAAC;QAC/G;QAEAgC,WAAWA,CAACN,GAAG,EAAE;UACf5B,MAAM,CAACmC,mBAAmB,CAAC,kBAAkB,EAAEJ,QAAQ,CAACC,eAAe,CAAC;UACxE,IAAI,CAACI,IAAI,CAACR,GAAG,CAAC;QAChB;QAEAE,KAAKA,CAACF,GAAG,EAAES,MAAM,EAAE;UACjB,IAAI,CAACA,MAAM,GAAGA,MAAM,IAAIC,MAAM,CAACC,IAAI;UACnC;;UAEA;UACA,IAAIX,GAAG,CAACY,QAAQ,IAAIZ,GAAG,CAACa,OAAO,EAAE;YAC/B,IAAI,CAACC,aAAa,CAACd,GAAG,CAAC;UACzB,CAAC,MAAM,IAAIA,GAAG,CAACY,QAAQ,EAAE;YACvB,IAAI,CAACG,eAAe,CAACf,GAAG,CAAC;UAC3B,CAAC,MAAM,IAAIA,GAAG,CAACa,OAAO,EAAE;YACtB,IAAI,CAACG,kBAAkB,CAAChB,GAAG,CAAC;UAC9B;UAEA,IAAI,CAACiB,QAAQ,GAAG9D,GAAG,CAAC0C,eAAe,CAAC,IAAI,CAACnB,IAAI,CAAC;UAC9C,IAAIY,EAAE,GAAG,IAAI,CAAC2B,QAAQ,CAAC,IAAI,CAACtC,KAAK,CAAC;UAClC,IAAI,CAACW,EAAE,EAAE;UAET,IAAI,CAAC4B,QAAQ,GAAG,IAAI,CAAC7B,aAAa,CAACC,EAAE,EAAE,IAAI,CAACF,UAAU,CAAC;UACvD;;UAEA,IAAI,CAAC+B,WAAW,GAAGxE,MAAM,CAACyE,cAAc,CAACpB,GAAG,CAAC;UAC7C;;UAEA,IAAI,IAAI,CAACvB,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAAC4C,UAAU,CAACC,gBAAgB,CAAC,OAAO,CAAC,CAACC,OAAO,CAACC,EAAE,IAAI;cAC3DA,EAAE,CAACC,KAAK,CAACC,UAAU,GAAG,QAAQ;cAC9B;YACF,CAAC,CAAC;UACJ;;UAEA;UACA;UACA;UACA;;UAEA,IAAI,CAACD,KAAK,CAACE,aAAa,GAAG,MAAM;UAEjC,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACnB,MAAM,CAACgB,KAAK,CAACE,aAAa;UAC1D,IAAI,CAAClB,MAAM,CAACgB,KAAK,CAACE,aAAa,GAAG,MAAM,CAAC,CAAC;;UAE1C,IAAI,IAAI,CAAC1C,WAAW,EAAE;YACpB;YACA,IAAI,CAAC4C,YAAY,CAAC7B,GAAG,CAAC;UACxB;QACF;QAEAc,aAAaA,CAAA,EAAG;UACd,IAAI,CAACG,QAAQ,GAAG9D,GAAG,CAAC0C,eAAe,CAAC,IAAI,CAACnB,IAAI,CAAC;UAC9C,IAAIY,EAAE,GAAG,IAAI,CAAC2B,QAAQ,CAAC,IAAI,CAACtC,KAAK,CAAC;UAClC,IAAImD,UAAU,GAAGnE,MAAM,CAACoE,MAAM,CAAC,CAAC,CAAC,EAAEzC,EAAE,CAAC;UACtCwC,UAAU,CAACE,CAAC,GAAG,GAAG;UAClBF,UAAU,CAACG,EAAE,GAAG3C,EAAE,CAAC4C,EAAE;UACrBJ,UAAU,CAACG,EAAE,GAAG3C,EAAE,CAAC2C,EAAE;UACrB,IAAI,CAAC7C,UAAU,GAAG,CAAC;UACnB,IAAI,CAAC6B,QAAQ,CAACkB,MAAM,CAAC,IAAI,CAACxD,KAAK,EAAE,CAAC,EAAEmD,UAAU,CAAC;UAC/C3E,GAAG,CAACiF,eAAe,CAAC,IAAI,CAAC1D,IAAI,EAAE,IAAI,CAACuC,QAAQ,CAAC;QAC/C;QAGAF,eAAeA,CAAA,EAAG;UAChB,IAAI,CAACE,QAAQ,GAAG9D,GAAG,CAAC0C,eAAe,CAAC,IAAI,CAACnB,IAAI,CAAC;UAC9C,IAAIY,EAAE,GAAG,IAAI,CAAC2B,QAAQ,CAAC,IAAI,CAACtC,KAAK,CAAC;UAClC,IAAI0D,GAAG,GAAG1E,MAAM,CAACoE,MAAM,CAAC,CAAC,CAAC,EAAEzC,EAAE,CAAC;UAC/B+C,GAAG,CAACL,CAAC,GAAG,GAAG;UACX,IAAI,CAACf,QAAQ,CAACkB,MAAM,CAAC,IAAI,CAACxD,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE0D,GAAG,CAAC;UAC5ClF,GAAG,CAACiF,eAAe,CAAC,IAAI,CAAC1D,IAAI,EAAE,IAAI,CAACuC,QAAQ,CAAC;UAC7C,IAAI,CAACtC,KAAK,EAAE;QACd;QAEAqC,kBAAkBA,CAAA,EAAG;UACnB,IAAI,CAACC,QAAQ,GAAG9D,GAAG,CAAC0C,eAAe,CAAC,IAAI,CAACnB,IAAI,CAAC;UAC9C,IAAI,IAAI,CAACC,KAAK,IAAI,CAAC,EAAE;YACnB,IAAI,CAACsC,QAAQ,CAAC,CAAC,CAAC,CAACe,CAAC,GAAG,GAAG,EAAC;UAC3B;;UAEA,IAAI,IAAI,CAAC5C,UAAU,GAAG,CAAC,EAAE;YACvB,IAAIE,EAAE,GAAG,IAAI,CAAC2B,QAAQ,CAAC,IAAI,CAACtC,KAAK,CAAC;YAClCW,EAAE,CAAC0C,CAAC,GAAG,GAAG;YACV,OAAO1C,EAAE,CAAC2C,EAAE;YACZ,OAAO3C,EAAE,CAACgD,EAAE;YACZ,OAAOhD,EAAE,CAACiD,EAAE;YACZ,OAAOjD,EAAE,CAACgD,EAAE;UACd,CAAC,MAAM;YACL,IAAI,CAACrB,QAAQ,CAACkB,MAAM,CAAC,IAAI,CAACxD,KAAK,EAAE,CAAC,CAAC;UACrC;UACAxB,GAAG,CAACiF,eAAe,CAAC,IAAI,CAAC1D,IAAI,EAAE,IAAI,CAACuC,QAAQ,CAAC;UAC7C,IAAI,CAACuB,MAAM,CAAC,CAAC;QACf;QAGAC,aAAaA,CAACC,OAAO,EAAE;UACrB,IAAI,CAACC,SAAS,GAAGvE,MAAM,CAACwE,WAAW,CAACF,OAAO,EAAC,MAAM,CAAC;UACnD,IAAI,CAACC,SAAS,CAACE,SAAS,GAAG,EAAE,GAAGH,OAAO,CAACI,EAAE;UAC1C1E,MAAM,CAAC2E,MAAM,CAAC,IAAI,CAACJ,SAAS,EAAE9F,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;UACxC,IAAI,CAAC8F,SAAS,CAAClB,KAAK,CAACuB,MAAM,GAAG,8BAA8B;UAC5D5E,MAAM,CAAC6E,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEvE,MAAM,CAAC8E,SAAS,CAAC,IAAI,CAACP,SAAS,CAAC,CAAC5C,KAAK,CAAClD,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;UACjF,OAAO,IAAI,CAAC8F,SAAS;QACvB;QAEAQ,aAAaA,CAAA,EAAG;UACd,IAAI,IAAI,CAACR,SAAS,EAAE,IAAI,CAACA,SAAS,CAACH,MAAM,CAAC,CAAC;QAC7C;QAEAX,YAAYA,CAAC7B,GAAG,EAAEoD,KAAK,GAACjD,QAAQ,CAACkD,IAAI,EAAE;UACrC,IAAI,CAACF,aAAa,CAAC,CAAC;;UAEpB;UACA;UACA;UACA;UACA;UACA,IAAIG,CAAC,GAAGzG,EAAE,CAACmD,GAAG,CAACuD,OAAO,EAAEvD,GAAG,CAACwD,OAAO,CAAC;UACpC,IAAId,OAAO;UACXU,KAAK,CAAC9B,gBAAgB,CAAC,+BAA+B,CAAC,CAACC,OAAO,CAACC,EAAE,IAAI;YACpE,IAAIA,EAAE,CAACiC,OAAO,KAAK,kBAAkB,IACjCrF,MAAM,CAACsF,eAAe,CAAClC,EAAE,CAAC,CAACmC,aAAa,CAACL,CAAC,CAAC,EAAEZ,OAAO,GAAGlB,EAAE;UAC/D,CAAC,CAAC;UAEF,IAAIkB,OAAO,EAAE;YACX,IAAI,CAACD,aAAa,CAACC,OAAO,CAAC;YAC3B,IAAI,CAACkB,aAAa,GAAGlB,OAAO;UAC9B,CAAC,MAAM;YACL,IAAI,IAAI,CAACkB,aAAa,EAAE,IAAI,CAACA,aAAa,GAAG,IAAI;UACnD;UACA,OAAOlB,OAAO;QAChB;QAEAmB,iBAAiBA,CAAC7D,GAAG,EAAEoD,KAAK,GAACjD,QAAQ,CAACkD,IAAI,EAAE;UAC1C,IAAIS,aAAa,GAAG,EAAE;UAEtBV,KAAK,CAAC9B,gBAAgB,CAAC,qBAAqB,CAAC,CAACC,OAAO,CAACwC,MAAM,IAAI;YAC9D,IAAIlF,MAAM,GAAGT,MAAM,CAACU,iBAAiB,CAACiF,MAAM,CAACC,aAAa,CAAC;YAC3D7G,GAAG,CAAC0C,eAAe,CAACkE,MAAM,CAAC,CAACxC,OAAO,CAAC,CAACC,EAAE,EAAE7C,KAAK,KAAK;cACjD,IAAI,IAAI,CAACD,IAAI,IAAIqF,MAAM,IAAIpF,KAAK,IAAI,IAAI,CAACA,KAAK,EAAE;gBAC7C;cAAA,CACF,MAAM;gBACLmF,aAAa,CAACG,IAAI,CAACpF,MAAM,CAACkB,KAAK,CAAClD,EAAE,CAAC2E,EAAE,CAACU,EAAE,EAAEV,EAAE,CAAC0C,EAAE,CAAC,CAAC,CAAC;cACpD;YAEF,CAAC,CAAC;UACJ,CAAC,CAAC;UACF,OAAOJ,aAAa;QACtB;QAEAzD,IAAIA,CAACL,GAAG,EAAE;UACR;;UAEA,MAAMmE,SAAS,GAAG,EAAE,CAAC,CAAC;;UAEtB,IAAIf,KAAK,GAAGhF,MAAM,CAACgG,gBAAgB,CAAC,IAAI,CAAC3D,MAAM,CAAC;UAChD,IAAI,CAAC,IAAI,CAACS,QAAQ,EAAE;UAEpB9C,MAAM,CAACiG,iBAAiB,CAACjG,MAAM,CAACkG,IAAI,EAAEzH,EAAE,CAACmD,GAAG,CAACuD,OAAO,EAAEvD,GAAG,CAACwD,OAAO,CAAC,CAAC;;UAEnE;UACA,IAAIe,KAAK,GAAG5H,MAAM,CAACyE,cAAc,CAACpB,GAAG,CAAC,CAACjB,KAAK,CAAC,IAAI,CAACoC,WAAW,CAAC;UAE9D,IAAIqD,MAAM,GAAG3H,EAAE,CAAC,IAAI,CAACqE,QAAQ,CAACxB,CAAC,GAAG6E,KAAK,CAAC7E,CAAC,EAAE,IAAI,CAACwB,QAAQ,CAACvB,CAAC,GAAG4E,KAAK,CAAC5E,CAAC,CAAC;UACrE,IAAI,CAACK,GAAG,CAACa,OAAO,EAAE;YAAE;YAClB2D,MAAM,GAAGzH,IAAI,CAAC0H,MAAM,CAACD,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;UACrC;;UAED;UACC,IAAI,CAACE,kBAAkB,CAACF,MAAM,CAAC;UAE/B,IAAI,IAAI,CAACvF,WAAW,EAAE;YACpB,IAAI,CAAC4C,YAAY,CAAC7B,GAAG,EAAEoD,KAAK,CAAC;YAC7B;;YAEA,IAAIuB,aAAa,GAAG,IAAI,CAAChG,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,WAAW;YACjE,IAAI,IAAI,CAACiF,aAAa,EAAE;cACtB,IAAI,CAACnD,MAAM,CAACkE,aAAa,CAAC,CAAC,IAAI,CAACf,aAAa,CAAC;cAC9C,IAAI,CAACnC,KAAK,CAACC,UAAU,GAAG,QAAQ;YAClC,CAAC,MAAM;cACL,IAAI,CAACD,KAAK,CAACC,UAAU,GAAG,SAAS;cACjC,IAAI,CAACjB,MAAM,CAACkE,aAAa,CAAC,CAACvG,MAAM,CAACkG,IAAI,CAAC;YACzC;UACF,CAAC,MAAM;YACL,IAAIM,MAAM,GAAG,IAAI,CAACf,iBAAiB,CAACT,KAAK,CAAC;YAC1C,IAAIyB,KAAK,GAAGzG,MAAM,CAACU,iBAAiB,CAAC,IAAI,CAAC;YAC1C,IAAIgG,UAAU,GAAGF,MAAM,CAACG,GAAG,CAACvD,EAAE,IAAI;cAAC,OAAO;gBAACwD,KAAK,EAAExD,EAAE;gBAAEyD,IAAI,EAAEzD,EAAE,CAACyD,IAAI,CAACJ,KAAK;cAAC,CAAC;YAAA,CAAC,CAAC;YAG7E,IAAI,CAAC7E,GAAG,CAACa,OAAO,EAAE;cAChB,IAAIqE,UAAU,GAAG7H,CAAC,CAAC8H,MAAM,CAACL,UAAU,CAACM,MAAM,CAAC5D,EAAE,IAAIA,EAAE,CAACyD,IAAI,GAAGd,SAAS,CAAC,EAAE3C,EAAE,IAAIA,EAAE,CAACyD,IAAI,CAAC,CAACF,GAAG,CAACvD,EAAE,IAAIA,EAAE,CAACwD,KAAK,CAAC;;cAE1G;cACA,IAAIE,UAAU,CAAC,CAAC,CAAC,EAAE;gBACjB;gBACA,IAAI5B,CAAC,GAAG4B,UAAU,CAAC,CAAC,CAAC,CAACnG,KAAK,CAACX,MAAM,CAACU,iBAAiB,CAAC,IAAI,CAACJ,IAAI,CAACsF,aAAa,CAAC,CAAC;gBAC9E,IAAI,CAACU,kBAAkB,CAACpB,CAAC,CAAC;cAE5B;YACF;UAEF;QACF;QAEAoB,kBAAkBA,CAACjF,GAAG,EAAE;UACtB,IAAI,CAAC,IAAI,CAACwB,QAAQ,EAChB,IAAI,CAACA,QAAQ,GAAG9D,GAAG,CAAC0C,eAAe,CAAC,IAAI,CAACnB,IAAI,CAAC;UAChD,IAAIY,EAAE,GAAG,IAAI,CAAC2B,QAAQ,CAAC,IAAI,CAACtC,KAAK,CAAC;UAClC,IAAI,CAACW,EAAE,EAAE;UACT,IAAI,CAACE,aAAa,CAACF,EAAE,EAAE,IAAI,CAACF,UAAU,EAAEK,GAAG,CAAC;UAC5CtC,GAAG,CAACiF,eAAe,CAAC,IAAI,CAAC1D,IAAI,EAAE,IAAI,CAACuC,QAAQ,CAAC;UAC7C,IAAI,CAACjC,cAAc,CAAC,CAAC;QACvB;QAEAwB,IAAIA,CAACR,GAAG,EAAE;UACR,IAAI,CAACmD,aAAa,CAAC,CAAC;UACpB,IAAI,CAAC1B,KAAK,CAACE,aAAa,GAAG,IAAI;UAC/B,IAAI,CAAClB,MAAM,CAACgB,KAAK,CAACE,aAAa,GAAG,IAAI,CAACC,mBAAmB,CAAC,CAAC;;UAE5D,IAAI,IAAI,CAACgC,aAAa,EAAE;YACpB,IAAIe,aAAa,GAAG,IAAI,CAAChG,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,WAAW;YACjE,IAAI,IAAI,CAAC8B,MAAM,CAACkE,aAAa,CAAC,EAAE;cAC9B,IAAI,CAAClE,MAAM,CAACkE,aAAa,CAAC,CAAC,IAAI,CAACf,aAAa,CAAC;YAChD;UACJ,CAAC,MAAM;YACH,IAAIyB,gBAAgB,GAAG,IAAI,CAAC1G,KAAK,IAAI,CAAC,GAClC,uBAAuB,GAAG,qBAAqB;YACnD,IAAI,IAAI,CAAC8B,MAAM,CAAC4E,gBAAgB,CAAC,EAAE;cACjC,IAAI,CAAC5E,MAAM,CAAC4E,gBAAgB,CAAC,CAAC,IAAI,CAACzB,aAAa,CAAC;YACnD;UACJ;UACA,IAAI,IAAI,CAAC3E,WAAW,EAAE;YACpB,IAAI,CAACwB,MAAM,CAAC6E,WAAW,CAAC,CAAC;UAC3B,CAAC,MAAM;YACL,IAAI,CAACA,WAAW,CAAC,IAAI,CAAC5G,IAAI,CAAC;UAC7B;UACA,IAAI,IAAI,CAACD,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAAC4C,UAAU,CAACC,gBAAgB,CAAC,OAAO,CAAC,CAACC,OAAO,CAACC,EAAE,IAAI;cAC3D,IAAIA,EAAE,KAAK,IAAI,EAAEA,EAAE,CAACC,KAAK,CAACC,UAAU,GAAG,IAAI;YAC7C,CAAC,CAAC;UACJ;UAEAnE,WAAW,CAACgI,SAAS,CAAC7E,MAAM,CAACC,IAAI,CAAC;;UAElC;UACAX,GAAG,CAACC,cAAc,CAAC,CAAC;UACpBD,GAAG,CAACwF,eAAe,CAAC,CAAC;QACvB;QAEAF,WAAWA,CAAC5G,IAAI,EAAE;UAChB;UACA,IAAI+G,GAAG,GAAG/G,IAAI,CAACsF,aAAa;UAC5B;;UAEA7G,GAAG,CAACmI,WAAW,CAACG,GAAG,EAAE/G,IAAI,CAAC;UAC1BN,MAAM,CAAC6E,SAAS,CAAC,IAAI,EAAE7E,MAAM,CAAC8E,SAAS,CAACuC,GAAG,CAAC,CAAC;UAC7C,IAAIhG,GAAG,GAAGrB,MAAM,CAACsH,WAAW,CAACD,GAAG,CAAC;UACjCrH,MAAM,CAAC2E,MAAM,CAAC,IAAI,EAAEtD,GAAG,CAAC;UACxB;QACF;MAGF,CAAC;MAAA9B,MAAA,CAAAC,cAAA,CAAAH,UAAA,CAAAC,sDAAA;QAAAG,IAAA;UAAA,OAAA5B,oBAAA;QAAA;QAAA6B,IAAAC,8BAAA;UAAA5B,OAAA,YAlUoBF,oBAAA,CAAAA,CAAA,CAAAA,8BAAoB;UAAA;QAAA;QAAA+B,UAAA;QAAAC,YAAA;MAAA;IAAA;EAAA;AAAA"}