{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/dataviz/diagram/svg.js","webpack:///./node_modules/@progress/kendo-ui/js/dataviz/diagram/utils.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","892","910","914","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","f","define","apply","undefined","$","kendo","window","diagram","dataviz","Class","deepExtend","Point","Rect","Matrix","Utils","isNumber","isString","MatrixVector","g","geometry","d","drawing","defined","util","inArray","TRANSPARENT","Markers","none","arrowStart","filledCircle","arrowEnd","FULL_CIRCLE_ANGLE","START","END","WIDTH","HEIGHT","X","Y","diffNumericOptions","options","fields","value","field","elementOptions","this","hasChanges","i","length","Scale","extend","init","x","y","toMatrix","scaling","toString","format","invert","Translation","toMatrixVector","translation","plus","delta","times","factor","Math","sqrt","normalize","Length","Rotation","angle","rotation","center","ZERO","create","parse","str","values","slice","split","CompositeTransform","scaleX","scaleY","translate","scale","rotate","transform","render","visual","_transform","_renderTransform","unit","rotateMatrix","scaleMatrix","translatePoint","AutoSizeableMixin","_setScale","originWidth","_originWidth","originHeight","_originHeight","width","height","_setTranslate","_initSize","autoSize","_measure","_updateSize","update","_diffNumericOptions","Element","element","_originSize","empty","visible","drawingContainer","redraw","position","drawingElement","matrix","a","b","e","_hover","force","rect","_measured","box","_boundingBox","startPoint","topLeft","rawBBox","VisualBase","fn","fill","normalizeDrawingOptions","stroke","color","opacity","_fill","getColor","_stroke","show","hover","strokeOptions","dashType","set","fillOptions","gradient","GradientClass","type","RadialGradient","LinearGradient","TextBlock","_textColor","_font","_initText","fontSize","fontFamily","Text","text","font","fontOptions","fontStyle","push","fontWeight","join","content","sizeChanged","textOptions","Rectangle","_initPath","_setPosition","_drawPath","Path","closed","sizeOptions","sizeOptionsOrDefault","segments","elements","createSegment","MarkerBase","anchor","createElement","_transformToPath","point","path","transformCopy","CircleMarker","radius","Circle","positionMarker","targetSegment","ArrowMarker","points","_linePoints","start","end","lineAngle","clone","endPoint","controlOut","nextSegment","controlIn","prevSegment","MarkerPathMixin","_getPath","MultiPath","paths","_normalizeMarkerOptions","startCap","endCap","_removeMarker","marker","_markers","remove","_createMarkers","_createMarker","markerType","append","_positionMarker","_capMap","_redrawMarker","pathChange","pathOptions","cap","pathCapType","optionsCap","created","_redrawMarkers","container","Group","_createElements","data","_setData","multipath","Line","from","to","Polyline","_updatePath","_pointsDiffer","currentPoints","differ","Image","_initImage","source","src","_rect","origin","size","Size","children","_childrenChange","_remove","index","removeAt","splice","clear","toFront","visuals","toBack","_reorderChildren","toIndex","indices","group","drawingChildren","fixedPosition","boundingBox","childBoundingBox","_includeInBBox","clippedBBox","union","Layout","toDrawingRect","drawingRect","reflow","_initCircle","circleOptions","_center","move","_circle","setRadius","min","Canvas","surface","Surface","isFunction","_translate","_viewBox","bounds","viewBox","setSize","draw","insertBefore","destroy","clearHtml","drawingOptions","Color","toHex","p1","p2","xDiff","yDiff","deg","atan2","Segment","ui","jQuery","895","915","isArray","Array","EPSILON","Range","stop","step","sign","Infinity","j","range","rangeIntegerScale","k","abs","findRadian","sngXComp","sngYComp","atan","PI","isNearZero","num","isDefined","obj","isUndefined","isObject","Object","has","key","hasOwnProperty","prototype","isBoolean","isType","isNaN","parseFloat","isFinite","isEmpty","simpleExtend","destination","name","initArray","array","serializePoints","res","deserializePoints","s","v","parseInt","randomInteger","lower","upper","floor","random","DFT","el","func","childNodes","item","getMatrixAngle","getMatrixScaling","sX","sY","number","findAngle","forEach","arr","iterator","thisRef","any","predicate","what","ax","indexOf","contains","fold","list","acc","context","initial","arguments","find","result","first","constraint","insert","all","bisort","sortfunc","sort","n","addRange","Easing","easeInOut","pos","cos","Ticker","adapters","target","tick","interval","duration","lastTime","handlers","_this","transition","timerDelegate","onTimerEvent","addAdapter","onComplete","handler","removeHandler","grep","h","trigger","caller","onStep","seekTo","seekFromTo","max","Date","getTime","intervalId","setInterval","clearInterval","play","initState","reverse","propagate","now","timePassed","movement"],"mappings":"2GAAAA,EAAOC,QACE,SAAUC,GAET,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUJ,QAGnC,IAAID,EAASG,EAAiBE,GAAY,CACzCJ,QAAS,GACTK,GAAID,EACJE,QAAQ,GAUT,OANAL,EAAQG,GAAUG,KAAKR,EAAOC,QAASD,EAAQA,EAAOC,QAASG,GAG/DJ,EAAOO,QAAS,EAGTP,EAAOC,QAcf,OATAG,EAAoBK,EAAIP,EAGxBE,EAAoBM,EAAIP,EAGxBC,EAAoBO,EAAI,GAGjBP,EAAoB,GAvC5B,CA0CC,CAEJQ,EACA,SAAUZ,EAAQC,EAASG,GAEhCJ,EAAOC,QAAUG,EAAoB,MAKhCS,EACA,SAAUb,EAAQC,GAEvBD,EAAOC,QAAU,WAAa,MAAM,IAAIa,MAAM,oCAKzCC,IACA,SAAUf,EAAQC,GAEvBD,EAAOC,QAAU,EAAQ,SAIpBe,IACA,SAAUhB,EAAQC,GAEvBD,EAAOC,QAAU,EAAQ,SAIpBgB,IACA,SAAUjB,EAAQC,EAASG,GAEhC,IAAIc,EAAgCC,EAA8BC,GAA8B,SAAUC,EAAGC,GACvGH,EAA+B,CAAEf,EAAoB,KAAMA,EAAoB,MAAQc,EAAiC,EAAKE,EAA2E,oBAAnCF,EAAiDA,EAA+BK,MAAMtB,EAASkB,GAAiCD,OAAmEM,IAAlCJ,IAAgDpB,EAAOC,QAAUmB,IAD7S,EAE7F,YAEH,SAAWK,EAAGD,GAEV,IAAIE,EAAQC,OAAOD,MACfE,EAAUF,EAAMG,QAAQD,QACxBE,EAAQJ,EAAMI,MACdC,EAAaL,EAAMK,WACnBC,EAAQJ,EAAQI,MAChBC,EAAOL,EAAQK,KACfC,EAASN,EAAQM,OACjBC,EAAQP,EAAQO,MAChBC,EAAWD,EAAMC,SACjBC,EAAWF,EAAME,SACjBC,EAAeV,EAAQU,aAEvBC,EAAIb,EAAMc,SACVC,EAAIf,EAAMgB,QAEVC,EAAUF,EAAEG,KAAKD,QAEjBE,EAAUpB,EAAEoB,QAGZC,EAAc,cACdC,EAAU,CACNC,KAAM,OACNC,WAAY,aACZC,aAAc,eACdC,SAAU,YAEdC,EAAoB,IACpBC,EAAQ,QACRC,EAAM,MACNC,EAAQ,QACRC,EAAS,SACTC,EAAI,IACJC,EAAI,IAIR,SAASC,EAAmBC,EAASC,GAIjC,IAHA,IAEIC,EAAOC,EAFPC,EAAiBC,KAAKL,QACtBM,GAAa,EAERC,EAAI,EAAGA,EAAIN,EAAOO,OAAQD,IAC/BJ,EAAQF,EAAOM,GACfL,EAAQF,EAAQG,GACZ3B,EAAS0B,IAAUE,EAAeD,KAAWD,IAC7CE,EAAeD,GAASD,EACxBI,GAAa,GAIrB,OAAOA,EAfXtC,EAAQmB,QAAUA,EAkBlB,IAAIsB,EAAQvC,EAAMwC,OAAO,CACrBC,KAAM,SAAUC,EAAGC,GACfR,KAAKO,EAAIA,EACTP,KAAKQ,EAAIA,GAEbC,SAAU,WACN,OAAOxC,EAAOyC,QAAQV,KAAKO,EAAGP,KAAKQ,IAEvCG,SAAU,WACN,OAAOlD,EAAMmD,OAAO,iBAAkBZ,KAAKO,EAAGP,KAAKQ,IAEvDK,OAAQ,WACJ,OAAO,IAAIT,EAAM,EAAEJ,KAAKO,EAAG,EAAEP,KAAKQ,MAItCM,EAAcjD,EAAMwC,OAAO,CAC3BC,KAAM,SAAUC,EAAGC,GACfR,KAAKO,EAAIA,EACTP,KAAKQ,EAAIA,GAEbO,eAAgB,WACZ,OAAO,IAAI1C,EAAa,EAAG,EAAG,EAAG,EAAG2B,KAAKO,EAAGP,KAAKQ,IAErDC,SAAU,WACN,OAAOxC,EAAO+C,YAAYhB,KAAKO,EAAGP,KAAKQ,IAE3CG,SAAU,WACN,OAAOlD,EAAMmD,OAAO,qBAAsBZ,KAAKO,EAAGP,KAAKQ,IAE3DS,KAAM,SAAUC,GACZlB,KAAKO,GAAKW,EAAMX,EAChBP,KAAKQ,GAAKU,EAAMV,GAEpBW,MAAO,SAAUC,GACbpB,KAAKO,GAAKa,EACVpB,KAAKQ,GAAKY,GAEdjB,OAAQ,WACJ,OAAOkB,KAAKC,KAAKtB,KAAKO,EAAIP,KAAKO,EAAIP,KAAKQ,EAAIR,KAAKQ,IAErDe,UAAW,WACa,IAAhBvB,KAAKwB,QAGTxB,KAAKmB,MAAM,EAAInB,KAAKG,WAExBU,OAAQ,WACJ,OAAO,IAAIC,GAAad,KAAKO,GAAIP,KAAKQ,MAI1CiB,EAAW5D,EAAMwC,OAAO,CACxBC,KAAM,SAAUoB,EAAOnB,EAAGC,GACtBR,KAAKO,EAAIA,GAAK,EACdP,KAAKQ,EAAIA,GAAK,EACdR,KAAK0B,MAAQA,GAEjBf,SAAU,WACN,OAAIX,KAAKO,GAAKP,KAAKQ,EACR/C,EAAMmD,OAAO,sBAAuBZ,KAAK0B,MAAO1B,KAAKO,EAAGP,KAAKQ,GAE7D/C,EAAMmD,OAAO,cAAeZ,KAAK0B,QAGhDjB,SAAU,WACN,OAAOxC,EAAO0D,SAAS3B,KAAK0B,MAAO1B,KAAKO,EAAGP,KAAKQ,IAEpDoB,OAAQ,WACJ,OAAO,IAAI7D,EAAMiC,KAAKO,EAAGP,KAAKQ,IAElCK,OAAQ,WACJ,OAAO,IAAIY,EAAStC,EAAoBa,KAAK0B,MAAO1B,KAAKO,EAAGP,KAAKQ,MAIzEiB,EAASI,KAAO,IAAIJ,EAAS,GAE7BA,EAASK,OAAS,SAAUH,GACxB,OAAO,IAAIF,EAASE,EAASD,MAAOC,EAASpB,EAAGoB,EAASnB,IAG7DiB,EAASM,MAAQ,SAAUC,GACvB,IAAIC,EAASD,EAAIE,MAAM,EAAGF,EAAI7B,OAAS,GAAGgC,MAAM,KAC5CT,EAAQO,EAAO,GACf1B,EAAI0B,EAAO,GACXzB,EAAIyB,EAAO,GACXN,EAAW,IAAIF,EAASC,EAAOnB,EAAGC,GACtC,OAAOmB,GAGX,IAAIS,EAAqBvE,EAAMwC,OAAO,CAClCC,KAAM,SAAUC,EAAGC,EAAG6B,EAAQC,EAAQZ,EAAOE,GACzC5B,KAAKuC,UAAY,IAAIzB,EAAYP,EAAGC,GAChC6B,IAAW9E,GAAa+E,IAAW/E,IACnCyC,KAAKwC,MAAQ,IAAIpC,EAAMiC,EAAQC,IAE/BZ,IAAUnE,IACVyC,KAAKyC,OAASb,EAAS,IAAIH,EAASC,EAAOE,EAAOrB,EAAGqB,EAAOpB,GAAK,IAAIiB,EAASC,KAGtFf,SAAU,WACN,IAAIA,EAAW,SAAU+B,GACrB,OAAOA,EAAYA,EAAU/B,WAAa,IAG9C,OAAOA,EAASX,KAAKuC,WACjB5B,EAASX,KAAKyC,QACd9B,EAASX,KAAKwC,QAGtBG,OAAQ,SAAUC,GACdA,EAAOC,WAAa7C,KACpB4C,EAAOE,oBAGXrC,SAAU,WACN,IAAIjE,EAAIyB,EAAO8E,OAWf,OATI/C,KAAKuC,YACL/F,EAAIA,EAAE2E,MAAMnB,KAAKuC,UAAU9B,aAE3BT,KAAKyC,SACLjG,EAAIA,EAAE2E,MAAMnB,KAAKyC,OAAOhC,aAExBT,KAAKwC,QACLhG,EAAIA,EAAE2E,MAAMnB,KAAKwC,MAAM/B,aAEpBjE,GAEXqE,OAAQ,WACJ,IAAI4B,EAASzC,KAAKyC,OAASzC,KAAKyC,OAAO5B,SAAWtD,EAC9CyF,EAAeP,EAASA,EAAOhC,WAAaxC,EAAO8E,OACnDP,EAAQxC,KAAKwC,MAAQxC,KAAKwC,MAAM3B,SAAWtD,EAC3C0F,EAAcT,EAAQA,EAAM/B,WAAaxC,EAAO8E,OAEhDG,EAAiB,IAAInF,GAAOiC,KAAKuC,UAAUhC,GAAIP,KAAKuC,UAAU/B,GAClE0C,EAAiBF,EAAa7B,MAAM8B,GAAa3F,MAAM4F,GACvD,IAAIX,EAAY,IAAIzB,EAAYoC,EAAe3C,EAAG2C,EAAe1C,GAE7DkC,EAAY,IAAIN,EAKpB,OAJAM,EAAUH,UAAYA,EACtBG,EAAUD,OAASA,EACnBC,EAAUF,MAAQA,EAEXE,KAIXS,EAAoB,CACpBC,UAAW,WACP,IAAIzD,EAAUK,KAAKL,QACf0D,EAAcrD,KAAKsD,aACnBC,EAAevD,KAAKwD,cACpBnB,EAAS1C,EAAQ8D,MAAQJ,EACzBf,EAAS3C,EAAQ+D,OAASH,EAEzBpF,EAASkE,KACVA,EAAS,GAERlE,EAASmE,KACVA,EAAS,GAGbtC,KAAK6C,WAAWL,MAAQ,IAAIpC,EAAMiC,EAAQC,IAG9CqB,cAAe,WACX,IAAIhE,EAAUK,KAAKL,QACfY,EAAIZ,EAAQY,GAAK,EACjBC,EAAIb,EAAQa,GAAK,EACrBR,KAAK6C,WAAWN,UAAY,IAAIzB,EAAYP,EAAGC,IAGnDoD,UAAW,WACP,IAAIjE,EAAUK,KAAKL,QACf+C,GAAY,GACS,IAArB/C,EAAQkE,WAAuBnF,EAAQiB,EAAQ8D,QAAU/E,EAAQiB,EAAQ+D,WACzE1D,KAAK8D,UAAS,GACd9D,KAAKoD,YACLV,GAAY,IAGZhE,EAAQiB,EAAQY,IAAM7B,EAAQiB,EAAQa,MACtCR,KAAK2D,gBACLjB,GAAY,GAGZA,GACA1C,KAAK8C,oBAIbiB,YAAa,SAASpE,GAClB,IAAIqE,GAAS,EAiBb,OAf8B,IAA1BhE,KAAKL,QAAQkE,UAAsB7D,KAAKiE,oBAAoBtE,EAAS,CAACL,EAAOC,MAC7EyE,GAAS,EACThE,KAAK8D,UAAS,GACd9D,KAAKoD,aAGLpD,KAAKiE,oBAAoBtE,EAAS,CAACH,EAAGC,MACtCuE,GAAS,EACThE,KAAK2D,iBAGLK,GACAhE,KAAK8C,mBAGFkB,IAIXE,EAAUrG,EAAMwC,OAAO,CACvBC,KAAM,SAAUX,GACZ,IAAIwE,EAAUnE,KACdmE,EAAQxE,QAAU7B,EAAW,GAAIqG,EAAQxE,QAASA,GAClDwE,EAAQ9H,GAAK8H,EAAQxE,QAAQtD,GAC7B8H,EAAQC,YAAcpG,EAAKqG,QAC3BF,EAAQtB,WAAa,IAAIT,GAG7BkC,QAAS,SAAUzE,GACf,OAAOG,KAAKuE,mBAAmBD,QAAQzE,IAG3C2E,OAAQ,SAAU7E,GACVA,GAAWA,EAAQtD,KAClB2D,KAAK3D,GAAKsD,EAAQtD,KAI3BoI,SAAU,SAAUlE,EAAGC,GACnB,IAAIb,EAAUK,KAAKL,QACnB,IAAKjB,EAAQ6B,GACV,OAAO,IAAIxC,EAAM4B,EAAQY,EAAGZ,EAAQa,GAGnC9B,EAAQ8B,IACRb,EAAQY,EAAIA,EACZZ,EAAQa,EAAIA,GACLD,aAAaxC,IACpB4B,EAAQY,EAAIA,EAAEA,EACdZ,EAAQa,EAAID,EAAEC,GAGlBR,KAAK6C,WAAWN,UAAY,IAAIzB,EAAYnB,EAAQY,EAAGZ,EAAQa,GAC/DR,KAAK8C,oBAGTL,OAAQ,SAAUf,EAAOE,GAKrB,OAJIlD,EAAQgD,KACR1B,KAAK6C,WAAWJ,OAAS,IAAIhB,EAASC,EAAOE,EAAOrB,EAAGqB,EAAOpB,GAC9DR,KAAK8C,oBAEF9C,KAAK6C,WAAWJ,QAAUhB,EAASI,MAG9C0C,iBAAkB,WACd,OAAOvE,KAAK0E,gBAGhB5B,iBAAkB,WACd,IAAI6B,EAAS3E,KAAK6C,WAAWpC,WAC7BT,KAAKuE,mBAAmB7B,UAAU,IAAIpE,EAAEL,OAAO0G,EAAOC,EAAGD,EAAOE,EAAGF,EAAOlI,EAAGkI,EAAOnG,EAAGmG,EAAOG,EAAGH,EAAOvH,KAG5G2H,OAAQ,aAERd,oBAAqBvE,EAErBoE,SAAU,SAAUkB,GAChB,IAAIC,EACJ,IAAKjF,KAAKkF,WAAaF,EAAO,CAC1B,IAAIG,EAAMnF,KAAKoF,gBAAkB,IAAI9G,EAAEN,KACnCqH,EAAaF,EAAIG,UACrBL,EAAO,IAAIjH,EAAKqH,EAAW9E,EAAG8E,EAAW7E,EAAG2E,EAAI1B,QAAS0B,EAAIzB,UAC7D1D,KAAKoE,YAAca,EACnBjF,KAAKsD,aAAe2B,EAAKxB,MACzBzD,KAAKwD,cAAgByB,EAAKvB,OAC1B1D,KAAKkF,WAAY,OAEjBD,EAAOjF,KAAKoE,YAEhB,OAAOa,GAGXG,aAAc,WACV,OAAOpF,KAAK0E,eAAea,aAI/BC,EAAatB,EAAQ7D,OAAO,CAC5BC,KAAM,SAASX,GACXuE,EAAQuB,GAAGnF,KAAK/D,KAAKyD,KAAML,GAE3BA,EAAUK,KAAKL,QACfA,EAAQ+F,KAAOC,EAAwBhG,EAAQ+F,MAC/C/F,EAAQiG,OAASD,EAAwBhG,EAAQiG,SAGrDjG,QAAS,CACLiG,OAAQ,CACJC,MAAO,OACPpC,MAAO,GAEXiC,KAAM,CACFG,MAAOhH,IAIf6G,KAAM,SAASG,EAAOC,GAClB9F,KAAK+F,MAAM,CACPF,MAAOG,EAASH,GAChBC,QAASA,KAIjBF,OAAQ,SAASC,EAAOpC,EAAOqC,GAC3B9F,KAAKiG,QAAQ,CACTJ,MAAOG,EAASH,GAChBpC,MAAOA,EACPqC,QAASA,KAIjBtB,OAAQ,SAAU7E,GACd,GAAIA,EAAS,CACT,IAAIiG,EAASjG,EAAQiG,OACjBF,EAAO/F,EAAQ+F,KACfE,GACA5F,KAAKiG,QAAQN,EAAwBC,IAErCF,GACA1F,KAAK+F,MAAMJ,EAAwBD,IAGvCxB,EAAQuB,GAAGjB,OAAOjI,KAAKyD,KAAML,KAIrCoF,OAAQ,SAAUmB,GACd,IAAIxB,EAAiB1E,KAAK0E,eACtB/E,EAAUK,KAAKL,QACfwG,EAAQxG,EAAQwG,MAEpB,GAAIA,GAASA,EAAMT,KAAM,CACrB,IAAIA,EAAOQ,EAAOP,EAAwBQ,EAAMT,MAAQ/F,EAAQ+F,KAChEhB,EAAegB,KAAKA,EAAKG,MAAOH,EAAKI,WAI7CG,QAAS,SAASG,GACd,IAAIzG,EAAUK,KAAKL,QACnB7B,EAAW6B,EAAS,CAChBiG,OAAQQ,IAGZA,EAAgBzG,EAAQiG,OAExB,IAAIA,EAAS,KACTQ,EAAc3C,MAAQ,IACtBmC,EAAS,CACLC,MAAOO,EAAcP,MACrBpC,MAAO2C,EAAc3C,MACrBqC,QAASM,EAAcN,QACvBO,SAAUD,EAAcC,WAIhCrG,KAAK0E,eAAe/E,QAAQ2G,IAAI,SAAUV,IAG9CG,MAAO,SAASQ,GACZ,IAAI5G,EAAUK,KAAKL,QACnB7B,EAAW6B,EAAS,CAChB+F,KAAMa,GAAe,KAEzB,IAAIb,EAAO/F,EAAQ+F,KAEnB,GAAIA,EAAKc,SAAU,CACf,IAAIA,EAAWd,EAAKc,SAChBC,EAAmC,WAAlBD,EAASE,KAAoBlI,EAAEmI,eAAiBnI,EAAEoI,eACvE5G,KAAK0E,eAAegB,KAAK,IAAIe,EAAcD,SAE3CxG,KAAK0E,eAAegB,KAAKA,EAAKG,MAAOH,EAAKI,YAKlDe,EAAYrB,EAAWnF,OAAO,CAC9BC,KAAM,SAAUX,GACZA,EAAUK,KAAK8G,WAAWnH,GAC1B6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAE9BK,KAAK+G,QACL/G,KAAKgH,YACLhH,KAAK4D,aAGTjE,QAAS,CACLsH,SAAU,GACVC,WAAY,aACZtB,OAAQ,CACJnC,MAAO,GAEXiC,KAAM,CACFG,MAAO,SAEXhC,UAAU,GAGdmD,UAAW,WACP,IAAIrH,EAAUK,KAAKL,QAEnBK,KAAK0E,eAAiB,IAAIlG,EAAE2I,KAAKzI,EAAQiB,EAAQyH,MAAQzH,EAAQyH,KAAO,GAAI,IAAI9I,EAAEP,MAAS,CACvFsJ,KAAM1H,EAAQ0H,OAGlBrH,KAAK+F,QACL/F,KAAKiG,WAGTa,WAAY,SAASnH,GAQjB,OAPIA,GAAWA,EAAQkG,QACnBlG,EAAU7B,EAAW,GAAI6B,EAAS,CAC9B+F,KAAM,CACFG,MAAOlG,EAAQkG,UAIpBlG,GAGXoH,MAAO,WACH,IAAIpH,EAAUK,KAAKL,QACnB,GAAIA,EAAQuH,YAAcxI,EAAQiB,EAAQsH,UAAW,CACjD,IAAIK,EAAc,GAEd3H,EAAQ4H,WACRD,EAAYE,KAAK7H,EAAQ4H,WAGzB5H,EAAQ8H,YACRH,EAAYE,KAAK7H,EAAQ8H,YAG7BH,EAAYE,KAAK7H,EAAQsH,UAAY9I,EAASwB,EAAQsH,UAAY,KAAO,KACzEK,EAAYE,KAAK7H,EAAQuH,YAEzBvH,EAAQ0H,KAAOC,EAAYI,KAAK,iBAEzB/H,EAAQ0H,MAIvBM,QAAS,SAAUP,GACf,OAAOpH,KAAK0E,eAAeiD,QAAQP,IAGvC5C,OAAQ,SAAU7E,GACd,GAAIA,EAAS,CACT,IAAIiI,GAAc,EACdC,EAAc7H,KAAKL,QAEvBA,EAAUK,KAAK8G,WAAWnH,GAE1B6F,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,IAE5BA,EAAQuH,YAAcxI,EAAQiB,EAAQsH,WAAatH,EAAQ4H,WAAa5H,EAAQ8H,cAChF3J,EAAW+J,EAAa,CACpBX,WAAYvH,EAAQuH,WACpBD,SAAUtH,EAAQsH,SAClBM,UAAW5H,EAAQ4H,UACnBE,WAAY9H,EAAQ8H,aAExBzH,KAAK+G,QACL/G,KAAK0E,eAAe/E,QAAQ2G,IAAI,OAAQuB,EAAYR,MACpDO,GAAc,GAGdjI,EAAQyH,OACRpH,KAAK2H,QAAQhI,EAAQyH,MACrBQ,GAAc,IAGb5H,KAAK+D,YAAYpE,IAAYiI,GAC9B5H,KAAK4D,gBAMrB9F,EAAW+I,EAAUpB,GAAItC,GAEzB,IAAI2E,EAAYtC,EAAWnF,OAAO,CAC9BC,KAAM,SAAUX,GACZ6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC9BK,KAAK+H,YACL/H,KAAKgI,gBAGTA,aAAc,WACV,IAAIrI,EAAUK,KAAKL,QACfY,EAAIZ,EAAQY,EACZC,EAAIb,EAAQa,GACZ9B,EAAQ6B,IAAM7B,EAAQ8B,KACtBR,KAAKyE,SAASlE,GAAK,EAAGC,GAAK,IAInCgE,OAAQ,SAAU7E,GACVA,IACA6F,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,GAC5BK,KAAKiE,oBAAoBtE,EAAS,CAACL,EAAOC,KAC1CS,KAAKiI,YAELjI,KAAKiE,oBAAoBtE,EAAS,CAACH,EAAGC,KACtCO,KAAKgI,iBAKjBD,UAAW,WACP,IAAIpI,EAAUK,KAAKL,QACnBK,KAAK0E,eAAiB,IAAIlG,EAAE0J,KAAK,CAC7BtC,OAAQjG,EAAQiG,OAChBuC,QAAQ,IAGZnI,KAAK+F,QACL/F,KAAKiI,aAGTA,UAAW,WACP,IAAIvD,EAAiB1E,KAAK0E,eACtB0D,EAAcC,EAAqBrI,KAAKL,SACxC8D,EAAQ2E,EAAY3E,MACpBC,EAAS0E,EAAY1E,OAEzBgB,EAAe4D,SAASC,SAAS,CAC7BC,EAAc,EAAG,GACjBA,EAAc/E,EAAO,GACrB+E,EAAc/E,EAAOC,GACrB8E,EAAc,EAAG9E,QAKzB+E,EAAajD,EAAWnF,OAAO,CAC/BC,KAAM,SAASX,GACZ6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC9B,IAAI+I,EAAS1I,KAAKL,QAAQ+I,OAC1B1I,KAAK0I,OAAS,IAAIpK,EAAEP,MAAM2K,EAAOnI,EAAGmI,EAAOlI,GAC3CR,KAAK2I,iBAGRhJ,QAAS,CACNiG,OAAQ,CACHC,MAAOhH,EACP4E,MAAO,GAEZiC,KAAM,CACDG,MAAO,UAIf+C,iBAAkB,SAASC,EAAOC,GAC9B,IAAIpG,EAAYoG,EAAKpG,YAIrB,OAHImG,GAASnG,IACTmG,EAAQA,EAAME,cAAcrG,IAEzBmG,GAGXrE,OAAQ,SAAS7E,GACTA,IACIA,EAAQ8E,WACRzE,KAAKL,QAAQ8E,SAAW9E,EAAQ8E,UAGpCe,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,OAKxCqJ,EAAeP,EAAWpI,OAAO,CACjCV,QAAS,CACLsJ,OAAQ,EACRP,OAAQ,CACJnI,EAAG,EACHC,EAAG,IAIXmI,cAAe,WACX,IAAIhJ,EAAUK,KAAKL,QACnBK,KAAK0E,eAAiB,IAAIlG,EAAE0K,OAAO,IAAI5K,EAAE4K,OAAOlJ,KAAK0I,OAAQ/I,EAAQsJ,QAAS,CAC1EvD,KAAM/F,EAAQ+F,KACdE,OAAQjG,EAAQiG,UAIxBuD,eAAgB,SAASL,GACrB,IAGIM,EACAP,EAJAlJ,EAAUK,KAAKL,QACf8E,EAAW9E,EAAQ8E,SACnB6D,EAAWQ,EAAKR,SAKhBc,EADA3E,GAAYrF,EACIkJ,EAAS,GAETA,EAASA,EAASnI,OAAS,GAE3CiJ,IACAP,EAAQ7I,KAAK4I,iBAAiBQ,EAAcV,SAAUI,GACtD9I,KAAK0E,eAAehC,UAAUpE,EAAEoE,YAAYH,UAAUsG,EAAMtI,EAAGsI,EAAMrI,QAK7E6I,EAAcZ,EAAWpI,OAAO,CAChCV,QAAS,CACLmJ,KAAM,8BACNJ,OAAQ,CACJnI,EAAG,GACHC,EAAG,IAIXmI,cAAe,WACX,IAAIhJ,EAAUK,KAAKL,QACnBK,KAAK0E,eAAiBlG,EAAE0J,KAAKnG,MAAMpC,EAAQmJ,KAAM,CAC7CpD,KAAM/F,EAAQ+F,KACdE,OAAQjG,EAAQiG,UAIxBuD,eAAgB,SAASL,GACrB,IAAIQ,EAAStJ,KAAKuJ,YAAYT,GAC1BU,EAAQF,EAAOE,MACfC,EAAMH,EAAOG,IACb/G,EAAYpE,EAAEoE,YAKlB,GAJI8G,GACA9G,EAAUD,OAAOiH,EAAUF,EAAOC,GAAMA,GAGxCA,EAAK,CACL,IAAIf,EAAS1I,KAAK0I,OACdnG,EAAYkH,EAAIE,QAAQpH,WAAWmG,EAAOnI,GAAImI,EAAOlI,GACzDkC,EAAUH,UAAUA,EAAUhC,EAAGgC,EAAU/B,GAE/CR,KAAK0E,eAAehC,UAAUA,IAGlC6G,YAAa,SAAST,GAClB,IAEIzD,EAAYuE,EAAUR,EAFtBzJ,EAAUK,KAAKL,QACf2I,EAAWQ,EAAKR,SAEpB,GAAI3I,EAAQ8E,UAAYrF,GAEpB,GADAgK,EAAgBd,EAAS,GACrBc,EAAe,CACfQ,EAAWR,EAAcV,SACzBrD,EAAa+D,EAAcS,aAC3B,IAAIC,EAAcxB,EAAS,IACtBjD,GAAcyE,IACfzE,EAAayE,EAAYpB,gBAKjC,GADAU,EAAgBd,EAASA,EAASnI,OAAS,GACvCiJ,EAAe,CACfQ,EAAWR,EAAcV,SACzBrD,EAAa+D,EAAcW,YAC3B,IAAIC,EAAc1B,EAASA,EAASnI,OAAS,IACxCkF,GAAc2E,IACf3E,EAAa2E,EAAYtB,UAIrC,GAAIkB,EACA,MAAO,CACHJ,MAAOxJ,KAAK4I,iBAAiBvD,EAAYyD,GACzCW,IAAKzJ,KAAK4I,iBAAiBgB,EAAUd,OAMjDmB,EAAkB,CAClBC,SAAU,SAASzF,GACf,IAAIqE,EAAO9I,KAAK0E,eAQhB,GAPIoE,aAAgBtK,EAAE2L,YAEdrB,EADArE,GAAYrF,EACL0J,EAAKsB,MAAM,GAEXtB,EAAKsB,MAAMtB,EAAKsB,MAAMjK,OAAS,IAG1C2I,GAAQA,EAAKR,SAASnI,OACtB,OAAO2I,GAIfuB,wBAAyB,SAAS1K,GAC9B,IAAI2K,EAAW3K,EAAQ2K,SACnBC,EAAS5K,EAAQ4K,OAEjBnM,EAASkM,KACT3K,EAAQ2K,SAAW,CACf5D,KAAM4D,IAIVlM,EAASmM,KACT5K,EAAQ4K,OAAS,CACb7D,KAAM6D,KAKlBC,cAAe,SAAS/F,GACpB,IAAIgG,EAASzK,KAAK0K,SAASjG,GACvBgG,IACAzK,KAAKuE,mBAAmBoG,OAAOF,EAAO/F,uBAC/B1E,KAAK0K,SAASjG,KAI7BmG,eAAgB,WACZ,IAAIjL,EAAUK,KAAKL,QACnBK,KAAKqK,wBAAwB1K,GAE7BK,KAAK0K,SAAW,GAChB1K,KAAK0K,SAAStL,GAASY,KAAK6K,cAAclL,EAAQ2K,SAAUlL,GAC5DY,KAAK0K,SAASrL,GAAOW,KAAK6K,cAAclL,EAAQ4K,OAAQlL,IAG5DwL,cAAe,SAASlL,EAAS8E,GAC7B,IAEIqG,EAAYL,EAFZ/D,GAAQ/G,GAAW,IAAI+G,KACvBoC,EAAO9I,KAAKkK,SAASzF,GAEzB,GAAKqE,EAYL,OAPIpC,GAAQ5H,EAAQG,aAChB6L,EAAa9B,EACNtC,GAAQ5H,EAAQE,YAAc0H,GAAQ5H,EAAQI,SACrD4L,EAAazB,EAEbrJ,KAAKwK,cAAc/F,GAEnBqG,GACAL,EAAS,IAAIK,EAAWhN,EAAW,GAAI6B,EAAS,CAC5C8E,SAAUA,KAEdgG,EAAOtB,eAAeL,GACtB9I,KAAKuE,mBAAmBwG,OAAON,EAAO/F,gBAE/B+F,QAPX,EAXIzK,KAAKwK,cAAc/F,IAsB3BuG,gBAAkB,SAASvG,GACvB,IAAIgG,EAASzK,KAAK0K,SAASjG,GAE3B,GAAIgG,EAAQ,CACR,IAAI3B,EAAO9I,KAAKkK,SAASzF,GACrBqE,EACA2B,EAAOtB,eAAeL,GAEtB9I,KAAKwK,cAAc/F,KAK/BwG,QAAS,CACLzB,MAAO,WACPC,IAAK,UAGTyB,cAAe,SAASC,EAAY1G,EAAU9E,GAC1CK,KAAKqK,wBAAwB1K,GAE7B,IAAIyL,EAAcpL,KAAKL,QACnB0L,EAAMrL,KAAKiL,QAAQxG,GACnB6G,GAAeF,EAAYC,IAAQ,IAAI3E,KACvC6E,EAAa5L,EAAQ0L,GACrBG,GAAU,EAcd,OAbID,GACAH,EAAYC,GAAOvN,EAAW,GAAIsN,EAAYC,GAAME,GAChDA,EAAW7E,MAAQ4E,GAAeC,EAAW7E,MAC7C1G,KAAKwK,cAAc/F,GACnBzE,KAAK0K,SAASjG,GAAYzE,KAAK6K,cAAcO,EAAYC,GAAM5G,GAC/D+G,GAAW,GACJxL,KAAK0K,SAASjG,IACtBzE,KAAK0K,SAASjG,GAAUD,OAAO+G,IAE3BJ,IAAenL,KAAK0K,SAASjG,IAAa2G,EAAYC,KAC7DrL,KAAK0K,SAASjG,GAAYzE,KAAK6K,cAAcO,EAAYC,GAAM5G,GAC/D+G,GAAU,GAEPA,GAGXC,eAAgB,SAAUN,EAAYxL,IAC7BK,KAAKkL,cAAcC,EAAY/L,EAAOO,IAAYwL,GACnDnL,KAAKgL,gBAAgB5L,IAEpBY,KAAKkL,cAAcC,EAAY9L,EAAKM,IAAYwL,GACjDnL,KAAKgL,gBAAgB3L,KAK7B6I,EAAO1C,EAAWnF,OAAO,CACzBC,KAAM,SAAUX,GACZ6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC9BK,KAAK0L,UAAY,IAAIlN,EAAEmN,MACvB3L,KAAK4L,kBACL5L,KAAK4D,aAGTjE,QAAS,CACLkE,UAAU,GAGdU,iBAAkB,WACd,OAAOvE,KAAK0L,WAGhBG,KAAM,SAAUhM,GACZ,IAAIF,EAAUK,KAAKL,QACnB,IAAIE,EAQA,OAAOF,EAAQkM,KAPXlM,EAAQkM,MAAQhM,IACjBF,EAAQkM,KAAOhM,EACfG,KAAK8L,SAASjM,GACdG,KAAK4D,YACL5D,KAAKyL,gBAAe,EAAM,MAOrCjH,OAAQ,SAAU7E,GACd,GAAIA,EAAS,CACT6F,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,GAEhC,IAAIyL,EAAcpL,KAAKL,QACnBkM,EAAOlM,EAAQkM,KAEfnN,EAAQmN,IAAST,EAAYS,MAAQA,GACrCT,EAAYS,KAAOA,EACnB7L,KAAK8L,SAASD,GACT7L,KAAK+D,YAAYpE,IAClBK,KAAK4D,YAET5D,KAAKyL,gBAAe,EAAM9L,KAE1BK,KAAK+D,YAAYpE,GACjBK,KAAKyL,gBAAe,EAAO9L,MAKvCiM,gBAAiB,WACb,IAAIjM,EAAUK,KAAKL,QAEnBK,KAAK0E,eAAiBlG,EAAE0J,KAAKnG,MAAMpC,EAAQkM,MAAQ,GAAI,CACnDjG,OAAQjG,EAAQiG,SAGpB5F,KAAK+F,QACL/F,KAAK0L,UAAUX,OAAO/K,KAAK0E,gBAC3B1E,KAAK4K,kBAGTkB,SAAU,SAASD,GACf,IAAInH,EAAiB1E,KAAK0E,eACtBqH,EAAYvN,EAAE0J,KAAKnG,MAAM8J,GAAQ,IACjCzB,EAAQ2B,EAAU3B,MAAMlI,MAAM,GAClC6J,EAAU3B,MAAM7B,SAAS,IACzB7D,EAAe0F,MAAM7B,SAAS6B,MAItCtM,EAAWoK,EAAKzC,GAAItC,GACpBrF,EAAWoK,EAAKzC,GAAIwE,GAEpB,IAAI+B,EAAOxG,EAAWnF,OAAO,CACzBC,KAAM,SAAUX,GACZ6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC9BK,KAAK0L,UAAY,IAAIlN,EAAEmN,MACvB3L,KAAK+H,YACL/H,KAAK4K,kBAGTrG,iBAAkB,WACd,OAAOvE,KAAK0L,WAGhBlH,OAAQ,SAAU7E,GACd,GAAIA,EAAS,CACTA,EAAUA,GAAW,GACrB,IAAIsM,EAAOtM,EAAQsM,KACfC,EAAKvM,EAAQuM,GACbD,IACAjM,KAAKL,QAAQsM,KAAOA,GAGpBC,IACAlM,KAAKL,QAAQuM,GAAKA,GAGlBD,GAAQC,GACRlM,KAAKiI,YACLjI,KAAKyL,gBAAe,EAAM9L,IAE1BK,KAAKyL,gBAAe,EAAO9L,GAG/B6F,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,KAIxCoI,UAAW,WACP,IAAIpI,EAAUK,KAAKL,QACf+E,EAAiB1E,KAAK0E,eAAiB,IAAIlG,EAAE0J,KAAK,CAClDtC,OAAQjG,EAAQiG,SAGpB5F,KAAK+F,QACL/F,KAAKiI,YACLjI,KAAK0L,UAAUX,OAAOrG,IAG1BuD,UAAW,WACP,IAAItI,EAAUK,KAAKL,QACf+E,EAAiB1E,KAAK0E,eACtBuH,EAAOtM,EAAQsM,MAAQ,IAAIlO,EAC3BmO,EAAKvM,EAAQuM,IAAM,IAAInO,EAE3B2G,EAAe4D,SAASC,SAAS,CAC7BC,EAAcyD,EAAK1L,EAAG0L,EAAKzL,GAC3BgI,EAAc0D,EAAG3L,EAAG2L,EAAG1L,QAKnC1C,EAAWkO,EAAKvG,GAAIwE,GAEpB,IAAIkC,EAAW3G,EAAWnF,OAAO,CAC7BC,KAAM,SAAUX,GACZ6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC9BK,KAAK0L,UAAY,IAAIlN,EAAEmN,MACvB3L,KAAK+H,YACL/H,KAAK4K,kBAGTrG,iBAAkB,WACd,OAAOvE,KAAK0L,WAGhBpC,OAAQ,SAAUA,GACd,IAAI3J,EAAUK,KAAKL,QACnB,IAAI2J,EAIA,OAAO3J,EAAQ2J,OAHf3J,EAAQ2J,OAASA,EACjBtJ,KAAKoM,eAMb5H,OAAQ,SAAU7E,GACd,GAAIA,EAAS,CACT,IAAI2J,EAAS3J,EAAQ2J,OACrB9D,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,GAE5B2J,GAAUtJ,KAAKqM,cAAc/C,IAC7BtJ,KAAKsJ,OAAOA,GACZtJ,KAAKyL,gBAAe,EAAM9L,IAE1BK,KAAKyL,gBAAe,EAAO9L,KAKvCoI,UAAW,WACP,IAAIpI,EAAUK,KAAKL,QACnBK,KAAK0E,eAAiB,IAAIlG,EAAE0J,KAAK,CAC7BtC,OAAQjG,EAAQiG,SAGpB5F,KAAK+F,QACL/F,KAAK0L,UAAUX,OAAO/K,KAAK0E,gBAEvB/E,EAAQ2J,QACRtJ,KAAKoM,eAIbC,cAAe,SAAS/C,GACpB,IAAIgD,EAAgBtM,KAAKL,QAAQ2J,OAC7BiD,EAASD,EAAcnM,SAAWmJ,EAAOnJ,OAC7C,IAAKoM,EACD,IAAK,IAAIrM,EAAI,EAAGA,EAAIoJ,EAAOnJ,OAAQD,IAC/B,GAAIoM,EAAcpM,GAAGK,IAAM+I,EAAOpJ,GAAGK,GAAK+L,EAAcpM,GAAGM,IAAM8I,EAAOpJ,GAAGM,EAAG,CAC1E+L,GAAS,EACT,MAKZ,OAAOA,GAGXH,YAAa,WAMT,IALA,IAIIvD,EAJAnE,EAAiB1E,KAAK0E,eACtB/E,EAAUK,KAAKL,QACf2J,EAAS3J,EAAQ2J,OACjBhB,EAAW,GAENpI,EAAI,EAAGA,EAAIoJ,EAAOnJ,OAAQD,IAC/B2I,EAAQS,EAAOpJ,GACfoI,EAASd,KAAKgB,EAAcK,EAAMtI,EAAGsI,EAAMrI,IAG/CkE,EAAe4D,SAASC,SAASD,IAGrC3I,QAAS,CACL2J,OAAQ,MAIhBxL,EAAWqO,EAAS1G,GAAIwE,GAExB,IAAIuC,EAAQtI,EAAQ7D,OAAO,CACvBC,KAAM,SAAUX,GACZuE,EAAQuB,GAAGnF,KAAK/D,KAAKyD,KAAML,GAE3BK,KAAKyM,cAGTjI,OAAQ,SAAU7E,GACVA,IACIA,EAAQ+M,QACR1M,KAAK0E,eAAeiI,IAAIhN,EAAQ+M,QAGhC1M,KAAKiE,oBAAoBtE,EAAS,CAACL,EAAOC,EAAQC,EAAGC,KACrDO,KAAK0E,eAAeO,KAAKjF,KAAK4M,SAGlC1I,EAAQuB,GAAGjB,OAAOjI,KAAKyD,KAAML,KAIrC8M,WAAY,WACR,IAAI9M,EAAUK,KAAKL,QACfsF,EAAOjF,KAAK4M,QAEhB5M,KAAK0E,eAAiB,IAAIlG,EAAEgO,MAAM7M,EAAQ+M,OAAQzH,EAAM,KAG5D2H,MAAO,WACH,IAAIxE,EAAcC,EAAqBrI,KAAKL,SACxCkN,EAAS,IAAIvO,EAAEP,MAAMqK,EAAY7H,EAAG6H,EAAY5H,GAChDsM,EAAO,IAAIxO,EAAEyO,KAAK3E,EAAY3E,MAAO2E,EAAY1E,QAErD,OAAO,IAAIpF,EAAEN,KAAK6O,EAAQC,MAI9BnB,EAAQzH,EAAQ7D,OAAO,CACvBC,KAAM,SAAUX,GACZK,KAAKgN,SAAW,GAChB9I,EAAQuB,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC3BK,KAAK0E,eAAiB,IAAIlG,EAAEmN,MAC5B3L,KAAK4D,aAGTjE,QAAS,CACLkE,UAAU,GAGdkH,OAAQ,SAAUnI,GACd5C,KAAK0E,eAAeqG,OAAOnI,EAAO2B,oBAClCvE,KAAKgN,SAASxF,KAAK5E,GACnB5C,KAAKiN,iBAAkB,GAG3BtC,OAAQ,SAAU/H,GACV5C,KAAKkN,QAAQtK,KACb5C,KAAKiN,iBAAkB,IAI/BC,QAAS,SAAStK,GACd,IAAIuK,EAAQvO,EAAQgE,EAAQ5C,KAAKgN,UACjC,GAAIG,GAAS,EAGT,OAFAnN,KAAK0E,eAAe0I,SAASD,GAC7BnN,KAAKgN,SAASK,OAAOF,EAAO,IACrB,GAIfG,MAAO,WACHtN,KAAK0E,eAAe4I,QACpBtN,KAAKgN,SAAW,GAChBhN,KAAKiN,iBAAkB,GAG3BM,QAAS,SAAUC,GAGf,IAFA,IAAI5K,EAEK1C,EAAI,EAAGA,EAAIsN,EAAQrN,OAAQD,IAChC0C,EAAS4K,EAAQtN,GACbF,KAAKkN,QAAQtK,IACb5C,KAAK+K,OAAOnI,IAKxB6K,OAAQ,SAAUD,GACdxN,KAAK0N,iBAAiBF,EAAS,IAGnCG,QAAS,SAAUH,EAASI,GACxB5N,KAAK0N,iBAAiBF,EAASI,IAGnCF,iBAAkB,SAASF,EAASI,GAChC,IAII1N,EAAGiN,EAAOQ,EAASjJ,EAAgB9B,EAJnCiL,EAAQ7N,KAAK0E,eACboJ,EAAkBD,EAAMb,SAAS9K,MAAM,GACvC8K,EAAWhN,KAAKgN,SAChBe,EAAgB5P,EAASyP,GAG7B,IAAK1N,EAAI,EAAGA,EAAIsN,EAAQrN,OAAQD,IAC5B0C,EAAS4K,EAAQtN,GACjBwE,EAAiB9B,EAAO2B,mBAExB4I,EAAQvO,EAAQgE,EAAQoK,GACpBG,GAAS,IACTW,EAAgBT,OAAOF,EAAO,GAC9BH,EAASK,OAAOF,EAAO,GAEvBQ,EAAUI,EAAgBH,EAAUA,EAAQ1N,GAE5C4N,EAAgBT,OAAOM,EAAS,EAAGjJ,GACnCsI,EAASK,OAAOM,EAAS,EAAG/K,IAGpCiL,EAAMP,QACNO,EAAM9C,OAAOzN,MAAMuQ,EAAOC,IAG9BtJ,OAAQ,SAAU7E,GACVA,IACIK,KAAKiN,iBACLjN,KAAKiN,iBAAkB,EAClBjN,KAAK+D,YAAYpE,IAClBK,KAAK4D,aAGT5D,KAAK+D,YAAYpE,GAGrBuE,EAAQuB,GAAGjB,OAAOjI,KAAKyD,KAAML,KAIrCyF,aAAc,WAIV,IAHA,IACI4I,EACApL,EAAQqL,EAFRjB,EAAWhN,KAAKgN,SAGX9M,EAAI,EAAGA,EAAI8M,EAAS7M,OAAQD,IACjC0C,EAASoK,EAAS9M,GACd0C,EAAO0B,YAAuC,IAA1B1B,EAAOsL,iBAC3BD,EAAmBrL,EAAO2B,mBAAmB4J,YAAY,MACrDF,IAEID,EADAA,EACc1P,EAAEN,KAAKoQ,MAAMJ,EAAaC,GAE1BA,IAM9B,OAAOD,KAIflQ,EAAW6N,EAAMlG,GAAItC,GAErB,IAAIkL,EAAS1C,EAAMtL,OAAO,CACtBC,KAAM,SAAU2E,EAAMtF,GAClBK,KAAKgN,SAAW,GAChB9I,EAAQuB,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC3BK,KAAK0E,eAAiB,IAAIlG,EAAE6P,OAAOC,EAAcrJ,GAAOtF,GACxDK,KAAK4D,aAGTqB,KAAM,SAASA,GACX,GAAIA,EACAjF,KAAK0E,eAAeO,KAAKqJ,EAAcrJ,QACpC,CACH,IAAIsJ,EAAcvO,KAAK0E,eAAeO,OACtC,GAAIsJ,EACA,OAAO,IAAIvQ,EAAKuQ,EAAY1B,OAAOtM,EAAGgO,EAAY1B,OAAOrM,EAAG+N,EAAYzB,KAAKrJ,MAAO8K,EAAYzB,KAAKpJ,UAKjH8K,OAAQ,WACJxO,KAAK0E,eAAe8J,UAGxBhK,OAAQ,SAAU7E,GACdlC,EAAMK,WAAWkC,KAAK0E,eAAe/E,QAASA,GAC9CgM,EAAMlG,GAAGjB,OAAOjI,KAAKyD,KAAML,MAI/BuJ,EAAS1D,EAAWnF,OAAO,CAC3BC,KAAM,SAAUX,GACZ6F,EAAWC,GAAGnF,KAAK/D,KAAKyD,KAAML,GAC9BK,KAAKyO,cACLzO,KAAK4D,aAGTY,OAAQ,SAAU7E,GACd,GAAIA,EAAS,CACT,IAAI+O,EAAgB1O,KAAKL,QAErBA,EAAQiC,SACR9D,EAAW4Q,EAAe,CACtB9M,OAAQjC,EAAQiC,SAEpB5B,KAAK2O,QAAQC,KAAKF,EAAc9M,OAAOrB,EAAGmO,EAAc9M,OAAOpB,IAG/DR,KAAKiE,oBAAoBtE,EAAS,CAAC,YACnCK,KAAK6O,QAAQC,UAAUJ,EAAczF,QAGzCjJ,KAAK+D,YAAYpE,GAEjB6F,EAAWC,GAAGjB,OAAOjI,KAAKyD,KAAML,KAIxC8O,YAAa,WACT,IAAI9O,EAAUK,KAAKL,QACf8D,EAAQ9D,EAAQ8D,MAChBC,EAAS/D,EAAQ+D,OACjBuF,EAAStJ,EAAQsJ,OAChBvK,EAAQuK,KACJvK,EAAQ+E,KACTA,EAAQC,GAEPhF,EAAQgF,KACTA,EAASD,GAEb9D,EAAQsJ,OAASA,EAAS5H,KAAK0N,IAAItL,EAAOC,GAAU,GAGxD,IAAI9B,EAASjC,EAAQiC,QAAU,CAACrB,EAAG0I,EAAQzI,EAAGyI,GAC9CjJ,KAAK2O,QAAU,IAAIrQ,EAAEP,MAAM6D,EAAOrB,EAAGqB,EAAOpB,GAC5CR,KAAK6O,QAAU,IAAIvQ,EAAE4K,OAAOlJ,KAAK2O,QAAS1F,GAC1CjJ,KAAK0E,eAAiB,IAAIlG,EAAE0K,OAAOlJ,KAAK6O,QAAS,CAC7CjJ,OAAQjG,EAAQiG,SAGpB5F,KAAK+F,WAGbjI,EAAWoL,EAAOzD,GAAItC,GAEtB,IAAI6L,EAASnR,EAAMwC,OAAO,CACtBC,KAAM,SAAU6D,EAASxE,GACrBA,EAAUA,GAAW,GACrBK,KAAKmE,QAAUA,EACfnE,KAAKiP,QAAUzQ,EAAE0Q,QAAQpN,OAAOqC,EAASxE,GACrClC,EAAM0R,WAAWnP,KAAKiP,QAAQ1M,aAC9BvC,KAAKuC,UAAYvC,KAAKoP,YAG1BpP,KAAK0E,eAAiB,IAAIlG,EAAEmN,MAC5B3L,KAAKqP,SAAW,IAAIrR,EAAK,EAAG,EAAG2B,EAAQ8D,MAAO9D,EAAQ+D,QACtD1D,KAAK8M,KAAK9M,KAAKqP,WAGnBC,OAAQ,WACJ,IAAInK,EAAMnF,KAAK0E,eAAeyJ,cAC9B,OAAO,IAAInQ,EAAK,EAAG,EAAGmH,EAAI1B,QAAS0B,EAAIzB,WAG3CoJ,KAAM,SAAUA,GACZ,IAAIyC,EAAUvP,KAAKqP,SAMnB,OALI3Q,EAAQoO,KACRyC,EAAQ9L,MAAQqJ,EAAKrJ,MACrB8L,EAAQ7L,OAASoJ,EAAKpJ,OACtB1D,KAAKiP,QAAQO,QAAQ1C,IAElB,CACHrJ,MAAO8L,EAAQ9L,MACfC,OAAQ6L,EAAQ7L,SAIxB0L,WAAY,SAAU7O,EAAGC,GACrB,IAAI+O,EAAUvP,KAAKqP,SAMnB,OALI3Q,EAAQ6B,IAAM7B,EAAQ8B,KACtB+O,EAAQhP,EAAIA,EACZgP,EAAQ/O,EAAIA,EACZR,KAAKiP,QAAQ1M,UAAU,CAAChC,EAAGA,EAAGC,EAAGA,KAE9B,CACHD,EAAGgP,EAAQhP,EACXC,EAAG+O,EAAQ/O,IAInBiP,KAAM,WACFzP,KAAKiP,QAAQQ,KAAKzP,KAAK0E,iBAG3BqG,OAAQ,SAAUnI,GAEd,OADA5C,KAAK0E,eAAeqG,OAAOnI,EAAO2B,oBAC3BvE,MAGX2K,OAAQ,SAAU/H,GACd5C,KAAK0E,eAAeiG,OAAO/H,EAAO2B,qBAGtCmL,aAAc,aAIdpC,MAAO,WACHtN,KAAK0E,eAAe4I,SAGxBqC,QAAS,SAASC,GACd5P,KAAKiP,QAAQU,UACVC,GACCpS,EAAEwC,KAAKmE,SAASwG,YAO5B,SAAStC,EAAqB1I,GAC1B,MAAO,CACHY,EAAGZ,EAAQY,GAAK,EAChBC,EAAGb,EAAQa,GAAK,EAChBiD,MAAO9D,EAAQ8D,OAAS,EACxBC,OAAQ/D,EAAQ+D,QAAU,GAIlC,SAASiC,EAAwBhG,GAC7B,GAAIA,EAAS,CACT,IAAIkQ,EAAiBlQ,EAWrB,OATIvB,EAASyR,KACTA,EAAiB,CACbhK,MAAOgK,IAIXA,EAAehK,QACfgK,EAAehK,MAAQG,EAAS6J,EAAehK,QAE5CgK,GAIf,SAAS7J,EAASnG,GACd,IAAIgG,EAMJ,OAJIA,EADAhG,GAAShB,EACD,IAAIL,EAAEsR,MAAMjQ,GAAOkQ,QAEnBlQ,EAELgG,EAGX,SAAS6D,EAAUsG,EAAIC,GACnB,IAAIC,EAAQD,EAAG1P,EAAIyP,EAAGzP,EAClB4P,EAAQF,EAAGzP,EAAIwP,EAAGxP,EAClBkB,EAAQlD,EAAEG,KAAKyR,IAAI/O,KAAKgP,MAAMF,EAAOD,IACzC,OAAOxO,EAGX,SAAS8G,EAAcjI,EAAGC,GACtB,OAAO,IAAIhC,EAAE8R,QAAQ,IAAIhS,EAAEP,MAAMwC,EAAGC,IAGxC,SAAS8N,EAAcrJ,GACnB,GAAIA,EACA,OAAO,IAAI3G,EAAEN,KAAK,CAACiH,EAAK1E,EAAG0E,EAAKzE,GAAI,CAACyE,EAAKxB,MAAOwB,EAAKvB,SAK9DjG,EAAMK,WAAWH,EAAS,CACtB2C,KAAM,SAAU6D,GACZ1G,EAAM6C,KAAK6D,EAASxG,EAAQ4S,KAEhC7Q,mBAAoBA,EACpBwE,QAASA,EACT9D,MAAOA,EACPU,YAAaA,EACbW,SAAUA,EACVyH,OAAQA,EACRyC,MAAOA,EACP7D,UAAWA,EACXkH,OAAQA,EACR9G,KAAMA,EACNmG,OAAQA,EACRrC,KAAMA,EACNvD,WAAYA,EACZY,YAAaA,EACbL,aAAcA,EACdmD,SAAUA,EACV/J,mBAAoBA,EACpByE,UAAWA,EACX2F,MAAOA,EACPhH,WAAYA,KAv9CpB,CAy9CG9H,OAAOD,MAAM+S,UAEbrU,EAAoB,Q,qBC7iDxBJ,EAAOC,QACE,SAAUC,GAET,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUJ,QAGnC,IAAID,EAASG,EAAiBE,GAAY,CACzCJ,QAAS,GACTK,GAAID,EACJE,QAAQ,GAUT,OANAL,EAAQG,GAAUG,KAAKR,EAAOC,QAASD,EAAQA,EAAOC,QAASG,GAG/DJ,EAAOO,QAAS,EAGTP,EAAOC,QAcf,OATAG,EAAoBK,EAAIP,EAGxBE,EAAoBM,EAAIP,EAGxBC,EAAoBO,EAAI,GAGjBP,EAAoB,GAvC5B,CA0CC,CAEJQ,EACA,SAAUZ,EAAQC,EAASG,GAEhCJ,EAAOC,QAAUG,EAAoB,MAKhCS,EACA,SAAUb,EAAQC,GAEvBD,EAAOC,QAAU,WAAa,MAAM,IAAIa,MAAM,oCAKzC4T,IACA,SAAU1U,EAAQC,GAEvBD,EAAOC,QAAU,EAAQ,SAIpB0U,IACA,SAAU3U,EAAQC,EAASG,GAEhC,IAAIc,EAAgCC,EAA8BC,GAA8B,SAAUC,EAAGC,GACvGH,EAA+B,CAAEf,EAAoB,MAAQc,EAAiC,EAAKE,EAA2E,oBAAnCF,EAAiDA,EAA+BK,MAAMtB,EAASkB,GAAiCD,OAAmEM,IAAlCJ,IAAgDpB,EAAOC,QAAUmB,IADnR,EAE7F,YAEH,SAAWK,EAAGD,GACV,IAAIE,EAAQC,OAAOD,MACfE,EAAUF,EAAMG,QAAQD,QAAU,GAClCG,EAAaL,EAAMK,WACnB6S,EAAUC,MAAMD,QAChBE,EAAU,KAGV3S,EAAQ,GAyJZ,SAAS4S,EAAMtH,EAAOuH,EAAMC,GACxB,GAAoB,oBAATxH,GAAuC,oBAARuH,EACtC,MAAO,GAEX,GAAIC,GAAQ9S,EAAM+S,KAAKF,EAAOvH,IAAUtL,EAAM+S,KAAKD,GAC/C,KAAM,kEAKV,GAHAA,EAAOA,GAAQ,EACfxH,EAAQA,GAAS,EACjBuH,EAAOA,GAAQvH,GACVuH,EAAOvH,GAASwH,IAASE,IAC1B,KAAM,0BAEV,IAAwBC,EAApBC,EAAQ,GAAIlR,GAAK,EAErB,SAASmR,EAAkB9Q,GACvB,IAAI+Q,EAAI,EACR,MAAO/Q,EAAI+Q,EAAI,EACXA,GAAK,GAET,OAAOA,EAGX,IAAIA,EAAID,EAAkBhQ,KAAKkQ,IAAIP,IAOnC,GANAxH,GAAS8H,EACTP,GAAQO,EACRN,GAAQM,EACJ9H,EAAQuH,GAAQC,EAAO,IACvBA,GAAQA,GAERA,EAAO,EACP,OAAQG,EAAI3H,EAAQwH,IAAS9Q,IAAM6Q,EAC/BK,EAAM5J,KAAK2J,EAAIG,QAInB,OAAQH,EAAI3H,EAAQwH,IAAS9Q,IAAM6Q,EAC/BK,EAAM5J,KAAK2J,EAAIG,GAGvB,OAAOF,EAKX,SAASI,EAAWhI,EAAOC,GACvB,GAAID,GAASC,EACT,OAAO,EAEX,IAAIgI,EAAWhI,EAAIlJ,EAAIiJ,EAAMjJ,EACzBmR,EAAWlI,EAAMhJ,EAAIiJ,EAAIjJ,EACzBmR,EAAOtQ,KAAKsQ,KAAKF,EAAWC,GAChC,OAAIA,GAAY,EACLD,EAAW,EAAIE,EAAQ,EAAItQ,KAAKuQ,GAAMD,EAE1CA,EAAOtQ,KAAKuQ,GA7MvB9T,EAAWI,EAAO,CACd2T,WAAY,SAAUC,GAClB,OAAOzQ,KAAKkQ,IAAIO,GAAOjB,GAE3BkB,UAAW,SAAUC,GACjB,MAAsB,qBAARA,GAGlBC,YAAa,SAAUD,GACnB,MAAuB,qBAARA,GAAgC,OAARA,GAK3CE,SAAU,SAAUF,GAChB,OAAOA,IAAQG,OAAOH,IAK1BI,IAAK,SAAUJ,EAAKK,GAChB,OAAOF,OAAOG,eAAe/V,KAAKyV,EAAKK,IAK3CjU,SAAU,SAAU4T,GAChB,MAA8C,mBAAvCG,OAAOI,UAAU5R,SAASpE,KAAKyV,IAE1CQ,UAAW,SAAUR,GACjB,MAA8C,oBAAvCG,OAAOI,UAAU5R,SAASpE,KAAKyV,IAE1CS,OAAQ,SAAUT,EAAKtL,GACnB,OAAOyL,OAAOI,UAAU5R,SAASpE,KAAKyV,IAAQ,WAAatL,EAAO,KAKtEvI,SAAU,SAAU6T,GAChB,OAAQU,MAAMC,WAAWX,KAASY,SAASZ,IAK/Ca,QAAS,SAAUb,GACf,GAAY,OAARA,EACA,OAAO,EAEX,GAAIrB,EAAQqB,IAAQ9T,EAAME,SAAS4T,GAC/B,OAAsB,IAAfA,EAAI7R,OAEf,IAAK,IAAIkS,KAAOL,EACZ,GAAI9T,EAAMkU,IAAIJ,EAAKK,GACf,OAAO,EAGf,OAAO,GAEXS,aAAc,SAASC,EAAarG,GAChC,GAAIxO,EAAMgU,SAASxF,GAInB,IAAI,IAAIsG,KAAQtG,EACZqG,EAAYC,GAAQtG,EAAOsG,IASnCC,UAAW,SAAuBnG,EAAMjN,GAEpC,IADA,IAAIqT,EAAQ,GACHhT,EAAI,EAAGA,EAAI4M,IAAQ5M,EACxBgT,EAAMhT,GAAKL,EAEf,OAAOqT,GAEXC,gBAAiB,SAAU7J,GAEvB,IADA,IAAI8J,EAAM,GACDlT,EAAI,EAAGA,EAAIoJ,EAAOnJ,OAAQD,IAAK,CACpC,IAAIxD,EAAI4M,EAAOpJ,GACfkT,EAAI5L,KAAK9K,EAAE6D,EAAI,IAAM7D,EAAE8D,GAE3B,OAAO4S,EAAI1L,KAAK,MAEpB2L,kBAAmB,SAAUC,GACzB,IAAIC,EAAID,EAAEnR,MAAM,KAAMmH,EAAS,GAC/B,GAAIiK,EAAEpT,OAAS,IAAM,EACjB,KAAM,0BAEV,IAAK,IAAID,EAAI,EAAGA,EAAIqT,EAAEpT,OAAQD,GAAK,EAC/BoJ,EAAO9B,KAAK,IAAI7J,EAAQI,MACpByV,SAASD,EAAErT,GAAI,IACfsT,SAASD,EAAErT,EAAI,GAAI,MAG3B,OAAOoJ,GAQXmK,cAAe,SAAUC,EAAOC,GAC5B,OAAOH,SAASnS,KAAKuS,MAAMvS,KAAKwS,SAAWF,GAASD,EAAO,KAK/DI,IAAK,SAAUC,EAAIC,GAEf,GADAA,EAAKD,GACDA,EAAGE,WACH,IAAK,IAAI/T,EAAI,EAAGA,EAAI6T,EAAGE,WAAW9T,OAAQD,IAAK,CAC3C,IAAIgU,EAAOH,EAAGE,WAAW/T,GACzBF,KAAK8T,IAAII,EAAMF,KAO3BG,eAAgB,SAAU3X,GACtB,OAAU,OAANA,GAAsB,IAARA,EAAEgC,EACT,EAEmB,IAAvB6C,KAAKgP,MAAM7T,EAAEqI,EAAGrI,EAAEgC,GAAW6C,KAAKuQ,IAM7CwC,iBAAkB,SAAU5X,GACxB,IAAI6X,EAAKhT,KAAKC,KAAK9E,EAAEoI,EAAIpI,EAAEoI,EAAIpI,EAAEC,EAAID,EAAEC,GACnC6X,EAAKjT,KAAKC,KAAK9E,EAAEqI,EAAIrI,EAAEqI,EAAIrI,EAAEgC,EAAIhC,EAAEgC,GACvC,MAAO,CAAC6V,EAAIC,MAsEpBpW,EAAM+S,KAAO,SAASsD,GAClB,OAAOA,EAASA,EAAS,GAAK,EAAI,EAAI,GAG1CrW,EAAMsW,UAAY,SAAS5S,EAAQ6H,GAC/B,OAAiC,IAA1B+H,EAAW5P,EAAQ6H,GAAapI,KAAKuQ,IAKhD1T,EAAMuW,QAAU,SAASC,EAAKC,EAAUC,GACpC,IAAK,IAAI1U,EAAI,EAAGA,EAAIwU,EAAIvU,OAAQD,IAC5ByU,EAASpY,KAAKqY,EAASF,EAAIxU,GAAIA,EAAGwU,IAI1CxW,EAAM2W,IAAM,SAASH,EAAKI,GACtB,IAAK,IAAI5U,EAAI,EAAGA,EAAIwU,EAAIvU,SAAUD,EAC9B,GAAI4U,EAAUJ,EAAIxU,IACd,OAAOwU,EAAIxU,GAGnB,OAAO,MAGXhC,EAAMyM,OAAS,SAAU+J,EAAKK,GAC1B,IAAIC,EACJ,OAA4C,KAApCA,EAAK9W,EAAM+W,QAAQP,EAAKK,IAC5BL,EAAIrH,OAAO2H,EAAI,GAEnB,OAAON,GAGXxW,EAAMgX,SAAW,SAAUR,EAAK1C,GAC5B,OAAoC,IAA7B9T,EAAM+W,QAAQP,EAAK1C,IAG9B9T,EAAM+W,QAAU,SAASP,EAAKK,GAC1B,OAAOvX,EAAEoB,QAAQmW,EAAML,IAG3BxW,EAAMiX,KAAO,SAAUC,EAAMT,EAAUU,EAAKC,GAGxC,IAFA,IAAIC,EAAUC,UAAUrV,OAAS,EAExBD,EAAI,EAAGA,EAAIkV,EAAKjV,OAAQD,IAAK,CAClC,IAAIL,EAAQuV,EAAKlV,GACZqV,EAKDF,EAAMV,EAASpY,KAAK+Y,EAASD,EAAKxV,EAAOK,EAAGkV,IAJ5CC,EAAMxV,EACN0V,GAAU,GAOlB,IAAKA,EACD,KAAM,8CAGV,OAAOF,GAGXnX,EAAMuX,KAAO,SAAUf,EAAKC,EAAUW,GAClC,IAAII,EAQJ,OAPAxX,EAAM2W,IAAIH,GAAK,SAAU7U,EAAOsN,EAAOiI,GACnC,QAAIT,EAASpY,KAAK+Y,EAASzV,EAAOsN,EAAOiI,KACrCM,EAAS7V,GACF,MAIR6V,GAGXxX,EAAMyX,MAAQ,SAAUjB,EAAKkB,EAAYN,GACrC,OAAmB,IAAfZ,EAAIvU,OACG,KAEPjC,EAAM+T,YAAY2D,GACXlB,EAAI,GAGRxW,EAAMuX,KAAKf,EAAKkB,EAAYN,IAMvCpX,EAAM2X,OAAS,SAAUnB,EAAKvQ,EAASM,GAEnC,OADAiQ,EAAIrH,OAAO5I,EAAU,EAAGN,GACjBuQ,GAGXxW,EAAM4X,IAAM,SAAUpB,EAAKC,EAAUW,GAIjC,IAHA,IACIzV,EADA6V,GAAS,EAGJxV,EAAI,EAAGA,EAAIwU,EAAIvU,OAAQD,IAI5B,GAHAL,EAAQ6U,EAAIxU,GACZwV,EAASA,GAAUf,EAASpY,KAAK+Y,EAASzV,EAAOK,EAAGwU,IAE/CgB,EACD,MAIR,OAAOA,GAGXxX,EAAMoP,MAAQ,SAAUoH,GACpBA,EAAIrH,OAAO,EAAGqH,EAAIvU,SAStBjC,EAAM6X,OAAS,SAAUnR,EAAGC,EAAGmR,GAC3B,GAAI9X,EAAM+T,YAAYrN,GAClB,KAAM,gCAEV,GAAI1G,EAAM+T,YAAYpN,GAClB,KAAM,iCAEV,GAAID,EAAEzE,QAAU0E,EAAE1E,OACd,KAAM,0CAGV,IAAcD,EAAV4V,EAAM,GAEV,IAAK5V,EAAI,EAAGA,EAAI0E,EAAEzE,OAAQD,IACtB4V,EAAItO,KAAK,CAAE,EAAK5C,EAAE1E,GAAI,EAAK2E,EAAE3E,KAgBjC,IAdIhC,EAAM+T,YAAY+D,GAClBF,EAAIG,MAAK,SAAUzZ,EAAG0Z,GAClB,OAAO1Z,EAAE+D,EAAI2V,EAAE3V,KAInBuV,EAAIG,MAAK,SAAUzZ,EAAG0Z,GAClB,OAAOF,EAASxZ,EAAE+D,EAAG2V,EAAE3V,MAI/BrC,EAAMoP,MAAM1I,GACZ1G,EAAMoP,MAAMzI,GAEP3E,EAAI,EAAGA,EAAI4V,EAAI3V,OAAQD,IACxB0E,EAAE4C,KAAKsO,EAAI5V,GAAGK,GACdsE,EAAE2C,KAAKsO,EAAI5V,GAAGM,IAItBtC,EAAMiY,SAAW,SAAUzB,EAAKtD,GAC5BsD,EAAIlN,KAAKlK,MAAMoX,EAAKtD,IAGxB,IAAIgF,EAAS,CACTC,UAAW,SAAUC,GACjB,OAAUjV,KAAKkV,IAAID,EAAMjV,KAAKuQ,IAAM,EAAK,KAS7C4E,EAAS/Y,EAAMI,MAAMwC,OAAO,CAC5BC,KAAM,WACFN,KAAKyW,SAAW,GAChBzW,KAAK0W,OAAS,EACd1W,KAAK2W,KAAO,EACZ3W,KAAK4W,SAAW,GAChB5W,KAAK6W,SAAW,IAChB7W,KAAK8W,SAAW,KAChB9W,KAAK+W,SAAW,GAChB,IAAIC,EAAQhX,KACZA,KAAKiX,WAAab,EAAOC,UACzBrW,KAAKkX,cAAgB,WACjBF,EAAMG,iBAGdC,WAAY,SAAUxS,GAClB5E,KAAKyW,SAASjP,KAAK5C,IAEvByS,WAAY,SAAUC,GAClBtX,KAAK+W,SAASvP,KAAK8P,IAEvBC,cAAe,SAAUD,GACrBtX,KAAK+W,SAAWvZ,EAAEga,KAAKxX,KAAK+W,UAAU,SAAUU,GAC5C,OAAOA,IAAMH,MAGrBI,QAAS,WACL,IAAIV,EAAQhX,KACRA,KAAK+W,UACL7Y,EAAMuW,QAAQzU,KAAK+W,UAAU,SAAUU,GACnC,OAAOA,EAAElb,KAAsB,OAAjBya,EAAMW,OAAkBX,EAAMW,OAASX,OAIjEY,OAAQ,aAERC,OAAQ,SAAU3L,GACdlM,KAAK8X,WAAW9X,KAAK2W,KAAMzK,IAE/B4L,WAAY,SAAU7L,EAAMC,GACxBlM,KAAK0W,OAASrV,KAAK0W,IAAI,EAAG1W,KAAK0N,IAAI,EAAG7C,IACtClM,KAAK2W,KAAOtV,KAAK0W,IAAI,EAAG1W,KAAK0N,IAAI,EAAG9C,IACpCjM,KAAK8W,UAAW,IAAIkB,MAAOC,UACtBjY,KAAKkY,aACNlY,KAAKkY,WAAaxa,OAAOya,YAAYnY,KAAKkX,cAAelX,KAAK4W,YAGtE7F,KAAM,WACE/Q,KAAKkY,aACLxa,OAAO0a,cAAcpY,KAAKkY,YAC1BlY,KAAKkY,WAAa,KAGlBlY,KAAK0X,YAIbW,KAAM,SAAUxL,GACiB,IAAzB7M,KAAKyW,SAAStW,SAGH,OAAX0M,IACA7M,KAAK2X,OAAS9K,GAElB7M,KAAKsY,YACLtY,KAAK8X,WAAW,EAAG,KAEvBS,QAAS,WACLvY,KAAK8X,WAAW,EAAG,IAEvBQ,UAAW,WACP,GAA6B,IAAzBtY,KAAKyW,SAAStW,OAGlB,IAAK,IAAID,EAAI,EAAGA,EAAIF,KAAKyW,SAAStW,OAAQD,IACtCF,KAAKyW,SAASvW,GAAGoY,aAGzBE,UAAW,WAGP,IAFA,IAAI3Y,EAAQG,KAAKiX,WAAWjX,KAAK2W,MAExBzW,EAAI,EAAGA,EAAIF,KAAKyW,SAAStW,OAAQD,IACtCF,KAAKyW,SAASvW,GAAG8D,OAAOnE,IAGhCsX,aAAc,WACV,IAAIsB,GAAM,IAAIT,MAAOC,UACjBS,EAAaD,EAAMzY,KAAK8W,SAC5B9W,KAAK8W,SAAW2B,EAChB,IAAIE,EAAYD,EAAa1Y,KAAK6W,UAAa7W,KAAK2W,KAAO3W,KAAK0W,OAAS,GAAK,GAC1ErV,KAAKkQ,IAAIoH,IAAatX,KAAKkQ,IAAIvR,KAAK2W,KAAO3W,KAAK0W,QAChD1W,KAAK2W,KAAO3W,KAAK0W,OAEjB1W,KAAK2W,MAAQgC,EAGjB,IACI3Y,KAAKwY,YACP,QACExY,KAAK4X,OAAOrb,KAAKyD,MACbA,KAAK0W,QAAU1W,KAAK2W,MACpB3W,KAAK+Q,WAMrBtT,EAAMK,WAAWH,EAAS,CACtB2C,KAAM,SAAU6D,GACZ1G,EAAM6C,KAAK6D,EAASxG,EAAQ4S,KAGhCrS,MAAOA,EACP4S,MAAOA,EACP0F,OAAQA,KAvfhB,CAyfG9Y,OAAOD,MAAM+S,UAEbrU,EAAoB","file":"js/chunk-vendors~23b693bc.fe10ad0f.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(914);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 892:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../../kendo.drawing\");\n\n/***/ }),\n\n/***/ 910:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./math\");\n\n/***/ }),\n\n/***/ 914:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(892), __webpack_require__(910) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t // Imports ================================================================\n\t var kendo = window.kendo,\n\t diagram = kendo.dataviz.diagram,\n\t Class = kendo.Class,\n\t deepExtend = kendo.deepExtend,\n\t Point = diagram.Point,\n\t Rect = diagram.Rect,\n\t Matrix = diagram.Matrix,\n\t Utils = diagram.Utils,\n\t isNumber = Utils.isNumber,\n\t isString = Utils.isString,\n\t MatrixVector = diagram.MatrixVector,\n\n\t g = kendo.geometry,\n\t d = kendo.drawing,\n\n\t defined = d.util.defined,\n\n\t inArray = $.inArray;\n\n\t // Constants ==============================================================\n\t var TRANSPARENT = \"transparent\",\n\t Markers = {\n\t none: \"none\",\n\t arrowStart: \"ArrowStart\",\n\t filledCircle: \"FilledCircle\",\n\t arrowEnd: \"ArrowEnd\"\n\t },\n\t FULL_CIRCLE_ANGLE = 360,\n\t START = \"start\",\n\t END = \"end\",\n\t WIDTH = \"width\",\n\t HEIGHT = \"height\",\n\t X = \"x\",\n\t Y = \"y\";\n\n\t diagram.Markers = Markers;\n\n\t function diffNumericOptions(options, fields) {\n\t var elementOptions = this.options;\n\t var hasChanges = false;\n\t var value, field;\n\t for (var i = 0; i < fields.length; i++) {\n\t field = fields[i];\n\t value = options[field];\n\t if (isNumber(value) && elementOptions[field] !== value) {\n\t elementOptions[field] = value;\n\t hasChanges = true;\n\t }\n\t }\n\n\t return hasChanges;\n\t }\n\n\t var Scale = Class.extend({\n\t init: function (x, y) {\n\t this.x = x;\n\t this.y = y;\n\t },\n\t toMatrix: function () {\n\t return Matrix.scaling(this.x, this.y);\n\t },\n\t toString: function () {\n\t return kendo.format(\"scale({0},{1})\", this.x, this.y);\n\t },\n\t invert: function() {\n\t return new Scale(1/this.x, 1/this.y);\n\t }\n\t });\n\n\t var Translation = Class.extend({\n\t init: function (x, y) {\n\t this.x = x;\n\t this.y = y;\n\t },\n\t toMatrixVector: function () {\n\t return new MatrixVector(0, 0, 0, 0, this.x, this.y);\n\t },\n\t toMatrix: function () {\n\t return Matrix.translation(this.x, this.y);\n\t },\n\t toString: function () {\n\t return kendo.format(\"translate({0},{1})\", this.x, this.y);\n\t },\n\t plus: function (delta) {\n\t this.x += delta.x;\n\t this.y += delta.y;\n\t },\n\t times: function (factor) {\n\t this.x *= factor;\n\t this.y *= factor;\n\t },\n\t length: function () {\n\t return Math.sqrt(this.x * this.x + this.y * this.y);\n\t },\n\t normalize: function () {\n\t if (this.Length === 0) {\n\t return;\n\t }\n\t this.times(1 / this.length());\n\t },\n\t invert: function() {\n\t return new Translation(-this.x, -this.y);\n\t }\n\t });\n\n\t var Rotation = Class.extend({\n\t init: function (angle, x, y) {\n\t this.x = x || 0;\n\t this.y = y || 0;\n\t this.angle = angle;\n\t },\n\t toString: function () {\n\t if (this.x && this.y) {\n\t return kendo.format(\"rotate({0},{1},{2})\", this.angle, this.x, this.y);\n\t } else {\n\t return kendo.format(\"rotate({0})\", this.angle);\n\t }\n\t },\n\t toMatrix: function () {\n\t return Matrix.rotation(this.angle, this.x, this.y); // T*R*T^-1\n\t },\n\t center: function () {\n\t return new Point(this.x, this.y);\n\t },\n\t invert: function() {\n\t return new Rotation(FULL_CIRCLE_ANGLE - this.angle, this.x, this.y);\n\t }\n\t });\n\n\t Rotation.ZERO = new Rotation(0);\n\n\t Rotation.create = function (rotation) {\n\t return new Rotation(rotation.angle, rotation.x, rotation.y);\n\t };\n\n\t Rotation.parse = function (str) {\n\t var values = str.slice(1, str.length - 1).split(\",\"),\n\t angle = values[0],\n\t x = values[1],\n\t y = values[2];\n\t var rotation = new Rotation(angle, x, y);\n\t return rotation;\n\t };\n\n\t var CompositeTransform = Class.extend({\n\t init: function (x, y, scaleX, scaleY, angle, center) {\n\t this.translate = new Translation(x, y);\n\t if (scaleX !== undefined && scaleY !== undefined) {\n\t this.scale = new Scale(scaleX, scaleY);\n\t }\n\t if (angle !== undefined) {\n\t this.rotate = center ? new Rotation(angle, center.x, center.y) : new Rotation(angle);\n\t }\n\t },\n\t toString: function () {\n\t var toString = function (transform) {\n\t return transform ? transform.toString() : \"\";\n\t };\n\n\t return toString(this.translate) +\n\t toString(this.rotate) +\n\t toString(this.scale);\n\t },\n\n\t render: function (visual) {\n\t visual._transform = this;\n\t visual._renderTransform();\n\t },\n\n\t toMatrix: function () {\n\t var m = Matrix.unit();\n\n\t if (this.translate) {\n\t m = m.times(this.translate.toMatrix());\n\t }\n\t if (this.rotate) {\n\t m = m.times(this.rotate.toMatrix());\n\t }\n\t if (this.scale) {\n\t m = m.times(this.scale.toMatrix());\n\t }\n\t return m;\n\t },\n\t invert: function() {\n\t var rotate = this.rotate ? this.rotate.invert() : undefined,\n\t rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(),\n\t scale = this.scale ? this.scale.invert() : undefined,\n\t scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n\n\t var translatePoint = new Point(-this.translate.x, -this.translate.y);\n\t translatePoint = rotateMatrix.times(scaleMatrix).apply(translatePoint);\n\t var translate = new Translation(translatePoint.x, translatePoint.y);\n\n\t var transform = new CompositeTransform();\n\t transform.translate = translate;\n\t transform.rotate = rotate;\n\t transform.scale = scale;\n\n\t return transform;\n\t }\n\t });\n\n\t var AutoSizeableMixin = {\n\t _setScale: function() {\n\t var options = this.options;\n\t var originWidth = this._originWidth;\n\t var originHeight = this._originHeight;\n\t var scaleX = options.width / originWidth;\n\t var scaleY = options.height / originHeight;\n\n\t if (!isNumber(scaleX)) {\n\t scaleX = 1;\n\t }\n\t if (!isNumber(scaleY)) {\n\t scaleY = 1;\n\t }\n\n\t this._transform.scale = new Scale(scaleX, scaleY);\n\t },\n\n\t _setTranslate: function() {\n\t var options = this.options;\n\t var x = options.x || 0;\n\t var y = options.y || 0;\n\t this._transform.translate = new Translation(x, y);\n\t },\n\n\t _initSize: function() {\n\t var options = this.options;\n\t var transform = false;\n\t if (options.autoSize !== false && (defined(options.width) || defined(options.height))) {\n\t this._measure(true);\n\t this._setScale();\n\t transform = true;\n\t }\n\n\t if (defined(options.x) || defined(options.y)) {\n\t this._setTranslate();\n\t transform = true;\n\t }\n\n\t if (transform) {\n\t this._renderTransform();\n\t }\n\t },\n\n\t _updateSize: function(options) {\n\t var update = false;\n\n\t if (this.options.autoSize !== false && this._diffNumericOptions(options, [WIDTH, HEIGHT])) {\n\t update = true;\n\t this._measure(true);\n\t this._setScale();\n\t }\n\n\t if (this._diffNumericOptions(options, [X, Y])) {\n\t update = true;\n\t this._setTranslate();\n\t }\n\n\t if (update) {\n\t this._renderTransform();\n\t }\n\n\t return update;\n\t }\n\t };\n\n\t var Element = Class.extend({\n\t init: function (options) {\n\t var element = this;\n\t element.options = deepExtend({}, element.options, options);\n\t element.id = element.options.id;\n\t element._originSize = Rect.empty();\n\t element._transform = new CompositeTransform();\n\t },\n\n\t visible: function (value) {\n\t return this.drawingContainer().visible(value);\n\t },\n\n\t redraw: function (options) {\n\t if (options && options.id) {\n\t this.id = options.id;\n\t }\n\t },\n\n\t position: function (x, y) {\n\t var options = this.options;\n\t if (!defined(x)) {\n\t return new Point(options.x, options.y);\n\t }\n\n\t if (defined(y)) {\n\t options.x = x;\n\t options.y = y;\n\t } else if (x instanceof Point) {\n\t options.x = x.x;\n\t options.y = x.y;\n\t }\n\n\t this._transform.translate = new Translation(options.x, options.y);\n\t this._renderTransform();\n\t },\n\n\t rotate: function (angle, center) {\n\t if (defined(angle)) {\n\t this._transform.rotate = new Rotation(angle, center.x, center.y);\n\t this._renderTransform();\n\t }\n\t return this._transform.rotate || Rotation.ZERO;\n\t },\n\n\t drawingContainer: function() {\n\t return this.drawingElement;\n\t },\n\n\t _renderTransform: function () {\n\t var matrix = this._transform.toMatrix();\n\t this.drawingContainer().transform(new g.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f));\n\t },\n\n\t _hover: function () {},\n\n\t _diffNumericOptions: diffNumericOptions,\n\n\t _measure: function (force) {\n\t var rect;\n\t if (!this._measured || force) {\n\t var box = this._boundingBox() || new g.Rect();\n\t var startPoint = box.topLeft();\n\t rect = new Rect(startPoint.x, startPoint.y, box.width(), box.height());\n\t this._originSize = rect;\n\t this._originWidth = rect.width;\n\t this._originHeight = rect.height;\n\t this._measured = true;\n\t } else {\n\t rect = this._originSize;\n\t }\n\t return rect;\n\t },\n\n\t _boundingBox: function() {\n\t return this.drawingElement.rawBBox();\n\t }\n\t });\n\n\t var VisualBase = Element.extend({\n\t init: function(options) {\n\t Element.fn.init.call(this, options);\n\n\t options = this.options;\n\t options.fill = normalizeDrawingOptions(options.fill);\n\t options.stroke = normalizeDrawingOptions(options.stroke);\n\t },\n\n\t options: {\n\t stroke: {\n\t color: \"gray\",\n\t width: 1\n\t },\n\t fill: {\n\t color: TRANSPARENT\n\t }\n\t },\n\n\t fill: function(color, opacity) {\n\t this._fill({\n\t color: getColor(color),\n\t opacity: opacity\n\t });\n\t },\n\n\t stroke: function(color, width, opacity) {\n\t this._stroke({\n\t color: getColor(color),\n\t width: width,\n\t opacity: opacity\n\t });\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t var stroke = options.stroke;\n\t var fill = options.fill;\n\t if (stroke) {\n\t this._stroke(normalizeDrawingOptions(stroke));\n\t }\n\t if (fill) {\n\t this._fill(normalizeDrawingOptions(fill));\n\t }\n\n\t Element.fn.redraw.call(this, options);\n\t }\n\t },\n\n\t _hover: function (show) {\n\t var drawingElement = this.drawingElement;\n\t var options = this.options;\n\t var hover = options.hover;\n\n\t if (hover && hover.fill) {\n\t var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n\t drawingElement.fill(fill.color, fill.opacity);\n\t }\n\t },\n\n\t _stroke: function(strokeOptions) {\n\t var options = this.options;\n\t deepExtend(options, {\n\t stroke: strokeOptions\n\t });\n\n\t strokeOptions = options.stroke;\n\n\t var stroke = null;\n\t if (strokeOptions.width > 0) {\n\t stroke = {\n\t color: strokeOptions.color,\n\t width: strokeOptions.width,\n\t opacity: strokeOptions.opacity,\n\t dashType: strokeOptions.dashType\n\t };\n\t }\n\n\t this.drawingElement.options.set(\"stroke\", stroke);\n\t },\n\n\t _fill: function(fillOptions) {\n\t var options = this.options;\n\t deepExtend(options, {\n\t fill: fillOptions || {}\n\t });\n\t var fill = options.fill;\n\n\t if (fill.gradient) {\n\t var gradient = fill.gradient;\n\t var GradientClass = (gradient.type === \"radial\" ? d.RadialGradient : d.LinearGradient);\n\t this.drawingElement.fill(new GradientClass(gradient));\n\t } else {\n\t this.drawingElement.fill(fill.color, fill.opacity);\n\t }\n\t }\n\t });\n\n\t var TextBlock = VisualBase.extend({\n\t init: function (options) {\n\t options = this._textColor(options);\n\t VisualBase.fn.init.call(this, options);\n\n\t this._font();\n\t this._initText();\n\t this._initSize();\n\t },\n\n\t options: {\n\t fontSize: 15,\n\t fontFamily: \"sans-serif\",\n\t stroke: {\n\t width: 0\n\t },\n\t fill: {\n\t color: \"black\"\n\t },\n\t autoSize: true\n\t },\n\n\t _initText: function() {\n\t var options = this.options;\n\n\t this.drawingElement = new d.Text(defined(options.text) ? options.text : \"\", new g.Point(), {\n\t font: options.font\n\t });\n\n\t this._fill();\n\t this._stroke();\n\t },\n\n\t _textColor: function(options) {\n\t if (options && options.color) {\n\t options = deepExtend({}, options, {\n\t fill: {\n\t color: options.color\n\t }\n\t });\n\t }\n\t return options;\n\t },\n\n\t _font: function() {\n\t var options = this.options;\n\t if (options.fontFamily && defined(options.fontSize)) {\n\t var fontOptions = [];\n\n\t if (options.fontStyle) {\n\t fontOptions.push(options.fontStyle);\n\t }\n\n\t if (options.fontWeight) {\n\t fontOptions.push(options.fontWeight);\n\t }\n\n\t fontOptions.push(options.fontSize + (isNumber(options.fontSize) ? \"px\" : \"\"));\n\t fontOptions.push(options.fontFamily);\n\n\t options.font = fontOptions.join(\" \");\n\t } else {\n\t delete options.font;\n\t }\n\t },\n\n\t content: function (text) {\n\t return this.drawingElement.content(text);\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t var sizeChanged = false;\n\t var textOptions = this.options;\n\n\t options = this._textColor(options);\n\n\t VisualBase.fn.redraw.call(this, options);\n\n\t if (options.fontFamily || defined(options.fontSize) || options.fontStyle || options.fontWeight) {\n\t deepExtend(textOptions, {\n\t fontFamily: options.fontFamily,\n\t fontSize: options.fontSize,\n\t fontStyle: options.fontStyle,\n\t fontWeight: options.fontWeight\n\t });\n\t this._font();\n\t this.drawingElement.options.set(\"font\", textOptions.font);\n\t sizeChanged = true;\n\t }\n\n\t if (options.text) {\n\t this.content(options.text);\n\t sizeChanged = true;\n\t }\n\n\t if (!this._updateSize(options) && sizeChanged) {\n\t this._initSize();\n\t }\n\t }\n\t }\n\t });\n\n\t deepExtend(TextBlock.fn, AutoSizeableMixin);\n\n\t var Rectangle = VisualBase.extend({\n\t init: function (options) {\n\t VisualBase.fn.init.call(this, options);\n\t this._initPath();\n\t this._setPosition();\n\t },\n\n\t _setPosition: function() {\n\t var options = this.options;\n\t var x = options.x;\n\t var y = options.y;\n\t if (defined(x) || defined(y)) {\n\t this.position(x || 0, y || 0);\n\t }\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t VisualBase.fn.redraw.call(this, options);\n\t if (this._diffNumericOptions(options, [WIDTH, HEIGHT])) {\n\t this._drawPath();\n\t }\n\t if (this._diffNumericOptions(options, [X, Y])) {\n\t this._setPosition();\n\t }\n\t }\n\t },\n\n\t _initPath: function() {\n\t var options = this.options;\n\t this.drawingElement = new d.Path({\n\t stroke: options.stroke,\n\t closed: true\n\t });\n\n\t this._fill();\n\t this._drawPath();\n\t },\n\n\t _drawPath: function() {\n\t var drawingElement = this.drawingElement;\n\t var sizeOptions = sizeOptionsOrDefault(this.options);\n\t var width = sizeOptions.width;\n\t var height = sizeOptions.height;\n\n\t drawingElement.segments.elements([\n\t createSegment(0, 0),\n\t createSegment(width, 0),\n\t createSegment(width, height),\n\t createSegment(0, height)\n\t ]);\n\t }\n\t });\n\n\t var MarkerBase = VisualBase.extend({\n\t init: function(options) {\n\t VisualBase.fn.init.call(this, options);\n\t var anchor = this.options.anchor;\n\t this.anchor = new g.Point(anchor.x, anchor.y);\n\t this.createElement();\n\t },\n\n\t options: {\n\t stroke: {\n\t color: TRANSPARENT,\n\t width: 0\n\t },\n\t fill: {\n\t color: \"black\"\n\t }\n\t },\n\n\t _transformToPath: function(point, path) {\n\t var transform = path.transform();\n\t if (point && transform) {\n\t point = point.transformCopy(transform);\n\t }\n\t return point;\n\t },\n\n\t redraw: function(options) {\n\t if (options) {\n\t if (options.position) {\n\t this.options.position = options.position;\n\t }\n\n\t VisualBase.fn.redraw.call(this, options);\n\t }\n\t }\n\t });\n\n\t var CircleMarker = MarkerBase.extend({\n\t options: {\n\t radius: 4,\n\t anchor: {\n\t x: 0,\n\t y: 0\n\t }\n\t },\n\n\t createElement: function() {\n\t var options = this.options;\n\t this.drawingElement = new d.Circle(new g.Circle(this.anchor, options.radius), {\n\t fill: options.fill,\n\t stroke: options.stroke\n\t });\n\t },\n\n\t positionMarker: function(path) {\n\t var options = this.options;\n\t var position = options.position;\n\t var segments = path.segments;\n\t var targetSegment;\n\t var point;\n\n\t if (position == START) {\n\t targetSegment = segments[0];\n\t } else {\n\t targetSegment = segments[segments.length - 1];\n\t }\n\t if (targetSegment) {\n\t point = this._transformToPath(targetSegment.anchor(), path);\n\t this.drawingElement.transform(g.transform().translate(point.x, point.y));\n\t }\n\t }\n\t });\n\n\t var ArrowMarker = MarkerBase.extend({\n\t options: {\n\t path: \"M 0 0 L 10 5 L 0 10 L 3 5 z\" ,\n\t anchor: {\n\t x: 10,\n\t y: 5\n\t }\n\t },\n\n\t createElement: function() {\n\t var options = this.options;\n\t this.drawingElement = d.Path.parse(options.path, {\n\t fill: options.fill,\n\t stroke: options.stroke\n\t });\n\t },\n\n\t positionMarker: function(path) {\n\t var points = this._linePoints(path);\n\t var start = points.start;\n\t var end = points.end;\n\t var transform = g.transform();\n\t if (start) {\n\t transform.rotate(lineAngle(start, end), end);\n\t }\n\n\t if (end) {\n\t var anchor = this.anchor;\n\t var translate = end.clone().translate(-anchor.x, -anchor.y);\n\t transform.translate(translate.x, translate.y);\n\t }\n\t this.drawingElement.transform(transform);\n\t },\n\n\t _linePoints: function(path) {\n\t var options = this.options;\n\t var segments = path.segments;\n\t var startPoint, endPoint, targetSegment;\n\t if (options.position == START) {\n\t targetSegment = segments[0];\n\t if (targetSegment) {\n\t endPoint = targetSegment.anchor();\n\t startPoint = targetSegment.controlOut();\n\t var nextSegment = segments[1];\n\t if (!startPoint && nextSegment) {\n\t startPoint = nextSegment.anchor();\n\t }\n\t }\n\t } else {\n\t targetSegment = segments[segments.length - 1];\n\t if (targetSegment) {\n\t endPoint = targetSegment.anchor();\n\t startPoint = targetSegment.controlIn();\n\t var prevSegment = segments[segments.length - 2];\n\t if (!startPoint && prevSegment) {\n\t startPoint = prevSegment.anchor();\n\t }\n\t }\n\t }\n\t if (endPoint) {\n\t return {\n\t start: this._transformToPath(startPoint, path),\n\t end: this._transformToPath(endPoint, path)\n\t };\n\t }\n\t }\n\t });\n\n\t var MarkerPathMixin = {\n\t _getPath: function(position) {\n\t var path = this.drawingElement;\n\t if (path instanceof d.MultiPath) {\n\t if (position == START) {\n\t path = path.paths[0];\n\t } else {\n\t path = path.paths[path.paths.length - 1];\n\t }\n\t }\n\t if (path && path.segments.length) {\n\t return path;\n\t }\n\t },\n\n\t _normalizeMarkerOptions: function(options) {\n\t var startCap = options.startCap;\n\t var endCap = options.endCap;\n\n\t if (isString(startCap)) {\n\t options.startCap = {\n\t type: startCap\n\t };\n\t }\n\n\t if (isString(endCap)) {\n\t options.endCap = {\n\t type: endCap\n\t };\n\t }\n\t },\n\n\t _removeMarker: function(position) {\n\t var marker = this._markers[position];\n\t if (marker) {\n\t this.drawingContainer().remove(marker.drawingElement);\n\t delete this._markers[position];\n\t }\n\t },\n\n\t _createMarkers: function() {\n\t var options = this.options;\n\t this._normalizeMarkerOptions(options);\n\n\t this._markers = {};\n\t this._markers[START] = this._createMarker(options.startCap, START);\n\t this._markers[END] = this._createMarker(options.endCap, END);\n\t },\n\n\t _createMarker: function(options, position) {\n\t var type = (options || {}).type;\n\t var path = this._getPath(position);\n\t var markerType, marker;\n\t if (!path) {\n\t this._removeMarker(position);\n\t return;\n\t }\n\n\t if (type == Markers.filledCircle) {\n\t markerType = CircleMarker;\n\t } else if (type == Markers.arrowStart || type == Markers.arrowEnd){\n\t markerType = ArrowMarker;\n\t } else {\n\t this._removeMarker(position);\n\t }\n\t if (markerType) {\n\t marker = new markerType(deepExtend({}, options, {\n\t position: position\n\t }));\n\t marker.positionMarker(path);\n\t this.drawingContainer().append(marker.drawingElement);\n\n\t return marker;\n\t }\n\t },\n\n\t _positionMarker : function(position) {\n\t var marker = this._markers[position];\n\n\t if (marker) {\n\t var path = this._getPath(position);\n\t if (path) {\n\t marker.positionMarker(path);\n\t } else {\n\t this._removeMarker(position);\n\t }\n\t }\n\t },\n\n\t _capMap: {\n\t start: \"startCap\",\n\t end: \"endCap\"\n\t },\n\n\t _redrawMarker: function(pathChange, position, options) {\n\t this._normalizeMarkerOptions(options);\n\n\t var pathOptions = this.options;\n\t var cap = this._capMap[position];\n\t var pathCapType = (pathOptions[cap] || {}).type;\n\t var optionsCap = options[cap];\n\t var created = false;\n\t if (optionsCap) {\n\t pathOptions[cap] = deepExtend({}, pathOptions[cap], optionsCap);\n\t if (optionsCap.type && pathCapType != optionsCap.type) {\n\t this._removeMarker(position);\n\t this._markers[position] = this._createMarker(pathOptions[cap], position);\n\t created = true;\n\t } else if (this._markers[position]) {\n\t this._markers[position].redraw(optionsCap);\n\t }\n\t } else if (pathChange && !this._markers[position] && pathOptions[cap]) {\n\t this._markers[position] = this._createMarker(pathOptions[cap], position);\n\t created = true;\n\t }\n\t return created;\n\t },\n\n\t _redrawMarkers: function (pathChange, options) {\n\t if (!this._redrawMarker(pathChange, START, options) && pathChange) {\n\t this._positionMarker(START);\n\t }\n\t if (!this._redrawMarker(pathChange, END, options) && pathChange) {\n\t this._positionMarker(END);\n\t }\n\t }\n\t };\n\n\t var Path = VisualBase.extend({\n\t init: function (options) {\n\t VisualBase.fn.init.call(this, options);\n\t this.container = new d.Group();\n\t this._createElements();\n\t this._initSize();\n\t },\n\n\t options: {\n\t autoSize: true\n\t },\n\n\t drawingContainer: function() {\n\t return this.container;\n\t },\n\n\t data: function (value) {\n\t var options = this.options;\n\t if (value) {\n\t if (options.data != value) {\n\t options.data = value;\n\t this._setData(value);\n\t this._initSize();\n\t this._redrawMarkers(true, {});\n\t }\n\t } else {\n\t return options.data;\n\t }\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t VisualBase.fn.redraw.call(this, options);\n\n\t var pathOptions = this.options;\n\t var data = options.data;\n\n\t if (defined(data) && pathOptions.data != data) {\n\t pathOptions.data = data;\n\t this._setData(data);\n\t if (!this._updateSize(options)) {\n\t this._initSize();\n\t }\n\t this._redrawMarkers(true, options);\n\t } else {\n\t this._updateSize(options);\n\t this._redrawMarkers(false, options);\n\t }\n\t }\n\t },\n\n\t _createElements: function() {\n\t var options = this.options;\n\n\t this.drawingElement = d.Path.parse(options.data || \"\", {\n\t stroke: options.stroke\n\t });\n\n\t this._fill();\n\t this.container.append(this.drawingElement);\n\t this._createMarkers();\n\t },\n\n\t _setData: function(data) {\n\t var drawingElement = this.drawingElement;\n\t var multipath = d.Path.parse(data || \"\");\n\t var paths = multipath.paths.slice(0);\n\t multipath.paths.elements([]);\n\t drawingElement.paths.elements(paths);\n\t }\n\t });\n\n\t deepExtend(Path.fn, AutoSizeableMixin);\n\t deepExtend(Path.fn, MarkerPathMixin);\n\n\t var Line = VisualBase.extend({\n\t init: function (options) {\n\t VisualBase.fn.init.call(this, options);\n\t this.container = new d.Group();\n\t this._initPath();\n\t this._createMarkers();\n\t },\n\n\t drawingContainer: function() {\n\t return this.container;\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t options = options || {};\n\t var from = options.from;\n\t var to = options.to;\n\t if (from) {\n\t this.options.from = from;\n\t }\n\n\t if (to) {\n\t this.options.to = to;\n\t }\n\n\t if (from || to) {\n\t this._drawPath();\n\t this._redrawMarkers(true, options);\n\t } else {\n\t this._redrawMarkers(false, options);\n\t }\n\n\t VisualBase.fn.redraw.call(this, options);\n\t }\n\t },\n\n\t _initPath: function() {\n\t var options = this.options;\n\t var drawingElement = this.drawingElement = new d.Path({\n\t stroke: options.stroke\n\t });\n\n\t this._fill();\n\t this._drawPath();\n\t this.container.append(drawingElement);\n\t },\n\n\t _drawPath: function() {\n\t var options = this.options;\n\t var drawingElement = this.drawingElement;\n\t var from = options.from || new Point();\n\t var to = options.to || new Point();\n\n\t drawingElement.segments.elements([\n\t createSegment(from.x, from.y),\n\t createSegment(to.x, to.y)\n\t ]);\n\t }\n\t });\n\n\t deepExtend(Line.fn, MarkerPathMixin);\n\n\t var Polyline = VisualBase.extend({\n\t init: function (options) {\n\t VisualBase.fn.init.call(this, options);\n\t this.container = new d.Group();\n\t this._initPath();\n\t this._createMarkers();\n\t },\n\n\t drawingContainer: function() {\n\t return this.container;\n\t },\n\n\t points: function (points) {\n\t var options = this.options;\n\t if (points) {\n\t options.points = points;\n\t this._updatePath();\n\t } else {\n\t return options.points;\n\t }\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t var points = options.points;\n\t VisualBase.fn.redraw.call(this, options);\n\n\t if (points && this._pointsDiffer(points)) {\n\t this.points(points);\n\t this._redrawMarkers(true, options);\n\t } else {\n\t this._redrawMarkers(false, options);\n\t }\n\t }\n\t },\n\n\t _initPath: function() {\n\t var options = this.options;\n\t this.drawingElement = new d.Path({\n\t stroke: options.stroke\n\t });\n\n\t this._fill();\n\t this.container.append(this.drawingElement);\n\n\t if (options.points) {\n\t this._updatePath();\n\t }\n\t },\n\n\t _pointsDiffer: function(points) {\n\t var currentPoints = this.options.points;\n\t var differ = currentPoints.length !== points.length;\n\t if (!differ) {\n\t for (var i = 0; i < points.length; i++) {\n\t if (currentPoints[i].x !== points[i].x || currentPoints[i].y !== points[i].y) {\n\t differ = true;\n\t break;\n\t }\n\t }\n\t }\n\n\t return differ;\n\t },\n\n\t _updatePath: function() {\n\t var drawingElement = this.drawingElement;\n\t var options = this.options;\n\t var points = options.points;\n\t var segments = [];\n\t var point;\n\t for (var i = 0; i < points.length; i++) {\n\t point = points[i];\n\t segments.push(createSegment(point.x, point.y));\n\t }\n\n\t drawingElement.segments.elements(segments);\n\t },\n\n\t options: {\n\t points: []\n\t }\n\t });\n\n\t deepExtend(Polyline.fn, MarkerPathMixin);\n\n\t var Image = Element.extend({\n\t init: function (options) {\n\t Element.fn.init.call(this, options);\n\n\t this._initImage();\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t if (options.source) {\n\t this.drawingElement.src(options.source);\n\t }\n\n\t if (this._diffNumericOptions(options, [WIDTH, HEIGHT, X, Y])) {\n\t this.drawingElement.rect(this._rect());\n\t }\n\n\t Element.fn.redraw.call(this, options);\n\t }\n\t },\n\n\t _initImage: function() {\n\t var options = this.options;\n\t var rect = this._rect();\n\n\t this.drawingElement = new d.Image(options.source, rect, {});\n\t },\n\n\t _rect: function() {\n\t var sizeOptions = sizeOptionsOrDefault(this.options);\n\t var origin = new g.Point(sizeOptions.x, sizeOptions.y);\n\t var size = new g.Size(sizeOptions.width, sizeOptions.height);\n\n\t return new g.Rect(origin, size);\n\t }\n\t });\n\n\t var Group = Element.extend({\n\t init: function (options) {\n\t this.children = [];\n\t Element.fn.init.call(this, options);\n\t this.drawingElement = new d.Group();\n\t this._initSize();\n\t },\n\n\t options: {\n\t autoSize: false\n\t },\n\n\t append: function (visual) {\n\t this.drawingElement.append(visual.drawingContainer());\n\t this.children.push(visual);\n\t this._childrenChange = true;\n\t },\n\n\t remove: function (visual) {\n\t if (this._remove(visual)) {\n\t this._childrenChange = true;\n\t }\n\t },\n\n\t _remove: function(visual) {\n\t var index = inArray(visual, this.children);\n\t if (index >= 0) {\n\t this.drawingElement.removeAt(index);\n\t this.children.splice(index, 1);\n\t return true;\n\t }\n\t },\n\n\t clear: function () {\n\t this.drawingElement.clear();\n\t this.children = [];\n\t this._childrenChange = true;\n\t },\n\n\t toFront: function (visuals) {\n\t var visual;\n\n\t for (var i = 0; i < visuals.length; i++) {\n\t visual = visuals[i];\n\t if (this._remove(visual)) {\n\t this.append(visual);\n\t }\n\t }\n\t },\n\t //TO DO: add drawing group support for moving and inserting children\n\t toBack: function (visuals) {\n\t this._reorderChildren(visuals, 0);\n\t },\n\n\t toIndex: function (visuals, indices) {\n\t this._reorderChildren(visuals, indices);\n\t },\n\n\t _reorderChildren: function(visuals, indices) {\n\t var group = this.drawingElement;\n\t var drawingChildren = group.children.slice(0);\n\t var children = this.children;\n\t var fixedPosition = isNumber(indices);\n\t var i, index, toIndex, drawingElement, visual;\n\n\t for (i = 0; i < visuals.length; i++) {\n\t visual = visuals[i];\n\t drawingElement = visual.drawingContainer();\n\n\t index = inArray(visual, children);\n\t if (index >= 0) {\n\t drawingChildren.splice(index, 1);\n\t children.splice(index, 1);\n\n\t toIndex = fixedPosition ? indices : indices[i];\n\n\t drawingChildren.splice(toIndex, 0, drawingElement);\n\t children.splice(toIndex, 0, visual);\n\t }\n\t }\n\t group.clear();\n\t group.append.apply(group, drawingChildren);\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t if (this._childrenChange) {\n\t this._childrenChange = false;\n\t if (!this._updateSize(options)) {\n\t this._initSize();\n\t }\n\t } else {\n\t this._updateSize(options);\n\t }\n\n\t Element.fn.redraw.call(this, options);\n\t }\n\t },\n\n\t _boundingBox: function() {\n\t var children = this.children;\n\t var boundingBox;\n\t var visual, childBoundingBox;\n\t for (var i = 0; i < children.length; i++) {\n\t visual = children[i];\n\t if (visual.visible() && visual._includeInBBox !== false) {\n\t childBoundingBox = visual.drawingContainer().clippedBBox(null);\n\t if (childBoundingBox) {\n\t if (boundingBox) {\n\t boundingBox = g.Rect.union(boundingBox, childBoundingBox);\n\t } else {\n\t boundingBox = childBoundingBox;\n\t }\n\t }\n\t }\n\t }\n\n\t return boundingBox;\n\t }\n\t });\n\n\t deepExtend(Group.fn, AutoSizeableMixin);\n\n\t var Layout = Group.extend({\n\t init: function (rect, options) {\n\t this.children = [];\n\t Element.fn.init.call(this, options);\n\t this.drawingElement = new d.Layout(toDrawingRect(rect), options);\n\t this._initSize();\n\t },\n\n\t rect: function(rect) {\n\t if (rect) {\n\t this.drawingElement.rect(toDrawingRect(rect));\n\t } else {\n\t var drawingRect = this.drawingElement.rect();\n\t if (drawingRect) {\n\t return new Rect(drawingRect.origin.x, drawingRect.origin.y, drawingRect.size.width, drawingRect.size.height);\n\t }\n\t }\n\t },\n\n\t reflow: function() {\n\t this.drawingElement.reflow();\n\t },\n\n\t redraw: function (options) {\n\t kendo.deepExtend(this.drawingElement.options, options);\n\t Group.fn.redraw.call(this, options);\n\t }\n\t });\n\n\t var Circle = VisualBase.extend({\n\t init: function (options) {\n\t VisualBase.fn.init.call(this, options);\n\t this._initCircle();\n\t this._initSize();\n\t },\n\n\t redraw: function (options) {\n\t if (options) {\n\t var circleOptions = this.options;\n\n\t if (options.center) {\n\t deepExtend(circleOptions, {\n\t center: options.center\n\t });\n\t this._center.move(circleOptions.center.x, circleOptions.center.y);\n\t }\n\n\t if (this._diffNumericOptions(options, [\"radius\"])) {\n\t this._circle.setRadius(circleOptions.radius);\n\t }\n\n\t this._updateSize(options);\n\n\t VisualBase.fn.redraw.call(this, options);\n\t }\n\t },\n\n\t _initCircle: function() {\n\t var options = this.options;\n\t var width = options.width;\n\t var height = options.height;\n\t var radius = options.radius;\n\t if (!defined(radius)) {\n\t if (!defined(width)) {\n\t width = height;\n\t }\n\t if (!defined(height)) {\n\t height = width;\n\t }\n\t options.radius = radius = Math.min(width, height) / 2;\n\t }\n\n\t var center = options.center || {x: radius, y: radius};\n\t this._center = new g.Point(center.x, center.y);\n\t this._circle = new g.Circle(this._center, radius);\n\t this.drawingElement = new d.Circle(this._circle, {\n\t stroke: options.stroke\n\t });\n\n\t this._fill();\n\t }\n\t });\n\t deepExtend(Circle.fn, AutoSizeableMixin);\n\n\t var Canvas = Class.extend({\n\t init: function (element, options) {\n\t options = options || {};\n\t this.element = element;\n\t this.surface = d.Surface.create(element, options);\n\t if (kendo.isFunction(this.surface.translate)) {\n\t this.translate = this._translate;\n\t }\n\n\t this.drawingElement = new d.Group();\n\t this._viewBox = new Rect(0, 0, options.width, options.height);\n\t this.size(this._viewBox);\n\t },\n\n\t bounds: function () {\n\t var box = this.drawingElement.clippedBBox();\n\t return new Rect(0, 0, box.width(), box.height());\n\t },\n\n\t size: function (size) {\n\t var viewBox = this._viewBox;\n\t if (defined(size)) {\n\t viewBox.width = size.width;\n\t viewBox.height = size.height;\n\t this.surface.setSize(size);\n\t }\n\t return {\n\t width: viewBox.width,\n\t height: viewBox.height\n\t };\n\t },\n\n\t _translate: function (x, y) {\n\t var viewBox = this._viewBox;\n\t if (defined(x) && defined(y)) {\n\t viewBox.x = x;\n\t viewBox.y = y;\n\t this.surface.translate({x: x, y: y});\n\t }\n\t return {\n\t x: viewBox.x,\n\t y: viewBox.y\n\t };\n\t },\n\n\t draw: function() {\n\t this.surface.draw(this.drawingElement);\n\t },\n\n\t append: function (visual) {\n\t this.drawingElement.append(visual.drawingContainer());\n\t return this;\n\t },\n\n\t remove: function (visual) {\n\t this.drawingElement.remove(visual.drawingContainer());\n\t },\n\n\t insertBefore: function () {\n\n\t },\n\n\t clear: function () {\n\t this.drawingElement.clear();\n\t },\n\n\t destroy: function(clearHtml) {\n\t this.surface.destroy();\n\t if(clearHtml) {\n\t $(this.element).remove();\n\t }\n\t }\n\t });\n\n\t // Helper functions ===========================================\n\n\t function sizeOptionsOrDefault(options) {\n\t return {\n\t x: options.x || 0,\n\t y: options.y || 0,\n\t width: options.width || 0,\n\t height: options.height || 0\n\t };\n\t }\n\n\t function normalizeDrawingOptions(options) {\n\t if (options) {\n\t var drawingOptions = options;\n\n\t if (isString(drawingOptions)) {\n\t drawingOptions = {\n\t color: drawingOptions\n\t };\n\t }\n\n\t if (drawingOptions.color) {\n\t drawingOptions.color = getColor(drawingOptions.color);\n\t }\n\t return drawingOptions;\n\t }\n\t }\n\n\t function getColor(value) {\n\t var color;\n\t if (value != TRANSPARENT) {\n\t color = new d.Color(value).toHex();\n\t } else {\n\t color = value;\n\t }\n\t return color;\n\t }\n\n\t function lineAngle(p1, p2) {\n\t var xDiff = p2.x - p1.x;\n\t var yDiff = p2.y - p1.y;\n\t var angle = d.util.deg(Math.atan2(yDiff, xDiff));\n\t return angle;\n\t }\n\n\t function createSegment(x, y) {\n\t return new d.Segment(new g.Point(x, y));\n\t }\n\n\t function toDrawingRect(rect) {\n\t if (rect) {\n\t return new g.Rect([rect.x, rect.y], [rect.width, rect.height]);\n\t }\n\t }\n\n\t // Exports ================================================================\n\t kendo.deepExtend(diagram, {\n\t init: function (element) {\n\t kendo.init(element, diagram.ui);\n\t },\n\t diffNumericOptions: diffNumericOptions,\n\t Element: Element,\n\t Scale: Scale,\n\t Translation: Translation,\n\t Rotation: Rotation,\n\t Circle: Circle,\n\t Group: Group,\n\t Rectangle: Rectangle,\n\t Canvas: Canvas,\n\t Path: Path,\n\t Layout: Layout,\n\t Line: Line,\n\t MarkerBase: MarkerBase,\n\t ArrowMarker: ArrowMarker,\n\t CircleMarker: CircleMarker,\n\t Polyline: Polyline,\n\t CompositeTransform: CompositeTransform,\n\t TextBlock: TextBlock,\n\t Image: Image,\n\t VisualBase: VisualBase\n\t });\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(915);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 895:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../../kendo.core\");\n\n/***/ }),\n\n/***/ 915:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(895) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t var kendo = window.kendo,\n\t diagram = kendo.dataviz.diagram = {},\n\t deepExtend = kendo.deepExtend,\n\t isArray = Array.isArray,\n\t EPSILON = 1e-06;\n\n\t /*-------------------Diverse utilities----------------------------*/\n\t var Utils = {\n\t };\n\n\t deepExtend(Utils, {\n\t isNearZero: function (num) {\n\t return Math.abs(num) < EPSILON;\n\t },\n\t isDefined: function (obj) {\n\t return typeof obj !== 'undefined';\n\t },\n\n\t isUndefined: function (obj) {\n\t return (typeof obj === 'undefined') || obj === null;\n\t },\n\t /**\n\t * Returns whether the given object is an object or a value.\n\t */\n\t isObject: function (obj) {\n\t return obj === Object(obj);\n\t },\n\t /**\n\t * Returns whether the object has a property with the given name.\n\t */\n\t has: function (obj, key) {\n\t return Object.hasOwnProperty.call(obj, key);\n\t },\n\t /**\n\t * Returns whether the given object is a string.\n\t */\n\t isString: function (obj) {\n\t return Object.prototype.toString.call(obj) == '[object String]';\n\t },\n\t isBoolean: function (obj) {\n\t return Object.prototype.toString.call(obj) == '[object Boolean]';\n\t },\n\t isType: function (obj, type) {\n\t return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n\t },\n\t /**\n\t * Returns whether the given object is a number.\n\t */\n\t isNumber: function (obj) {\n\t return !isNaN(parseFloat(obj)) && isFinite(obj);\n\t },\n\t /**\n\t * Return whether the given object (array or dictionary).\n\t */\n\t isEmpty: function (obj) {\n\t if (obj === null) {\n\t return true;\n\t }\n\t if (isArray(obj) || Utils.isString(obj)) {\n\t return obj.length === 0;\n\t }\n\t for (var key in obj) {\n\t if (Utils.has(obj, key)) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t },\n\t simpleExtend: function(destination, source) {\n\t if(!Utils.isObject(source)) {\n\t return;\n\t }\n\n\t for(var name in source) {\n\t destination[name] = source[name];\n\t }\n\t },\n\t /**\n\t * Returns an array of the specified size and with each entry set to the given value.\n\t * @param size\n\t * @param value\n\t * @returns {Array}\n\t */\n\t initArray: function createIdArray(size, value) {\n\t var array = [];\n\t for (var i = 0; i < size; ++i) {\n\t array[i] = value;\n\t }\n\t return array;\n\t },\n\t serializePoints: function (points) {\n\t var res = [];\n\t for (var i = 0; i < points.length; i++) {\n\t var p = points[i];\n\t res.push(p.x + \";\" + p.y);\n\t }\n\t return res.join(\";\");\n\t },\n\t deserializePoints: function (s) {\n\t var v = s.split(\";\"), points = [];\n\t if (v.length % 2 !== 0) {\n\t throw \"Not an array of points.\";\n\t }\n\t for (var i = 0; i < v.length; i += 2) {\n\t points.push(new diagram.Point(\n\t parseInt(v[i], 10),\n\t parseInt(v[i + 1], 10)\n\t ));\n\t }\n\t return points;\n\t },\n\t /**\n\t * Returns an integer within the given bounds.\n\t * @param lower The inclusive lower bound.\n\t * @param upper The exclusive upper bound.\n\t * @returns {number}\n\t */\n\t randomInteger: function (lower, upper) {\n\t return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n\t } ,\n\t /*\n\t Depth-first traversal of the given node.\n\t */\n\t DFT: function (el, func) {\n\t func(el);\n\t if (el.childNodes) {\n\t for (var i = 0; i < el.childNodes.length; i++) {\n\t var item = el.childNodes[i];\n\t this.DFT(item, func);\n\t }\n\t }\n\t },\n\t /*\n\t Returns the angle in degrees for the given matrix\n\t */\n\t getMatrixAngle: function (m) {\n\t if (m === null || m.d === 0) {\n\t return 0;\n\t }\n\t return Math.atan2(m.b, m.d) * 180 / Math.PI;\n\t },\n\n\t /*\n\t Returns the scaling factors for the given matrix.\n\t */\n\t getMatrixScaling: function (m) {\n\t var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n\t var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n\t return [sX, sY];\n\t }\n\n\t });\n\n\t /**\n\t * The Range defines an array of equally separated numbers.\n\t * @param start The start-value of the Range.\n\t * @param stop The end-value of the Range.\n\t * @param step The separation between the values (default:1).\n\t * @returns {Array}\n\t */\n\t function Range(start, stop, step) {\n\t if (typeof start == 'undefined' || typeof stop == 'undefined') {\n\t return [];\n\t }\n\t if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n\t throw \"The sign of the increment should allow to reach the stop-value.\";\n\t }\n\t step = step || 1;\n\t start = start || 0;\n\t stop = stop || start;\n\t if ((stop - start) / step === Infinity) {\n\t throw \"Infinite range defined.\";\n\t }\n\t var range = [], i = -1, j;\n\n\t function rangeIntegerScale(x) {\n\t var k = 1;\n\t while (x * k % 1) {\n\t k *= 10;\n\t }\n\t return k;\n\t }\n\n\t var k = rangeIntegerScale(Math.abs(step));\n\t start *= k;\n\t stop *= k;\n\t step *= k;\n\t if (start > stop && step > 0) {\n\t step = -step;\n\t }\n\t if (step < 0) {\n\t while ((j = start + step * ++i) >= stop) {\n\t range.push(j / k);\n\t }\n\t }\n\t else {\n\t while ((j = start + step * ++i) <= stop) {\n\t range.push(j / k);\n\t }\n\t }\n\t return range;\n\t }\n\n\t /*-------------------Diverse math functions----------------------------*/\n\n\t function findRadian(start, end) {\n\t if (start == end) {\n\t return 0;\n\t }\n\t var sngXComp = end.x - start.x,\n\t sngYComp = start.y - end.y,\n\t atan = Math.atan(sngXComp / sngYComp);\n\t if (sngYComp >= 0) {\n\t return sngXComp < 0 ? atan + (2 * Math.PI) : atan;\n\t }\n\t return atan + Math.PI;\n\t }\n\n\t Utils.sign = function(number) {\n\t return number ? number < 0 ? -1 : 1 : 0;\n\t };\n\n\t Utils.findAngle = function(center, end) {\n\t return findRadian(center, end) * 180 / Math.PI;\n\t };\n\n\t /*-------------------Array Helpers ----------------------------*/\n\n\t Utils.forEach = function(arr, iterator, thisRef) {\n\t for (var i = 0; i < arr.length; i++) {\n\t iterator.call(thisRef, arr[i], i, arr);\n\t }\n\t };\n\n\t Utils.any = function(arr, predicate) {\n\t for (var i = 0; i < arr.length; ++i) {\n\t if (predicate(arr[i])) {\n\t return arr[i];\n\t }\n\t }\n\t return null;\n\t };\n\n\t Utils.remove = function (arr, what) {\n\t var ax;\n\t while ((ax = Utils.indexOf(arr, what)) !== -1) {\n\t arr.splice(ax, 1);\n\t }\n\t return arr;\n\t };\n\n\t Utils.contains = function (arr, obj) {\n\t return Utils.indexOf(arr, obj) !== -1;\n\t };\n\n\t Utils.indexOf = function(arr, what) {\n\t return $.inArray(what, arr);\n\t };\n\n\t Utils.fold = function (list, iterator, acc, context) {\n\t var initial = arguments.length > 2;\n\n\t for (var i = 0; i < list.length; i++) {\n\t var value = list[i];\n\t if (!initial) {\n\t acc = value;\n\t initial = true;\n\t }\n\t else {\n\t acc = iterator.call(context, acc, value, i, list);\n\t }\n\t }\n\n\t if (!initial) {\n\t throw 'Reduce of empty array with no initial value';\n\t }\n\n\t return acc;\n\t };\n\n\t Utils.find = function (arr, iterator, context) {\n\t var result;\n\t Utils.any(arr, function (value, index, list) {\n\t if (iterator.call(context, value, index, list)) {\n\t result = value;\n\t return true;\n\t }\n\t return false;\n\t });\n\t return result;\n\t };\n\n\t Utils.first = function (arr, constraint, context) {\n\t if (arr.length === 0) {\n\t return null;\n\t }\n\t if (Utils.isUndefined(constraint)) {\n\t return arr[0];\n\t }\n\n\t return Utils.find(arr, constraint, context);\n\t };\n\n\t /**\n\t * Inserts the given element at the specified position and returns the result.\n\t */\n\t Utils.insert = function (arr, element, position) {\n\t arr.splice(position, 0, element);\n\t return arr;\n\t };\n\n\t Utils.all = function (arr, iterator, context) {\n\t var result = true;\n\t var value;\n\n\t for (var i = 0; i < arr.length; i++) {\n\t value = arr[i];\n\t result = result && iterator.call(context, value, i, arr);\n\n\t if (!result) {\n\t break;\n\t }\n\t }\n\n\t return result;\n\t };\n\n\t Utils.clear = function (arr) {\n\t arr.splice(0, arr.length);\n\t };\n\n\t /**\n\t * Sort the arrays on the basis of the first one (considered as keys and the other array as values).\n\t * @param a\n\t * @param b\n\t * @param sortfunc (optiona) sorting function for the values in the first array\n\t */\n\t Utils.bisort = function (a, b, sortfunc) {\n\t if (Utils.isUndefined(a)) {\n\t throw \"First array is not specified.\";\n\t }\n\t if (Utils.isUndefined(b)) {\n\t throw \"Second array is not specified.\";\n\t }\n\t if (a.length != b.length) {\n\t throw \"The two arrays should have equal length\";\n\t }\n\n\t var all = [], i;\n\n\t for (i = 0; i < a.length; i++) {\n\t all.push({ 'x': a[i], 'y': b[i] });\n\t }\n\t if (Utils.isUndefined(sortfunc)) {\n\t all.sort(function (m, n) {\n\t return m.x - n.x;\n\t });\n\t }\n\t else {\n\t all.sort(function (m, n) {\n\t return sortfunc(m.x, n.x);\n\t });\n\t }\n\n\t Utils.clear(a);\n\t Utils.clear(b);\n\n\t for (i = 0; i < all.length; i++) {\n\t a.push(all[i].x);\n\t b.push(all[i].y);\n\t }\n\t };\n\n\t Utils.addRange = function (arr, range) {\n\t arr.push.apply(arr, range);\n\t };\n\n\t var Easing = {\n\t easeInOut: function (pos) {\n\t return ((-Math.cos(pos * Math.PI) / 2) + 0.5);\n\t }\n\t };\n\n\t /**\n\t * An animation ticker driving an adapter which sets a particular\n\t * property in function of the tick.\n\t * @type {*}\n\t */\n\t var Ticker = kendo.Class.extend({\n\t init: function () {\n\t this.adapters = [];\n\t this.target = 0;\n\t this.tick = 0;\n\t this.interval = 20;\n\t this.duration = 800;\n\t this.lastTime = null;\n\t this.handlers = [];\n\t var _this = this;\n\t this.transition = Easing.easeInOut;\n\t this.timerDelegate = function () {\n\t _this.onTimerEvent();\n\t };\n\t },\n\t addAdapter: function (a) {\n\t this.adapters.push(a);\n\t },\n\t onComplete: function (handler) {\n\t this.handlers.push(handler);\n\t },\n\t removeHandler: function (handler) {\n\t this.handlers = $.grep(this.handlers, function (h) {\n\t return h !== handler;\n\t });\n\t },\n\t trigger: function () {\n\t var _this = this;\n\t if (this.handlers) {\n\t Utils.forEach(this.handlers, function (h) {\n\t return h.call(_this.caller !== null ? _this.caller : _this);\n\t });\n\t }\n\t },\n\t onStep: function () {\n\t },\n\t seekTo: function (to) {\n\t this.seekFromTo(this.tick, to);\n\t },\n\t seekFromTo: function (from, to) {\n\t this.target = Math.max(0, Math.min(1, to));\n\t this.tick = Math.max(0, Math.min(1, from));\n\t this.lastTime = new Date().getTime();\n\t if (!this.intervalId) {\n\t this.intervalId = window.setInterval(this.timerDelegate, this.interval);\n\t }\n\t },\n\t stop: function () {\n\t if (this.intervalId) {\n\t window.clearInterval(this.intervalId);\n\t this.intervalId = null;\n\n\t //this.trigger.call(this);\n\t this.trigger();\n\t // this.next();\n\t }\n\t },\n\t play: function (origin) {\n\t if (this.adapters.length === 0) {\n\t return;\n\t }\n\t if (origin !== null) {\n\t this.caller = origin;\n\t }\n\t this.initState();\n\t this.seekFromTo(0, 1);\n\t },\n\t reverse: function () {\n\t this.seekFromTo(1, 0);\n\t },\n\t initState: function () {\n\t if (this.adapters.length === 0) {\n\t return;\n\t }\n\t for (var i = 0; i < this.adapters.length; i++) {\n\t this.adapters[i].initState();\n\t }\n\t },\n\t propagate: function () {\n\t var value = this.transition(this.tick);\n\n\t for (var i = 0; i < this.adapters.length; i++) {\n\t this.adapters[i].update(value);\n\t }\n\t },\n\t onTimerEvent: function () {\n\t var now = new Date().getTime();\n\t var timePassed = now - this.lastTime;\n\t this.lastTime = now;\n\t var movement = (timePassed / this.duration) * (this.tick < this.target ? 1 : -1);\n\t if (Math.abs(movement) >= Math.abs(this.tick - this.target)) {\n\t this.tick = this.target;\n\t } else {\n\t this.tick += movement;\n\t }\n\n\t try {\n\t this.propagate();\n\t } finally {\n\t this.onStep.call(this);\n\t if (this.target == this.tick) {\n\t this.stop();\n\t }\n\t }\n\t }\n\t });\n\n\t kendo.deepExtend(diagram, {\n\t init: function (element) {\n\t kendo.init(element, diagram.ui);\n\t },\n\n\t Utils: Utils,\n\t Range: Range,\n\t Ticker: Ticker\n\t });\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}