{"version":3,"sources":["webpack:///./node_modules/dhtmlx-gantt/codebase/dhtmlxgantt.css","webpack:///./node_modules/dayjs/dayjs.min.js","webpack:///./node_modules/dhtmlx-gantt/codebase/dhtmlxgantt.css?a4d0","webpack:///./node_modules/dhtmlx-gantt/codebase/dhtmlxgantt.es.js"],"names":[],"mappings":"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AAgB,wBAAwB,GAAG,G;;;;;;;;;;;ACA3gN;;AAEA;AACA,cAAc,mBAAO,CAAC,6PAAwH;AAC9I;AACA,4CAA4C,QAAS;AACrD;AACA;AACA,UAAU,mBAAO,CAAC,6GAAgD;AAClE,8CAA8C,qCAAqC;AACnF;AACA,GAAG,KAAU,EAAE,E;;;;;;;;;;;;ACXf;AAAA;AAAA;AAAA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,UAAU,GAAG;AACb;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA,WAAW,8DAA8D;AACzE;AACA;AACA,8NAA8N,cAAc;AAC5O;AACA;AACA,GAAG,SAAS,cAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB,aAAa,YAAY,YAAY,WAAW,aAAa,iBAAiB,kBAAkB;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gCAAgC,GAAG;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,QAAQ,aAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAQ,GAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oCAAoC;AAC5C;AACA;AACA,gDAAgD;AAChD;AACA,CAAC;AACD;AACA,CAAC,qJAAqJ,uBAAuB,kBAAkB;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4CAA4C,iBAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qJAAqJ,8BAA8B;AACnL,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sFAAsF;AACtF;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yBAAyB;AACxF,YAAY,YAAY,kBAAkB,aAAa,gEAAgE;AACvH;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,qCAAqC,cAAc;AACnD;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0JAA0J,YAAY,4EAA4E,aAAa,4EAA4E,EAAE,0FAA0F,YAAY,4EAA4E,aAAa,4EAA4E,EAAE;AAC1lB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc,cAAc,iDAAiD;AACpG,mBAAmB;AACnB;AACA;AACA,SAAS,IAAI;AACb;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,cAAc;AACd,KAAK;AACL;AACA;AACA,mFAAmF;AACnF,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,aAAa,aAAa;AAC1B,2BAA2B,aAAa,sBAAsB,6BAA6B;AAC3F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mCAAmC;AAChD;AACA;AACA;AACA,KAAK;AACL;AACA,aAAa,YAAY;AACzB;AACA,KAAK;AACL;AACA,aAAa,YAAY;AACzB;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,aAAa,YAAY;AACzB;AACA,mFAAmF;AACnF;AACA,0BAA0B,6BAA6B;AACvD,gDAAgD,6BAA6B;AAC7E,kFAAkF;AAClF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,kCAAkC,wBAAwB,sBAAsB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA,8CAA8C,KAAK,aAAa,KAAK,WAAW,sBAAsB,IAAI,EAAE;AAC5G,uDAAuD,KAAK,6BAA6B,KAAK;AAC9F,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,cAAc;AACzD;AACA,gBAAgB,4LAA4L;AAC5M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,uCAAuC;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iBAAiB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,qBAAqB,cAAc;AACnC,KAAK;AACL,qBAAqB,UAAU,mIAAmI,oFAAoF;AACtP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,mDAAmD,yDAAyD,kGAAkG,yDAAyD,IAAI,oGAAoG;AAC/W;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,cAAc;AACxD;AACA;AACA;AACA;AACA,OAAO,2BAA2B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,+FAA+F,uBAAuB,kBAAkB;AACxL;AACA;AACA,mBAAmB;AACnB,YAAY,gDAAgD;AAC5D,GAAG;AACH;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA,GAAG;AACH,kCAAkC,cAAc;AAChD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,qFAAqF;AACtK;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;AACzF;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK,EAAE;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,YAAY,2DAA2D;AACvE;AACA;AACA,2HAA2H,yBAAyB,wBAAwB,wBAAwB;AACpM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA,mBAAmB,eAAe;AAClC;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,kBAAkB,+BAA+B;AACvI;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA,KAAK,EAAE,kBAAkB;AACzB;AACA,cAAc;AACd,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,EAAE;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2BAA2B,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,iBAAiB,yHAAyH,eAAe,uGAAuG;AAChQ,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,YAAY;AACZ,sBAAsB;AACtB,aAAa,oGAAoG;AACjH;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD,sBAAsB,yBAAyB,6BAA6B,4BAA4B;AACxG,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,8EAA8E,kBAAkB;AAChG,WAAW;AACX,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kVAAkV;AAC5W;AACA;AACA,cAAc,cAAc,WAAW,oDAAoD;AAC3F;AACA,OAAO;AACP,KAAK;AACL;AACA,2UAA2U,8GAA8G;AACzb;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG,uCAAuC;AAC1C;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD;AACA,0GAA0G;AAC1G,mEAAmE,QAAQ,cAAc;AACzF;AACA;AACA;AACA;AACA,KAAK;AACL,yCAAyC;AACzC,gBAAgB,aAAa,yCAAyC;AACtE,OAAO;AACP,sEAAsE,cAAc;AACpF,4EAA4E,cAAc;AAC1F;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,yDAAyD,yCAAyC,gBAAgB,4RAA4R;AACrZ,KAAK;AACL,4CAA4C;AAC5C,8CAA8C;AAC9C;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,8CAA8C;AAC9C,4EAA4E,cAAc;AAC1F,OAAO;AACP,4EAA4E,cAAc;AAC1F,OAAO;AACP;AACA,OAAO;AACP,8CAA8C;AAC9C,OAAO;AACP,KAAK;AACL;AACA;AACA,yFAAyF,cAAc;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,OAAO,8FAA8F;AACrG;AACA,OAAO;AACP,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO,SAAS;AAChB;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,EAAE,EAAE;AACX,KAAK;AACL;AACA,OAAO,+FAA+F;AACtG;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA,OAAO,EAAE;AACT,KAAK;AACL;AACA;AACA,OAAO,6FAA6F;AACpG;AACA,OAAO;AACP;AACA,wDAAwD,iBAAiB;AACzE;AACA,OAAO;AACP;AACA;AACA,yBAAyB,wBAAwB;AACjD;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO,SAAS;AAChB;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,6CAA6C;AAC7C,OAAO,EAAE,EAAE;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,0FAA0F;AACjG;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO,SAAS;AAChB;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,6CAA6C;AAC7C,OAAO,EAAE,EAAE;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,wFAAwF;AAC/F;AACA,OAAO;AACP;AACA;AACA,gEAAgE,iBAAiB;AACjF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS;AAChB;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,EAAE,EAAE;AACX,KAAK;AACL,0CAA0C;AAC1C;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,8HAA8H,cAAc;AAC5I;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,cAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,iBAAiB;AACjB;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yBAAyB;AACzB;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC;AACD,sBAAsB;AACtB;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc;AACnB,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B,2BAA2B,+DAA+D,sBAAsB,iBAAiB,4aAA4a;AAC3oB;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,GAAG,EAAE;AACL;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,8DAA8D;AAC9D;AACA,OAAO,EAAE;AACT,KAAK,GAAG,WAAW;AACnB,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,CAAC;AACD,oFAAoF,cAAc;AAClG;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,2CAA2C,cAAc;AACzD,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA,yBAAyB,+BAA+B;AACxD,qBAAqB,+BAA+B;AACpD;AACA,OAAO;AACP,KAAK;AACL;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD,4BAA4B,0CAA0C;AACtE;AACA,8BAA8B,+DAA+D,iKAAiK,8DAA8D;AAC5T,GAAG,mDAAmD,GAAG,+EAA+E;AACxI;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,uBAAuB,GAAG,wFAAwF;AAClH,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,yEAAyE,kIAAkI,eAAe,uBAAuB;AACjP,GAAG;AACH,uBAAuB,GAAG,kMAAkM;AAC5N,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH,gBAAgB;AAChB;AACA;AACA;AACA;AACA,GAAG,2CAA2C;AAC9C,mBAAmB,cAAc;AACjC,GAAG;AACH;AACA,GAAG;AACH;AACA,0BAA0B,cAAc;AACxC,GAAG;AACH;AACA,sEAAsE,sBAAsB;AAC5F;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;AACH,wBAAwB;AACxB;AACA,0BAA0B;AAC1B;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,0HAA0H,YAAY;AACtI;AACA;AACA,GAAG;AACH,eAAe;AACf;AACA;AACA;AACA,GAAG,mCAAmC;AACtC,oKAAoK,cAAc;AAClL;AACA;AACA,mDAAmD;AACnD,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,eAAe,wCAAwC,kDAAkD;AACzG;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,eAAe,8FAA8F;AAC7G;AACA,SAAS,WAAW;AACpB,OAAO;AACP,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,cAAc;AAC1B,yBAAyB,YAAY;AACrC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,uBAAuB,mBAAmB;AAC1C;AACA;AACA,yBAAyB,cAAc;AACvC;AACA,wCAAwC,mDAAmD;AAC3F;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA,mBAAmB,cAAc,iEAAiE,oLAAoL;AACtR;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mBAAmB,cAAc;AACjC;AACA,yBAAyB,cAAc;AACvC;AACA,GAAG;AACH,mBAAmB,cAAc;AACjC,GAAG;AACH;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA,6EAA6E;AAC7E;AACA,mBAAmB,oBAAoB;AACvC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,YAAY,wBAAwB;AACpC;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,qFAAqF;AACrF;AACA;AACA,GAAG;AACH;AACA,qEAAqE;AACrE,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,wEAAwE;AACxE;AACA;AACA,GAAG;AACH,uGAAuG;AACvG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG,EAAE;AACL,CAAC,EAAE,QAAQ,aAAa,2FAA2F;AACnH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB,UAAU,iCAAiC,SAAS,2DAA2D,GAAG,wBAAwB,GAAG,+DAA+D,GAAG,qCAAqC,GAAG,GAAG,iDAAiD,GAAG,UAAU,yFAAyF,UAAU,2DAA2D,2yBAA2yB,yEAAyE,wGAAwG,iDAAiD,GAAG,kDAAkD,GAAG,oCAAoC,GAAG,yBAAyB,gEAAgE,sCAAsC,yPAAyP,yGAAyG,kDAAkD,aAAa,+EAA+E,GAAG,iDAAiD,uBAAuB,+EAA+E,GAAG,mDAAmD,GAAG,+DAA+D,yBAAyB,+EAA+E,GAAG,mDAAmD,GAAG,kEAAkE,GAAG,0qBAA0qB,0EAA0E,0NAA0N,2EAA2E,kCAAkC;AACvvH;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,qCAAqC,eAAe;AACpD;AACA,sCAAsC,eAAe;AACrD;AACA,4BAA4B,eAAe;AAC3C;AACA,6BAA6B,eAAe;AAC5C;AACA,qCAAqC,eAAe;AACpD;AACA,4BAA4B,eAAe;AAC3C;AACA,kDAAkD,eAAe;AACjE;AACA,iDAAiD,eAAe;AAChE;AACA,oDAAoD,eAAe;AACnE;AACA,mDAAmD,eAAe;AAClE;AACA,sCAAsC,eAAe;AACrD;AACA,8BAA8B,eAAe;AAC7C;AACA,4BAA4B,eAAe;AAC3C;AACA,qCAAqC,eAAe;AACpD;AACA,qCAAqC,eAAe;AACpD;AACA,6BAA6B,eAAe;AAC5C;AACA,6BAA6B,eAAe;AAC5C;AACA,qCAAqC,eAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,2FAA2F,EAAE,EAAE;AAC/F;AACA,CAAC;AACD,oDAAoD;AACpD;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA,0BAA0B,EAAE,KAAK;AACjC;AACA;AACA;AACA,2BAA2B,EAAE,QAAQ;AACrC;AACA;AACA,0BAA0B,EAAE,YAAY,EAAE,gBAAgB;AAC1D;AACA;AACA;AACA;AACA;AACA,0BAA0B,EAAE,KAAK;AACjC;AACA;AACA,0BAA0B,EAAE,KAAK;AACjC;AACA;AACA,0BAA0B,EAAE,KAAK;AACjC;AACA;AACA;AACA,sCAAsC,EAAE,iCAAiC;AACzE;AACA;AACA,0BAA0B,EAAE,KAAK;AACjC;AACA;AACA,uDAAuD,EAAE,MAAM;AAC/D;AACA;AACA,sDAAsD,EAAE,MAAM;AAC9D;AACA;AACA,yBAAyB,EAAE;AAC3B,kEAAkE,GAAG,EAAE,mBAAmB,EAAE,EAAE;AAC9F;AACA,CAAC,EAAE,QAAQ;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,WAAW;AACX,mFAAmF,QAAQ,cAAc;AACzG,+DAA+D,QAAQ,cAAc;AACrF,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,oGAAoG,eAAe;AACnH;AACA;AACA,YAAY;AACZ;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uBAAuB;AAClC;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ,oCAAoC,oCAAoC;AAC7F,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iKAAiK,0BAA0B;AAC3L;AACA;AACA;AACA,0BAA0B,cAAc;AACxC,wBAAwB,cAAc,oBAAoB;AAC1D,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,oBAAoB,6DAA6D,+BAA+B,KAAK;AACzK;AACA;AACA,yFAAyF,+BAA+B;AACxH;AACA;AACA;AACA,2FAA2F,gCAAgC;AAC3H,oCAAoC;AACpC;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA,qHAAqH,iCAAiC;AACtJ;AACA;AACA;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA,eAAe;AACf;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,GAAG;AACH,YAAY;AACZ,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD,iBAAiB,iBAAiB;AAClC;AACA,CAAC;AACD,iBAAiB,iBAAiB;AAClC,CAAC;AACD,iBAAiB,iBAAiB;AAClC;AACA,CAAC;AACD,iBAAiB,iBAAiB;AAClC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,uBAAuB,6KAA6K,4BAA4B;AAChO,qCAAqC;AACrC,GAAG;AACH;AACA,gBAAgB;AAChB;AACA,CAAC;AACD,iDAAiD,OAAO;AACxD;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG,iBAAiB;AACpB,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,iBAAiB,cAAc;AAC/B;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD,CAAC;AACD,CAAC;AACD,iBAAiB,2BAA2B;AAC5C;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;AACH,iBAAiB,cAAc;AAC/B,2DAA2D,QAAQ,8BAA8B;AACjG;AACA,CAAC;AACD;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG,mKAAmK,4BAA4B;AAClM,YAAY,QAAQ,QAAQ,QAAQ;AACpC;AACA,qCAAqC;AACrC,GAAG;AACH,8BAA8B,6CAA6C,QAAQ,QAAQ,QAAQ;AACnG;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,UAAU,QAAQ,QAAQ;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB;AAClB,gEAAgE,OAAO;AACvE,2BAA2B,OAAO;AAClC;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,iBAAiB,cAAc;AAC/B,CAAC;AACD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,QAAQ,qBAAqB;AAC7B;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA,CAAC;AACD,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD,qBAAqB;AACrB,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD,+BAA+B,OAAO;AACtC,CAAC;AACD;AACA,6CAA6C,UAAU;AACvD;AACA,oHAAoH,QAAQ;AAC5H;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,+BAA+B,gBAAgB;AAChE;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,QAAQ;AAC9C,0BAA0B,cAAc;AACxC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD,uFAAuF;AACvF,CAAC,EAAE;AACH;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D,GAAG;AACH;AACA,mBAAmB,cAAc;AACjC;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,cAAc,GAAG;AACjB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,SAAS;AACT,OAAO,IAAI;AACX;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,oEAAoE,cAAc;AAClF;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,sCAAsC,cAAc;AACpD;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,sCAAsC,cAAc;AACpD;AACA,KAAK;AACL,eAAe,cAAc;AAC7B,4CAA4C;AAC5C,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL,eAAe;AACf;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG,EAAE,SAAS;AACd;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL,CAAC;AACD;AACA;AACA,UAAU;AACV;AACA,0BAA0B,QAAQ;AAClC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,2BAA2B,OAAO;AAClC;AACA,GAAG;AACH;AACA,4DAA4D,QAAQ;AACpE;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,mBAAmB,cAAc;AACjC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,6GAA6G;AAC7G,GAAG;AACH;AACA,qFAAqF;AACrF;AACA;AACA,WAAW;AACX;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE;AACJ,KAAK;AACL;AACA;AACA,KAAK;AACL,GAAG;AACH,8EAA8E,QAAQ;AACtF;AACA;AACA;AACA,eAAe,kBAAkB;AACjC,eAAe,cAAc;AAC7B;AACA,GAAG;AACH;AACA;AACA,wBAAwB,+BAA+B;AACvD,mBAAmB,sBAAsB;AACzC;AACA,GAAG;AACH,yCAAyC,OAAO;AAChD,GAAG;AACH;AACA,oCAAoC,YAAY;AAChD;AACA;AACA;AACA,GAAG;AACH,mBAAmB;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA,iCAAiC,QAAQ,sBAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,eAAe,sGAAsG,gDAAgD;AACrK;AACA;AACA,KAAK;AACL,GAAG;AACH,2FAA2F,cAAc;AACzG;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,0CAA0C,SAAS;AACnD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,oBAAoB;AAC1E;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kDAAkD,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,KAAK;AACL,wCAAwC,+EAA+E;AACvH;AACA;AACA,OAAO;AACP,KAAK,yFAAyF,iFAAiF,mFAAmF,wDAAwD;AAC1T;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,iDAAiD,mEAAmE;AACpH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,mEAAmE;AACnE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iDAAiD;AAC9F;AACA;AACA;AACA;AACA,KAAK;AACL,iBAAiB;AACjB;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,2SAA2S,iDAAiD,qCAAqC,4BAA4B,+BAA+B,4CAA4C,qCAAqC,8CAA8C,qBAAqB,8BAA8B,qBAAqB,GAAG;AACtoB;AACA;AACA,4YAA4Y;AAC5Y;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,KAAK,EAAE;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,yDAAyD;AACxE;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,cAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,2HAA2H,0MAA0M;AACrU;AACA,mDAAmD,4CAA4C;AAC/F,OAAO;AACP,4CAA4C,4CAA4C,iDAAiD;AACzI,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,oBAAoB,YAAY,EAAE;AAClI;AACA,OAAO;AACP;AACA,OAAO;AACP,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,0GAA0G,oBAAoB;AAC9H;AACA;AACA;AACA,8BAA8B;AAC9B,kBAAkB,mHAAmH;AACrI;AACA,sBAAsB,iBAAiB,cAAc,0CAA0C;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,iDAAiD,EAAE,qBAAqB,EAAE,4BAA4B,EAAE;AACxG;AACA;AACA,4DAA4D,EAAE,gCAAgC,EAAE,4BAA4B,EAAE;AAC9H;AACA;AACA;AACA,4DAA4D,EAAE,gCAAgC,EAAE,4BAA4B,EAAE;AAC9H;AACA;AACA;AACA,4DAA4D,EAAE,iCAAiC,EAAE,4BAA4B,EAAE;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4BAA4B;AAChE,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,+CAA+C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kdAAkd,QAAQ;AAC1d;AACA;AACA,YAAY;AACZ;AACA,CAAC;AACD;AACA;AACA;AACA,6CAA6C,iCAAiC;AAC9E,CAAC;AACD;AACA,YAAY;AACZ;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,2DAA2D,cAAc;AACzE;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,YAAY;AACZ;AACA,UAAU;AACV,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kBAAkB,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc,uCAAuC,kEAAkE;AAC1I;AACA,UAAU;AACV;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA,SAAS,GAAG,WAAW;AACvB;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,0DAA0D,kCAAkC,4DAA4D;AAClP;AACA,8GAA8G,0DAA0D,+HAA+H,sHAAsH,sCAAsC,+BAA+B,iDAAiD,0BAA0B;AAC7iB;AACA;AACA,iBAAiB;AACjB,2BAA2B,kGAAkG,sCAAsC,+BAA+B,iDAAiD;AACnP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO,GAAG,WAAW;AACrB,KAAK;AACL;AACA,GAAG,2BAA2B,6GAA6G;AAC3I;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,qFAAqF;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,qJAAqJ,mBAAmB;AACnL;AACA;AACA;AACA;AACA,oKAAoK,wDAAwD,wEAAwE,0DAA0D;AAC9V;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,GAAG,EAAE;AACL;AACA,yCAAyC;AACzC,gDAAgD,uDAAuD;AACvG,iEAAiE,+CAA+C,4EAA4E;AAC5L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA,mBAAmB;AACnB;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,cAAc;AACd,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,kGAAkG,oBAAoB;AACtH,SAAS;AACT,OAAO;AACP,kBAAkB,QAAQ;AAC1B;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA,SAAS;AACT,OAAO,qEAAqE,QAAQ,QAAQ;AAC5F;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,iBAAiB;AACjB;AACA;AACA,OAAO;AACP,iBAAiB;AACjB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP,gCAAgC;AAChC;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS,YAAY;AACrB;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,gBAAgB;AAChB;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG,GAAG,WAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,mBAAmB;AAC9F;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,uBAAuB;AACvB,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,qBAAqB,wFAAwF;AAC7G,2FAA2F;AAC3F,4EAA4E,sCAAsC;AAClH,sDAAsD,6CAA6C;AACnG,YAAY;AACZ;AACA,GAAG;AACH;AACA,uFAAuF,gCAAgC;AACvH,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH,GAAG,EAAE;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,UAAU;AACb;AACA;AACA,wBAAwB;AACxB,+BAA+B;AAC/B;AACA;AACA;AACA,KAAK;AACL,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wBAAwB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL,GAAG,GAAG,WAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,UAAU,kBAAkB,EAAE;AAChD,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG,aAAa;AAChB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,qCAAqC,cAAc;AACnD;AACA;AACA;AACA,KAAK,IAAI;AACT,GAAG,EAAE,WAAW;AAChB,mBAAmB,QAAQ,yBAAyB;AACpD;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mBAAmB,+CAA+C,cAAc,8FAA8F,cAAc;AAC5L,yCAAyC,qEAAqE,QAAQ,cAAc;AACpI;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,mBAAmB,wDAAwD,cAAc;AACzF;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,8EAA8E,OAAO;AACrF,mCAAmC,OAAO;AAC1C;AACA,GAAG,EAAE,cAAc;AACnB;AACA,kBAAkB,eAAe,YAAY,EAAE,wDAAwD,cAAc;AACrH;AACA;AACA;AACA;AACA,iDAAiD,cAAc;AAC/D;AACA,eAAe,cAAc;AAC7B;AACA,oOAAoO,iFAAiF;AACrT;AACA;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,yBAAyB,UAAU,OAAO;AAC1C;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gBAAgB;AAChB,yBAAyB,cAAc,iBAAiB,6BAA6B;AACrF;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA,CAAC;AACD;AACA;AACA,iBAAiB,cAAc,+BAA+B,cAAc;AAC5E;AACA,mDAAmD,iEAAiE;AACpH;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD,qEAAqE,+EAA+E,iBAAiB;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA,uBAAuB;AACvB;AACA;AACA,6BAA6B,cAAc,cAAc,EAAE;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4OAA4O;AAC5O;AACA,gBAAgB;AAChB;AACA,CAAC;AACD,wCAAwC,OAAO;AAC/C,CAAC;AACD,8BAA8B;AAC9B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,kCAAkC,EAAE;AACpC;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD,8DAA8D,cAAc;AAC5E;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD,4EAA4E,cAAc;AAC1F;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,iFAAiF,2BAA2B;AAC5G;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,yFAAyF,cAAc;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,4BAA4B,UAAU,mDAAmD,qFAAqF;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI,kGAAkG;AAC3O,2CAA2C,oEAAoE;AAC/G;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA,CAAC;AACD;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,2BAA2B,UAAU;AACrC;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,WAAW;AACX;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,KAAK;AACL,2BAA2B,cAAc;AACzC;AACA,cAAc,uNAAuN;AACrO;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA8C;AAC9C,uIAAuI,gBAAgB;AACvJ;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,CAAC;AACD,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,CAAC;AACD,6KAA6K,uBAAuB;AACpM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oCAAoC;AACpC,+KAA+K,uBAAuB;AACtM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG,CAAC;AACD,yPAAyP,iBAAiB;AAC1Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,QAAQ;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,gEAAgE,OAAO;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,uCAAuC,cAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA,GAAG,4BAA4B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,0EAA0E,+KAA+K;AACzP;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,yBAAyB,cAAc;AACvC;AACA,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD,YAAY;AACZ;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,eAAe,GAAG;AACrB;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC,EAAE;AACH;AACA;AACA,uCAAuC;AACvC;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA,CAAC;AACD;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,qBAAqB;AACrB,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,mBAAmB,8GAA8G;AACjI;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,2FAA2F;AAC3F;AACA,oDAAoD,8DAA8D;AAClH,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC,aAAa,UAAU,0BAA0B,sDAAsD,EAAE,aAAa,4BAA4B,8CAA8C,EAAE,EAAE;AACrM;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG;AACH,CAAC,EAAE,kBAAkB;AACrB;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD,iCAAiC,oDAAoD;AACrF;AACA;AACA,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC,EAAE,kBAAkB;AACrB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD,YAAY;AACZ,UAAU;AACV;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,mEAAmE,qEAAqE;AACxI;AACA;AACA;AACA;AACA,iEAAiE,6EAA6E;AAC9I;AACA;AACA,6EAA6E,qEAAqE;AAClJ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA,0FAA0F,2EAA2E;AACrK;AACA;AACA,eAAe,uCAAuC,OAAO;AAC7D;AACA,0NAA0N,uEAAuE;AACjS;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kBAAkB,gGAAgG;AAClH;AACA;AACA;AACA;AACA,4JAA4J,SAAS;AACrK;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,gPAAgP,6CAA6C;AAC7R,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,iGAAiG,qCAAqC;AACtI;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,uDAAuD,cAAc;AACrE,oBAAoB,cAAc;AAClC;AACA;AACA;AACA,GAAG;AACH;AACA,+DAA+D,cAAc;AAC7E,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG,cAAc,WAAW;AAC5B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,GAAG,EAAE,EAAE;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mFAAmF,cAAc;AACjG;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,0CAA0C,wDAAwD;AAClG;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ,0aAA0a,WAAW,ijDAAijD,EAAE,QAAQ,QAAQ,8YAA8Y,WAAW,wiDAAwiD,EAAE,QAAQ,QAAQ,4XAA4X,WAAW,2jDAA2jD,EAAE,QAAQ,QAAQ,gSAAgS,WAAW,m5CAAm5C,EAAE,QAAQ,QAAQ,kXAAkX,WAAW,shDAAshD,EAAE,QAAQ,QAAQ,4XAA4X,WAAW,olDAAolD,EAAE,QAAQ,QAAQ,8YAA8Y,WAAW,giDAAgiD,EAAE,QAAQ,QAAQ,0ZAA0Z,WAAW,sPAAsP,s0CAAs0C,EAAE,QAAQ,QAAQ,oYAAoY,WAAW,+hDAA+hD,EAAE,QAAQ,QAAQ,mYAAmY,WAAW,kiDAAkiD,EAAE,QAAQ,QAAQ,yUAAyU,WAAW,sjDAAsjD,EAAE,QAAQ,QAAQ,qFAAqF,iBAAiB,8TAA8T,WAAW,ohDAAohD,EAAE,QAAQ,QAAQ,gYAAgY,WAAW,6jDAA6jD,EAAE,QAAQ,QAAQ,oVAAoV,WAAW,g/CAAg/C,EAAE,QAAQ,QAAQ,8YAA8Y,WAAW,mkDAAmkD,EAAE,QAAQ,QAAQ,uYAAuY,WAAW,8hDAA8hD,EAAE,QAAQ,QAAQ,wXAAwX,WAAW,6/CAA6/C,EAAE,QAAQ,QAAQ,4YAA4Y,WAAW,yiDAAyiD,EAAE,QAAQ,QAAQ,iSAAiS,WAAW,u+CAAu+C,EAAE,QAAQ,QAAQ,iSAAiS,WAAW,45CAA45C;AAClwsC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,YAAY,QAAQ,2XAA2X,WAAW,wiDAAwiD,EAAE,QAAQ,QAAQ,iYAAiY,WAAW,wkDAAwkD,EAAE,QAAQ,QAAQ,2XAA2X,WAAW,ukDAAukD,EAAE,QAAQ,QAAQ,iZAAiZ,WAAW,wjDAAwjD,EAAE,QAAQ,QAAQ,+XAA+X,WAAW,yjDAAyjD,EAAE,QAAQ,QAAQ,8XAA8X,WAAW,mlDAAmlD,EAAE,QAAQ,QAAQ,4XAA4X,WAAW,glDAAglD,EAAE,QAAQ,QAAQ,+XAA+X,WAAW,kiDAAkiD,EAAE,QAAQ,QAAQ,qXAAqX,WAAW,8jDAA8jD,EAAE,QAAQ,QAAQ,6XAA6X,WAAW,6iDAA6iD,EAAE,QAAQ,QAAQ,sXAAsX,WAAW,ygDAAygD,EAAE,QAAQ,QAAQ,4YAA4Y,WAAW,siDAAsiD;AACz9uB;AACA,wFAAwF,eAAe,eAAe;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,YAAY,aAAa;AACzB;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,YAAY;AACZ;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sGAAsG,qBAAqB;AAC3H;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,yBAAyB;AAC/E,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,6FAA6F;AAC7F,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,cAAc;AACd;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,OAAO;AACP,oBAAoB,cAAc,QAAQ,cAAc;AACxD;AACA,mSAAmS,8EAA8E;AACjX;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,0BAA0B;AAC1B;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO,kFAAkF,cAAc;AACvG;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB;AAClB;AACA,OAAO,EAAE;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;AACpB,4EAA4E,oMAAoM;AAChR,SAAS,EAAE,0CAA0C;AACrD;AACA,SAAS,EAAE,6CAA6C;AACxD;AACA,SAAS,EAAE;AACX;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,4DAA4D,8EAA8E;AAC1I,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,4PAA4P;AAC5P,KAAK,EAAE;AACP,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,kMAAkM;AAClM;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,6CAA6C;AAC7C,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,6BAA6B,OAAO;AACpC,uBAAuB,mCAAmC;AAC1D,qBAAqB,mCAAmC;AACxD,OAAO;AACP;AACA,OAAO,EAAE;AACT,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa;AACb;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,kCAAkC;AAClC;AACA,KAAK;AACL;AACA;AACA,+NAA+N,yDAAyD;AACxR;AACA;AACA,KAAK;AACL;AACA,KAAK,EAAE,0BAA0B;AACjC;AACA,KAAK,MAAM;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sBAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,OAAO;AACvF;AACA,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA,sDAAsD,cAAc;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,6EAA6E,cAAc;AAC3F;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,gDAAgD,sBAAsB;AACtE,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL,iBAAiB,QAAQ;AACzB,KAAK;AACL;AACA;AACA;AACA,KAAK,SAAS;AACd;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK,mCAAmC,gCAAgC,iRAAiR,EAAE,MAAM,gCAAgC,uiBAAuiB,EAAE,cAAc;AACx7B,GAAG;AACH,wBAAwB;AACxB,6DAA6D,cAAc;AAC3E,GAAG;AACH;AACA,2CAA2C,cAAc;AACzD;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,2BAA2B,UAAU;AACrC;AACA,qCAAqC,QAAQ,cAAc;AAC3D,KAAK;AACL;AACA;AACA;AACA;AACA,gFAAgF,OAAO;AACvF;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,6BAA6B,cAAc;AAC3C,4BAA4B;AAC5B,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK,EAAE;AACP;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,iQAAiQ;AACnR,mBAAmB;AACnB;AACA;AACA;AACA,KAAK,+GAA+G;AACpH;AACA,GAAG,0BAA0B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,keAAke,sBAAsB;AACxf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,gCAAgC;AACpH;AACA;AACA,yCAAyC,qCAAqC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,2CAA2C;AACrD;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,+HAA+H,eAAe;AAC9I;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,mBAAmB,cAAc;AACjC,GAAG;AACH;AACA,mBAAmB,cAAc;AACjC;AACA,GAAG,IAAI;AACP;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,YAAY;AACZ,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,aAAa,UAAU,iBAAiB,iBAAiB;AACzD;AACA,+CAA+C,sBAAsB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA,yBAAyB,cAAc,uDAAuD,cAAc;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,KAAK;AACL;AACA,2CAA2C,cAAc;AACzD;AACA;AACA,KAAK;AACL;AACA,4BAA4B,cAAc;AAC1C,KAAK;AACL;AACA,KAAK;AACL;AACA,CAAC;AACD,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,iCAAiC;AACjC,OAAO;AACP;AACA,OAAO;AACP;AACA,8OAA8O,2BAA2B;AACzQ,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,oBAAoB;AACpB;AACA,yBAAyB,wBAAwB,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,EAAE;AACT;AACA,YAAY;AACZ;AACA,KAAK;AACL,GAAG;AACH,UAAU;AACV,aAAa,kCAAkC;AAC/C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,oEAAoE,cAAc;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wCAAwC,cAAc;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,OAAO;AACP,mBAAmB,mBAAmB;AACtC,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,2BAA2B,cAAc;AACzC;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2EAA2E,mBAAmB;AAC9F;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,wDAAwD;AACxD,GAAG;AACH,aAAa;AACb;AACA,GAAG;AACH;AACA;AACA,sBAAsB,uCAAuC;AAC7D,GAAG,0BAA0B,iKAAiK;AAC9L;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA,eAAe,cAAc;AAC7B;AACA;AACA,KAAK,SAAS,cAAc;AAC5B;AACA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,mKAAmK,cAAc;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0DAA0D,cAAc;AACxE;AACA;AACA;AACA;AACA,OAAO;AACP,kCAAkC,cAAc;AAChD;AACA;AACA;AACA,GAAG;AACH,mDAAmD,qBAAqB;AACxE,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,0IAA0I,wBAAwB;AAClK;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH,mBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mBAAmB,wBAAwB;AAC3C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,oDAAoD,cAAc;AAClE;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,8DAA8D,QAAQ;AACtE;AACA;AACA;AACA,GAAG;AACH,0DAA0D,wBAAwB;AAClF;AACA,GAAG;AACH,0CAA0C,wBAAwB;AAClE,YAAY;AACZ,GAAG;AACH;AACA,GAAG;AACH,4LAA4L,+EAA+E,+CAA+C;AAC1T;AACA,mBAAmB,cAAc;AACjC,aAAa;AACb;AACA,GAAG;AACH,aAAa;AACb;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,mEAAmE,wBAAwB;AAC3F;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,sHAAsH,QAAQ;AAC9H;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,GAAG;AACH,yCAAyC,iCAAiC,0BAA0B,wBAAwB;AAC5H,uCAAuC,cAAc;AACrD;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA;AACA,eAAe,wBAAwB;AACvC;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,yDAAyD,qBAAqB;AAC9E;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,iDAAiD,wBAAwB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA;AACA,4CAA4C,qBAAqB;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,8BAA8B,gBAAgB;AAC9C;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH,iDAAiD,cAAc;AAC/D;AACA,GAAG;AACH;AACA,GAAG;AACH,2MAA2M,cAAc;AACzN,GAAG;AACH;AACA,GAAG;AACH,GAAG;AACH,qGAAqG,cAAc,gGAAgG,cAAc;AACjO,GAAG;AACH;AACA;AACA,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,mNAAmN,cAAc;AACjO;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;AACA,GAAG;AACH,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK,iDAAiD,cAAc;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,4DAA4D,cAAc;AAC1E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gBAAgB,OAAO,aAAa;AACpC,uCAAuC,aAAa,KAAK,iDAAiD,iBAAiB;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,YAAY,QAAQ;AACpB;AACA,YAAY;AACZ;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,sDAAsD,wBAAwB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH,UAAU;AACV,UAAU,QAAQ;AAClB,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,wDAAwD,cAAc;AACtE;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,gDAAgD;AAChD;AACA;AACA,KAAK,IAAI;AACT,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA,gDAAgD,sBAAsB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,UAAU;AACV,GAAG;AACH,GAAG;AACH;AACA;AACA,qBAAqB,SAAS,8EAA8E;AAC5G;AACA,gBAAgB;AAChB,+DAA+D,eAAe,2yBAA2yB,kEAAkE;AAC37B;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,OAAO;AACvF;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,UAAU;AACV,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,UAAU;AACV,CAAC;AACD;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,GAAG,GAAG;AACN,iBAAiB,mFAAmF,IAAI,oBAAoB,gGAAgG;AAC5N,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,KAAK,EAAE;AACP;AACA;AACA,4CAA4C,mBAAmB;AAC/D,yIAAyI,cAAc;AACvJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,KAAK,EAAE;AACP;AACA,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,GAAG;AACH,GAAG;AACH,CAAC;AACD;AACA,uCAAuC,6BAA6B;AACpE,mCAAmC,6BAA6B;AAChE;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA,CAAC;AACD,oEAAoE,cAAc;AAClF;AACA,4FAA4F,kBAAkB;AAC9G;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;AACH,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA;AACA,6BAA6B,yCAAyC;AACtE,0DAA0D;AAC1D;AACA;AACA;AACA,+EAA+E,QAAQ,aAAa,GAAG;AACvG;AACA;AACA,mCAAmC,EAAE,qCAAqC,QAAQ,EAAE,GAAG,uBAAuB,EAAE,IAAI;AACpH;AACA;AACA;AACA,6BAA6B,EAAE,IAAI,4CAA4C,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE;AAC5G;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,4BAA4B,MAAM;AAClC;AACA,CAAC;AACD,4BAA4B,MAAM;AAClC;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,6JAA6J;AAC7J,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,WAAW,4CAA4C;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,+CAA+C,yBAAyB,kCAAkC,mGAAmG;AAC7M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,qDAAqD,oCAAoC;AAChG,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,wDAAwD,qEAAqE;AAC7H,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,WAAW,kCAAkC;AAC7C,oDAAoD,qEAAqE,iIAAiI,qEAAqE;AAC/T;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,mBAAmB,2CAA2C;AAC9D,YAAY;AACZ;AACA;AACA,WAAW,YAAY;AACvB,qBAAqB,QAAQ,uBAAuB,EAAE;AACtD;AACA,oBAAoB,+EAA+E;AACnG;AACA,mNAAmN,8BAA8B,+KAA+K,EAAE;AACla;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,GAAG;AACH,8DAA8D,cAAc;AAC5E;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qBAAqB,SAAS,gEAAgE;AAC9F;AACA,gBAAgB;AAChB;AACA,wJAAwJ,cAAc;AACtK;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,GAAG;AACH,GAAG;AACH;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,YAAY;AACZ,0FAA0F,yBAAyB;AACnH;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,sHAAsH,OAAO;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,UAAU;AACV,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,UAAU;AACV,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD,uDAAuD,cAAc;AACrE;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,WAAW;AACX;AACA,GAAG,GAAG,GAAG;AACT;AACA,GAAG,GAAG;AACN,CAAC;AACD;AACA;AACA;AACA,kCAAkC;AAClC;AACA,KAAK,EAAE;AACP,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA,uCAAuC,6BAA6B;AACpE;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,CAAC;AACD,iFAAiF,cAAc;AAC/F;AACA,CAAC;AACD;AACA;AACA,+BAA+B,OAAO;AACtC;AACA,gEAAgE,OAAO;AACvE;AACA,aAAa,WAAW;AACxB,yBAAyB,cAAc;AACvC;AACA;AACA;AACA,8BAA8B,uCAAuC;AACrE;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,mDAAmD,cAAc;AACjE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,0FAA0F,cAAc;AACxG;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,cAAc;AACvE;AACA;AACA;AACA,kCAAkC,cAAc;AAChD;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,wEAAwE,OAAO,4BAA4B,kBAAkB,wLAAwL;AACrT;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,CAAC;AACD,CAAC,EAAE,QAAQ;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAmD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD,CAAC;AACD;AACA;AACA,CAAC;AACD,CAAC;AACD;AACA;AACA;AACA,wBAAwB;AACxB,GAAG;AACH,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,yDAAyD,OAAO,WAAW,OAAO;AAClF;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,4FAA4F,EAAE,SAAS,EAAE,UAAU,OAAO,WAAW,OAAO;AAC5I;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,mDAAmD,OAAO,WAAW,OAAO,wCAAwC,cAAc;AAClI;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA,uEAAuE,gCAAgC,GAAG,gCAAgC,SAAS,OAAO,WAAW,OAAO;AAC5K;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,cAAc;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY;AACZ;AACA,kCAAkC;AAClC,yDAAyD,OAAO,WAAW,OAAO;AAClF;AACA,GAAG;AACH,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC,yDAAyD,OAAO,WAAW,OAAO;AAClF;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,+BAA+B,yDAAyD;AACxF;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA,WAAW;AACX;AACA;AACA,qIAAqI,cAAc;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wCAAwC,IAAI;AACpE,OAAO;AACP;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA,OAAO;AACP,iOAAiO,uIAAuI;AACxW;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,KAAK;AACL,cAAc;AACd,KAAK;AACL;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,4YAA4Y,uBAAuB;AACna;AACA,KAAK;AACL;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,cAAc,+BAA+B;AAC7C;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,uFAAuF,iDAAiD;AACxI;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,wBAAwB,gCAAgC;AACxD,KAAK;AACL;AACA;AACA,wBAAwB,+BAA+B;AACvD,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kGAAkG;AAClG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qHAAqH,IAAI;AAC1I,8CAA8C,cAAc,0CAA0C,iBAAiB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,0GAA0G;AAC1G,GAAG;AACH,GAAG;AACH,GAAG;AACH;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW,2BAA2B,uDAAuD;AAC7F;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,mBAAmB,cAAc;AACjC;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,GAAG;AACH;AACA,sIAAsI;AACtI;AACA,uKAAuK;AACvK,GAAG;AACH;AACA;AACA,sFAAsF,iBAAiB,GAAG,eAAe,uBAAuB,EAAE,yBAAyB,EAAE,8JAA8J,IAAI,kKAAkK,IAAI,gfAAgf,IAAI,sKAAsK,IAAI,4WAA4W,EAAE,aAAa,EAAE,sBAAsB,EAAE,aAAa,EAAE,sBAAsB,EAAE,oCAAoC,EAAE,oCAAoC,EAAE,EAAE,EAAE,cAAc,EAAE;AAC/qD,GAAG;AACH;AACA,oDAAoD,EAAE;AACtD;AACA;AACA,GAAG;AACH,2CAA2C;AAC3C;AACA,GAAG;AACH;AACA,GAAG,EAAE,OAAO;AACZ;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kQAAkQ;AAClQ,GAAG;AACH;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA,8CAA8C,wBAAwB;AACtE;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yBAAyB,qCAAqC;AACnF,0BAA0B,0BAA0B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,gBAAgB,wBAAwB,WAAW,yBAAyB;AAC5E,OAAO,cAAc,wBAAwB;AAC7C;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA,sEAAsE,6BAA6B;AACnG;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,qBAAqB,sBAAsB,mFAAmF,kGAAkG,uDAAuD;AACvR;AACA,KAAK;AACL;AACA;AACA,YAAY;AACZ;AACA;AACA,iCAAiC,yBAAyB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,iEAAiE,OAAO;AACxE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,OAAO;AACV,WAAW;AACX;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oCAAoC,2BAA2B;AAC/D;AACA;AACA,GAAG;AACH;AACA,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC,EAAE,QAAQ;AACX;AACA;AACA,iCAAiC,yBAAyB;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iGAAiG,wGAAwG;AACzM,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA,UAAU;AACV,8BAA8B,eAAe;AAC7C,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D;AACA;AACA;AACA;AACA;AACA,4DAA4D,wBAAwB;AACpF;AACA,SAAS;AACT;AACA,KAAK;AACL,6DAA6D;AAC7D,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA,YAAY;AACZ;AACA,UAAU;AACV;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,6BAA6B,YAAY,iBAAiB,mBAAmB,kBAAkB,EAAE,eAAe;AAC9H;AACA;AACA;AACA,kBAAkB;AAClB,SAAS;AACT,iBAAiB;AACjB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP,qBAAqB,uFAAuF;AAC5G,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP,8BAA8B,mFAAmF;AACjH,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,gBAAgB;AAChB,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,4CAA4C,oBAAoB;AAChE;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,yFAAyF,yEAAyE;AAClK;AACA;AACA,mIAAmI,uCAAuC,sCAAsC,qCAAqC;AACrP;AACA;AACA,mGAAmG,sEAAsE;AACzK;AACA,SAAS,kEAAkE,uCAAuC;AAClH,OAAO;AACP;AACA,mBAAmB,yBAAyB,6EAA6E,6CAA6C,uCAAuC,yCAAyC;AACtP,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK,2BAA2B;AAC7L,aAAa;AACb;AACA;AACA,SAAS;AACT,OAAO;AACP,kDAAkD,UAAU;AAC5D;AACA,qDAAqD,UAAU;AAC/D,OAAO;AACP;AACA,mBAAmB,yBAAyB;AAC5C,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,6CAA6C,2BAA2B;AACxE,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,iFAAiF,6GAA6G;AAC9L;AACA;AACA;AACA,sEAAsE;AACtE,KAAK,UAAU,2DAA2D,8KAA8K;AACxP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,sKAAsK;AACrO;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,2CAA2C,EAAE;AAC7C;AACA;AACA,yBAAyB;AACzB;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,cAAc;AACd,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH,CAAC;AACD,UAAU;AACV;AACA,GAAG;AACH;AACA,GAAG;AACH,oDAAoD,cAAc;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gJAAgJ,gDAAgD;AAChM;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2GAA2G,4CAA4C;AACpK,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,GAAG;AACH;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,YAAY;AACZ;AACA,KAAK;AACL;AACA;AACA,uBAAuB,sBAAsB;AAC7C,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL,qCAAqC;AACrC;AACA,OAAO;AACP;AACA,OAAO;AACP,OAAO,EAAE,iCAAiC;AAC1C;AACA,OAAO,EAAE;AACT,cAAc;AACd;AACA,6CAA6C,YAAY,gCAAgC,EAAE;AAC3F,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,6CAA6C,YAAY,gCAAgC,EAAE;AAC3F,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,wEAAwE,oEAAoE;AAC5I;AACA,cAAc;AACd,sGAAsG,cAAc;AACpH;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA,2DAA2D;AAC3D;AACA,qBAAqB,0DAA0D;AAC/E,6CAA6C,0BAA0B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,iEAAiE,uBAAuB;AACxF,sBAAsB;AACtB,+BAA+B,YAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,6QAA6Q;AAC7Q;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,2CAA2C,YAAY;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA,OAAO;AACP;AACA;AACA,6BAA6B,YAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;AACA,cAAc;AACd;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG,EAAE,kBAAkB;AACvB;AACA,GAAG;AACH;AACA,GAAG,EAAE;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,cAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA,GAAG;AACH;AACA,8JAA8J,cAAc;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,cAAc;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,6BAA6B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD,4EAA4E,qCAAqC,GAAG,mCAAmC,KAAK,sCAAsC,KAAK,sCAAsC,GAAG,uCAAuC,KAAK,sCAAsC,GAAG,uCAAuC;AAC5W;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAU,cAAc;AAC/B,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,0EAA0E,uIAAuI;AACjN,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,+IAA+I;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,uDAAuD,WAAW;AAClE,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO,GAAG,cAAc;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,mEAAmE,cAAc;AACjF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA,oEAAoE,wBAAwB,IAAI,KAAK;AACrG;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,KAAK,UAAU,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,cAAc,6BAA6B;AAC3C,kCAAkC,qCAAqC,uEAAuE,qBAAqB;AACnK,GAAG,iBAAiB,eAAe;AACnC,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,SAAS,GAAG;AAC/C,yDAAyD,OAAO,IAAI,cAAc,EAAE,QAAQ;AAC5F,8CAA8C,kCAAkC,GAAG,GAAG,8BAA8B;AACpH,GAAG;AACH;AACA,+HAA+H;AAC/H,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,iDAAiD;AAC7G;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA,KAAK;AACL,4DAA4D,cAAc;AAC1E;AACA,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC,6EAA6E,OAAO,IAAI,qBAAqB,GAAG,QAAQ;AACxH,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,gFAAgF,cAAc;AAC9F,0DAA0D,OAAO,kBAAkB,GAAG,IAAI,EAAE;AAC5F,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,kBAAkB,kBAAkB;AAC/E,sKAAsK,OAAO,MAAM;AACnL,KAAK;AACL;AACA;AACA,iGAAiG,sCAAsC;AACvI,OAAO,QAAQ,OAAO;AACtB;AACA,oCAAoC,gBAAgB;AACpD,sGAAsG,sCAAsC;AAC5I;AACA,KAAK;AACL;AACA,iHAAiH;AACjH;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS,GAAG;AACjD,+EAA+E,OAAO,IAAI,cAAc,EAAE,QAAQ;AAClH,wDAAwD,sBAAsB;AAC9E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,8BAA8B,SAAS;AACvC,4EAA4E,OAAO,IAAI,qBAAqB,GAAG,QAAQ;AACvH,wDAAwD,sBAAsB;AAC9E;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,kBAAkB;AACpH,KAAK;AACL;AACA;AACA,+EAA+E,sCAAsC;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO,uGAAuG,gBAAgB,+FAA+F,sCAAsC,yDAAyD,sCAAsC;AAClW,KAAK;AACL,4DAA4D,sCAAsC;AAClG,qEAAqE;AACrE,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA,qCAAqC,SAAS,GAAG;AACjD,2DAA2D,OAAO,IAAI,cAAc,EAAE,QAAQ;AAC9F;AACA,uDAAuD,0FAA0F;AACjJ,mHAAmH,6CAA6C;AAChK,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,oEAAoE;AACpE,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mCAAmC;AACtF;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,icAAic,EAAE;AACnc;AACA;AACA;AACA,gFAAgF,uCAAuC;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO,wJAAwJ,sCAAsC,4BAA4B,sCAAsC;AACvQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB,GAAG,iBAAiB,mBAAmB;AAC3F,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,6BAA6B,iDAAiD,iFAAiF,0DAA0D;AACzN,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,cAAc,iGAAiG;AAC/G;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH,0BAA0B,uFAAuF,2OAA2O;AAC5V;AACA;AACA;;AAEA;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,0DAA0D,cAAc;AACxE,uCAAuC,cAAc;AACrD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,OAAO;AACP;AACA;AACA,GAAG;AACH,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uUAAuU,OAAO;AAC9U;AACA;AACA,6EAA6E,QAAQ;AACrF;AACA;AACA,6EAA6E,QAAQ;AACrF;AACA;AACA,8HAA8H,YAAY;AAC1I;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,yJAAyJ,+CAA+C;AACxM;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,YAAY,mEAAmE,qCAAqC,uEAAuE,wCAAwC,uBAAuB,iFAAiF,yEAAyE;AACpZ,GAAG;AACH;AACA,2DAA2D;AAC3D,0DAA0D,cAAc;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,gFAAgF,cAAc;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH,0DAA0D,gCAAgC;AAC1F;AACA;AACA;AACA,gFAAgF;AAChF,+DAA+D;AAC/D,KAAK;AACL,kEAAkE;AAClE,KAAK,EAAE;AACP;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA,GAAG,mBAAmB;AACtB,+CAA+C;AAC/C,iCAAiC,UAAU,mIAAmI,yBAAyB;AACvM;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,iOAAiO;AACpO,0DAA0D,cAAc;AACxE;AACA,GAAG;AACH;AACA,aAAa;AACb;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA,0BAA0B,qFAAqF;AAC/G,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,2CAA2C,cAAc,OAAO;AAChE;AACA;AACA,6FAA6F,cAAc,qBAAqB,cAAc;AAC9I;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,iBAAiB,cAAc,OAAO;AACtC;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,iBAAiB,qGAAqG;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,gBAAgB;AAChB,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO,cAAc;AACrB;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,yBAAyB,UAAU,mKAAmK;AACtM,KAAK;AACL,sBAAsB,UAAU,oJAAoJ;AACpL,KAAK;AACL,wBAAwB,UAAU,oJAAoJ;AACtL,KAAK;AACL,yBAAyB,UAAU,oJAAoJ;AACvL,KAAK;AACL,0BAA0B,UAAU,mJAAmJ,wIAAwI,gLAAgL,0BAA0B,+DAA+D;AACxkB,KAAK;AACL,0BAA0B,UAAU,oJAAoJ,mFAAmF,sFAAsF,EAAE;AACnW;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL,gCAAgC,UAAU,6HAA6H;AACvK,KAAK;AACL,gCAAgC,UAAU,6HAA6H;AACvK,KAAK;AACL,0BAA0B;AAC1B,uCAAuC,cAAc;AACrD;AACA,KAAK;AACL;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,+BAA+B,mBAAmB;AAClD,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,8CAA8C,kBAAkB;AAChE,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,wCAAwC,kEAAkE;AAC1G,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,kBAAkB;AAChE,OAAO;AACP,wCAAwC,0FAA0F;AAClI,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,0DAA0D,+DAA+D;AACzH;AACA,mBAAmB;AACnB;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,iBAAiB;AACjB;AACA,OAAO;AACP,wCAAwC,yDAAyD;AACjG,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,8CAA8C,iDAAiD;AAC/F,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO,EAAE;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG,WAAW;AACnB,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,gCAAgC;AAChC,2EAA2E,EAAE;AAC7E;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,CAAC;AAIC;AACF","file":"js/47.js","sourcesContent":["// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuOKfMZg.ttf) format(\\\"truetype\\\")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf) format(\\\"truetype\\\")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuI6fMZg.ttf) format(\\\"truetype\\\")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYMZg.ttf) format(\\\"truetype\\\")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf) format(\\\"truetype\\\")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v18/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuDyYMZg.ttf) format(\\\"truetype\\\")}:root{--dhx-gantt-theme: terrace;--dhx-gantt-font-family: Inter, Helvetica, Arial, sans-serif;--dhx-gantt-font-size: 14px;--dhx-gantt-heading-font-size: calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-heading-font-weight: 600;--dhx-gantt-important-font-size: var(--dhx-gantt-font-size);--dhx-gantt-important-line-height: 142%;--dhx-gantt-important-font-weight: 500;--dhx-gantt-regular-font-size: var(--dhx-gantt-font-size);--dhx-gantt-regular-font-weight: 400;--dhx-gantt-regular-line-height: 142%;--dhx-gantt-caption-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-caption-font-weight: 400;--dhx-gantt-caption-line-height: 132%;--dhx-gantt-base-colors-white: #FFFFFF;--dhx-gantt-base-colors-select: #EFF3FF;--dhx-gantt-base-colors-hover-color: #e0e0e0;--dhx-gantt-base-colors-border-light: #F0F0F0;--dhx-gantt-base-colors-border: #DFE0E1;--dhx-gantt-base-colors-icons: #A1A4A6;--dhx-gantt-base-colors-icons-active: #8b8e90;--dhx-gantt-base-colors-icons-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 12.6%);--dhx-gantt-base-colors-icons-hover: #76787a;--dhx-gantt-base-colors-icons-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 28.5%);--dhx-gantt-base-colors-disabled: #E9E9E9;--dhx-gantt-base-colors-select: #E0E5F3;--dhx-gantt-base-colors-readonly: var(--dhx-gantt-base-colors-icons);--dhx-gantt-base-colors-text-light: #555D63;--dhx-gantt-base-colors-text-base: #23272A;--dhx-gantt-base-colors-text-on-fill: rgba(255, 255, 255, .9);--dhx-gantt-base-colors-background: #FFFFFF;--dhx-gantt-base-colors-background-alt: #F2F2F2;--dhx-gantt-base-colors-primary: #537CFA;--dhx-gantt-base-colors-primary-hover: #4269E0;--dhx-gantt-base-colors-primary-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000000 6%);--dhx-gantt-base-colors-primary-active: #3365fb;--dhx-gantt-base-colors-primary-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000000 16.6%);--dhx-gantt-base-colors-primary-lighter: #537cfa33;--dhx-gantt-base-colors-primary-lighter: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 20%, rgba(0, 0, 0, 0) 100%);--dhx-gantt-base-colors-warning: #FAB936;--dhx-gantt-base-colors-error: #E3334E;--dhx-gantt-base-colors-error-hover: #D3233E;--dhx-gantt-base-colors-error-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000000 6%);--dhx-gantt-base-colors-error-active: #C3132E;--dhx-gantt-base-colors-error-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000000 16.6%);--dhx-gantt-base-colors-error-lighter: #E3334E33;--dhx-gantt-base-colors-error-lighter: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 20%, rgba(0, 0, 0, 0) 100%);--dhx-gantt-base-colors-error-text: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-base-colors-success: #1BC297;--dhx-gantt-container-background: var(--dhx-gantt-base-colors-background);--dhx-gantt-container-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-offtime-background: var(--dhx-gantt-base-colors-background-alt);--dhx-gantt-scale-background: var(--dhx-gantt-container-background);--dhx-gantt-scale-border-vertical: 1px solid var(--dhx-gantt-base-colors-border-light);--dhx-gantt-scale-border-horizontal: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-grid-body-background: transparent;--dhx-gantt-grid-scale-background: var(--dhx-gantt-scale-background);--dhx-gantt-grid-scale-color: var(--dhx-gantt-scale-color);--dhx-gantt-grid-scale-border-vertical: var(--dhx-gantt-scale-border-vertical);--dhx-gantt-timeline-scale-background: var(--dhx-gantt-scale-background);--dhx-gantt-timeline-scale-color: var(--dhx-gantt-scale-color);--dhx-gantt-timeline-scale-border-vertical: var(--dhx-gantt-scale-border-vertical);--dhx-gantt-grid-cell-border: 1px solid transparent;--dhx-gantt-grid-row-border: var(--dhx-gantt-scale-border-horizontal);--dhx-gantt-base-transition: .2s ease;--dhx-gantt-box-shadow-s: 0px 4px 24px 0px rgba(44, 47, 60, .08);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-icon-size: 1.5em;--dhx-gantt-base-module: 4px;--dhx-gantt-base-padding: 4px;--dhx-gantt-border-radius: var(--dhx-gantt-base-module);--dhx-gantt-transition: all .3s;--dhx-gantt-default-border: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-header-border: var(--dhx-gantt-default-border);--dhx-gantt-task-blue: var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-green: #20B56D;--dhx-gantt-task-violet: #D071EF;--dhx-gantt-task-yellow: linear-gradient(180deg, #FFB725 0%, #FFBB25 31.25%, #FAEA27 100%);--dhx-gantt-baseline-background-0: #00B4FF;--dhx-gantt-baseline-background-1: #DF6DE3;--dhx-gantt-baseline-background-2: #FF957D;--dhx-gantt-baseline-background-3: #25C79D;--dhx-gantt-baseline-background-4: #FF6FB0;--dhx-gantt-baseline-background-5: #FFC470;--dhx-gantt-baseline-background-6: #FDE720;--dhx-gantt-baseline-background-7: #47AFD0;--dhx-gantt-baseline-background-8: #DA9DFF;--dhx-gantt-baseline-background-9: #BEE964;--dhx-gantt-task-font-size: var(--dhx-gantt-regular-font-size);--dhx-gantt-task-line-height: var(--dhx-gantt-regular-line-height);--dhx-gantt-task-font-weight: var(--dhx-gantt-regular-font-weight);--dhx-gantt-task-background-primary: var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-border-radius: var(--dhx-gantt-border-radius);--dhx-gantt-task-background: var(--dhx-gantt-task-blue);--dhx-gantt-task-border: none;--dhx-gantt-task-color: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-project-color: var(--dhx-gantt-task-color);--dhx-gantt-task-line-text: var(--dhx-gantt-container-color);--dhx-gantt-task-row-border: 1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-task-row-background: var(--dhx-gantt-container-background);--dhx-gantt-task-row-background--odd: var(--dhx-gantt-container-background);--dhx-gantt-task-progress-color: rgba(0, 0, 0, .15);--dhx-gantt-project-progress-color: var(--dhx-gantt-task-progress-color);--dhx-gantt-project-background: var(--dhx-gantt-task-green);--dhx-gantt-milestone-background: var(--dhx-gantt-task-violet);--dhx-gantt-task-marker-color: var(--dhx-gantt-task-background);--dhx-gantt-popup-background: var(--dhx-gantt-container-background);--dhx-gantt-popup-color: var(--dhx-gantt-container-color);--dhx-gantt-popup-border: none;--dhx-gantt-popup-border-radius: var(--dhx-gantt-border-radius);--dhx-gantt-tooltip-background: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-tooltip-color: var(--dhx-gantt-container-background);--dhx-gantt-tooltip-border: none;--dhx-gantt-tooltip-border-radius: var(--dhx-gantt-popup-border-radius);--dhx-gantt-link-background: var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-background-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-link-critical-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-link-handle-offset: 8px;--dhx-gantt-link-handle-size: 10px;--dhx-gantt-link-handle-border: var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-handle-border-hover: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-progress-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-progress-handle-background: var(--dhx-gantt-base-colors-icons);--dhx-gantt-progress-handle-background-hover: var(--dhx-gantt-base-colors-icons-hover);--dhx-gantt-control-height: 32px;--dhx-gantt-checkbox-height: 20px;--dhx-gantt-lightbox_font-family: var(--dhx-gantt-font-family);--dhx-gantt-lightbox-font-size: var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-font-weight: var(--dhx-gantt-important-font-weight);--dhx-gantt-lightbox-background: var(--dhx-gantt-popup-background);--dhx-gantt-lightbox-border: var(--dhx-gantt-popup-border);--dhx-gantt-lightbox-control-border: var(--dhx-gantt-default-border);--dhx-gantt-lightbox-color: var(--dhx-gantt-popup-color);--dhx-gantt-lightbox-padding: 12px;--dhx-gantt-lightbox-title-background: var(--dhx-gantt-base-colors-select);--dhx-gantt-lightbox-title-color: var(--dhx-gantt-lightbox-color);--dhx-gantt-lightbox-title-font-size: var(--dhx-gantt-heading-font-size);--dhx-gantt-lightbox-max-width: 622px;--dhx-gantt-lightbox-wide-max-width: 738px;--dhx-gantt-lightbox-width: 560px;--dhx-gantt-btn-order: row-reverse;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-outline-background: transparent;--dhx-gantt-btn-outline-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-border-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-background-hover: var(--dhx-gantt-base-colors-primary-lighter);--dhx-gantt-btn-outline-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-border-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-background-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-color-active: var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-outline-border-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-background-disabled: transparent;--dhx-gantt-btn-outline-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-outline-border-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-text-transform: none;--dhx-gantt-info-background: var(--dhx-gantt-popup-background);--dhx-gantt-info-color: var(--dhx-gantt-popup-color);--dhx-gantt-info-border: var(--dhx-gantt-popup-border);--dhx-gantt-info-shadow: var(--dhx-gantt-box-shadow-m);--dhx-gantt-modal-background: var(--dhx-gantt-popup-background);--dhx-gantt-modal-color: var(--dhx-gantt-popup-color);--dhx-gantt-modal-border: var(--dhx-gantt-popup-border);--dhx-gantt-modal-padding: 16px;--dhx-gantt-modal-width: 320px;--dhx-gantt-modal-border-radius: var(--dhx-gantt-popup-border-radius);--dhx-gantt-undo-delete-background: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-undo-delete-color: var(--dhx-gantt-task-color)}:root[data-gantt-theme=dark]{--dhx-gantt-theme: dark;--dhx-gantt-base-colors-disabled: #3d3d3d;--dhx-gantt-base-colors-text-light: #AAA;--dhx-gantt-base-colors-text-base: rgba(255, 255, 255, .9);--dhx-gantt-base-colors-background: #141414;--dhx-gantt-base-colors-background-alt: #383838;--dhx-gantt-base-colors-border: #4B4B4B;--dhx-gantt-base-colors-border-light: #4B4B4B;--dhx-gantt-navline-font-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-base-colors-primary: #3B72F8;--dhx-gantt-base-colors-error: #EB284F;--dhx-gantt-base-colors-select: #2A2A2A;--dhx-gantt-base-colors-hover-color: #2A2A2A;--dhx-gantt-base-colors-icons: #AAAAAA;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #1B1B1C;--dhx-gantt-popup-border: 1px solid #4B4B4B;--dhx-gantt-btn-font-weight: 600;--dhx-gantt-undo-delete-background: var(--dhx-gantt-popup-background);--dhx-gantt-link-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-background)}:root[data-gantt-theme=meadow]{--dhx-gantt-theme: meadow;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-base-colors-select: #ffebbc;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-container-color: #3f3f3f;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-scale-background: #f4f2ea;--dhx-gantt-scale-color: #42464b;--dhx-gantt-task-color: #1e2022;--dhx-gantt-project-background: #c7d8f7;--dhx-gantt-milestone-background: #DB7DC5;--dhx-gantt-task-background: #e1ffd4;--dhx-gantt-task-border: 1px solid #3588c5;--dhx-gantt-task-progress-color: #a7d991;--dhx-gantt-project-progress-color: #9ab9f1;--dhx-gantt-link-background: #ffb96d;--dhx-gantt-lightbox-title-background: #f4f2ea;--dhx-gantt-popup-background: #fcfaf3;--dhx-gantt-popup-color: var(--dhx-gantt-container-color);--dhx-gantt-popup-border: 1px solid #cac8bd}:root[data-gantt-theme=skyblue]{--dhx-gantt-theme: skyblue;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-scale-background: #dfedff;--dhx-gantt-scale-color: #42464b;--dhx-gantt-task-color: #1e2022;--dhx-gantt-project-background: #eff6fb;--dhx-gantt-task-background: #eff6fb;--dhx-gantt-milestone-background: #DB7DC5;--dhx-gantt-task-border: 1px solid #3588c5;--dhx-gantt-task-progress-color: linear-gradient(0deg, #abcee8 0, #5aa0d3 36%, #bfdaee);--dhx-gantt-link-background: #4a8f43;--dhx-gantt-lightbox-title-background: #eff6fb}[dir]:root[data-gantt-theme=skyblue] .gantt_grid_scale, [dir]:root[data-gantt-theme=skyblue] .gantt_task_scale, [dir]:root[data-gantt-theme=skyblue] .gantt_task_vscroll{box-shadow:inset 0 1px 1px #fff;background-image:linear-gradient(to bottom,#e4f0ff,#dfedff,#d5e8ff)}:root[data-gantt-theme=broadway]{--dhx-gantt-theme: broadway;--dhx-gantt-font-family: Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary: #0288D1;--dhx-gantt-base-colors-select: #fff3a1;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-base-colors-border: #cecece;--dhx-gantt-halfhour-border: 1px solid #e8e8e8;--dhx-gantt-task-title-font-size: 12px;--dhx-gantt-task-text-font-size: 14px;--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 22px;--dhx-gantt-heading-font-weight: 300;--dhx-gantt-caption-font-size: 14px;--dhx-gantt-caption-font-weight: 400;--dhx-gantt-scale-color: #767676;--dhx-gantt-border-radius: 0;--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-grid-scale-background: #4f4f4f;--dhx-gantt-grid-scale-border-vertical: 1px solid #c1c1c1;--dhx-gantt-grid-scale-color: #e1e1e1;--dhx-gantt-timeline-scale-background: #dbdbdb;--dhx-gantt-timeline-scale-border-vertical: 1px solid #ebebeb;--dhx-gantt-timeline-scale-color: #494949;--dhx-gantt-grid-body-background: #dbdbdb;--dhx-gantt-lightbox-title-background: #4f4f4f;--dhx-gantt-lightbox-title-color: #e1e1e1;--dhx-gantt-task-color: #FFF;--dhx-gantt-link-background: #ffb96d;--dhx-gantt-project-background: #65c16f;--dhx-gantt-project-progress-color: #46ad51;--dhx-gantt-task-progress-color: #04a4f0;--dhx-gantt-task-background: #17b2fb;--dhx-gantt-milestone-background: #DB7DC5}:root[data-gantt-theme=broadway] .gantt_grid_data{--dhx-gantt-task-row-background: var(--dhx-gantt-grid-body-background);--dhx-gantt-task-row-background--odd: var(--dhx-gantt-grid-body-background)}:root[data-gantt-theme=material]{--dhx-gantt-theme: material;--dhx-gantt-font-family: Roboto, Inter, Helvetica, Arial, sans-serif;--dhx-gantt-base-colors-primary: #448aff;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background: #1de9b6;--dhx-gantt-milestone-background: #ffc107;--dhx-gantt-task-progress-color: rgba(0, 0, 0, .2);--dhx-gantt-project-color: rgba(0, 0, 0, .6);--dhx-gantt-base-colors-border: #e0e0e0;--dhx-gantt-task-title-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-task-text-font-size: var(--dhx-gantt-font-size);--dhx-gantt-task-text-font-weight: 500;--dhx-gantt-heading-font-size: 20px;--dhx-gantt-caption-font-size: var(--dhx-gantt-font-size);--dhx-gantt-caption-font-weight: 500;--dhx-gantt-btn-font-weight: 500;--dhx-gantt-heading-font-weight: 500;--dhx-gantt-hours-font-size: calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-base-colors-text-base: rgba(0, 0, 0, .75);--dhx-gantt-base-transition: .15s ease;--dhx-gantt-header-border: 1px solid transparent;--dhx-gantt-scale-color: rgba(0, 0, 0, .54);--dhx-gantt-base-colors-select: rgba(0, 199, 181, .2);--dhx-gantt-base-colors-hover-color: var(--dhx-gantt-base-colors-select);--dhx-gantt-border-radius: 0;--dhx-gantt-task-border-radius: 18px;--dhx-gantt-btn-text-transform: uppercase;--dhx-gantt-btn-padding: 1px 20px 0;--dhx-gantt-link-handle-size: 16px;--dhx-gantt-progress-handle-background: #FFF;--dhx-gantt-progress-handle-border: var(--dhx-gantt-base-colors-border);--dhx-gantt-box-shadow-s: 0 3px 5px 0 rgba(0, 0, 0, .1);--dhx-gantt-box-shadow-m: 0px 4px 24px 0px rgba(44, 47, 60, .36);--dhx-gantt-box-shadow-l: 0px 4px 24px 0px rgba(44, 47, 60, .56);--dhx-gantt-lightbox-title-background: var(--dhx-gantt-container-background);--dhx-gantt-lightbox-title-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-lightbox-title-font-size: calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-lightbox-padding: 30px;--dhx-gantt-lightbox-width: 610px;--dhx-gantt-lightbox-wide-max-width: 640px;--dhx-gantt-btn-order: row;--dhx-gantt-btn-outline-border-color: transparent;--dhx-gantt-btn-outline-border-hover: transparent;--dhx-gantt-btn-outline-border-active: transparent;--dhx-gantt-btn-outline-border-color-disabled: transparent}:root[data-gantt-theme=material] .dhx_cal_ltitle{font-weight:400;text-transform:uppercase}[dir]:root[data-gantt-theme=material] .dhx_cal_ltitle{padding:18px var(--dhx-gantt-lightbox-padding) 8px;border-bottom-color:transparent}:root[data-gantt-theme=material] .gantt_grid .gantt_grid_scale .gantt_grid_head_cell,:root[data-gantt-theme=material] .gantt_task .gantt_task_scale .gantt_scale_cell{font-weight:500;text-transform:uppercase}:root[data-gantt-theme=material] .dhx_cal_ltitle_controls{--dhx-gantt-base-colors-icons: var(--dhx-gantt-lightbox-title-color)}[dir]:root[data-gantt-theme=material] .gantt_cal_lsection{margin-top:12px;margin-bottom:4px}[dir]:root[data-gantt-theme=material] .gantt_cal_ltitle{padding:18px var(--dhx-gantt-lightbox-padding);border-bottom-color:transparent}[dir]:root[data-gantt-theme=material] .gantt_cal_lcontrols{padding-bottom:40px;padding-top:30px}:root[data-gantt-theme=material] .gantt_add,:root[data-gantt-theme=material] .gantt_grid_head_add{--dhx-gantt-base-colors-icons: #70d0c2;--dhx-gantt-base-colors-icons-active: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 12.6%);--dhx-gantt-base-colors-icons-hover: color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000000 28.5%)}:root[data-gantt-theme=material] .gantt_grid_data .gantt_row,:root[data-gantt-theme=material] .gantt_grid_data .gantt_row.odd{transition:background var(--dhx-gantt-base-transition)}:root[data-gantt-theme=material] .gantt_grid_head_cell{transition:border-color ground var(--dhx-gantt-base-transition)}[dir=ltr]:root[data-gantt-theme=material] .gantt_grid_head_cell{border-right:1px solid transparent}[dir=rtl]:root[data-gantt-theme=material] .gantt_grid_head_cell{border-left:1px solid transparent}[dir=ltr]:root[data-gantt-theme=material] .gantt_grid_scale:hover .gantt_grid_head_cell{border-right:var(--dhx-gantt-grid-scale-border-vertical)}[dir=rtl]:root[data-gantt-theme=material] .gantt_grid_scale:hover .gantt_grid_head_cell{border-left:var(--dhx-gantt-grid-scale-border-vertical)}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap .gantt_grid_column_resize{transition:background var(--dhx-gantt-base-transition)}[dir]:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:transparent}[dir]:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap:hover .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border)}:root[data-gantt-theme=material] div.gantt_grid_scale:after,:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{content:\\\"\\\";width:100%;display:block;height:1px;position:absolute;z-index:1}[dir]:root[data-gantt-theme=material] div.gantt_grid_scale:after, [dir]:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{background-color:transparent;box-shadow:0 1px 2px #0003,0 2px 3px #0000001a}:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{bottom:-1px}:root[data-gantt-theme=material] .gantt_link_control{--dhx-gantt-link-handle-border: var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background: #FFF;--dhx-gantt-link-handle-border-hover: var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background-hover: #FFF}:root[data-gantt-theme=material] .gantt_task_line.gantt_milestone{--dhx-gantt-task-border-radius: 2px}[dir]:root[data-gantt-theme=material] .gantt_task_line.gantt_milestone{margin-top:-1px}:root[data-gantt-theme=contrast-white]{--dhx-gantt-theme: contrast-white;--dhx-gantt-base-colors-disabled: #C2C2C2;--dhx-gantt-base-colors-text-light: #303030;--dhx-gantt-base-colors-text-base: #303030;--dhx-gantt-base-colors-background: #FFFFFF;--dhx-gantt-base-colors-background-alt: #929292;--dhx-gantt-base-colors-border: #4D595B;--dhx-gantt-base-colors-border-light: #4D595B;--dhx-gantt-base-colors-text-on-fill: #FFF;--dhx-gantt-base-colors-primary: #0A47CD;--dhx-gantt-base-colors-text-on-fill: rgba(255, 255, 255, .9);--dhx-gantt-task-background: #0A47CD;--dhx-gantt-task-border: 1px solid rgba(0, 0, 0, .1);--dhx-gantt-base-colors-warning: #FCBA2E;--dhx-gantt-base-colors-success: #77D257;--dhx-gantt-base-colors-error: #ee3d31;--dhx-gantt-base-colors-error-text: #141414;--dhx-gantt-btn-color: #FFFFFF;--dhx-gantt-btn-color-hover: #FFFFFF;--dhx-gantt-btn-color-active: #FFFFFF;--dhx-gantt-base-colors-select: #E7E5E5;--dhx-gantt-base-colors-hover-color: #E7E5E5;--dhx-gantt-base-colors-icons: #303030;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #FFF;--dhx-gantt-popup-border: 1px solid #4D595B;--dhx-gantt-font-size: 16px;--dhx-gantt-heading-font-size: 24px;--dhx-gantt-important-font-size: 16px;--dhx-gantt-regular-font-size: 16px;--dhx-gantt-caption-font-size: 16px;--dhx-gantt-btn-outline-color-hover: #212121;--dhx-gantt-btn-outline-color-active: #FFFFFF}:root[data-gantt-theme=contrast-black]{--dhx-gantt-theme: contrast-black;--dhx-gantt-base-colors-disabled: #3d3d3d;--dhx-gantt-base-colors-text-light: #cfcfcf;--dhx-gantt-base-colors-text-base: #FFFFFF;--dhx-gantt-base-colors-background: #141414;--dhx-gantt-base-colors-background-alt: #4f4f4f;--dhx-gantt-base-colors-border: rgba(255, 255, 255, .8);--dhx-gantt-base-colors-border-light: rgba(255, 255, 255, .8);--dhx-gantt-base-colors-text-on-fill: #141414;--dhx-gantt-base-colors-primary: #A395FF;--dhx-gantt-task-background: var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background: #77D257;--dhx-gantt-milestone-background: #FCBA2E;--dhx-gantt-task-background: #A395FF;--dhx-gantt-task-border: 1px solid rgba(0, 0, 0, .1);--dhx-gantt-base-colors-warning: #694E02;--dhx-gantt-base-colors-success: #115700;--dhx-gantt-base-colors-error: #FFA7A0;--dhx-gantt-base-colors-error-text: #141414;--dhx-gantt-base-colors-select: #2A2A2A;--dhx-gantt-base-colors-hover-color: #2A2A2A;--dhx-gantt-base-colors-icons: #AAAAAA;--dhx-gantt-scale-color: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background: #1B1B1C;--dhx-gantt-undo-delete-background: var(--dhx-gantt-popup-background);--dhx-gantt-undo-delete-color: var(--dhx-gantt-base-colors-text-base);--dhx-gantt-popup-border: 1px solid #4B4B4B;--dhx-gantt-font-size: 16px;--dhx-gantt-heading-font-size: 24px;--dhx-gantt-important-font-size: 16px;--dhx-gantt-regular-font-size: 16px;--dhx-gantt-caption-font-size: 16px;--dhx-gantt-btn-outline-color-hover: var(--dhx-gantt-base-colors-text-light);--dhx-gantt-btn-outline-color-active: var(--dhx-gantt-base-colors-text-light)}.dhx_gantt_button--mixin{color:var(--dhx-gantt-btn-color);height:var(--dhx-gantt-control-height);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);--dhx-gantt-icon-size: 18px}[dir] .dhx_gantt_button--mixin{background:var(--dhx-gantt-btn-background);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);padding:var(--dhx-gantt-btn-padding, 0 20px);cursor:pointer}.dhx_gantt_button--mixin:hover{color:var(--dhx-gantt-btn-color-hover)}[dir] .dhx_gantt_button--mixin:hover{background:var(--dhx-gantt-btn-background-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_button--mixin:active{color:var(--dhx-gantt-btn-color-active)}[dir] .dhx_gantt_button--mixin:active{background:var(--dhx-gantt-btn-background-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_button--mixin:disabled{color:var(--dhx-gantt-btn-color-disabled)}[dir] .dhx_gantt_button--mixin:disabled{background:var(--dhx-gantt-btn-background-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.dhx_gantt_button_outline--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_danger_outline--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-lighter);--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-base-colors-icons)}.dhx_gantt_button_danger_link--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}[dir] .dhx_gantt_button_danger_link--mixin{padding:6px 0}.dhx_gantt_button_link--mixin{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}[dir] .dhx_gantt_button_link--mixin{padding:6px 0}.dhx_gantt_button_icon--mixin{min-width:32px;height:32px;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}[dir] .dhx_gantt_button_icon--mixin{border-radius:50%;padding:6px 0}.dhx_gantt_button_icon--mixin:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.dhx_gantt_button_icon--mixin:active{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-active)}.dhx_gantt_button_icon--mixin:disabled{--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color-disabled)}.dhx_gantt_btn,.dhx_gantt_btn_danger,.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline,.dhx_gantt_btn_danger_link,.gantt_qi_big_icon,.gantt_btn_set{color:var(--dhx-gantt-btn-color);height:var(--dhx-gantt-control-height);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);--dhx-gantt-icon-size: 18px}[dir] .dhx_gantt_btn, [dir] .dhx_gantt_btn_danger, [dir] .dhx_gantt_btn_outline, [dir] .dhx_gantt_btn_danger_outline, [dir] .dhx_gantt_btn_danger_link, [dir] .gantt_qi_big_icon, [dir] .gantt_btn_set{background:var(--dhx-gantt-btn-background);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);padding:var(--dhx-gantt-btn-padding, 0 20px);cursor:pointer}.dhx_gantt_btn:hover,.dhx_gantt_btn_danger:hover,.dhx_gantt_btn_outline:hover,.dhx_gantt_btn_danger_outline:hover,.dhx_gantt_btn_danger_link:hover,.gantt_qi_big_icon:hover,.gantt_btn_set:hover{color:var(--dhx-gantt-btn-color-hover)}[dir] .dhx_gantt_btn:hover, [dir] .dhx_gantt_btn_danger:hover, [dir] .dhx_gantt_btn_outline:hover, [dir] .dhx_gantt_btn_danger_outline:hover, [dir] .dhx_gantt_btn_danger_link:hover, [dir] .gantt_qi_big_icon:hover, [dir] .gantt_btn_set:hover{background:var(--dhx-gantt-btn-background-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_btn:active,.dhx_gantt_btn_danger:active,.dhx_gantt_btn_outline:active,.dhx_gantt_btn_danger_outline:active,.dhx_gantt_btn_danger_link:active,.gantt_qi_big_icon:active,.gantt_btn_set:active{color:var(--dhx-gantt-btn-color-active)}[dir] .dhx_gantt_btn:active, [dir] .dhx_gantt_btn_danger:active, [dir] .dhx_gantt_btn_outline:active, [dir] .dhx_gantt_btn_danger_outline:active, [dir] .dhx_gantt_btn_danger_link:active, [dir] .gantt_qi_big_icon:active, [dir] .gantt_btn_set:active{background:var(--dhx-gantt-btn-background-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_btn:disabled,.dhx_gantt_btn_danger:disabled,.dhx_gantt_btn_outline:disabled,.dhx_gantt_btn_danger_outline:disabled,.dhx_gantt_btn_danger_link:disabled,.gantt_qi_big_icon:disabled,.gantt_btn_set:disabled{color:var(--dhx-gantt-btn-color-disabled)}[dir] .dhx_gantt_btn:disabled, [dir] .dhx_gantt_btn_danger:disabled, [dir] .dhx_gantt_btn_outline:disabled, [dir] .dhx_gantt_btn_danger_outline:disabled, [dir] .dhx_gantt_btn_danger_link:disabled, [dir] .gantt_qi_big_icon:disabled, [dir] .gantt_btn_set:disabled{background:var(--dhx-gantt-btn-background-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button{color:var(--dhx-gantt-btn-color);height:var(--dhx-gantt-control-height);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);--dhx-gantt-icon-size: 18px}[dir] .gantt_popup_button{background:var(--dhx-gantt-btn-background);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);padding:var(--dhx-gantt-btn-padding, 0 20px);cursor:pointer}.gantt_popup_button:hover{color:var(--dhx-gantt-btn-color-hover)}[dir] .gantt_popup_button:hover{background:var(--dhx-gantt-btn-background-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_popup_button:active{color:var(--dhx-gantt-btn-color-active)}[dir] .gantt_popup_button:active{background:var(--dhx-gantt-btn-background-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_popup_button:disabled{color:var(--dhx-gantt-btn-color-disabled)}[dir] .gantt_popup_button:disabled{background:var(--dhx-gantt-btn-background-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button:not(.gantt_ok_button){--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_ok_button{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger,.dhx_gantt_button_danger_outline{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_link,.gantt_qi_big_icon{--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}[dir] .dhx_gantt_button_link, [dir] .gantt_qi_big_icon{padding:6px 0}@font-face{font-family:dhx-gantt-icons;src:url(data:font/woff;base64,d09GRgABAAAAAAc4AAsAAAAADHgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAQQAAAGA9+EtyY21hcAAAAYgAAACQAAACQhPM9m5nbHlmAAACGAAAAm8AAANwLSc+hmhlYWQAAASIAAAALgAAADZYjaBKaGhlYQAABLgAAAAbAAAAJAJRAT1obXR4AAAE1AAAABcAAABEEgYAAGxvY2EAAATsAAAAJAAAACQGPgcwbWF4cAAABRAAAAAfAAAAIAEfADxuYW1lAAAFMAAAAT4AAAJqJkdDzHBvc3QAAAZwAAAAxgAAAgGDb/LgeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGHkZ5zAwMrAwPCc4RKQ1ILSExj4GHwZGJgYWJkZsIKANNcUhgMfGT8KMOoAudKM7gzcQJoRRRETADUhCewAAAB4nO2R2Q0DIQwFh132vigkRaSgfKXStEIFGz9eyoil8QjLIGQDA9AHjyBDepNQvKKaWr1nbfXMs/Vk1Wu578hJOc655S56c7w4MjGzxL2NnYOTixINI//YW/78TkUzNG2qnUHujbZTs9Gc62C0uToa5MkgzwZ5Mcir0UbrZpB3o9/VwyCfBvkyyMVQvigJKT14nG2SPWzTQBSA37k4rm3ZFzt2jKlbgS/KVWpJJTuuaVDjCpoIFCSKFIkNCTUSC3MlhLJ0QpWgnbIwdkRVmFiAsStTYWRhpIroAEUFFZ7dRLTA3ene6b3v/dy9AwLpOMI5DhCHduxIPHY23GVzddVsHPUamQQYcd8zjkUpJfFtN7MvB39x+/AFVOS4xCVHcmIn5p/NZsNsNs1G02x+HB1wIS0A/PoGPwmFHCjoFYVRmsAx+KP19RtUUZLaZO3mE+X4QIExZL8SgcxmrH6GDg1mPNzcvKOq6sF+c+ni0kpPPd5TyezxXpbjkBSx/mEOhn5YmM3frq1d12R5IZqIrj2WD2U4yYH1nMoxpA3OjNDobW2t/C/HWHb3AZFABg1s9LOKcRjMLxLmhDaLOZOYHUYtqnQU2nM7nXtaXZvpJyolutpzu681zXUBhnFeZj0x4ALGCYpWzi9X5/899BRKLYpvdFp00s2irTNiGJcwwuAcULAwriOxKPYpceL56hwpU2KH8Sv6TN/NiV5tUhRLYrJzdWeXPtX3xcmaJ2qoCVAz6vN76Kcvi/29m9T7STLSv0EL6hPCu0mCppF+ANtpFfh/wkG/v+H+0Q+y/8Jslj11aIeDltvCtZFurRH3iZzP+jFFcpTkKmSRVOvE+SDlctLzcVPTzPEXYj4vPhAFXXmn6IKIN03HD+xlHjjMwBx6+xWhWheCKcHShYSUuVQhzNcFa0oIgzqJqmUJvxTWEnYLpQlKJ0rlE3G7oMhWfrroVlihwCquX7ukdz3vSrtdQitnHqUe48j2LVW2NB2Z4HKp4C/4xelb7fseFvIbSFeZnQB4nGNgZGBgAOLHyUwC8fw2Xxm4GXWAIgw1qhsaEPT/r4zKYHEOBiaQKAABDwkjAAB4nGNgZGBg1GFggJD//zMqMzAyoAJBADfFApAAeJxjYGBgYNRBw4xoNA7M8AuCAVayBBUAAAAAAAAUACgAQgBYAHQAigCmAMoA9gEcASgBNAFAAVQBcAG4eJxjYGRgYBBkMGBgYQABJiDmAkIGhv9gPgMADyEBXAB4nIWRPU7DQBSEx/lDJBIgIVFG24CQkJ0fUaWhSzqKFOkdZ+04snctexMlDSfgJJyAE3AETsIBGC9buSD7JO/3Zt7sKwzgBl/wUB8P1/ZbnxYu2P1xm3TnuEO+d9zFAM+Oe9RfHPfxhFfHA9zixBe8ziWVId4dt3CFD8dt6p+OO+Rvx11u/XHcw9DrO+5j5T06HuDBe9tsj34SKmP8NNKqWspkn4VlQ220K1lWqVZiEowbzkIqWYZGbsT6JKpDMjUmFnGpczHXysgs06Io9U5GJtgaU8xGo9jpQaRzbLDFET4ShFAwLB8pImh2FZaQdPbI6JZnZv93V3yp5J3aXmCCAOMzmQUzyuZCOpLTAmv+H0HvwMzUJmL2MWc0ctLcZuvpjKWpFNbbUYmoB9xYpwrMMGLFjfnAbs9/AdxXcxgAAHichZDbTsMwEEQ9baEXrr2pIPUJAb9lRfG2teR4I3tN+HyqFF5WAfbxzOisNGZkLjc2w7fECGNMcIVrTDHDHAvc4BZ3uMcDHrHEyjy706c9VlHE+pqjrVLizjru4m4wKe1G8TpwpjcNOWZJlY9iAx3kLBQh9/pPK3Pw7v33UvLH04/rj4+XWi/bqpajQEJ7TVmy/aAkvq7CWoUHTs2TYg3F0o+k5+uD/r+eqfGxZO1uQ8kviiUu0ZH73nvQJb6hZMwXQc6zQAAA) format(\\\"woff\\\"),url(data:font/woff2;base64,d09GMgABAAAAAAVgAAsAAAAADHgAAAUSAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACEQgqGcIV9ATYCJANECyQABCAFhGoHhAEbGwsjEXaDUZpA9o+E7LTkMj3uJ6P42UJ6Z4Ln+XfLzk2CvYeOpONCV4Ua1JQhX1URmFVluib+pVo1AmBTZxn2J/LjFhx7e7s/rSHL0LOlnKzQ/7+fq5uXLMxKJUVK+qL33Y+qJLHEIRInHVGNYiGPUMhUL60DAmPTWQn6KmyefREEUFxCDCPes3+S4LTR82ZQgoUYLzCvLNMmTxyN1wvDqqgseBHcTTeVkOzCBfzJl0DL+M13BRkABi4TcajBExLjeP2wHA5LFCiVXmh9zYgzQG++CUQPLELmVMdNw5zmRTFRqjiLrubcFgKHw7kch2XIHvZsIBiYWLi8f/M8ePGh0PgJECREGMSNIH70n+eH4bAUwBgNANAEAC0A0AUAugFADwDoBQB9AKACADUA6AcAAwBgEAAMAYBhNMRBZLhBDVAJ/A9yMUJZZhGRcQZmwWEUB8vn83ssYg2SleX1iRO7tMs0LX8o0smyHI3TnEy1tjlKki1OW1PKaVlMbmpLNvuq1hjRopqcKjTsMEebynCoqqXNKcTmczJsZWrDWZXupLe2i6hmjXJsVaDQ4mxNr9q3JbO6fXKawqQSZ0tB05DW9tV2LDM4iXacIcOcYUMdrVQRhtIu6013lU7vK0jueyAjsrr9wUInzy3PZu9YfWfHc1ufefj2Vbc99LTTmrGbMs+qLc+/vH/VI6+8oLd+9pasviO537M6Cr35dHGmRzwyRhSLxOPcc+miPk5ZNfnn+0giEU9ECmpAQ0//coJFsevWlK+5rlfv4MabQzczNdF1Z9XOroMHqXQ2mj0c/S/Ky9dcuaB0wZXdu/mXbDq5KZ3ouqtqV9dBlefsG9MHdo1T/+tMZtO45eOGv/hx7OPW4seKSY9VBwrkIL6+5s555u0D27cFg2//646/fPNH8UD88vjP+/dff32xKqlHD/zAstSB//l/82PFjw0T+/Urzl8H32THjRw57pYJ8yKfqE/VJ5F5LKvNj2V/bfylI9YQ6/il8ddsbOCjtbdsuvzccrv4y5rOl0Vrvyyu2e2tsb9b1q8sWXb1qCR5rMitEvIZyY21p2b7D5pDkDvBOQkZpuNiSDThpNhVcQfEAz7eJVhqJUvcNzxmyS9PKwIc4F4oygL8KkUknJXoW/t9+GqsER4ZuuG4V0sUYFn946ugd6upTcOL4cYLNGGGU+VyUvtO5p8mpqJl0ZuM2wN7KgxEtCiXfHGWNACFAnKIhDDv7jZBCDWuCAYeQnPZnCo2aktfb3WhucLqJkQXq6KVgZtr8lmMiVg+hAq2GVaDIFmrSQXPqy39t1YXNsesbipEWRUpafpImgu/ZIV2W257FMn9SJi+wc6hZ0Vrma/+gZMnVHVRKZ/iBAjcC2g17CotthExyjBFdSQUCIHUxHSGUQonMh3K0ri3VIwUM+22HNujSI4fCdM34J059NysAxV1/4GTT7yjqCmomqtPBLs49wI6ZtiHMWkxSePGGFXUZYqKYzemoRykTDGZ1POdYZQC1yFnOlBavZmmpNixEh/5ocCfyj6IiCGmWOISt3jEK77P6Gp+CUhQQhKWiORxd520raat1vbMtLa6GBxvlBPN06Xr4hgowac/M2ES7j1KG8AY3tEkAvqjgQcTBa+/7Ez21ukZ0GfCRv5duaohgMCjwnckqV2AxY99uCiZzhDH2zgtAs5nqM+7jeyue72MVL7XpDegKczprSLTjBr0pW5bT2nxETjLAAA=) format(\\\"woff2\\\")}.dhx_gantt_icon:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.dhx_gantt_icon.dhx_gantt_icon_arrow_down:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_arrow_up:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_close:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_constraint_left_dotted:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_constraint_left_solid:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_constraint_right_dotted:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_constraint_right_solid:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_delete:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_dots_vertical:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_edit:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_menu_down:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_menu_right:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_minus:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_plus:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_rounded_arrow_right:before{content:\\\"\\\"}.dhx_gantt_icon.dhx_gantt_icon_timer:before{content:\\\"\\\";max-width:100%;max-height:100%;font-size:1em}.gantt_container{color:var(--dhx-gantt-container-color);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);position:relative;white-space:nowrap;overflow-x:hidden;overflow-y:hidden}[dir] .gantt_container{background:var(--dhx-gantt-container-background);border:1px solid var(--dhx-gantt-base-colors-border)}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_task,.gantt_grid{position:relative;overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);box-sizing:border-box}[dir] .gantt_grid_scale, [dir] .gantt_task_scale{border-bottom:var(--dhx-gantt-scale-border-horizontal)}.gantt_grid_scale{color:var(--dhx-gantt-grid-scale-color)}[dir] .gantt_grid_scale{background:var(--dhx-gantt-grid-scale-background)}.gantt_task_scale{color:var(--dhx-gantt-timeline-scale-color)}[dir] .gantt_task_scale{background:var(--dhx-gantt-timeline-scale-background)}[dir] .gantt_task_vscroll{background:var(--dhx-gantt-container-background)}.gantt_scale_line{box-sizing:border-box}[dir] .gantt_scale_line{border-top:var(--dhx-gantt-scale-border-horizontal)}[dir] .gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{display:inline-block;vertical-align:top;position:relative;height:100%;box-sizing:border-box;overflow:hidden}[dir] .gantt_grid_head_cell{text-align:center;cursor:default}[dir=ltr] .gantt_grid_head_cell{border-right:var(--dhx-gantt-grid-scale-border-vertical)}[dir=rtl] .gantt_grid_head_cell{border-left:var(--dhx-gantt-grid-scale-border-vertical)}[dir] .gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden;position:relative}[dir] .gantt_grid_data{background:var(--dhx-gantt-grid-body-background)}.gantt_row{position:relative;-webkit-user-select:none;user-select:none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;position:relative;opacity:.6}[dir] .gantt_add, [dir] .gantt_grid_head_add{cursor:pointer}.gantt_add:before,.gantt_grid_head_add:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_add:before,.gantt_grid_head_add:before{content:\\\"\\\"}.gantt_grid_head_cell.gantt_grid_head_add{opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{opacity:1}[dir] .gantt_grid_data .gantt_row:hover, [dir] .gantt_grid_data .gantt_row.odd:hover{background-color:var(--dhx-gantt-base-colors-hover-color)}.gantt_grid_data .gantt_row:hover .gantt_add{opacity:1}[dir] .gantt_task_row, [dir] .gantt_row{border-bottom:var(--dhx-gantt-task-row-border);background:var(--dhx-gantt-task-row-background)}[dir] .gantt_row.odd, [dir] .gantt_task_row.odd{background:var(--dhx-gantt-task-row-background--odd)}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{position:absolute;width:13px}[dir] .gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize}[dir=ltr] .gantt_grid_scale .gantt_grid_column_resize_wrap{margin-left:-7px}[dir=rtl] .gantt_grid_scale .gantt_grid_column_resize_wrap{margin-right:-7px}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{height:100%;width:1px}[dir] .gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border);margin:0 auto}.gantt_task_grid_row_resize_wrap{position:absolute;height:13px;width:100%}[dir] .gantt_task_grid_row_resize_wrap{cursor:row-resize;margin-top:-7px}[dir=ltr] .gantt_task_grid_row_resize_wrap{left:0}[dir=rtl] .gantt_task_grid_row_resize_wrap{right:0}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{top:6px;height:1px;width:100%;position:relative}[dir] .gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:var(--dhx-gantt-base-colors-border-light);margin:0 auto}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{height:100%;width:100%}[dir] .gantt_drag_marker.gantt_grid_resize_area, [dir] .gantt_drag_marker.gantt_row_grid_resize_area{background-color:#e7e7e780}[dir=ltr] .gantt_drag_marker.gantt_grid_resize_area{border-left:var(--dhx-gantt-scale-border-vertical);border-right:var(--dhx-gantt-scale-border-vertical)}[dir=rtl] .gantt_drag_marker.gantt_grid_resize_area{border-right:var(--dhx-gantt-scale-border-vertical);border-left:var(--dhx-gantt-scale-border-vertical)}[dir] .gantt_drag_marker.gantt_row_grid_resize_area{border-top:var(--dhx-gantt-scale-border-horizontal);border-bottom:var(--dhx-gantt-scale-border-horizontal)}.gantt_row{display:flex}.gantt_row>div{flex-shrink:0;flex-grow:0}.gantt_cell{vertical-align:top;height:100%;overflow:hidden;white-space:nowrap}[dir=ltr] .gantt_cell{border-right:var(--dhx-gantt-grid-cell-border);padding-left:6px;padding-right:6px}[dir=rtl] .gantt_cell{border-left:var(--dhx-gantt-grid-cell-border);padding-right:6px;padding-left:6px}.gantt_cell_tree{display:flex;gap:4px;flex-wrap:nowrap}[dir=ltr] .gantt_grid_scale .gantt_last_cell, [dir=ltr] .gantt_grid_data .gantt_last_cell, [dir=ltr] .gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell, [dir=ltr] .gantt_task_bg .gantt_last_cell{border-right-width:0px}[dir=rtl] .gantt_grid_scale .gantt_last_cell, [dir=rtl] .gantt_grid_data .gantt_last_cell, [dir=rtl] .gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell, [dir=rtl] .gantt_task_bg .gantt_last_cell{border-left-width:0px}[dir=ltr] .gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}[dir=rtl] .gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-left-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{position:relative;display:inline-block;white-space:nowrap;overflow:hidden;height:100%}[dir] .gantt_scale_cell{text-align:center}[dir=ltr] .gantt_scale_cell{border-right:var(--dhx-gantt-grid-scale-border-vertical)}[dir=rtl] .gantt_scale_cell{border-left:var(--dhx-gantt-grid-scale-border-vertical)}.gantt_task_cell{display:inline-block;height:100%}[dir=ltr] .gantt_task_cell{border-right:var(--dhx-gantt-timeline-scale-border-vertical)}[dir=rtl] .gantt_task_cell{border-left:var(--dhx-gantt-timeline-scale-border-vertical)}.gantt_layout_cell.gantt_ver_scroll{width:0px;height:1px;overflow-x:hidden;overflow-y:scroll;position:absolute;z-index:1}[dir] .gantt_layout_cell.gantt_ver_scroll{background-color:transparent}[dir=ltr] .gantt_layout_cell.gantt_ver_scroll{right:0}[dir=rtl] .gantt_layout_cell.gantt_ver_scroll{left:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0px;width:100%;overflow-x:scroll;overflow-y:hidden}[dir] .gantt_hor_scroll{background-color:transparent;clear:both}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent,.gantt_tree_icon{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%}[dir] .gantt_tree_icon{background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;white-space:nowrap;min-width:0;overflow:hidden;width:auto;text-overflow:ellipsis}.gantt_tree_icon.gantt_open,.gantt_tree_icon.gantt_close{width:20px}[dir] .gantt_tree_icon.gantt_open, [dir] .gantt_tree_icon.gantt_close{cursor:pointer}.gantt_tree_icon.gantt_open:before,.gantt_tree_icon.gantt_close:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_tree_icon.gantt_open:before{content:\\\"\\\"}.gantt_tree_icon.gantt_close:before{content:\\\"\\\"}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open,.gantt_tree_icon.gantt_folder_closed,.gantt_tree_icon.gantt_file{display:none}.gantt_grid_head_cell .gantt_sort{position:absolute;top:0;width:7px;height:13px}[dir=ltr] .gantt_grid_head_cell .gantt_sort{right:5px}[dir=rtl] .gantt_grid_head_cell .gantt_sort{left:5px}.gantt_grid_head_cell .gantt_sort.gantt_asc:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_grid_head_cell .gantt_sort.gantt_asc:before{content:\\\"\\\"}.gantt_grid_head_cell .gantt_sort.gantt_desc:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_grid_head_cell .gantt_sort.gantt_desc:before{content:\\\"\\\"}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}[dir] .gantt_invalid{background-color:#ffe0e0}.gantt_error{color:var(--dhx-gantt-base-colors-error)}.gantt_status{position:absolute;top:1px;transition:opacity .2s;opacity:0}[dir] .gantt_status{padding:5px 10px;background:#9b9b9b1a}[dir=ltr] .gantt_status{right:1px}[dir=rtl] .gantt_status{left:1px}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{transition:opacity .2s;opacity:0}[dir] #gantt_ajax_dots span{background-repeat:no-repeat}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{opacity:.8;pointer-events:none}[dir] .gantt_column_drag_marker{border:var(--dhx-gantt-grid-scale-border-vertical)}.gantt_grid_head_cell_dragged{opacity:.3}[dir] .gantt_grid_head_cell_dragged{border:var(--dhx-gantt-grid-scale-border-vertical)}.gantt_grid_target_marker{position:absolute;top:0;width:2px;height:100%}[dir] .gantt_grid_target_marker{background-color:var(--dhx-gantt-base-colors-primary)}[dir=ltr] .gantt_grid_target_marker{transform:translate(-1px)}[dir=rtl] .gantt_grid_target_marker{transform:translate(1px)}.gantt_grid_target_marker:before,.gantt_grid_target_marker:after{display:block;content:\\\"\\\";position:absolute;width:0px;height:0px}[dir] .gantt_grid_target_marker:before, [dir] .gantt_grid_target_marker:after{border:6px solid transparent}[dir=ltr] .gantt_grid_target_marker:before, [dir=ltr] .gantt_grid_target_marker:after{left:-5px}[dir=rtl] .gantt_grid_target_marker:before, [dir=rtl] .gantt_grid_target_marker:after{right:-5px}[dir] .gantt_grid_target_marker:before{border-top-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_target_marker:after{bottom:0}[dir] .gantt_grid_target_marker:after{border-bottom-color:var(--dhx-gantt-base-colors-primary)}.gantt_message_area{position:fixed;width:320px;z-index:1000}[dir=ltr] .gantt_message_area{right:5px}[dir=rtl] .gantt_message_area{left:5px}.gantt-info{min-width:120px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);font-weight:var(--dhx-gantt-regular-font-weight);line-height:var(--dhx-gantt-regular-line-height);z-index:14;overflow:hidden;transition:all .5s ease;color:var(--dhx-gantt-info-color)}[dir] .gantt-info{padding:12px;margin:5px 5px 10px;background:var(--dhx-gantt-info-background);border:var(--dhx-gantt-info-border);box-shadow:var(--dhx-gantt-info-shadow)}.gantt-info.hidden{height:0px;overflow:hidden}[dir] .gantt-info.hidden{padding:0;border-width:0px;margin:0}.gantt_modal_box{overflow:hidden;position:fixed;min-width:300px;width:var(--dhx-gantt-modal-width);z-index:18;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);color:var(--dhx-gantt-popup-color);line-height:150%}[dir] .gantt_modal_box{background:var(--dhx-gantt-modal-background);box-shadow:var(--dhx-gantt-box-shadow-l);border:var(--dhx-gantt-modal-border);border-radius:var(--dhx-gantt-modal-border-radius)}.gantt_popup_title{text-transform:uppercase;font-weight:var(--dhx-gantt-heading-font-weight);display:flex;justify-content:center;align-items:center}[dir] .gantt_popup_title{padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding)}[dir=ltr] .gantt_popup_title{border-top-left-radius:var(--dhx-gantt-modal-border-radius);border-top-right-radius:var(--dhx-gantt-modal-border-radius)}[dir=rtl] .gantt_popup_title{border-top-right-radius:var(--dhx-gantt-modal-border-radius);border-top-left-radius:var(--dhx-gantt-modal-border-radius)}.gantt_popup_text{display:flex;justify-content:center;align-items:center}[dir] .gantt_popup_text{padding:var(--dhx-gantt-modal-padding)}.gantt_popup_controls{display:flex;flex-direction:var(--dhx-gantt-btn-order);align-items:center;gap:12px}[dir] .gantt_popup_controls{padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding)}.gantt-info,.gantt_popup_button,.gantt_button{-webkit-user-select:none;user-select:none}[dir] .gantt-info, [dir] .gantt_popup_button, [dir] .gantt_button{cursor:pointer}.gantt_popup_text{overflow:hidden}div.dhx_modal_cover{opacity:.2;position:fixed;z-index:17;top:0;width:100%;height:100%}[dir] div.dhx_modal_cover{background:#44494e;border:none}[dir=ltr] div.dhx_modal_cover{left:0}[dir=rtl] div.dhx_modal_cover{right:0}[dir] .gantt_popup_controls{border-radius:var(--dhx-gantt-border-radius)}.gantt_message_area .gantt-error{--dhx-gantt-info-background: var(--dhx-gantt-base-colors-error);--dhx-gantt-info-color: var(--dhx-gantt-base-colors-text-on-fill)}.gantt_message_area .gantt-warning{--dhx-gantt-info-background: var(--dhx-gantt-base-colors-warning);--dhx-gantt-info-color: var(--dhx-gantt-base-colors-text-on-fill)}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-webkit-user-select:none;user-select:none}.gantt_links_area{position:absolute;top:0}[dir=ltr] .gantt_links_area{left:0}[dir=rtl] .gantt_links_area{right:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:var(--dhx-gantt-task-font-size);color:var(--dhx-gantt-task-color);width:100%;top:0;position:absolute;white-space:nowrap}[dir] .gantt_task_content{padding-top:1px;cursor:pointer;text-align:center}.gantt_task_progress{z-index:0}[dir] .gantt_task_progress{text-align:center;background:var(--dhx-gantt-task-progress-color)}.gantt_task_progress_wrapper{position:relative;width:100%;height:100%;overflow:hidden}[dir] .gantt_task_progress_wrapper{border-radius:inherit}.gantt_task_line{position:absolute;box-sizing:border-box;-webkit-user-select:none;user-select:none}[dir] .gantt_task_line{border-radius:var(--dhx-gantt-task-border-radius);background:var(--dhx-gantt-task-background);border:var(--dhx-gantt-task-border)}[dir] .gantt_task_line.gantt_drag_move div{cursor:move}[dir] .gantt_touch_move, [dir] .gantt_touch_progress, [dir] .gantt_touch_resize{transform:scale(1.02,1.1);transform-origin:50%}[dir] .gantt_touch_progress .gantt_task_progress_drag, [dir] .gantt_touch_resize .gantt_task_drag{transform:scaleY(1.3);transform-origin:50%}.gantt_side_content{position:absolute;white-space:nowrap;color:var(--dhx-gantt-base-colors-text-light);top:0;font-size:calc(var(--dhx-gantt-task-font-size) - 1px)}[dir=ltr] .gantt_side_content.gantt_left{right:100%;padding-right:var(--dhx-gantt-base-padding)}[dir=rtl] .gantt_side_content.gantt_left{left:100%;padding-left:var(--dhx-gantt-base-padding)}[dir=ltr] .gantt_side_content.gantt_right{left:100%;padding-left:var(--dhx-gantt-base-padding)}[dir=rtl] .gantt_side_content.gantt_right{right:100%;padding-right:var(--dhx-gantt-base-padding)}[dir] .gantt_side_content.gantt_link_crossing{margin-top:-6px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow,.gantt_link_corner{position:absolute}[dir] .gantt_task_link .gantt_line_wrapper, [dir] .gantt_link_arrow, [dir] .gantt_link_corner{cursor:pointer}[dir] .gantt_line_wrapper div{background-color:var(--dhx-gantt-link-background)}.gantt_link_corner{box-sizing:content-box!important}[dir] .gantt_link_corner{border-color:var(--dhx-gantt-link-background);background-color:transparent}.gantt_task_link:hover{--dhx-gantt-link-background: var(--dhx-gantt-link-background-hover)}.gantt_task_link:hover>div{z-index:1}.gantt_task_link div.gantt_link_arrow{color:var(--dhx-gantt-link-background)}.gantt_task_link div.gantt_link_arrow:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_task_link div.gantt_link_arrow:before{content:\\\"\\\"}.gantt_link_control{position:absolute;width:calc(var(--dhx-gantt-link-handle-offset) + var(--dhx-gantt-link-handle-size));top:50%;display:flex;align-items:center;transition:all var(--dhx-gantt-base-transition)}.gantt_link_control div{display:none;box-sizing:border-box;position:relative;height:var(--dhx-gantt-link-handle-size);width:var(--dhx-gantt-link-handle-size)}[dir] .gantt_link_control div{cursor:pointer;border:2px solid var(--dhx-gantt-link-handle-border);border-radius:50%;background:var(--dhx-gantt-link-handle-background)}.gantt_link_control div:hover{--dhx-gantt-link-handle-background: var(--dhx-gantt-link-handle-background-hover);--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover)}.gantt_link_control.task_left{justify-content:flex-start}[dir=ltr] .gantt_link_control.task_left{transform:translate(-100%,-50%);left:0}[dir=rtl] .gantt_link_control.task_left{transform:translate(100%,-50%);right:0}.gantt_link_control.task_right{justify-content:flex-end}[dir=ltr] .gantt_link_control.task_right{transform:translate(100%,-50%);right:0}[dir=rtl] .gantt_link_control.task_right{transform:translate(-100%,-50%);left:0}.gantt_task_line.gantt_link_source .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_link_source .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_drag{display:block}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag{display:flex}.gantt_link_target .gantt_link_control div{display:block}[dir] .gantt_link_source, [dir] .gantt_link_target{box-shadow:0 0 3px var(--dhx-gantt-base-colors-primary)}[dir] .gantt_link_target.link_start_allow, [dir] .gantt_link_target.link_finish_allow{box-shadow:0 0 3px var(--dhx-gantt-base-colors-success)}[dir] .gantt_link_target.link_start_deny, [dir] .gantt_link_target.link_finish_deny{box-shadow:0 0 3px var(--dhx-gantt-base-colors-error)}.gantt_link_from_start .gantt_link_control.task_start_date div,.gantt_link_from_end .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div,.link_finish_allow .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-primary)}.link_start_deny .gantt_link_control.task_start_date div,.link_finish_deny .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border: var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background: var(--dhx-gantt-base-colors-error)}[dir=ltr] .gantt_link_arrow_left{transform:rotate(180deg)}[dir=rtl] .gantt_link_arrow_left{transform:rotate(-180deg)}.gantt_task_drag,.gantt_task_progress_drag{display:none;position:absolute}[dir] .gantt_task_drag, [dir] .gantt_task_progress_drag{cursor:ew-resize}[dir] .gantt_task_drag.task_right{cursor:e-resize}[dir] .gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{height:16px;width:8px;z-index:1;top:-1px}[dir=ltr] .gantt_task_drag.task_left{left:-7px}[dir=rtl] .gantt_task_drag.task_left{right:-7px}[dir=ltr] .gantt_task_drag.task_right{right:-7px}[dir=rtl] .gantt_task_drag.task_right{left:-7px}.gantt_task_progress_drag{height:70%;min-height:12px;bottom:-3px;z-index:1;align-items:flex-end}[dir=ltr] .gantt_task_progress_drag{transform:translate(-50%)}[dir=rtl] .gantt_task_progress_drag{transform:translate(50%)}.gantt_task_progress_drag:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.gantt_link_tooltip{font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);color:var(--dhx-gantt-popup-color);line-height:var(--dhx-gantt-regular-line-height)}[dir] .gantt_link_tooltip{background-color:var(--dhx-gantt-popup-background);border-top:1px solid var(--dhx-gantt-base-colors-border);padding:var(--dhx-gantt-base-padding)}[dir=ltr] .gantt_link_tooltip{box-shadow:3px 3px 3px #0003;border-left:1px solid var(--dhx-gantt-base-colors-border)}[dir=rtl] .gantt_link_tooltip{box-shadow:-3px 3px 3px #0003;border-right:1px solid var(--dhx-gantt-base-colors-border)}.gantt_link_direction{height:0px;z-index:2;position:absolute}[dir] .gantt_link_direction{border:none;border-bottom:2px dashed var(--dhx-gantt-base-colors-primary)}[dir=ltr] .gantt_link_direction{transform-origin:0% 0%;margin-left:1px}[dir=rtl] .gantt_link_direction{transform-origin:100% 0%;margin-right:1px}[dir] .gantt_grid_data .gantt_row.gantt_selected, [dir] .gantt_grid_data .gantt_row.odd.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_row_project{font-weight:500}[dir] .gantt_task_row.odd.gantt_selected, [dir] .gantt_task_row.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}[dir] .gantt_task_line.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_cal_quick_info.gantt_project,.gantt_task_line.gantt_project{--dhx-gantt-task-color: var(--dhx-gantt-project-color);--dhx-gantt-task-background: var(--dhx-gantt-project-background);--dhx-gantt-task-progress-color: var(--dhx-gantt-project-progress-color)}.gantt_task_line.gantt_project.gantt_task_line_planned{--dhx-gantt-task-background: var(--dhx-gantt-base-colors-text-light)}.gantt_task_line_planned{--dhx-gantt-scheduled-summary-bracket-size: 8px}.gantt_task_line_planned:before,.gantt_task_line_planned:after{content:\\\"\\\";position:absolute;top:0;width:0;height:0}[dir] .gantt_task_line_planned:before, [dir] .gantt_task_line_planned:after{border-style:solid;border-color:transparent}[dir=ltr] .gantt_task_line_planned:before{border-width:var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0 0;border-right-color:var(--dhx-gantt-task-background);transform:rotate(180deg)}[dir=rtl] .gantt_task_line_planned:before{border-width:var(--dhx-gantt-scheduled-summary-bracket-size) 0 0 var(--dhx-gantt-scheduled-summary-bracket-size);border-left-color:var(--dhx-gantt-task-background);transform:rotate(-180deg)}[dir=ltr] .gantt_task_line_planned:after{border-width:0 var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0;border-right-color:var(--dhx-gantt-task-background);right:0}[dir=rtl] .gantt_task_line_planned:after{border-width:0 0 var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size);border-left-color:var(--dhx-gantt-task-background);left:0}.gantt_task_line_actual{opacity:.3;--dhx-gantt-task-border-radius: 2px}.gantt_task_line.gantt_project.gantt_project_scheduling_conflict .gantt_task_line_actual{--dhx-gantt-task-background: var(--dhx-gantt-base-colors-error)}[dir] .gantt_task_line.gantt_project.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_task_line.gantt_milestone{--dhx-gantt-task-background: var(--dhx-gantt-milestone-background);visibility:hidden;box-sizing:content-box}[dir] .gantt_task_line.gantt_milestone{border:none}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{box-sizing:border-box}[dir] .gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit}[dir=ltr] .gantt_task_line.gantt_milestone .gantt_task_content{transform:rotate(45deg)}[dir=rtl] .gantt_task_line.gantt_milestone .gantt_task_content{transform:rotate(-45deg)}.gantt_critical_task{--dhx-gantt-task-background: var(--dhx-gantt-link-critical-background)}.gantt_critical_task .gantt_task_progress{--dhx-gantt-task-progress: rgba(0, 0, 0, .4)}.gantt_critical_link{--dhx-gantt-link-background: var(--dhx-gantt-link-critical-background)}.gantt_link_arrow{--dhx-gantt-base-colors-icons: var(--dhx-gantt-link-background)}[dir] .gantt_row:focus, [dir] .gantt_cell:focus, [dir] .gantt_btn_set:focus, [dir] .gantt_qi_big_icon:focus, [dir] .gantt_popup_button:focus, [dir] .gantt_grid_head_cell:focus{box-shadow:inset 0 0 1px 1px var(--dhx-gantt-base-colors-primary)}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;user-select:none}.gantt_common_input{color:var(--dhx-gantt-lightbox-color);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);box-sizing:border-box}[dir] .gantt_common_input{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);border:var(--dhx-gantt-lightbox-control-border);padding:6px 8px;margin-top:0;margin-bottom:0}.gantt_common_input:focus,.gantt_common_input:focus-visible{outline:none}[dir] .gantt_common_input:focus, [dir] .gantt_common_input:focus-visible{border-color:var(--dhx-gantt-base-colors-primary)}.gantt_common_input:disabled{color:var(--dhx-gantt-base-colors-icons)}[dir] .gantt_common_input:disabled{background-color:var(--dhx-gantt-base-colors-disabled)}.gantt_one_line_input{height:var(--dhx-gantt-control-height)}.gantt_cal_cover,.gantt_cal_cover *{box-sizing:border-box}.gantt_cal_light{min-width:var(--dhx-gantt-lightbox-width);width:max-content;max-width:var(--dhx-gantt-lightbox-max-width);height:auto;-webkit-tap-highlight-color:transparent;color:var(--dhx-gantt-lightbox-color);position:absolute;z-index:15;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%}[dir] .gantt_cal_light{margin-top:auto;margin-bottom:auto;background-color:var(--dhx-gantt-lightbox-background);border:var(--dhx-gantt-lightbox-border);border-radius:var(--dhx-gantt-popup-border-radius)}.gantt_cal_light.gantt_cal_light_wide{--dhx-gantt-lightbox-width: var(--dhx-gantt-lightbox-wide-max-width);--dhx-gantt-lightbox-max-width: var(--dhx-gantt-lightbox-wide-max-width)}.gantt_cal_light textarea,.gantt_cal_light input,.gantt_cal_light select{color:var(--dhx-gantt-lightbox-color);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);box-sizing:border-box}[dir] .gantt_cal_light textarea, [dir] .gantt_cal_light input, [dir] .gantt_cal_light select{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);border:var(--dhx-gantt-lightbox-control-border);padding:6px 8px;margin-top:0;margin-bottom:0}.gantt_cal_light textarea:focus,.gantt_cal_light input:focus,.gantt_cal_light select:focus,.gantt_cal_light textarea:focus-visible,.gantt_cal_light input:focus-visible,.gantt_cal_light select:focus-visible{outline:none}[dir] .gantt_cal_light textarea:focus, [dir] .gantt_cal_light input:focus, [dir] .gantt_cal_light select:focus, [dir] .gantt_cal_light textarea:focus-visible, [dir] .gantt_cal_light input:focus-visible, [dir] .gantt_cal_light select:focus-visible{border-color:var(--dhx-gantt-base-colors-primary)}.gantt_cal_light textarea:disabled,.gantt_cal_light input:disabled,.gantt_cal_light select:disabled{color:var(--dhx-gantt-base-colors-icons)}[dir] .gantt_cal_light textarea:disabled, [dir] .gantt_cal_light input:disabled, [dir] .gantt_cal_light select:disabled{background-color:var(--dhx-gantt-base-colors-disabled)}.gantt_cal_light input,.gantt_cal_light select{height:var(--dhx-gantt-control-height)}.gantt_cal_light input[type=select],.gantt_cal_light input[type=checkbox]{height:var(--dhx-gantt-checkbox-height)}.gantt_cal_light .gantt_time{display:none}.gantt_cal_ltitle{font-size:var(--dhx-gantt-lightbox-title-font-size);font-weight:var(--dhx-gantt-heading-font-weight);line-height:142%;color:var(--dhx-gantt-lightbox-title-color);overflow:hidden;white-space:nowrap;display:flex;flex-direction:row;justify-content:space-between;gap:calc(var(--dhx-gantt-base-padding) * 2)}[dir] .gantt_cal_ltitle{background:var(--dhx-gantt-lightbox-title-background);border-bottom:var(--dhx-gantt-default-border);padding:calc(var(--dhx-gantt-base-padding) * 3) var(--dhx-gantt-lightbox-padding)}[dir=ltr] .gantt_cal_ltitle{border-top-right-radius:var(--dhx-gantt-popup-border-radius);border-top-left-radius:var(--dhx-gantt-popup-border-radius)}[dir=rtl] .gantt_cal_ltitle{border-top-left-radius:var(--dhx-gantt-popup-border-radius);border-top-right-radius:var(--dhx-gantt-popup-border-radius)}.gantt_cal_ltitle .gantt_mark{display:none}.gantt_cal_ltitle .gantt_cal_ltitle_descr{overflow:hidden;text-overflow:ellipsis}.gantt_cal_ltitle .gantt_cal_ltitle_controls{--dhx-gantt-icon-size: 18px}[dir] .gantt_cal_ltitle .gantt_cal_ltitle_controls{cursor:pointer}[dir=ltr] .gantt_cal_light_rtl{direction:rtl}[dir=rtl] .gantt_cal_light_rtl{direction:ltr}[dir=ltr] .gantt_cal_light_wide.gantt_cal_light_rtl .gantt_custom_button{right:auto;left:calc(var(--dhx-gantt-base-padding) * 2)}[dir=rtl] .gantt_cal_light_wide.gantt_cal_light_rtl .gantt_custom_button{left:auto;right:calc(var(--dhx-gantt-base-padding) * 2)}[dir=ltr] .gantt_section_constraint [data-constraint-time-select]{margin-left:20px}[dir=rtl] .gantt_section_constraint [data-constraint-time-select]{margin-right:20px}.gantt_cal_larea{overflow:hidden;height:auto;gap:calc(var(--dhx-gantt-base-padding) * 2)}[dir] .gantt_cal_larea{border:none;padding:0 var(--dhx-gantt-lightbox-padding) 4px}.gantt_cal_cover{width:100%;height:100%;position:fixed;z-index:16;top:0;display:flex;justify-content:center;align-items:center;overflow:auto}[dir] .gantt_cal_cover{background-color:#0000004d}[dir=ltr] .gantt_cal_cover{left:0}[dir=rtl] .gantt_cal_cover{right:0}.gantt_lightbox_time_select{min-width:80px}.gantt_lightbox_day_select{min-width:60px}.gantt_lightbox_month_select{min-width:110px}.gantt_lightbox_year_select{min-width:77px}.gantt_cal_light_full{width:auto}.gantt_cal_light_wide .gantt_cal_larea{display:flex;flex-direction:column;gap:12px}[dir] .gantt_cal_light_wide .gantt_cal_larea{padding-top:12px}.gantt_cal_light_wide .gantt_wrap_section{display:flex;flex:0;position:relative}.gantt_cal_light_wide .gantt_cal_lsection{width:120px;justify-content:flex-start;align-items:flex-start;flex-shrink:0}[dir] .gantt_cal_light_wide .gantt_cal_lsection{margin-top:0;margin-bottom:0;padding:4px 8px}.gantt_cal_light_wide .gantt_custom_button{position:absolute}[dir=ltr] .gantt_cal_light_wide .gantt_custom_button{left:auto;right:calc(var(--dhx-gantt-base-padding) * 2)}[dir=rtl] .gantt_cal_light_wide .gantt_custom_button{right:auto;left:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_cal_light_wide .gantt_cal_ltext{flex:1}.gantt_cal_light_wide .gantt_section_time{justify-content:flex-start}[dir=ltr] .gantt_cal_light_wide .gantt_fullday{margin-left:unset}[dir=rtl] .gantt_cal_light_wide .gantt_fullday{margin-right:unset}.gantt_duration{display:flex;justify-content:flex-start;align-items:center;gap:4px}.gantt_duration .gantt_duration_end_date{color:var(--dhx-gantt-base-colors-text-light);min-width:130px}.gantt_duration .gantt_duration_value,.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{color:var(--dhx-gantt-lightbox-color);font-size:var(--dhx-gantt-lightbox-font-sizeeduler);box-sizing:border-box}[dir] .gantt_duration .gantt_duration_value, [dir] .gantt_duration .gantt_duration_dec, [dir] .gantt_duration .gantt_duration_inc{border-radius:2px;background-color:var(--dhx-gantt-lightbox-background);border:var(--dhx-gantt-lightbox-control-border);padding:6px 8px;margin-top:0;margin-bottom:0;text-align:center}.gantt_duration .gantt_duration_value:focus,.gantt_duration .gantt_duration_dec:focus,.gantt_duration .gantt_duration_inc:focus,.gantt_duration .gantt_duration_value:focus-visible,.gantt_duration .gantt_duration_dec:focus-visible,.gantt_duration .gantt_duration_inc:focus-visible{outline:none}[dir] .gantt_duration .gantt_duration_value:focus, [dir] .gantt_duration .gantt_duration_dec:focus, [dir] .gantt_duration .gantt_duration_inc:focus, [dir] .gantt_duration .gantt_duration_value:focus-visible, [dir] .gantt_duration .gantt_duration_dec:focus-visible, [dir] .gantt_duration .gantt_duration_inc:focus-visible{border-color:var(--dhx-gantt-base-colors-primary)}.gantt_duration .gantt_duration_value:disabled,.gantt_duration .gantt_duration_dec:disabled,.gantt_duration .gantt_duration_inc:disabled{color:var(--dhx-gantt-base-colors-icons)}[dir] .gantt_duration .gantt_duration_value:disabled, [dir] .gantt_duration .gantt_duration_dec:disabled, [dir] .gantt_duration .gantt_duration_inc:disabled{background-color:var(--dhx-gantt-base-colors-disabled)}.gantt_duration_inputs{display:flex}.gantt_duration .gantt_duration_value{width:40px}[dir] .gantt_duration .gantt_duration_value{padding:3px 4px;border-radius:0}[dir=ltr] .gantt_duration .gantt_duration_value{border-left-width:0;border-right-width:0}[dir=rtl] .gantt_duration .gantt_duration_value{border-right-width:0;border-left-width:0}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:26px;color:var(--dhx-gantt-base-colors-primary);font-size:18px}[dir] .gantt_duration .gantt_duration_dec, [dir] .gantt_duration .gantt_duration_inc{padding:1px 4px;border-radius:var(--dhx-gantt-border-radius);cursor:pointer}[dir=ltr] .gantt_duration .gantt_duration_dec{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .gantt_duration .gantt_duration_dec{border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] .gantt_duration .gantt_duration_inc{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .gantt_duration .gantt_duration_inc{border-top-right-radius:0;border-bottom-right-radius:0}[dir=ltr] .gantt_duration .gantt_duration_inc{margin-right:4px}[dir=rtl] .gantt_duration .gantt_duration_inc{margin-left:4px}.gantt_resources{max-height:150px;height:auto;overflow-y:auto}.gantt_resource_row{display:block}[dir] .gantt_resource_row{padding:10px 0;border-bottom:1px solid var(--dhx-gantt-base-colors-border-light);cursor:pointer}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_section_resources{overflow:hidden;display:flex;flex-direction:column;width:100%}.gantt_resources_filter{display:flex;flex-grow:0;align-items:center}.gantt_resources_filter label{display:inline-flex;gap:2px;align-items:center}.gantt_resources_filter .gantt_resources_filter_input{box-sizing:border-box}[dir] .gantt_resources_filter .gantt_resources_filter_input{padding:1px 6px}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{width:24px;max-width:24px;min-width:24px;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_label{width:40%;max-width:40%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value{width:30%;max-width:30%;vertical-align:middle}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{width:80%;vertical-align:middle;box-sizing:border-box}[dir] .gantt_resource_cell.gantt_resource_cell_value input, [dir] .gantt_resource_cell.gantt_resource_cell_value select{padding:1px 2px}.gantt_resource_cell.gantt_resource_cell_unit{width:10%;max-width:10%;vertical-align:middle}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_lcontrols{display:flex;flex-direction:var(--dhx-gantt-btn-order);gap:calc(var(--dhx-gantt-base-padding)*2)}[dir] .gantt_cal_lcontrols{padding:12px var(--dhx-gantt-lightbox-padding)}.gantt_cal_lcontrols .gantt_btn_set{display:flex;flex-direction:row;gap:var(--dhx-gantt-base-padding)}.gantt_cal_lcontrols .gantt_btn_set.gantt_delete_btn_set{--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent}[dir] .gantt_cal_lcontrols .gantt_btn_set.gantt_delete_btn_set{padding:6px 0}.gantt_cal_lcontrols .gantt_btn_set:not(.gantt_save_btn_set,.gantt_delete_btn_set){--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_cal_lcontrols .gantt_btn_set .gantt_btn_inner{display:none}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{content:\\\"\\\"}[dir=ltr] .gantt_cal_lcontrols .gantt_cal_lcontrols_push_right{margin-left:auto}[dir=rtl] .gantt_cal_lcontrols .gantt_cal_lcontrols_push_right{margin-right:auto}.gantt_cal_ltext textarea{width:100%;height:100%;resize:none;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%}.gantt_section_time_spacer,.gantt_lightbox_minical_spacer{visibility:hidden;height:0;flex-basis:100%}.gantt_section_time{--dhx-gantt-lightbox-time-font-size: var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-time-font-weight: var(--dhx-gantt-important-font-weight);font-size:var(--dhx-gantt-lightbox-time-font-size);font-weight:var(--dhx-gantt-lightbox-time-font-weight);line-height:142%;display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--dhx-gantt-base-padding) * 2);row-gap:var(--dhx-gantt-base-padding)}.gantt_section_time .gantt_section_time_icon{width:calc(var(--dhx-gantt-base-module) * 2);height:calc(var(--dhx-gantt-base-module) * 2)}[dir] .gantt_section_time .gantt_section_time_icon{border-radius:2px;background:var(--dhx-gantt-base-colors-primary)}.gantt_section_duration{gap:16px}[dir=ltr] .gantt_fullday{margin-left:auto}[dir=rtl] .gantt_fullday{margin-right:auto}[dir=ltr] .gantt_cal_light_rtl .gantt_fullday{margin-left:unset;margin-right:auto}[dir=rtl] .gantt_cal_light_rtl .gantt_fullday{margin-right:unset;margin-left:auto}.gantt_cal_lsection label{font-weight:var(--dhx-gantt-heading-font-weight);display:flex;align-items:center;gap:4px;width:100%}.gantt_cal_lsection{display:flex}[dir] .gantt_cal_lsection{margin-top:12px;margin-bottom:4px}.gantt_cal_lsection .gantt_custom_button{color:var(--dhx-gantt-btn-color);height:var(--dhx-gantt-control-height);display:flex;justify-content:center;align-items:center;box-sizing:border-box;gap:4px;flex-shrink:0;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight, normal);line-height:142%;text-transform:var(--dhx-gantt-btn-text-transform);--dhx-gantt-icon-size: 18px;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color);--dhx-gantt-btn-background: var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color: var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color: var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover: var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover: var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover: var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active: var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active: var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active: var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled: var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled: var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled: var(--dhx-gantt-btn-outline-border-color-disabled);order:1}[dir] .gantt_cal_lsection .gantt_custom_button{background:var(--dhx-gantt-btn-background);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);padding:var(--dhx-gantt-btn-padding, 0 20px);cursor:pointer}[dir=ltr] .gantt_cal_lsection .gantt_custom_button{margin-left:auto;margin-right:unset}[dir=rtl] .gantt_cal_lsection .gantt_custom_button{margin-right:auto;margin-left:unset}.gantt_cal_lsection .gantt_custom_button:hover{color:var(--dhx-gantt-btn-color-hover)}[dir] .gantt_cal_lsection .gantt_custom_button:hover{background:var(--dhx-gantt-btn-background-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_cal_lsection .gantt_custom_button:active{color:var(--dhx-gantt-btn-color-active)}[dir] .gantt_cal_lsection .gantt_custom_button:active{background:var(--dhx-gantt-btn-background-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_cal_lsection .gantt_custom_button:disabled{color:var(--dhx-gantt-btn-color-disabled)}[dir] .gantt_cal_lsection .gantt_custom_button:disabled{background:var(--dhx-gantt-btn-background-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}[dir=ltr] .gantt_cal_light_rtl .gantt_custom_button{margin-left:unset;margin-right:auto}[dir=rtl] .gantt_cal_light_rtl .gantt_custom_button{margin-right:unset;margin-left:auto}.gantt_cal_checkbox{display:flex;gap:var(--dhx-gantt-base-padding)}[dir] .gantt_cal_wide_checkbox{padding:4px 0}[dir] .gantt_cal_radio input{margin:var(--dhx-gantt-base-padding)}.gantt_cal_radio_item{display:flex;gap:var(--dhx-gantt-base-padding);align-items:center}.gantt_cal_radio{display:flex;gap:4px}.gantt_cal_radio_vertical{flex-direction:column;overflow:auto;--dhx-gantt-control-height: 20px}.gantt_cal_lcheckbox,.gantt_cal_lradio{display:flex;flex-wrap:wrap;gap:8px}.gantt_cal_lcheckbox label,.gantt_cal_lradio label{display:flex;align-items:center;gap:4px}.gantt_cal_template{position:relative}[dir] .gantt_cal_template{padding-top:4px;padding-bottom:4px}.gantt_cal_light .gantt_readonly{color:var(--dhx-gantt-base-colors-readonly)}.gantt_cal_quick_info{--dhx-gantt-quick-info-font-size: var(--dhx-gantt-font-size);position:absolute;z-index:8;font-size:var(--dhx-gantt-quick-info-font-size);color:var(--dhx-gantt-popup-color);width:300px;display:flex;flex-direction:column}[dir] .gantt_cal_quick_info{background:var(--dhx-gantt-popup-background);border:var(--dhx-gantt-popup-border);padding:calc(var(--dhx-gantt-base-padding)*2) calc(var(--dhx-gantt-base-padding)*3);border-radius:var(--dhx-gantt-border-radius);box-shadow:var(--dhx-gantt-box-shadow-s)}[dir=ltr] .gantt_cal_quick_info{transition:left .5s ease,right .5s ease}[dir=rtl] .gantt_cal_quick_info{transition:right .5s ease,left .5s ease}.gantt_cal_qi_tcontrols{display:flex;justify-content:flex-end;height:8px}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn{min-width:32px;height:32px;--dhx-gantt-icon-size: 18px;--dhx-gantt-btn-background: transparent;--dhx-gantt-btn-color: var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color: transparent;--dhx-gantt-btn-background-hover: transparent;--dhx-gantt-btn-color-hover: var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover: transparent;--dhx-gantt-btn-background-active: transparent;--dhx-gantt-btn-color-active: var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active: transparent;--dhx-gantt-btn-background-disabled: transparent;--dhx-gantt-btn-color-disabled: var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled: transparent;width:unset;min-width:unset;font-size:18px;height:20px;position:relative;z-index:1}[dir] .gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn{border-radius:50%;padding:2px;cursor:pointer}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:hover{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-hover)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:active{--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-icons-active)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:disabled{--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color-disabled)}[dir] .gantt_cal_qi_title, [dir] .gantt_cal_qi_controls, [dir] .gantt_cal_qi_content{padding:0 calc(var(--dhx-gantt-base-padding) * 3)}.gantt_cal_qi_title{display:flex;flex-direction:column;gap:12px}[dir=ltr] .gantt_cal_qi_title{padding-right:14px}[dir=rtl] .gantt_cal_qi_title{padding-left:14px}.gantt_cal_qi_tcontent{font-size:var(--dhx-gantt-heading-font-size);font-weight:var(--dhx-gantt-heading-font-weight);line-height:150%;position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:8px;overflow:hidden;flex-grow:0;text-overflow:ellipsis;white-space:nowrap}.gantt_cal_qi_tcontent>span{text-overflow:ellipsis;overflow:hidden}.gantt_cal_qi_tcontent:before{display:var(--dhx-gantt-quick-info-dot-display, block);content:\\\"\\\";flex-shrink:0;width:8px;height:8px}[dir] .gantt_cal_qi_tcontent:before{border-radius:2px;background:var(--dhx-gantt-task-background)}.gantt_cal_qi_tdate{font-size:var(--dhx-gantt-important-font-size);font-weight:var(--dhx-gantt-important-font-weight);line-height:var(--dhx-gantt-important-line-height)}[dir] .gantt_cal_qi_content{padding-top:16px;padding-bottom:8px}.gantt_cal_qi_controls{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:12px;color:var(--dhx-gantt-base-colors-primary)}[dir] .gantt_cal_qi_controls{padding-top:8px}[dir=ltr] .gantt_cal_qi_controls>div:first-child{margin-left:-3px}[dir=rtl] .gantt_cal_qi_controls>div:first-child{margin-right:-3px}.gantt_menu_icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;--dhx-gantt-base-colors-icons: var(--dhx-gantt-btn-color)}.dhx_gantt_icon.dhx_gantt_icon_edit,.dhx_menu_icon.dhx_gantt_icon_edit{--dhx-gantt-icon-size: var(--dhx-gantt-font-size)}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{position:absolute;z-index:50;white-space:nowrap;color:var(--dhx-gantt-tooltip-color);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);line-height:var(--dhx-gantt-regular-line-height);font-weight:var(--dhx-gantt-regular-font-weight);display:flex;flex-direction:column;align-items:flex-start;gap:4px}[dir] .gantt_tooltip{box-shadow:var(--dhx-gantt-box-shadow-m);background:var(--dhx-gantt-tooltip-background);border:var(--dhx-gantt-tooltip-border);border-radius:var(--dhx-gantt-tooltip-border-radius)}[dir=ltr] .gantt_tooltip{padding:8px 30px 8px 8px}[dir=rtl] .gantt_tooltip{padding:8px 8px 8px 30px}.gantt_resource_marker{position:absolute;font-size:var(--dhx-gantt-font-size);color:#fff}[dir] .gantt_resource_marker{text-align:center}[dir] .gantt_resource_marker_ok{background:var(--dhx-gantt-base-colors-success)}[dir] .gantt_resource_marker_overtime{background:var(--dhx-gantt-base-colors-error)}.gantt_histogram_label{width:100%;height:100%;position:absolute;z-index:1;font-weight:700;font-size:var(--dhx-gantt-font-size)}.gantt_histogram_fill{width:100%;position:absolute;bottom:0}[dir] .gantt_histogram_fill{background-color:#537cfa4d;background-color:color-mix(in srgb,var(--dhx-gantt-base-colors-primary),transparent 60%)}.gantt_histogram_hor_bar{height:1px;position:absolute}[dir] .gantt_histogram_hor_bar{background:var(--dhx-gantt-base-colors-primary);margin-top:-1px}[dir=ltr] .gantt_histogram_hor_bar{margin-left:-1px}[dir=rtl] .gantt_histogram_hor_bar{margin-right:-1px}.gantt_histogram_vert_bar{width:1px;position:absolute}[dir] .gantt_histogram_vert_bar{background:var(--dhx-gantt-base-colors-primary)}[dir=ltr] .gantt_histogram_vert_bar{margin-left:-1px}[dir=rtl] .gantt_histogram_vert_bar{margin-right:-1px}.gantt_histogram_cell{position:absolute;font-size:var(--dhx-gantt-font-size)}[dir] .gantt_histogram_cell{text-align:center}.gantt_marker{height:100%;width:1px;top:0;position:absolute}[dir] .gantt_marker{text-align:center;background-color:var(--dhx-gantt-base-colors-error)}.gantt_marker .gantt_marker_content{color:var(--dhx-gantt-base-colors-white);position:absolute;font-size:var(--dhx-gantt-caption-font-size);line-height:var(--dhx-gantt-caption-line-height);font-weight:var(--dhx-gantt-caption-line-weight)}[dir] .gantt_marker .gantt_marker_content{padding:2px;background:inherit}.gantt_marker_area{position:absolute;top:0}[dir=ltr] .gantt_marker_area{left:0}[dir=rtl] .gantt_marker_area{right:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{width:100%;height:100%;box-sizing:border-box}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_file,.gantt_row_placeholder .gantt_add{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{transition:all .1s ease}[dir] .gantt_drag_marker.gantt_grid_dnd_marker{background-color:transparent}.gantt_grid_dnd_marker_line{height:4px;width:100%}[dir] .gantt_grid_dnd_marker_line{background-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_dnd_marker_line:before{width:12px;height:12px;box-sizing:border-box;content:\\\"\\\";line-height:1px;display:block;position:absolute;pointer-events:none}[dir] .gantt_grid_dnd_marker_line:before{background:var(--dhx-gantt-base-colors-white);border:3px solid var(--dhx-gantt-base-colors-primary);border-radius:6px;margin-top:-4px}[dir=ltr] .gantt_grid_dnd_marker_line:before{margin-left:-11px}[dir=rtl] .gantt_grid_dnd_marker_line:before{margin-right:-11px}.gantt_grid_dnd_marker_folder{height:100%;width:100%;position:absolute;pointer-events:none;box-sizing:border-box}[dir] .gantt_grid_dnd_marker_folder{box-shadow:0 0 0 2px var(--dhx-gantt-base-colors-primary) inset;background:transparent}.gantt_overlay_area{position:absolute;height:inherit;width:inherit;top:0;display:none}[dir=ltr] .gantt_overlay_area{left:0}[dir=rtl] .gantt_overlay_area{right:0}.gantt_overlay{position:absolute;top:0;height:inherit;width:inherit}[dir=ltr] .gantt_overlay{left:0}[dir=rtl] .gantt_overlay{right:0}.gantt_click_drag_rect{position:absolute;top:0;outline:1px solid var(--dhx-gantt-base-colors-primary)}[dir] .gantt_click_drag_rect{background-color:var(--dhx-gantt-base-colors-primary-lighter)}[dir=ltr] .gantt_click_drag_rect{left:0}[dir=rtl] .gantt_click_drag_rect{right:0}[dir] .gantt_timeline_move_available, [dir] .gantt_timeline_move_available *{cursor:move}.gantt_constraint_marker{position:absolute;pointer-events:none;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-text-light)}[dir=ltr] .gantt_constraint_marker.gantt_constraint_marker_snlt, [dir=ltr] .gantt_constraint_marker.gantt_constraint_marker_fnlt, [dir=ltr] .gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(180deg)}[dir=rtl] .gantt_constraint_marker.gantt_constraint_marker_snlt, [dir=rtl] .gantt_constraint_marker.gantt_constraint_marker_fnlt, [dir=rtl] .gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(-180deg)}.gantt_constraint_marker svg{display:block;max-height:100%;max-width:100%}[dir] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snlt, [dir] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnlt, [dir] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(0)}[dir=ltr] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snet, [dir=ltr] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnet, [dir=ltr] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mso{transform:rotate(180deg)}[dir=rtl] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snet, [dir=rtl] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnet, [dir=rtl] .gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mso{transform:rotate(-180deg)}[dir=ltr] .gantt_rtl .gantt_grid{text-align:right}[dir=rtl] .gantt_rtl .gantt_grid{text-align:left}.gantt_rtl .gantt_row,.gantt_rtl .gantt_cell{flex-direction:row-reverse}.gantt_layout_content{width:100%;overflow:auto;box-sizing:border-box}.gantt_layout_cell{position:relative;box-sizing:border-box}.gantt_layout_cell>.gantt_layout_header{color:#fff;font-size:17px;box-sizing:border-box}[dir] .gantt_layout_cell>.gantt_layout_header{background:#33aae8;padding:5px 10px}[dir] .gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:\\\"⇧\\\"}[dir] .gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:\\\"⇩\\\"}[dir] .gantt_layout_header{cursor:pointer}[dir=ltr] .gantt_layout_header .gantt_header_arrow{float:right;text-align:right}[dir=rtl] .gantt_layout_header .gantt_header_arrow{float:left;text-align:left}.gantt_layout_header .gantt_header_arrow:before{content:\\\"⇦\\\"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:\\\"⇧\\\"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{display:inline-block;vertical-align:top}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7}[dir] .gantt_resizing{background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{overflow:visible}[dir=ltr] .gantt_layout_cell_border_right.gantt_resizer{border-right:0}[dir=rtl] .gantt_layout_cell_border_right.gantt_resizer{border-left:0}.gantt_resizer{position:relative}[dir] .gantt_resizer{cursor:e-resize}[dir] .gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{z-index:9999;position:absolute;top:0;width:100%}[dir] .gantt_resizer_stick{background:#33aae8}.gantt_resizer_x .gantt_resizer_x{position:absolute;width:20px;height:100%;top:0;z-index:1}[dir=ltr] .gantt_resizer_x .gantt_resizer_x{margin-left:-10px;left:0}[dir=rtl] .gantt_resizer_x .gantt_resizer_x{margin-right:-10px;right:0}.gantt_resizer_y .gantt_resizer_y{position:absolute;height:20px;width:100%;top:-10px;z-index:1}[dir=ltr] .gantt_resizer_y .gantt_resizer_y{left:0}[dir=rtl] .gantt_resizer_y .gantt_resizer_y{right:0}[dir] .gantt_resizer_error{background:#cd5c5c!important}[dir=ltr] .gantt_layout_cell_border_left{border-left:var(--dhx-gantt-default-border)}[dir=rtl] .gantt_layout_cell_border_left{border-right:var(--dhx-gantt-default-border)}[dir=ltr] .gantt_layout_cell_border_right{border-right:var(--dhx-gantt-default-border)}[dir=rtl] .gantt_layout_cell_border_right{border-left:var(--dhx-gantt-default-border)}[dir] .gantt_layout_cell_border_top{border-top:var(--dhx-gantt-default-border)}[dir] .gantt_layout_cell_border_bottom{border-bottom:var(--dhx-gantt-default-border)}[dir] .gantt_layout_cell_border_transparent{border-color:transparent}.gantt_window{position:absolute;top:50%;z-index:999999999}[dir] .gantt_window{background:#fff}[dir=ltr] .gantt_window{left:50%}[dir=rtl] .gantt_window{right:50%}.gantt_window_content{position:relative}.gantt_window_content_header{color:#fff;height:33px;position:relative}[dir] .gantt_window_content_header{background:#39c;padding:10px 10px 0;border-bottom:solid 2px #ffffff}[dir=ltr] .gantt_window_content_header_text{padding-left:10%}[dir=rtl] .gantt_window_content_header_text{padding-right:10%}.gantt_window_content_header_buttons{position:absolute;top:10px}[dir=ltr] .gantt_window_content_header_buttons{right:10px}[dir=rtl] .gantt_window_content_header_buttons{left:10px}.gantt_window_content_header_buttons:hover{color:#000}[dir] .gantt_window_content_header_buttons:hover{cursor:pointer}.gantt_window_content_resizer{position:absolute;width:15px;height:15px;bottom:0;line-height:15px;z-index:999}[dir] .gantt_window_content_resizer{text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=)}[dir=ltr] .gantt_window_content_resizer{right:-1px;cursor:nw-resize}[dir=rtl] .gantt_window_content_resizer{left:-1px;cursor:ne-resize}.gantt_window_content_frame{position:absolute;top:0;width:100%;height:100%;z-index:9999}[dir] .gantt_window_content_frame{background:#0000001a}[dir=ltr] .gantt_window_content_frame{left:0}[dir=rtl] .gantt_window_content_frame{right:0}[dir] .gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{z-index:9999;top:0;width:100%;height:100%;position:fixed}[dir] .gantt_window_modal{background:#0000001a}[dir=ltr] .gantt_window_modal{left:0}[dir=rtl] .gantt_window_modal{right:0}.gantt_container,.gantt_cal_light,.gantt_message_area,.gantt_modal_box,.gantt_cal_quick_info,.gantt_tooltip{text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--dhx-gantt-font-family)}.gantt_container,.gantt_container *{box-sizing:border-box}.gantt_noselect{-webkit-user-select:none;user-select:none}[dir] .gantt_noselect .gantt_grid_data .gantt_row:hover, [dir] .gantt_noselect .gantt_grid_data .gantt_row.odd:hover{background-color:unset}.gantt_drag_marker{position:absolute;top:-1000px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);z-index:1;white-space:nowrap}[dir] .gantt_drag_marker{background:var(--dhx-gantt-base-colors-select)}[dir=ltr] .gantt_drag_marker{left:-1000px}[dir=rtl] .gantt_drag_marker{right:-1000px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{height:100%;max-width:500px;box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;display:flex;flex-direction:column;justify-content:flex-start}[dir] .gantt_empty_state{margin:0 auto}.gantt_empty_state_image{width:100%;max-width:500px;max-height:500px;display:block;min-height:0;height:200px}[dir] .gantt_empty_state_image{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-size:contain;background-position-x:center;background-position-y:bottom;margin-top:40px}[dir=ltr] .gantt_empty_state_image{margin-left:auto;margin-right:auto}[dir=rtl] .gantt_empty_state_image{margin-right:auto;margin-left:auto}[dir] .gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:var(--dhx-gantt-base-colors-primary);opacity:1;height:unset}[dir] .gantt_empty_state_text_link{background:none;cursor:pointer}[dir] .gantt_drag_marker .gantt_row.odd{background-color:var(--dhx-gantt-base-colors-select)}[dir] .gantt_drag_marker .gantt_row{border-top:var(--dhx-gantt-scale-border-horizontal)}[dir=ltr] .gantt_drag_marker .gantt_row{border-left:var(--dhx-gantt-scale-border-vertical)}[dir=rtl] .gantt_drag_marker .gantt_row{border-right:var(--dhx-gantt-scale-border-vertical)}[dir] .gantt_drag_marker .gantt_cell{border-color:var(--dhx-gantt-base-colors-border)}[dir] .gantt_row.gantt_over, [dir] .gantt_task_row.gantt_over{background-color:var(--dhx-gantt-base-colors-primary-active)}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}[dir] .gantt_task_row.gantt_transparent{background-color:#537cfa73}.gantt_container_resize_watcher{width:100%;height:100%;position:absolute;top:0;z-index:-1;pointer-events:none;box-sizing:border-box;opacity:0}[dir] .gantt_container_resize_watcher{background:transparent;border:0}[dir=ltr] .gantt_container_resize_watcher{left:0}[dir=rtl] .gantt_container_resize_watcher{right:0}.gantt_task_deadline{position:absolute;z-index:5;--dhx-gantt-base-colors-icons: var(--dhx-gantt-base-colors-error);pointer-events:none}.gantt_task_deadline:before{font-family:dhx-gantt-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:flex;justify-content:center;align-items:center;color:var(--dhx-gantt-base-colors-icons);font-size:var(--dhx-gantt-icon-size, 1.5em)}.gantt_task_deadline:before{content:\\\"\\\";max-width:100%;max-height:100%;font-size:1em}.gantt_task_baseline{position:absolute;opacity:.9;z-index:0;overflow:hidden}[dir] .gantt_task_baseline{border-radius:2px;background:#ffd180}[dir=ltr] .gantt_task_baseline.gantt_milestone_baseline{transform:rotate(45deg)}[dir=rtl] .gantt_task_baseline.gantt_milestone_baseline{transform:rotate(-45deg)}[dir] .gantt_task_baseline.gantt_task_baseline_0{background:var(--dhx-gantt-baseline-background-0)}[dir] .gantt_task_baseline.gantt_task_baseline_1{background:var(--dhx-gantt-baseline-background-1)}[dir] .gantt_task_baseline.gantt_task_baseline_2{background:var(--dhx-gantt-baseline-background-2)}[dir] .gantt_task_baseline.gantt_task_baseline_3{background:var(--dhx-gantt-baseline-background-3)}[dir] .gantt_task_baseline.gantt_task_baseline_4{background:var(--dhx-gantt-baseline-background-4)}[dir] .gantt_task_baseline.gantt_task_baseline_5{background:var(--dhx-gantt-baseline-background-5)}[dir] .gantt_task_baseline.gantt_task_baseline_6{background:var(--dhx-gantt-baseline-background-6)}[dir] .gantt_task_baseline.gantt_task_baseline_7{background:var(--dhx-gantt-baseline-background-7)}[dir] .gantt_task_baseline.gantt_task_baseline_8{background:var(--dhx-gantt-baseline-background-8)}[dir] .gantt_task_baseline.gantt_task_baseline_9{background:var(--dhx-gantt-baseline-background-9)}.gantt_section_baselines{overflow-y:auto;display:flex;flex-direction:column;gap:4px}[dir=ltr] .gantt_custom_button.gantt_add_baselines{margin-left:0}[dir=rtl] .gantt_custom_button.gantt_add_baselines{margin-right:0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=h+\"Date\",n[d]=h+\"Date\",n[f]=h+\"Month\",n[c]=h+\"FullYear\",n[u]=h+\"Hours\",n[s]=h+\"Minutes\",n[i]=h+\"Seconds\",n[r]=h+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,\"0\")},d=n.meridiem||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,\"0\"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,\"0\"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,\"0\"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,\"0\"),s:String(this.$s),ss:O.s(this.$s,2,\"0\"),SSS:O.s(this.$ms,3,\"0\"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",f],[\"$y\",c],[\"$D\",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../postcss-loader/src/index.js??ref--7-oneOf-3-2!./dhtmlxgantt.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"196d1857\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../postcss-loader/src/index.js??ref--7-oneOf-3-2!./dhtmlxgantt.css\", function() {\n     var newContent = require(\"!!../../css-loader/dist/cjs.js??ref--7-oneOf-3-1!../../postcss-loader/src/index.js??ref--7-oneOf-3-2!./dhtmlxgantt.css\");\n     if(newContent.__esModule) newContent = newContent.default;\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","/** @license\n\ndhtmlxGantt v.9.0.3 Standard\n\nThis version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.\n\nTo use dhtmlxGantt in non-GPL projects (and get Pro version of the product), please obtain Individual, Commercial, Enterprise or Ultimate license on our site https://dhtmlx.com/docs/products/dhtmlxGantt/#licensing or contact us at info@dhtmlx.com\n\n(c) XB Software\n\n*/\nfunction F(t) {\n  var e = 0, n = 0, i = 0, a = 0;\n  if (t.getBoundingClientRect) {\n    var r = t.getBoundingClientRect(), s = document.body, o = document.documentElement || document.body.parentNode || document.body, l = window.pageYOffset || o.scrollTop || s.scrollTop, d = window.pageXOffset || o.scrollLeft || s.scrollLeft, c = o.clientTop || s.clientTop || 0, u = o.clientLeft || s.clientLeft || 0;\n    e = r.top + l - c, n = r.left + d - u, i = document.body.offsetWidth - r.right, a = document.body.offsetHeight - r.bottom;\n  } else {\n    for (; t; ) e += parseInt(t.offsetTop, 10), n += parseInt(t.offsetLeft, 10), t = t.offsetParent;\n    i = document.body.offsetWidth - t.offsetWidth - n, a = document.body.offsetHeight - t.offsetHeight - e;\n  }\n  return { y: Math.round(e), x: Math.round(n), width: t.offsetWidth, height: t.offsetHeight, right: Math.round(i), bottom: Math.round(a) };\n}\nfunction Cn(t) {\n  var e = !1, n = !1;\n  if (window.getComputedStyle) {\n    var i = window.getComputedStyle(t, null);\n    e = i.display, n = i.visibility;\n  } else t.currentStyle && (e = t.currentStyle.display, n = t.currentStyle.visibility);\n  return e != \"none\" && n != \"hidden\";\n}\nfunction Dn(t) {\n  return !isNaN(t.getAttribute(\"tabindex\")) && 1 * t.getAttribute(\"tabindex\") >= 0;\n}\nfunction An(t) {\n  return !{ a: !0, area: !0 }[t.nodeName.loLowerCase()] || !!t.getAttribute(\"href\");\n}\nfunction In(t) {\n  return !{ input: !0, select: !0, textarea: !0, button: !0, object: !0 }[t.nodeName.toLowerCase()] || !t.hasAttribute(\"disabled\");\n}\nfunction ye(t) {\n  for (var e = t.querySelectorAll([\"a[href]\", \"area[href]\", \"input\", \"select\", \"textarea\", \"button\", \"iframe\", \"object\", \"embed\", \"[tabindex]\", \"[contenteditable]\"].join(\", \")), n = Array.prototype.slice.call(e, 0), i = 0; i < n.length; i++) n[i].$position = i;\n  for (n.sort(function(r, s) {\n    return r.tabIndex === 0 && s.tabIndex !== 0 ? 1 : r.tabIndex !== 0 && s.tabIndex === 0 ? -1 : r.tabIndex === s.tabIndex ? r.$position - s.$position : r.tabIndex < s.tabIndex ? -1 : 1;\n  }), i = 0; i < n.length; i++) {\n    var a = n[i];\n    (Dn(a) || In(a) || An(a)) && Cn(a) || (n.splice(i, 1), i--);\n  }\n  return n;\n}\nfunction Xe() {\n  var t = document.createElement(\"div\");\n  t.style.cssText = \"visibility:hidden;position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;height:110px;min-height:100px;overflow-y:scroll;\", document.body.appendChild(t);\n  var e = t.offsetWidth - t.clientWidth;\n  return document.body.removeChild(t), Math.max(e, 15);\n}\nfunction K(t) {\n  if (!t) return \"\";\n  var e = t.className || \"\";\n  return e.baseVal && (e = e.baseVal), e.indexOf || (e = \"\"), de(e);\n}\nfunction $t(t, e) {\n  e && t.className.indexOf(e) === -1 && (t.className += \" \" + e);\n}\nfunction Ut(t, e) {\n  e = e.split(\" \");\n  for (var n = 0; n < e.length; n++) {\n    var i = new RegExp(\"\\\\s?\\\\b\" + e[n] + \"\\\\b(?![-_.])\", \"\");\n    t.className = t.className.replace(i, \"\");\n  }\n}\nfunction be(t) {\n  return typeof t == \"string\" ? document.getElementById(t) || document.querySelector(t) || document.body : t || document.body;\n}\nvar Ht;\nfunction Ze(t, e) {\n  Ht || (Ht = document.createElement(\"div\")), Ht.innerHTML = e;\n  var n = Ht.firstChild;\n  return t.appendChild(n), n;\n}\nfunction Qe(t) {\n  t && t.parentNode && t.parentNode.removeChild(t);\n}\nfunction tn(t, e) {\n  for (var n = t.childNodes, i = n.length, a = [], r = 0; r < i; r++) {\n    var s = n[r];\n    s.className && s.className.indexOf(e) !== -1 && a.push(s);\n  }\n  return a;\n}\nfunction kt(t) {\n  var e;\n  return t.tagName ? e = t : (e = (t = t || window.event).target || t.srcElement).shadowRoot && t.composedPath && (e = t.composedPath()[0]), e;\n}\nfunction tt(t, e) {\n  if (e) {\n    for (var n = kt(t); n; ) {\n      if (n.getAttribute && n.getAttribute(e)) return n;\n      n = n.parentNode;\n    }\n    return null;\n  }\n}\nfunction de(t) {\n  return (String.prototype.trim || function() {\n    return this.replace(/^\\s+|\\s+$/g, \"\");\n  }).apply(t);\n}\nfunction ft(t, e, n) {\n  var i = kt(t), a = \"\";\n  for (n === void 0 && (n = !0); i; ) {\n    if (a = K(i)) {\n      var r = a.indexOf(e);\n      if (r >= 0) {\n        if (!n) return i;\n        var s = r === 0 || !de(a.charAt(r - 1)), o = r + e.length >= a.length || !de(a.charAt(r + e.length));\n        if (s && o) return i;\n      }\n    }\n    i = i.parentNode;\n  }\n  return null;\n}\nfunction at(t, e) {\n  var n = document.documentElement, i = F(e);\n  return { x: t.clientX + n.scrollLeft - n.clientLeft - i.x + e.scrollLeft, y: t.clientY + n.scrollTop - n.clientTop - i.y + e.scrollTop };\n}\nfunction en(t, e) {\n  const n = F(t), i = F(e);\n  return { x: n.x - i.x, y: n.y - i.y };\n}\nfunction G(t, e) {\n  if (!t || !e) return !1;\n  for (; t && t != e; ) t = t.parentNode;\n  return t === e;\n}\nfunction lt(t, e) {\n  if (t.closest) return t.closest(e);\n  if (t.matches || t.msMatchesSelector || t.webkitMatchesSelector) {\n    var n = t;\n    if (!document.documentElement.contains(n)) return null;\n    do {\n      if ((n.matches || n.msMatchesSelector || n.webkitMatchesSelector).call(n, e)) return n;\n      n = n.parentElement || n.parentNode;\n    } while (n !== null && n.nodeType === 1);\n    return null;\n  }\n  return console.error(\"Your browser is not supported\"), null;\n}\nfunction nn(t) {\n  for (; t; ) {\n    if (t.offsetWidth > 0 && t.offsetHeight > 0) return t;\n    t = t.parentElement;\n  }\n  return null;\n}\nfunction an() {\n  return document.head.createShadowRoot || document.head.attachShadow;\n}\nfunction ce() {\n  var t = document.activeElement;\n  return t.shadowRoot && (t = t.shadowRoot.activeElement), t === document.body && document.getSelection && (t = document.getSelection().focusNode || document.body), t;\n}\nfunction mt(t) {\n  if (!t || !an()) return document.body;\n  for (; t.parentNode && (t = t.parentNode); ) if (t instanceof ShadowRoot) return t.host;\n  return document.body;\n}\nconst rn = Object.freeze(Object.defineProperty({ __proto__: null, addClassName: $t, closest: lt, getActiveElement: ce, getChildNodes: tn, getClassName: K, getClosestSizedElement: nn, getFocusableNodes: ye, getNodePosition: F, getRelativeEventPosition: at, getRelativeNodePosition: en, getRootNode: mt, getScrollSize: Xe, getTargetNode: kt, hasClass: function(t, e) {\n  return \"classList\" in t ? t.classList.contains(e) : new RegExp(\"\\\\b\" + e + \"\\\\b\").test(t.className);\n}, hasShadowParent: function(t) {\n  return !!mt(t);\n}, insertNode: Ze, isChildOf: G, isShadowDomSupported: an, locateAttribute: tt, locateClassName: ft, removeClassName: Ut, removeNode: Qe, toNode: be }, Symbol.toStringTag, { value: \"Module\" })), ot = typeof window < \"u\" ? window : global;\nlet Mn = class {\n  constructor(t) {\n    this._mouseDown = !1, this._gantt = t, this._domEvents = t._createDomEventScope();\n  }\n  attach(t, e, n) {\n    const i = this._gantt, a = t.getViewPort();\n    this._originPosition = ot.getComputedStyle(a).display, this._restoreOriginPosition = () => {\n      a.style.position = this._originPosition;\n    }, this._originPosition === \"static\" && (a.style.position = \"relative\");\n    const r = i.$services.getService(\"state\");\n    r.registerProvider(\"clickDrag\", () => ({ autoscroll: !1 }));\n    let s = null;\n    const o = () => {\n      s && (this._mouseDown = !0, t.setStart(i.copy(s)), t.setPosition(i.copy(s)), t.setEnd(i.copy(s)), s = null);\n    };\n    this._domEvents.attach(a, \"mousedown\", (d) => {\n      s = null;\n      let c = \".gantt_task_line, .gantt_task_link\";\n      n !== void 0 && (c = n instanceof Array ? n.join(\", \") : n), c && i.utils.dom.closest(d.target, c) || (r.registerProvider(\"clickDrag\", () => ({ autoscroll: this._mouseDown })), e && d[e] !== !0 || (s = this._getCoordinates(d, t)));\n    });\n    const l = mt(i.$root) || document.body;\n    this._domEvents.attach(l, \"mouseup\", (d) => {\n      if (s = null, (!e || d[e] === !0) && this._mouseDown === !0) {\n        this._mouseDown = !1;\n        const c = this._getCoordinates(d, t);\n        t.dragEnd(c);\n      }\n    }), this._domEvents.attach(a, \"mousemove\", (d) => {\n      if (e && d[e] !== !0) return;\n      const c = this._gantt.ext.clickDrag, u = (this._gantt.config.drag_timeline || {}).useKey;\n      if (c && u && !e && d[u]) return;\n      let h = null;\n      if (!this._mouseDown && s) return h = this._getCoordinates(d, t), void (Math.abs(s.relative.left - h.relative.left) > 5 && o());\n      this._mouseDown === !0 && (h = this._getCoordinates(d, t), t.setEnd(h), t.render());\n    });\n  }\n  detach() {\n    const t = this._gantt;\n    this._domEvents.detachAll(), this._restoreOriginPosition && this._restoreOriginPosition(), t.$services.getService(\"state\").unregisterProvider(\"clickDrag\");\n  }\n  destructor() {\n    this.detach();\n  }\n  _getCoordinates(t, e) {\n    const n = e.getViewPort(), i = n.getBoundingClientRect(), { clientX: a, clientY: r } = t;\n    return { absolute: { left: a, top: r }, relative: { left: a - i.left + n.scrollLeft, top: r - i.top + n.scrollTop } };\n  }\n};\nvar sn = function() {\n  this._silent_mode = !1, this.listeners = {};\n};\nsn.prototype = { _silentStart: function() {\n  this._silent_mode = !0;\n}, _silentEnd: function() {\n  this._silent_mode = !1;\n} };\nvar Nn = function(t) {\n  var e = {}, n = 0, i = function() {\n    var a = !0;\n    for (var r in e) {\n      var s = e[r].apply(t, arguments);\n      a = a && s;\n    }\n    return a;\n  };\n  return i.addEvent = function(a, r) {\n    if (typeof a == \"function\") {\n      var s;\n      if (r && r.id ? s = r.id : (s = n, n++), r && r.once) {\n        var o = a;\n        a = function() {\n          o(), i.removeEvent(s);\n        };\n      }\n      return e[s] = a, s;\n    }\n    return !1;\n  }, i.removeEvent = function(a) {\n    delete e[a];\n  }, i.clear = function() {\n    e = {};\n  }, i;\n};\nfunction st(t) {\n  var e = new sn();\n  t.attachEvent = function(n, i, a) {\n    n = \"ev_\" + n.toLowerCase(), e.listeners[n] || (e.listeners[n] = Nn(this)), a && a.thisObject && (i = i.bind(a.thisObject));\n    var r = n + \":\" + e.listeners[n].addEvent(i, a);\n    return a && a.id && (r = a.id), r;\n  }, t.attachAll = function(n) {\n    this.attachEvent(\"listen_all\", n);\n  }, t.callEvent = function(n, i) {\n    if (e._silent_mode) return !0;\n    var a = \"ev_\" + n.toLowerCase(), r = e.listeners;\n    return r.ev_listen_all && r.ev_listen_all.apply(this, [n].concat(i)), !r[a] || r[a].apply(this, i);\n  }, t.checkEvent = function(n) {\n    return !!e.listeners[\"ev_\" + n.toLowerCase()];\n  }, t.detachEvent = function(n) {\n    if (n) {\n      var i = e.listeners;\n      for (var a in i) i[a].removeEvent(n);\n      var r = n.split(\":\");\n      if (i = e.listeners, r.length === 2) {\n        var s = r[0], o = r[1];\n        i[s] && i[s].removeEvent(o);\n      }\n    }\n  }, t.detachAllEvents = function() {\n    for (var n in e.listeners) e.listeners[n].clear();\n  };\n}\nvar Te = { second: 1, minute: 60, hour: 3600, day: 86400, week: 604800, month: 2592e3, quarter: 7776e3, year: 31536e3 };\nfunction jt(t) {\n  return Te[t] || Te.hour;\n}\nfunction vt(t, e) {\n  if (t.forEach) t.forEach(e);\n  else for (var n = t.slice(), i = 0; i < n.length; i++) e(n[i], i);\n}\nfunction Ln(t, e) {\n  if (t.find) return t.find(e);\n  for (var n = 0; n < t.length; n++) if (e(t[n], n)) return t[n];\n}\nfunction Ot(t, e) {\n  if (t.includes) return t.includes(e);\n  for (var n = 0; n < t.length; n++) if (t[n] === e) return !0;\n  return !1;\n}\nfunction ue(t) {\n  return Array.isArray ? Array.isArray(t) : t && t.length !== void 0 && t.pop && t.push;\n}\nfunction X(t) {\n  return !(!t || typeof t != \"object\") && !!(t.getFullYear && t.getMonth && t.getDate);\n}\nfunction yt(t) {\n  return X(t) && !isNaN(t.getTime());\n}\nfunction Ee(t, e) {\n  var n, i = function() {\n    i.$cancelTimeout(), i.$pending = !0;\n    var a = Array.prototype.slice.call(arguments);\n    n = setTimeout(function() {\n      t.apply(this, a), i.$pending = !1;\n    }, e);\n  };\n  return i.$pending = !1, i.$cancelTimeout = function() {\n    clearTimeout(n), i.$pending = !1;\n  }, i.$execute = function() {\n    var a = Array.prototype.slice.call(arguments);\n    t.apply(this, a), i.$cancelTimeout();\n  }, i;\n}\nfunction it(t, e) {\n  return Ce(t) && !Ce(e) && (t = \"0\"), t;\n}\nfunction Ce(t) {\n  return t === 0;\n}\nfunction Dt(t, e) {\n  for (var n, i, a, r = 0, s = t.length - 1; r <= s; ) if (i = +t[n = Math.floor((r + s) / 2)], a = +t[n - 1], i < e) r = n + 1;\n  else {\n    if (!(i > e)) {\n      for (; +t[n] == +t[n + 1]; ) n++;\n      return n;\n    }\n    if (!isNaN(a) && a < e) return n - 1;\n    s = n - 1;\n  }\n  return t.length - 1;\n}\nclass Pn {\n  constructor(e, n, i) {\n    var a;\n    this._el = document.createElement(\"div\"), this.defaultRender = (r, s) => {\n      this._el || (this._el = document.createElement(\"div\"));\n      const o = this._el, l = Math.min(r.relative.top, s.relative.top), d = Math.max(r.relative.top, s.relative.top), c = Math.min(r.relative.left, s.relative.left), u = Math.max(r.relative.left, s.relative.left);\n      if (this._singleRow) {\n        const h = this._getTaskPositionByTop(this._startPoint.relative.top);\n        o.style.height = h.height + \"px\", o.style.top = h.top + \"px\";\n      } else o.style.height = Math.abs(d - l) + \"px\", o.style.top = l + \"px\";\n      return o.style.width = Math.abs(u - c) + \"px\", o.style.left = c + \"px\", o;\n    }, this._gantt = n, this._view = i, this._viewPort = e.viewPort, this._el.classList.add(e.className), typeof e.callback == \"function\" && (this._callback = e.callback), this.render = () => {\n      let r;\n      r = e.render ? e.render(this._startPoint, this._endPoint) : this.defaultRender(this._startPoint, this._endPoint), r !== this._el && (this._el && this._el.parentNode && this._el.parentNode.removeChild(this._el), this._el = r), e.className !== \"\" && this._el.classList.add(e.className), this.draw();\n    }, (a = this._viewPort).attachEvent && a.detachEvent || st(this._viewPort), this._singleRow = e.singleRow, this._useRequestAnimationFrame = e.useRequestAnimationFrame;\n  }\n  draw() {\n    if (this._useRequestAnimationFrame) return requestAnimationFrame(() => {\n      this._viewPort.appendChild(this.getElement());\n    });\n    this._viewPort.appendChild(this.getElement());\n  }\n  clear() {\n    if (this._useRequestAnimationFrame) return requestAnimationFrame(() => {\n      this._el.parentNode && this._viewPort.removeChild(this._el);\n    });\n    this._el.parentNode && this._viewPort.removeChild(this._el);\n  }\n  getElement() {\n    return this._el;\n  }\n  getViewPort() {\n    return this._viewPort;\n  }\n  setStart(e) {\n    const n = this._gantt;\n    this._startPoint = e, this._startDate = n.dateFromPos(this._startPoint.relative.left), this._viewPort.callEvent(\"onBeforeDrag\", [this._startPoint]);\n  }\n  setEnd(e) {\n    const n = this._gantt;\n    if (this._endPoint = e, this._singleRow) {\n      const i = this._getTaskPositionByTop(this._startPoint.relative.top);\n      this._endPoint.relative.top = i.top;\n    }\n    this._endDate = n.dateFromPos(this._endPoint.relative.left), this._startPoint.relative.left > this._endPoint.relative.left && (this._positionPoint = { relative: { left: this._endPoint.relative.left, top: this._positionPoint.relative.top }, absolute: { left: this._endPoint.absolute.left, top: this._positionPoint.absolute.top } }), this._startPoint.relative.top > this._endPoint.relative.top && (this._positionPoint = { relative: { left: this._positionPoint.relative.left, top: this._endPoint.relative.top }, absolute: { left: this._positionPoint.absolute.left, top: this._endPoint.absolute.top } }), this._viewPort.callEvent(\"onDrag\", [this._startPoint, this._endPoint]);\n  }\n  setPosition(e) {\n    this._positionPoint = e;\n  }\n  dragEnd(e) {\n    const n = this._gantt;\n    e.relative.left < 0 && (e.relative.left = 0), this._viewPort.callEvent(\"onBeforeDragEnd\", [this._startPoint, e]), this.setEnd(e), this._endDate = this._endDate || n.getState().max_date, this._startDate.valueOf() > this._endDate.valueOf() && ([this._startDate, this._endDate] = [this._endDate, this._startDate]), this.clear();\n    const i = n.getTaskByTime(this._startDate, this._endDate), a = this._getTasksByTop(this._startPoint.relative.top, this._endPoint.relative.top);\n    this._viewPort.callEvent(\"onDragEnd\", [this._startPoint, this._endPoint]), this._callback && this._callback(this._startPoint, this._endPoint, this._startDate, this._endDate, i, a);\n  }\n  getInBounds() {\n    return this._singleRow;\n  }\n  _getTasksByTop(e, n) {\n    const i = this._gantt;\n    let a = e, r = n;\n    e > n && (a = n, r = e);\n    const s = this._getTaskPositionByTop(a).index, o = this._getTaskPositionByTop(r).index, l = [];\n    for (let d = s; d <= o; d++)\n      i.getTaskByIndex(d) && l.push(i.getTaskByIndex(d));\n    return l;\n  }\n  _getTaskPositionByTop(e) {\n    const n = this._gantt, i = this._view, a = i.getItemIndexByTopPosition(e), r = n.getTaskByIndex(a);\n    if (r) {\n      const s = i.getItemHeight(r.id);\n      return { top: i.getItemTop(r.id) || 0, height: s || 0, index: a };\n    }\n    {\n      const s = i.getTotalHeight();\n      return { top: e > s ? s : 0, height: n.config.row_height, index: e > s ? n.getTaskCount() : 0 };\n    }\n  }\n}\nclass xe {\n  constructor(e) {\n    this._mouseDown = !1, this._calculateDirectionVector = () => {\n      if (this._trace.length >= 10) {\n        const n = this._trace.slice(this._trace.length - 10), i = [];\n        for (let r = 1; r < n.length; r++) i.push({ x: n[r].x - n[r - 1].x, y: n[r].y - n[r - 1].y });\n        const a = { x: 0, y: 0 };\n        return i.forEach((r) => {\n          a.x += r.x, a.y += r.y;\n        }), { magnitude: Math.sqrt(a.x * a.x + a.y * a.y), angleDegrees: 180 * Math.atan2(Math.abs(a.y), Math.abs(a.x)) / Math.PI };\n      }\n      return null;\n    }, this._applyDndReadyStyles = () => {\n      this._timeline.$task.classList.add(\"gantt_timeline_move_available\");\n    }, this._clearDndReadyStyles = () => {\n      this._timeline.$task.classList.remove(\"gantt_timeline_move_available\");\n    }, this._getScrollPosition = (n) => {\n      const i = this._gantt;\n      return { x: i.$ui.getView(n.$config.scrollX).getScrollState().position, y: i.$ui.getView(n.$config.scrollY).getScrollState().position };\n    }, this._countNewScrollPosition = (n) => {\n      const i = this._calculateDirectionVector();\n      let a = this._startPoint.x - n.x, r = this._startPoint.y - n.y;\n      return i && (i.angleDegrees < 15 ? r = 0 : i.angleDegrees > 75 && (a = 0)), { x: this._scrollState.x + a, y: this._scrollState.y + r };\n    }, this._setScrollPosition = (n, i) => {\n      const a = this._gantt;\n      requestAnimationFrame(() => {\n        a.scrollLayoutCell(n.$id, i.x, i.y);\n      });\n    }, this._stopDrag = (n) => {\n      const i = this._gantt;\n      if (this._trace = [], i.$root.classList.remove(\"gantt_noselect\"), this._originalReadonly !== void 0 && (i.config.readonly = this._originalReadonly, this._mouseDown && i.config.drag_timeline && i.config.drag_timeline.render && i.render()), this._originAutoscroll !== void 0 && (i.config.autoscroll = this._originAutoscroll), i.config.drag_timeline) {\n        const { useKey: a } = i.config.drag_timeline;\n        if (a && n[a] !== !0) return;\n      }\n      this._mouseDown = !1;\n    }, this._startDrag = (n) => {\n      const i = this._gantt;\n      this._originAutoscroll = i.config.autoscroll, i.config.autoscroll = !1, i.$root.classList.add(\"gantt_noselect\"), this._originalReadonly = i.config.readonly, i.config.readonly = !0, i.config.drag_timeline && i.config.drag_timeline.render && i.render(), this._trace = [], this._mouseDown = !0;\n      const { x: a, y: r } = this._getScrollPosition(this._timeline);\n      this._scrollState = { x: a, y: r }, this._startPoint = { x: n.clientX, y: n.clientY }, this._trace.push(this._startPoint);\n    }, this._gantt = e, this._domEvents = e._createDomEventScope(), this._trace = [];\n  }\n  static create(e) {\n    return new xe(e);\n  }\n  destructor() {\n    this._domEvents.detachAll();\n  }\n  attach(e) {\n    this._timeline = e;\n    const n = this._gantt;\n    this._domEvents.attach(e.$task, \"mousedown\", (i) => {\n      if (!n.config.drag_timeline) return;\n      const { useKey: a, ignore: r, enabled: s } = n.config.drag_timeline;\n      if (s === !1) return;\n      let o = \".gantt_task_line, .gantt_task_link\";\n      r !== void 0 && (o = r instanceof Array ? r.join(\", \") : r), o && n.utils.dom.closest(i.target, o) || a && i[a] !== !0 || this._startDrag(i);\n    }), this._domEvents.attach(document, \"keydown\", (i) => {\n      if (!n.config.drag_timeline) return;\n      const { useKey: a } = n.config.drag_timeline;\n      a && i[a] === !0 && this._applyDndReadyStyles();\n    }), this._domEvents.attach(document, \"keyup\", (i) => {\n      if (!n.config.drag_timeline) return;\n      const { useKey: a } = n.config.drag_timeline;\n      a && i[a] === !1 && (this._clearDndReadyStyles(), this._stopDrag(i));\n    }), this._domEvents.attach(document, \"mouseup\", (i) => {\n      this._stopDrag(i);\n    }), this._domEvents.attach(n.$root, \"mouseup\", (i) => {\n      this._stopDrag(i);\n    }), this._domEvents.attach(document, \"mouseleave\", (i) => {\n      this._stopDrag(i);\n    }), this._domEvents.attach(n.$root, \"mouseleave\", (i) => {\n      this._stopDrag(i);\n    }), this._domEvents.attach(n.$root, \"mousemove\", (i) => {\n      if (!n.config.drag_timeline) return;\n      const { useKey: a } = n.config.drag_timeline;\n      if (a && i[a] !== !0) return;\n      const r = this._gantt.ext.clickDrag, s = (this._gantt.config.click_drag || {}).useKey;\n      if ((!r || !s || a || !i[s]) && this._mouseDown === !0) {\n        this._trace.push({ x: i.clientX, y: i.clientY });\n        const o = this._countNewScrollPosition({ x: i.clientX, y: i.clientY });\n        this._setScrollPosition(e, o), this._scrollState = o, this._startPoint = { x: i.clientX, y: i.clientY };\n      }\n    });\n  }\n}\nfunction Rn(t) {\n  (function() {\n    var e = [];\n    function n() {\n      return !!e.length;\n    }\n    function i(d) {\n      setTimeout(function() {\n        n() || t.$destroyed || t.focus();\n      }, 1);\n    }\n    function a(d) {\n      t.eventRemove(d, \"keydown\", s), t.event(d, \"keydown\", s), e.push(d);\n    }\n    function r() {\n      var d = e.pop();\n      d && t.eventRemove(d, \"keydown\", s), i();\n    }\n    function s(d) {\n      var c = d.currentTarget;\n      c == e[e.length - 1] && t.$keyboardNavigation.trapFocus(c, d);\n    }\n    function o() {\n      a(t.getLightbox());\n    }\n    t.attachEvent(\"onLightbox\", o), t.attachEvent(\"onAfterLightbox\", r), t.attachEvent(\"onLightboxChange\", function() {\n      r(), o();\n    }), t.attachEvent(\"onAfterQuickInfo\", function() {\n      i();\n    }), t.attachEvent(\"onMessagePopup\", function(d) {\n      l = t.utils.dom.getActiveElement(), a(d);\n    }), t.attachEvent(\"onAfterMessagePopup\", function() {\n      r(), setTimeout(function() {\n        l && (l.focus(), l = null);\n      }, 1);\n    });\n    var l = null;\n    t.$keyboardNavigation.isModal = n;\n  })();\n}\nclass Hn {\n  constructor(e) {\n    this.show = (n, i) => {\n      i === void 0 ? this._showForTask(n) : this._showAtCoordinates(n, i);\n    }, this.hide = (n) => {\n      const i = this._gantt, a = this._quickInfoBox;\n      this._quickInfoBoxId = 0;\n      const r = this._quickInfoTask;\n      if (this._quickInfoTask = null, a && a.parentNode) {\n        if (i.config.quick_info_detached) return i.callEvent(\"onAfterQuickInfo\", [r]), a.parentNode.removeChild(a);\n        a.className += \" gantt_qi_hidden\", a.style.right === \"auto\" ? a.style.left = \"-350px\" : a.style.right = \"-350px\", n && (a.style.left = a.style.right = \"\", a.parentNode.removeChild(a)), i.callEvent(\"onAfterQuickInfo\", [r]);\n      }\n    }, this.getNode = () => this._quickInfoBox ? this._quickInfoBox : null, this.setContainer = (n) => {\n      n && (this._container = typeof n == \"string\" ? document.getElementById(n) : n);\n    }, this.setContent = (n) => {\n      const i = this._gantt, a = { taskId: null, header: { title: \"\", date: \"\" }, content: \"\", buttons: i.config.quickinfo_buttons };\n      n || (n = a), n.taskId || (n.taskId = a.taskId), n.header || (n.header = a.header), n.header.title || (n.header.title = a.header.title), n.header.date || (n.header.date = a.header.date), n.content || (n.content = a.content), n.buttons || (n.buttons = a.buttons);\n      let r = this.getNode();\n      r || (r = this._createQuickInfoElement()), n.taskId && (this._quickInfoBoxId = n.taskId);\n      const s = r.querySelector(\".gantt_cal_qi_title\"), o = s.querySelector(\".gantt_cal_qi_tcontent\"), l = s.querySelector(\".gantt_cal_qi_tdate\"), d = r.querySelector(\".gantt_cal_qi_content\"), c = r.querySelector(\".gantt_cal_qi_controls\");\n      i._waiAria.quickInfoHeader(r, [n.header.title, n.header.date].join(\" \")), o.innerHTML = n.header.title, l.innerHTML = n.header.date, n.header.title || n.header.date ? s.style.display = \"\" : s.style.display = \"none\", d.innerHTML = n.content;\n      const u = n.buttons;\n      u.length ? c.style.display = \"\" : c.style.display = \"none\";\n      let h = \"\";\n      for (let g = 0; g < u.length; g++) {\n        const f = i._waiAria.quickInfoButtonAttrString(i.locale.labels[u[g]]);\n        h += `<div class=\"gantt_qi_big_icon ${u[g]} dhx_gantt_${u[g]}\" title=\"${i.locale.labels[u[g]]}\" ${f}>\n            <div class='dhx_menu_icon dhx_gantt_icon ${u[g]} gantt_menu_icon dhx_gantt_${u[g]}'></div>\n            <div>${i.locale.labels[u[g]]}</div>\n         </div>`;\n      }\n      c.innerHTML = h, i.eventRemove(r, \"click\", this._qiButtonClickHandler), i.eventRemove(r, \"keypress\", this._qiKeyPressHandler), i.event(r, \"click\", this._qiButtonClickHandler), i.event(r, \"keypress\", this._qiKeyPressHandler);\n    }, this._qiButtonClickHandler = (n) => {\n      this._qi_button_click(n.target);\n    }, this._qiKeyPressHandler = (n) => {\n      const i = n.which;\n      i !== 13 && i !== 32 || setTimeout(() => {\n        this._qi_button_click(n.target);\n      }, 1);\n    }, this._gantt = e;\n  }\n  _showAtCoordinates(e, n) {\n    this.hide(!0), this._quickInfoBoxId = 0, this._quickInfoTask = null, this._quickInfoBox || (this._createQuickInfoElement(), this.setContent()), this._appendAtCoordinates(e, n), this._gantt.callEvent(\"onQuickInfo\", [null]);\n  }\n  _showForTask(e) {\n    const n = this._gantt;\n    if (e === this._quickInfoBoxId && n.utils.dom.isChildOf(this._quickInfoBox, document.body) || !n.config.show_quick_info) return;\n    this.hide(!0);\n    const i = this._getContainer(), a = this._get_event_counter_part(e, 6, i.xViewport, i.yViewport);\n    a && (this._quickInfoBox = this._init_quick_info(e), this._quickInfoTask = e, this._quickInfoBox.className = this._prepare_quick_info_classname(e), this._fill_quick_data(e), this._show_quick_info(a, 6), n.callEvent(\"onQuickInfo\", [e]));\n  }\n  _get_event_counter_part(e, n, i, a) {\n    const r = this._gantt;\n    let s = r.getTaskNode(e);\n    if (!s && (s = r.getTaskRowNode(e), !s)) return null;\n    let o = 0;\n    const l = n + s.offsetTop + s.offsetHeight;\n    let d = s;\n    if (r.utils.dom.isChildOf(d, i)) for (; d && d !== i; ) o += d.offsetLeft, d = d.offsetParent;\n    const c = r.getScrollState();\n    return d ? { left: o, top: l, dx: o + s.offsetWidth / 2 - c.x > i.offsetWidth / 2 ? 1 : 0, dy: l + s.offsetHeight / 2 - c.y > a.offsetHeight / 2 ? 1 : 0, width: s.offsetWidth, height: s.offsetHeight } : null;\n  }\n  _createQuickInfoElement() {\n    const e = this._gantt, n = document.createElement(\"div\");\n    n.className += \"gantt_cal_quick_info\", e._waiAria.quickInfoAttr(n);\n    var i = `\n\t\t<div class=\"gantt_cal_qi_tcontrols\">\n\t\t\t<a class=\"gantt_cal_qi_close_btn dhx_gantt_icon dhx_gantt_icon_close\"></a>\n\t\t</div>\n\t\t<div class=\"gantt_cal_qi_title\" ${e._waiAria.quickInfoHeaderAttrString()}>\n\t\t\t\t\n\t\t\t\t<div class=\"gantt_cal_qi_tcontent\"></div>\n\t\t\t\t<div class=\"gantt_cal_qi_tdate\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"gantt_cal_qi_content\"></div>`;\n    if (i += '<div class=\"gantt_cal_qi_controls\">', i += \"</div>\", n.innerHTML = i, e.config.quick_info_detached) {\n      const a = this._getContainer();\n      e.event(a.parent, \"scroll\", () => {\n        this.hide();\n      });\n    }\n    return this._quickInfoBox = n, n;\n  }\n  _init_quick_info(e) {\n    const n = this._gantt, i = n.getTask(e);\n    return typeof this._quickInfoReadonly == \"boolean\" && n.isReadonly(i) !== this._quickInfoReadonly && (this.hide(!0), this._quickInfoBox = null), this._quickInfoReadonly = n.isReadonly(i), this._quickInfoBox || (this._quickInfoBox = this._createQuickInfoElement()), this._quickInfoBox;\n  }\n  _prepare_quick_info_classname(e) {\n    const n = this._gantt, i = n.getTask(e);\n    let a = `gantt_cal_quick_info gantt_${n.getTaskType(i)}`;\n    const r = n.templates.quick_info_class(i.start_date, i.end_date, i);\n    return r && (a += \" \" + r), a;\n  }\n  _fill_quick_data(e) {\n    const n = this._gantt, i = n.getTask(e);\n    this._quickInfoBoxId = e;\n    let a = [];\n    if (this._quickInfoReadonly) {\n      const r = n.config.quickinfo_buttons, s = { icon_delete: !0, icon_edit: !0 };\n      for (let o = 0; o < r.length; o++) this._quickInfoReadonly && s[r[o]] || a.push(r[o]);\n    } else a = n.config.quickinfo_buttons;\n    this.setContent({ header: { title: n.templates.quick_info_title(i.start_date, i.end_date, i), date: n.templates.quick_info_date(i.start_date, i.end_date, i) }, content: n.templates.quick_info_content(i.start_date, i.end_date, i), buttons: a });\n  }\n  _appendAtCoordinates(e, n) {\n    const i = this._quickInfoBox, a = this._getContainer();\n    i.parentNode && i.parentNode.nodeName.toLowerCase() !== \"#document-fragment\" || a.parent.appendChild(i), i.style.left = e + \"px\", i.style.top = n + \"px\";\n  }\n  _show_quick_info(e, n) {\n    const i = this._gantt, a = this._quickInfoBox;\n    if (i.config.quick_info_detached) {\n      const r = this._getContainer();\n      a.parentNode && a.parentNode.nodeName.toLowerCase() !== \"#document-fragment\" || r.parent.appendChild(a);\n      const s = a.offsetWidth, o = a.offsetHeight, l = i.getScrollState(), d = r.xViewport, c = r.yViewport, u = d.offsetWidth + l.x - s, h = e.top - l.y + o;\n      let g = e.top;\n      h > c.offsetHeight / 2 && (g = e.top - (o + e.height + 2 * n), g < l.y && h <= c.offsetHeight && (g = e.top)), g < l.y && (g = l.y);\n      const f = Math.min(Math.max(l.x, e.left - e.dx * (s - e.width)), u), y = g;\n      this._appendAtCoordinates(f, y);\n    } else a.style.top = \"20px\", e.dx === 1 ? (a.style.right = \"auto\", a.style.left = \"-300px\", setTimeout(() => {\n      a.style.left = \"10px\";\n    }, 1)) : (a.style.left = \"auto\", a.style.right = \"-300px\", setTimeout(() => {\n      a.style.right = \"10px\";\n    }, 1)), a.className += \" gantt_qi_\" + (e.dx === 1 ? \"left\" : \"right\"), i.$root.appendChild(a);\n  }\n  _qi_button_click(e) {\n    const n = this._gantt, i = this._quickInfoBox;\n    if (!e || e === i) return;\n    if (e.closest(\".gantt_cal_qi_close_btn\")) return void this.hide();\n    const a = e.className;\n    if (a.indexOf(\"_icon\") !== -1) {\n      const r = this._quickInfoBoxId;\n      n.$click.buttons[a.split(\" \")[1].replace(\"icon_\", \"\")](r);\n    } else this._qi_button_click(e.parentNode);\n  }\n  _getContainer() {\n    const e = this._gantt;\n    let n = this._container ? this._container : e.$task_data;\n    return n && n.offsetHeight && n.offsetWidth ? { parent: n, xViewport: e.$task, yViewport: e.$task_data } : (n = this._container ? this._container : e.$grid_data, n && n.offsetHeight && n.offsetWidth ? { parent: n, xViewport: e.$grid, yViewport: e.$grid_data } : { parent: this._container ? this._container : e.$layout, xViewport: e.$layout, yViewport: e.$layout });\n  }\n}\nvar Xt, On = {}.constructor.toString();\nfunction q(t) {\n  var e, n;\n  if (t && typeof t == \"object\") switch (!0) {\n    case X(t):\n      n = new Date(t);\n      break;\n    case ue(t):\n      for (n = new Array(t.length), e = 0; e < t.length; e++) n[e] = q(t[e]);\n      break;\n    default:\n      for (e in n = function(i) {\n        return i.constructor.toString() !== On;\n      }(t) ? Object.create(t) : {}, t) Object.prototype.hasOwnProperty.apply(t, [e]) && (n[e] = q(t[e]));\n  }\n  return n || t;\n}\nfunction N(t, e, n) {\n  for (var i in e) (t[i] === void 0 || n) && (t[i] = e[i]);\n  return t;\n}\nfunction W(t) {\n  return t !== void 0;\n}\nfunction rt() {\n  return Xt || (Xt = (/* @__PURE__ */ new Date()).valueOf()), ++Xt;\n}\nfunction R(t, e) {\n  return t.bind ? t.bind(e) : function() {\n    return t.apply(e, arguments);\n  };\n}\nfunction on(t, e, n, i) {\n  t.addEventListener ? t.addEventListener(e, n, i !== void 0 && i) : t.attachEvent && t.attachEvent(\"on\" + e, n);\n}\nfunction ln(t, e, n, i) {\n  t.removeEventListener ? t.removeEventListener(e, n, i !== void 0 && i) : t.detachEvent && t.detachEvent(\"on\" + e, n);\n}\nconst Bn = Object.freeze(Object.defineProperty({ __proto__: null, bind: R, copy: q, defined: W, event: on, eventRemove: ln, mixin: N, uid: rt }, Symbol.toStringTag, { value: \"Module\" }));\nfunction $e(t, e) {\n  t = t || on, e = e || ln;\n  var n = [], i = { attach: function(a, r, s, o) {\n    n.push({ element: a, event: r, callback: s, capture: o }), t(a, r, s, o);\n  }, detach: function(a, r, s, o) {\n    e(a, r, s, o);\n    for (var l = 0; l < n.length; l++) {\n      var d = n[l];\n      d.element === a && d.event === r && d.callback === s && d.capture === o && (n.splice(l, 1), l--);\n    }\n  }, detachAll: function() {\n    for (var a = n.slice(), r = 0; r < a.length; r++) {\n      var s = a[r];\n      i.detach(s.element, s.event, s.callback, s.capture), i.detach(s.element, s.event, s.callback, void 0), i.detach(s.element, s.event, s.callback, !1), i.detach(s.element, s.event, s.callback, !0);\n    }\n    n.splice(0, n.length);\n  }, extend: function() {\n    return $e(this.event, this.eventRemove);\n  } };\n  return i;\n}\nclass zn {\n  constructor(e) {\n    this._gantt = e;\n  }\n  getNode() {\n    const e = this._gantt;\n    return this._tooltipNode || (this._tooltipNode = document.createElement(\"div\"), this._tooltipNode.className = \"gantt_tooltip\", e._waiAria.tooltipAttr(this._tooltipNode)), this._tooltipNode;\n  }\n  setViewport(e) {\n    return this._root = e, this;\n  }\n  show(e, n) {\n    const i = this._gantt, a = document.body, r = this.getNode();\n    if (G(r, a) || (this.hide(), r.style.top = r.style.top || \"0px\", r.style.left = r.style.left || \"0px\", a.appendChild(r)), this._isLikeMouseEvent(e)) {\n      const s = this._calculateTooltipPosition(e);\n      n = s.top, e = s.left;\n    }\n    return r.style.top = n + \"px\", r.style.left = e + \"px\", i._waiAria.tooltipVisibleAttr(r), this;\n  }\n  hide() {\n    const e = this._gantt, n = this.getNode();\n    return n && n.parentNode && n.parentNode.removeChild(n), e._waiAria.tooltipHiddenAttr(n), this;\n  }\n  setContent(e) {\n    return this.getNode().innerHTML = e, this;\n  }\n  _isLikeMouseEvent(e) {\n    return !(!e || typeof e != \"object\") && \"clientX\" in e && \"clientY\" in e;\n  }\n  _getViewPort() {\n    return this._root || document.body;\n  }\n  _calculateTooltipPosition(e) {\n    const n = this._gantt, i = this._getViewPortSize(), a = this.getNode(), r = { top: 0, left: 0, width: a.offsetWidth, height: a.offsetHeight, bottom: 0, right: 0 }, s = n.config.tooltip_offset_x, o = n.config.tooltip_offset_y, l = document.body, d = at(e, l), c = F(l);\n    d.y += c.y, r.top = d.y, r.left = d.x, r.top += o, r.left += s, r.bottom = r.top + r.height, r.right = r.left + r.width;\n    const u = window.scrollY + l.scrollTop;\n    return r.top < i.top - u ? (r.top = i.top, r.bottom = r.top + r.height) : r.bottom > i.bottom && (r.bottom = i.bottom, r.top = r.bottom - r.height), r.left < i.left ? (r.left = i.left, r.right = i.left + r.width) : r.right > i.right && (r.right = i.right, r.left = r.right - r.width), d.x >= r.left && d.x <= r.right && (r.left = d.x - r.width - s, r.right = r.left + r.width), d.y >= r.top && d.y <= r.bottom && (r.top = d.y - r.height - o, r.bottom = r.top + r.height), r;\n  }\n  _getViewPortSize() {\n    const e = this._gantt, n = this._getViewPort();\n    let i, a = n, r = window.scrollY + document.body.scrollTop, s = window.scrollX + document.body.scrollLeft;\n    return n === e.$task_data ? (a = e.$task, r = 0, s = 0, i = F(e.$task)) : i = F(a), { left: i.x + s, top: i.y + r, width: i.width, height: i.height, bottom: i.y + i.height + r, right: i.x + i.width + s };\n  }\n}\nclass Wn {\n  constructor(e) {\n    this._listeners = {}, this.tooltip = new zn(e), this._gantt = e, this._domEvents = $e(), this._initDelayedFunctions();\n  }\n  destructor() {\n    this.tooltip.hide(), this._domEvents.detachAll();\n  }\n  hideTooltip() {\n    this.delayHide();\n  }\n  attach(e) {\n    let n = document.body;\n    const i = this._gantt;\n    e.global || (n = i.$root);\n    let a = null;\n    const r = (s) => {\n      const o = kt(s), l = lt(o, e.selector);\n      if (G(o, this.tooltip.getNode())) return;\n      const d = () => {\n        a = l, e.onmouseenter(s, l);\n      };\n      a ? l && l === a ? e.onmousemove(s, l) : (e.onmouseleave(s, a), a = null, l && l !== a && d()) : l && d();\n    };\n    this.detach(e.selector), this._domEvents.attach(n, \"mousemove\", r), this._listeners[e.selector] = { node: n, handler: r };\n  }\n  detach(e) {\n    const n = this._listeners[e];\n    n && this._domEvents.detach(n.node, \"mousemove\", n.handler);\n  }\n  tooltipFor(e) {\n    const n = (i) => {\n      let a = i;\n      return document.createEventObject && !document.createEvent && (a = document.createEventObject(i)), a;\n    };\n    this._initDelayedFunctions(), this.attach({ selector: e.selector, global: e.global, onmouseenter: (i, a) => {\n      const r = e.html(i, a);\n      r && this.delayShow(n(i), r);\n    }, onmousemove: (i, a) => {\n      const r = e.html(i, a);\n      r ? this.delayShow(n(i), r) : (this.delayShow.$cancelTimeout(), this.delayHide());\n    }, onmouseleave: () => {\n      this.delayShow.$cancelTimeout(), this.delayHide();\n    } });\n  }\n  _initDelayedFunctions() {\n    const e = this._gantt;\n    this.delayShow && this.delayShow.$cancelTimeout(), this.delayHide && this.delayHide.$cancelTimeout(), this.tooltip.hide(), this.delayShow = Ee((n, i) => {\n      e.callEvent(\"onBeforeTooltip\", [n]) === !1 ? this.tooltip.hide() : (this.tooltip.setContent(i), this.tooltip.show(n));\n    }, e.config.tooltip_timeout || 1), this.delayHide = Ee(() => {\n      this.delayShow.$cancelTimeout(), this.tooltip.hide();\n    }, e.config.tooltip_hide_timeout || 1);\n  }\n}\nconst De = { onBeforeUndo: \"onAfterUndo\", onBeforeRedo: \"onAfterRedo\" }, Ae = [\"onTaskDragStart\", \"onAfterTaskUpdate\", \"onAfterParentExpand\", \"onAfterTaskDelete\", \"onBeforeBatchUpdate\"];\nclass jn {\n  constructor(e, n) {\n    this._batchAction = null, this._batchMode = !1, this._ignore = !1, this._ignoreMoveEvents = !1, this._initialTasks = {}, this._initialLinks = {}, this._nestedTasks = {}, this._nestedLinks = {}, this._undo = e, this._gantt = n, this._attachEvents();\n  }\n  store(e, n, i = !1) {\n    return n === this._gantt.config.undo_types.task ? this._storeTask(e, i) : n === this._gantt.config.undo_types.link && this._storeLink(e, i);\n  }\n  isMoveEventsIgnored() {\n    return this._ignoreMoveEvents;\n  }\n  toggleIgnoreMoveEvents(e) {\n    this._ignoreMoveEvents = e || !1;\n  }\n  startIgnore() {\n    this._ignore = !0;\n  }\n  stopIgnore() {\n    this._ignore = !1;\n  }\n  startBatchAction() {\n    this._timeout || (this._timeout = setTimeout(() => {\n      this.stopBatchAction(), this._timeout = null;\n    }, 10)), this._ignore || this._batchMode || (this._batchMode = !0, this._batchAction = this._undo.action.create());\n  }\n  stopBatchAction() {\n    if (this._ignore) return;\n    const e = this._undo;\n    this._batchAction && e.logAction(this._batchAction), this._batchMode = !1, this._batchAction = null;\n  }\n  onTaskAdded(e) {\n    this._ignore || this._storeTaskCommand(e, this._undo.command.type.add);\n  }\n  onTaskUpdated(e) {\n    this._ignore || this._storeTaskCommand(e, this._undo.command.type.update);\n  }\n  onTaskMoved(e) {\n    if (!this._ignore) {\n      e.$local_index = this._gantt.getTaskIndex(e.id);\n      const n = this.getInitialTask(e.id);\n      if (e.$local_index === n.$local_index && this._gantt.getParent(e) === this._gantt.getParent(n)) return;\n      this._storeEntityCommand(e, this.getInitialTask(e.id), this._undo.command.type.move, this._undo.command.entity.task);\n    }\n  }\n  onTaskDeleted(e) {\n    if (!this._ignore) {\n      if (this._storeTaskCommand(e, this._undo.command.type.remove), this._nestedTasks[e.id]) {\n        const n = this._nestedTasks[e.id];\n        for (let i = 0; i < n.length; i++) this._storeTaskCommand(n[i], this._undo.command.type.remove);\n      }\n      if (this._nestedLinks[e.id]) {\n        const n = this._nestedLinks[e.id];\n        for (let i = 0; i < n.length; i++) this._storeLinkCommand(n[i], this._undo.command.type.remove);\n      }\n    }\n  }\n  onLinkAdded(e) {\n    this._ignore || this._storeLinkCommand(e, this._undo.command.type.add);\n  }\n  onLinkUpdated(e) {\n    this._ignore || this._storeLinkCommand(e, this._undo.command.type.update);\n  }\n  onLinkDeleted(e) {\n    this._ignore || this._storeLinkCommand(e, this._undo.command.type.remove);\n  }\n  setNestedTasks(e, n) {\n    const i = this._gantt;\n    let a = null;\n    const r = [];\n    let s = this._getLinks(i.getTask(e));\n    for (let d = 0; d < n.length; d++) a = this.setInitialTask(n[d]), s = s.concat(this._getLinks(a)), r.push(a);\n    const o = {};\n    for (let d = 0; d < s.length; d++) o[s[d]] = !0;\n    const l = [];\n    for (const d in o) l.push(this.setInitialLink(d));\n    this._nestedTasks[e] = r, this._nestedLinks[e] = l;\n  }\n  setInitialTask(e, n) {\n    const i = this._gantt;\n    if (n || !this._initialTasks[e] || !this._batchMode) {\n      const a = i.copy(i.getTask(e));\n      a.$index = i.getGlobalTaskIndex(e), a.$local_index = i.getTaskIndex(e), this.setInitialTaskObject(e, a);\n    }\n    return this._initialTasks[e];\n  }\n  getInitialTask(e) {\n    return this._initialTasks[e];\n  }\n  clearInitialTasks() {\n    this._initialTasks = {};\n  }\n  setInitialTaskObject(e, n) {\n    this._initialTasks[e] = n;\n  }\n  setInitialLink(e, n) {\n    return this._initialLinks[e] && this._batchMode || (this._initialLinks[e] = this._gantt.copy(this._gantt.getLink(e))), this._initialLinks[e];\n  }\n  getInitialLink(e) {\n    return this._initialLinks[e];\n  }\n  clearInitialLinks() {\n    this._initialLinks = {};\n  }\n  _attachEvents() {\n    let e = null;\n    const n = this._gantt, i = () => {\n      e || (e = setTimeout(() => {\n        e = null;\n      }), this.clearInitialTasks(), n.eachTask((l) => {\n        this.setInitialTask(l.id);\n      }), this.clearInitialLinks(), n.getLinks().forEach((l) => {\n        this.setInitialLink(l.id);\n      }));\n    }, a = (l) => n.copy(n.getTask(l));\n    for (const l in De) n.attachEvent(l, () => (this.startIgnore(), !0)), n.attachEvent(De[l], () => (this.stopIgnore(), !0));\n    for (let l = 0; l < Ae.length; l++) n.attachEvent(Ae[l], () => (this.startBatchAction(), !0));\n    n.attachEvent(\"onParse\", () => {\n      this._undo.clearUndoStack(), this._undo.clearRedoStack(), i();\n    }), n.attachEvent(\"onAfterTaskAdd\", (l, d) => {\n      this.setInitialTask(l, !0), this.onTaskAdded(d);\n    }), n.attachEvent(\"onAfterTaskUpdate\", (l, d) => {\n      this.onTaskUpdated(d);\n    }), n.attachEvent(\"onAfterParentExpand\", (l, d) => {\n      this.onTaskUpdated(d);\n    }), n.attachEvent(\"onAfterTaskDelete\", (l, d) => {\n      this.onTaskDeleted(d);\n    }), n.attachEvent(\"onAfterLinkAdd\", (l, d) => {\n      this.setInitialLink(l, !0), this.onLinkAdded(d);\n    }), n.attachEvent(\"onAfterLinkUpdate\", (l, d) => {\n      this.onLinkUpdated(d);\n    }), n.attachEvent(\"onAfterLinkDelete\", (l, d) => {\n      this.onLinkDeleted(d);\n    }), n.attachEvent(\"onRowDragEnd\", (l, d) => (this.onTaskMoved(a(l)), this.toggleIgnoreMoveEvents(), !0)), n.attachEvent(\"onBeforeTaskDelete\", (l) => {\n      this.store(l, n.config.undo_types.task);\n      const d = [];\n      return i(), n.eachTask((c) => {\n        d.push(c.id);\n      }, l), this.setNestedTasks(l, d), !0;\n    });\n    const r = n.getDatastore(\"task\");\n    r.attachEvent(\"onBeforeItemMove\", (l, d, c) => (this.isMoveEventsIgnored() || i(), !0)), r.attachEvent(\"onAfterItemMove\", (l, d, c) => (this.isMoveEventsIgnored() || this.onTaskMoved(a(l)), !0)), n.attachEvent(\"onRowDragStart\", (l, d, c) => (this.toggleIgnoreMoveEvents(!0), i(), !0));\n    let s = null, o = !1;\n    if (n.attachEvent(\"onBeforeTaskDrag\", (l) => {\n      if (s = n.getState().drag_id, s === l) {\n        const d = n.getTask(l);\n        n.isSummaryTask(d) && n.config.drag_project && (o = !0);\n      }\n      if (n.plugins().multiselect) {\n        const d = n.getSelectedTasks();\n        d.length > 1 && d.forEach((c) => {\n          this.store(c, n.config.undo_types.task, !0);\n        });\n      }\n      return this.store(l, n.config.undo_types.task);\n    }), n.attachEvent(\"onAfterTaskDrag\", (l) => {\n      (o || n.plugins().multiselect && n.getSelectedTasks().length > 1) && s === l && (o = !1, s = null, this.stopBatchAction()), this.store(l, n.config.undo_types.task, !0);\n    }), n.attachEvent(\"onLightbox\", (l) => this.store(l, n.config.undo_types.task)), n.attachEvent(\"onBeforeTaskAutoSchedule\", (l) => (this.store(l.id, n.config.undo_types.task, !0), !0)), n.ext.inlineEditors) {\n      let l = null, d = null;\n      n.attachEvent(\"onGanttLayoutReady\", () => {\n        l && n.ext.inlineEditors.detachEvent(l), d && n.ext.inlineEditors.detachEvent(d), d = n.ext.inlineEditors.attachEvent(\"onEditStart\", (c) => {\n          this.store(c.id, n.config.undo_types.task);\n        }), l = n.ext.inlineEditors.attachEvent(\"onBeforeEditStart\", (c) => (this.stopBatchAction(), !0));\n      });\n    }\n  }\n  _storeCommand(e) {\n    const n = this._undo;\n    if (n.updateConfigs(), n.undoEnabled) if (this._batchMode) this._batchAction.commands.push(e);\n    else {\n      const i = n.action.create([e]);\n      n.logAction(i);\n    }\n  }\n  _storeEntityCommand(e, n, i, a) {\n    const r = this._undo.command.create(e, n, i, a);\n    this._storeCommand(r);\n  }\n  _storeTaskCommand(e, n) {\n    this._gantt.isTaskExists(e.id) && (e.$local_index = this._gantt.getTaskIndex(e.id)), this._storeEntityCommand(e, this.getInitialTask(e.id), n, this._undo.command.entity.task);\n  }\n  _storeLinkCommand(e, n) {\n    this._storeEntityCommand(e, this.getInitialLink(e.id), n, this._undo.command.entity.link);\n  }\n  _getLinks(e) {\n    return e.$source.concat(e.$target);\n  }\n  _storeTask(e, n = !1) {\n    const i = this._gantt;\n    return this.setInitialTask(e, n), i.eachTask((a) => {\n      this.setInitialTask(a.id);\n    }, e), !0;\n  }\n  _storeLink(e, n = !1) {\n    return this.setInitialLink(e, n), !0;\n  }\n}\nclass Fn {\n  constructor(e) {\n    this.maxSteps = 100, this.undoEnabled = !0, this.redoEnabled = !0, this.action = { create: (n) => ({ commands: n ? n.slice() : [] }), invert: (n) => {\n      const i = this._gantt.copy(n), a = this.command;\n      for (let r = 0; r < n.commands.length; r++) {\n        const s = i.commands[r] = a.invert(i.commands[r]);\n        s.type !== a.type.update && s.type !== a.type.move || ([s.value, s.oldValue] = [s.oldValue, s.value]);\n      }\n      return i;\n    } }, this.command = { entity: null, type: null, create: (n, i, a, r) => {\n      const s = this._gantt;\n      return { entity: r, type: a, value: s.copy(n), oldValue: s.copy(i || n) };\n    }, invert: (n) => {\n      const i = this._gantt.copy(n);\n      return i.type = this.command.inverseCommands(n.type), i;\n    }, inverseCommands: (n) => {\n      const i = this._gantt, a = this.command.type;\n      switch (n) {\n        case a.update:\n          return a.update;\n        case a.remove:\n          return a.add;\n        case a.add:\n          return a.remove;\n        case a.move:\n          return a.move;\n        default:\n          return i.assert(!1, \"Invalid command \" + n), null;\n      }\n    } }, this._undoStack = [], this._redoStack = [], this._gantt = e;\n  }\n  getUndoStack() {\n    return this._undoStack;\n  }\n  setUndoStack(e) {\n    this._undoStack = e;\n  }\n  getRedoStack() {\n    return this._redoStack;\n  }\n  setRedoStack(e) {\n    this._redoStack = e;\n  }\n  clearUndoStack() {\n    this._undoStack = [];\n  }\n  clearRedoStack() {\n    this._redoStack = [];\n  }\n  updateConfigs() {\n    const e = this._gantt;\n    this.maxSteps = e.config.undo_steps || 100, this.command.entity = e.config.undo_types, this.command.type = e.config.undo_actions, this.undoEnabled = !!e.config.undo, this.redoEnabled = !!e.config.redo;\n  }\n  undo() {\n    const e = this._gantt;\n    if (this.updateConfigs(), !this.undoEnabled) return;\n    const n = this._pop(this._undoStack);\n    if (n && this._reorderCommands(n), e.callEvent(\"onBeforeUndo\", [n]) !== !1 && n) return this._applyAction(this.action.invert(n)), this._push(this._redoStack, e.copy(n)), void e.callEvent(\"onAfterUndo\", [n]);\n    e.callEvent(\"onAfterUndo\", [null]);\n  }\n  redo() {\n    const e = this._gantt;\n    if (this.updateConfigs(), !this.redoEnabled) return;\n    const n = this._pop(this._redoStack);\n    if (n && this._reorderCommands(n), e.callEvent(\"onBeforeRedo\", [n]) !== !1 && n) return this._applyAction(n), this._push(this._undoStack, e.copy(n)), void e.callEvent(\"onAfterRedo\", [n]);\n    e.callEvent(\"onAfterRedo\", [null]);\n  }\n  logAction(e) {\n    this._push(this._undoStack, e), this._redoStack = [];\n  }\n  _push(e, n) {\n    const i = this._gantt;\n    if (!n.commands.length) return;\n    const a = e === this._undoStack ? \"onBeforeUndoStack\" : \"onBeforeRedoStack\";\n    if (i.callEvent(a, [n]) !== !1 && n.commands.length) {\n      for (e.push(n); e.length > this.maxSteps; ) e.shift();\n      return n;\n    }\n  }\n  _pop(e) {\n    return e.pop();\n  }\n  _reorderCommands(e) {\n    const n = { any: 0, link: 1, task: 2 }, i = { move: 1, any: 0 };\n    e.commands.sort(function(a, r) {\n      if (a.entity === \"task\" && r.entity === \"task\") return a.type !== r.type ? (i[r.type] || 0) - (i[a.type] || 0) : a.type === \"move\" && a.oldValue && r.oldValue && r.oldValue.parent === a.oldValue.parent ? a.oldValue.$index - r.oldValue.$index : 0;\n      {\n        const s = n[a.entity] || n.any;\n        return (n[r.entity] || n.any) - s;\n      }\n    });\n  }\n  _applyAction(e) {\n    let n = null;\n    const i = this.command.entity, a = this.command.type, r = this._gantt, s = {};\n    s[i.task] = { add: \"addTask\", get: \"getTask\", update: \"updateTask\", remove: \"deleteTask\", move: \"moveTask\", isExists: \"isTaskExists\" }, s[i.link] = { add: \"addLink\", get: \"getLink\", update: \"updateLink\", remove: \"deleteLink\", isExists: \"isLinkExists\" }, r.batchUpdate(function() {\n      for (let o = 0; o < e.commands.length; o++) {\n        n = e.commands[o];\n        const l = s[n.entity][n.type], d = s[n.entity].get, c = s[n.entity].isExists;\n        if (n.type === a.add) r[l](n.oldValue, n.oldValue.parent, n.oldValue.$local_index);\n        else if (n.type === a.remove) r[c](n.value.id) && r[l](n.value.id);\n        else if (n.type === a.update) {\n          const u = r[d](n.value.id);\n          for (const h in n.value) {\n            let g = !(h.startsWith(\"$\") || h.startsWith(\"_\"));\n            [\"$open\"].indexOf(h) > -1 && (g = !0), g && (u[h] = n.value[h]);\n          }\n          r[l](n.value.id);\n        } else n.type === a.move && (r[l](n.value.id, n.value.$local_index, n.value.parent), r.callEvent(\"onRowDragEnd\", [n.value.id]));\n      }\n    });\n  }\n}\nconst Vn = { click_drag: function(t) {\n  t.ext || (t.ext = {});\n  const e = { className: \"gantt_click_drag_rect\", useRequestAnimationFrame: !0, callback: void 0, singleRow: !1 }, n = new Mn(t);\n  t.ext.clickDrag = n, t.attachEvent(\"onGanttReady\", () => {\n    const i = { viewPort: t.$task_data, ...e };\n    if (t.config.click_drag) {\n      const a = t.config.click_drag;\n      i.render = a.render || e.render, i.className = a.className || e.className, i.callback = a.callback || e.callback, i.viewPort = a.viewPort || t.$task_data, i.useRequestAnimationFrame = a.useRequestAnimationFrame === void 0 ? e.useRequestAnimationFrame : a.useRequestAnimationFrame, i.singleRow = a.singleRow === void 0 ? e.singleRow : a.singleRow;\n      const r = t.$ui.getView(\"timeline\"), s = new Pn(i, t, r);\n      t.ext.clickDrag.attach(s, a.useKey, a.ignore);\n    }\n  }), t.attachEvent(\"onDestroy\", () => {\n    n.destructor();\n  });\n}, drag_timeline: function(t) {\n  t.ext || (t.ext = {}), t.ext.dragTimeline = { create: () => xe.create(t) }, t.config.drag_timeline = { enabled: !0, render: !1 };\n}, fullscreen: function(t) {\n  function e() {\n    const c = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;\n    return !(!c || c !== document.body);\n  }\n  function n() {\n    try {\n      return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled;\n    } catch (c) {\n      console.error(\"Fullscreen is not available:\", c);\n    }\n  }\n  t.$services.getService(\"state\").registerProvider(\"fullscreen\", () => n() ? { fullscreen: e() } : void 0);\n  let i = { overflow: null, padding: null, paddingTop: null, paddingRight: null, paddingBottom: null, paddingLeft: null };\n  const a = { width: null, height: null, top: null, left: null, position: null, zIndex: null, modified: !1 };\n  let r = null;\n  function s(c, u) {\n    u.width = c.width, u.height = c.height, u.top = c.top, u.left = c.left, u.position = c.position, u.zIndex = c.zIndex;\n  }\n  let o = !1;\n  function l() {\n    if (!t.$container) return;\n    let c;\n    e() ? o && (c = \"onExpand\", function() {\n      const u = t.ext.fullscreen.getFullscreenElement(), h = document.body;\n      s(u.style, a), i = { overflow: h.style.overflow, padding: h.style.padding ? h.style.padding : null, paddingTop: h.style.paddingTop ? h.style.paddingTop : null, paddingRight: h.style.paddingRight ? h.style.paddingRight : null, paddingBottom: h.style.paddingBottom ? h.style.paddingBottom : null, paddingLeft: h.style.paddingLeft ? h.style.paddingLeft : null }, h.style.padding && (h.style.padding = \"0\"), h.style.paddingTop && (h.style.paddingTop = \"0\"), h.style.paddingRight && (h.style.paddingRight = \"0\"), h.style.paddingBottom && (h.style.paddingBottom = \"0\"), h.style.paddingLeft && (h.style.paddingLeft = \"0\"), h.style.overflow = \"hidden\", u.style.width = \"100vw\", u.style.height = \"100vh\", u.style.top = \"0px\", u.style.left = \"0px\", u.style.position = \"absolute\", u.style.zIndex = 1, a.modified = !0, r = function(g) {\n        let f = g.parentNode;\n        const y = [];\n        for (; f && f.style; ) y.push({ element: f, originalPositioning: f.style.position }), f.style.position = \"static\", f = f.parentNode;\n        return y;\n      }(u);\n    }()) : o && (o = !1, c = \"onCollapse\", function() {\n      const u = t.ext.fullscreen.getFullscreenElement(), h = document.body;\n      a.modified && (i.padding && (h.style.padding = i.padding), i.paddingTop && (h.style.paddingTop = i.paddingTop), i.paddingRight && (h.style.paddingRight = i.paddingRight), i.paddingBottom && (h.style.paddingBottom = i.paddingBottom), i.paddingLeft && (h.style.paddingLeft = i.paddingLeft), h.style.overflow = i.overflow, i = { overflow: null, padding: null, paddingTop: null, paddingRight: null, paddingBottom: null, paddingLeft: null }, s(a, u.style), a.modified = !1), r.forEach((g) => {\n        g.element.style.position = g.originalPositioning;\n      }), r = null;\n    }()), setTimeout(() => {\n      t.render();\n    }), setTimeout(() => {\n      t.callEvent(c, [t.ext.fullscreen.getFullscreenElement()]);\n    });\n  }\n  function d() {\n    return !t.$container || !t.ext.fullscreen.getFullscreenElement() ? !0 : n() ? !1 : ((console.warning || console.log)(\"The `fullscreen` feature not being allowed, or full-screen mode not being supported\"), !0);\n  }\n  t.ext.fullscreen = { expand() {\n    if (d() || e() || !t.callEvent(\"onBeforeExpand\", [this.getFullscreenElement()])) return;\n    o = !0;\n    const c = document.body, u = c.webkitRequestFullscreen ? [Element.ALLOW_KEYBOARD_INPUT] : [], h = c.msRequestFullscreen || c.mozRequestFullScreen || c.webkitRequestFullscreen || c.requestFullscreen;\n    h && h.apply(c, u);\n  }, collapse() {\n    if (d() || !e() || !t.callEvent(\"onBeforeCollapse\", [this.getFullscreenElement()])) return;\n    const c = document.msExitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen || document.exitFullscreen;\n    c && c.apply(document);\n  }, toggle() {\n    d() || (e() ? this.collapse() : this.expand());\n  }, getFullscreenElement: () => t.$root }, t.expand = function() {\n    t.ext.fullscreen.expand();\n  }, t.collapse = function() {\n    t.ext.fullscreen.collapse();\n  }, t.attachEvent(\"onGanttReady\", function() {\n    t.event(document, \"webkitfullscreenchange\", l), t.event(document, \"mozfullscreenchange\", l), t.event(document, \"MSFullscreenChange\", l), t.event(document, \"fullscreenChange\", l), t.event(document, \"fullscreenchange\", l);\n  });\n}, keyboard_navigation: function(t) {\n  (function(e) {\n    e.config.keyboard_navigation = !0, e.config.keyboard_navigation_cells = !1, e.$keyboardNavigation = {}, e._compose = function() {\n      for (var n = Array.prototype.slice.call(arguments, 0), i = {}, a = 0; a < n.length; a++) {\n        var r = n[a];\n        for (var s in typeof r == \"function\" && (r = new r()), r) i[s] = r[s];\n      }\n      return i;\n    }, function(n) {\n      n.$keyboardNavigation.shortcuts = { createCommand: function() {\n        return { modifiers: { shift: !1, alt: !1, ctrl: !1, meta: !1 }, keyCode: null };\n      }, parse: function(i) {\n        for (var a = [], r = this.getExpressions(this.trim(i)), s = 0; s < r.length; s++) {\n          for (var o = this.getWords(r[s]), l = this.createCommand(), d = 0; d < o.length; d++) this.commandKeys[o[d]] ? l.modifiers[o[d]] = !0 : this.specialKeys[o[d]] ? l.keyCode = this.specialKeys[o[d]] : l.keyCode = o[d].charCodeAt(0);\n          a.push(l);\n        }\n        return a;\n      }, getCommandFromEvent: function(i) {\n        var a = this.createCommand();\n        a.modifiers.shift = !!i.shiftKey, a.modifiers.alt = !!i.altKey, a.modifiers.ctrl = !!i.ctrlKey, a.modifiers.meta = !!i.metaKey, a.keyCode = i.which || i.keyCode, a.keyCode >= 96 && a.keyCode <= 105 && (a.keyCode -= 48);\n        var r = String.fromCharCode(a.keyCode);\n        return r && (a.keyCode = r.toLowerCase().charCodeAt(0)), a;\n      }, getHashFromEvent: function(i) {\n        return this.getHash(this.getCommandFromEvent(i));\n      }, getHash: function(i) {\n        var a = [];\n        for (var r in i.modifiers) i.modifiers[r] && a.push(r);\n        return a.push(i.keyCode), a.join(this.junctionChar);\n      }, getExpressions: function(i) {\n        return i.split(this.junctionChar);\n      }, getWords: function(i) {\n        return i.split(this.combinationChar);\n      }, trim: function(i) {\n        return i.replace(/\\s/g, \"\");\n      }, junctionChar: \",\", combinationChar: \"+\", commandKeys: { shift: 16, alt: 18, ctrl: 17, meta: !0 }, specialKeys: { backspace: 8, tab: 9, enter: 13, esc: 27, space: 32, up: 38, down: 40, left: 37, right: 39, home: 36, end: 35, pageup: 33, pagedown: 34, delete: 46, insert: 45, plus: 107, f1: 112, f2: 113, f3: 114, f4: 115, f5: 116, f6: 117, f7: 118, f8: 119, f9: 120, f10: 121, f11: 122, f12: 123 } };\n    }(e), function(n) {\n      n.$keyboardNavigation.EventHandler = { _handlers: null, findHandler: function(i) {\n        this._handlers || (this._handlers = {});\n        var a = n.$keyboardNavigation.shortcuts.getHash(i);\n        return this._handlers[a];\n      }, doAction: function(i, a) {\n        var r = this.findHandler(i);\n        if (r) {\n          if (n.$keyboardNavigation.facade.callEvent(\"onBeforeAction\", [i, a]) === !1) return;\n          r.call(this, a), a.preventDefault ? a.preventDefault() : a.returnValue = !1;\n        }\n      }, bind: function(i, a) {\n        this._handlers || (this._handlers = {});\n        for (var r = n.$keyboardNavigation.shortcuts, s = r.parse(i), o = 0; o < s.length; o++) this._handlers[r.getHash(s[o])] = a;\n      }, unbind: function(i) {\n        for (var a = n.$keyboardNavigation.shortcuts, r = a.parse(i), s = 0; s < r.length; s++) this._handlers[a.getHash(r[s])] && delete this._handlers[a.getHash(r[s])];\n      }, bindAll: function(i) {\n        for (var a in i) this.bind(a, i[a]);\n      }, initKeys: function() {\n        this._handlers || (this._handlers = {}), this.keys && this.bindAll(this.keys);\n      } };\n    }(e), function(n) {\n      n.$keyboardNavigation.getFocusableNodes = ye, n.$keyboardNavigation.trapFocus = function(i, a) {\n        if (a.keyCode != 9) return !1;\n        for (var r = n.$keyboardNavigation.getFocusableNodes(i), s = ce(), o = -1, l = 0; l < r.length; l++) if (r[l] == s) {\n          o = l;\n          break;\n        }\n        if (a.shiftKey) {\n          if (o <= 0) {\n            var d = r[r.length - 1];\n            if (d) return d.focus(), a.preventDefault(), !0;\n          }\n        } else if (o >= r.length - 1) {\n          var c = r[0];\n          if (c) return c.focus(), a.preventDefault(), !0;\n        }\n        return !1;\n      };\n    }(e), function(n) {\n      n.$keyboardNavigation.GanttNode = function() {\n      }, n.$keyboardNavigation.GanttNode.prototype = n._compose(n.$keyboardNavigation.EventHandler, { focus: function() {\n        n.focus();\n      }, blur: function() {\n      }, isEnabled: function() {\n        return n.$container.hasAttribute(\"tabindex\");\n      }, scrollHorizontal: function(i) {\n        var a = n.dateFromPos(n.getScrollState().x), r = n.getScale(), s = i < 0 ? -r.step : r.step;\n        a = n.date.add(a, s, r.unit), n.scrollTo(n.posFromDate(a));\n      }, scrollVertical: function(i) {\n        var a = n.getScrollState().y, r = n.config.row_height;\n        n.scrollTo(null, a + (i < 0 ? -1 : 1) * r);\n      }, keys: { \"alt+left\": function(i) {\n        this.scrollHorizontal(-1);\n      }, \"alt+right\": function(i) {\n        this.scrollHorizontal(1);\n      }, \"alt+up\": function(i) {\n        this.scrollVertical(-1);\n      }, \"alt+down\": function(i) {\n        this.scrollVertical(1);\n      }, \"ctrl+z\": function() {\n        n.undo && n.undo();\n      }, \"ctrl+r\": function() {\n        n.redo && n.redo();\n      } } }), n.$keyboardNavigation.GanttNode.prototype.bindAll(n.$keyboardNavigation.GanttNode.prototype.keys);\n    }(e), function(n) {\n      n.$keyboardNavigation.KeyNavNode = function() {\n      }, n.$keyboardNavigation.KeyNavNode.prototype = n._compose(n.$keyboardNavigation.EventHandler, { isValid: function() {\n        return !0;\n      }, fallback: function() {\n        return null;\n      }, moveTo: function(i) {\n        n.$keyboardNavigation.dispatcher.setActiveNode(i);\n      }, compareTo: function(i) {\n        if (!i) return !1;\n        for (var a in this) {\n          if (!!this[a] != !!i[a]) return !1;\n          var r = !(!this[a] || !this[a].toString), s = !(!i[a] || !i[a].toString);\n          if (s != r) return !1;\n          if (s && r) {\n            if (i[a].toString() != this[a].toString()) return !1;\n          } else if (i[a] != this[a]) return !1;\n        }\n        return !0;\n      }, getNode: function() {\n      }, focus: function() {\n        var i = this.getNode();\n        if (i) {\n          var a = n.$keyboardNavigation.facade;\n          a.callEvent(\"onBeforeFocus\", [i]) !== !1 && i && (i.setAttribute(\"tabindex\", \"-1\"), i.$eventAttached || (i.$eventAttached = !0, n.event(i, \"focus\", function(r) {\n            return r.preventDefault(), !1;\n          }, !1)), n.utils.dom.isChildOf(document.activeElement, i) && (i = document.activeElement), i.focus && i.focus(), a.callEvent(\"onFocus\", [this.getNode()]));\n        }\n      }, blur: function() {\n        var i = this.getNode();\n        i && (n.$keyboardNavigation.facade.callEvent(\"onBlur\", [i]), i.setAttribute(\"tabindex\", \"-1\"));\n      } });\n    }(e), function(n) {\n      n.$keyboardNavigation.HeaderCell = function(i) {\n        this.index = i || 0;\n      }, n.$keyboardNavigation.HeaderCell.prototype = n._compose(n.$keyboardNavigation.KeyNavNode, { _handlers: null, isValid: function() {\n        return !(!n.config.show_grid && n.getVisibleTaskCount() || !n.getGridColumns()[this.index] && n.getVisibleTaskCount());\n      }, fallback: function() {\n        if (!n.config.show_grid) return n.getVisibleTaskCount() ? new n.$keyboardNavigation.TaskRow() : null;\n        for (var i = n.getGridColumns(), a = this.index; a >= 0 && !i[a]; ) a--;\n        return i[a] ? new n.$keyboardNavigation.HeaderCell(a) : null;\n      }, fromDomElement: function(i) {\n        var a = ft(i, \"gantt_grid_head_cell\");\n        if (a) {\n          for (var r = 0; a && a.previousSibling; ) a = a.previousSibling, r += 1;\n          return new n.$keyboardNavigation.HeaderCell(r);\n        }\n        return null;\n      }, getNode: function() {\n        return n.$grid_scale.childNodes[this.index];\n      }, keys: { left: function() {\n        this.index > 0 && this.moveTo(new n.$keyboardNavigation.HeaderCell(this.index - 1));\n      }, right: function() {\n        var i = n.getGridColumns();\n        this.index < i.length - 1 && this.moveTo(new n.$keyboardNavigation.HeaderCell(this.index + 1));\n      }, down: function() {\n        var i, a = n.getChildren(n.config.root_id);\n        n.isTaskExists(a[0]) && (i = a[0]), i && (n.config.keyboard_navigation_cells ? this.moveTo(new n.$keyboardNavigation.TaskCell(i, this.index)) : this.moveTo(new n.$keyboardNavigation.TaskRow(i)));\n      }, end: function() {\n        var i = n.getGridColumns();\n        this.moveTo(new n.$keyboardNavigation.HeaderCell(i.length - 1));\n      }, home: function() {\n        this.moveTo(new n.$keyboardNavigation.HeaderCell(0));\n      }, \"enter, space\": function() {\n        ce().click();\n      }, \"ctrl+enter\": function() {\n        n.isReadonly(this) || n.createTask({}, this.taskId);\n      } } }), n.$keyboardNavigation.HeaderCell.prototype.bindAll(n.$keyboardNavigation.HeaderCell.prototype.keys);\n    }(e), function(n) {\n      n.$keyboardNavigation.TaskRow = function(i) {\n        if (!i) {\n          var a = n.getChildren(n.config.root_id);\n          a[0] && (i = a[0]);\n        }\n        this.taskId = i, n.isTaskExists(this.taskId) && (this.index = n.getTaskIndex(this.taskId), this.globalIndex = n.getGlobalTaskIndex(this.taskId), this.splitItem = !!n.getTask(this.taskId).$split_subtask, this.parentId = n.getParent(this.taskId));\n      }, n.$keyboardNavigation.TaskRow.prototype = n._compose(n.$keyboardNavigation.KeyNavNode, { _handlers: null, isValid: function() {\n        return n.isTaskExists(this.taskId) && n.getTaskIndex(this.taskId) > -1;\n      }, fallback: function() {\n        if (!n.getVisibleTaskCount()) {\n          var i = new n.$keyboardNavigation.HeaderCell();\n          return i.isValid() ? i : null;\n        }\n        if (this.splitItem) return new n.$keyboardNavigation.TaskRow(this.parentId);\n        var a = -1;\n        if (n.getTaskByIndex(this.globalIndex - 1)) a = this.globalIndex - 1;\n        else if (n.getTaskByIndex(this.globalIndex + 1)) a = this.globalIndex + 1;\n        else for (var r = this.globalIndex; r >= 0; ) {\n          if (n.getTaskByIndex(r)) {\n            a = r;\n            break;\n          }\n          r--;\n        }\n        return a > -1 ? new n.$keyboardNavigation.TaskRow(n.getTaskByIndex(a).id) : void 0;\n      }, fromDomElement: function(i) {\n        if (n.config.keyboard_navigation_cells) return null;\n        var a = n.locate(i);\n        return n.isTaskExists(a) ? new n.$keyboardNavigation.TaskRow(a) : null;\n      }, getNode: function() {\n        if (n.isTaskExists(this.taskId) && n.isTaskVisible(this.taskId)) return n.config.show_grid ? n.$grid.querySelector(\".gantt_row[\" + n.config.task_attribute + \"='\" + this.taskId + \"']\") : n.getTaskNode(this.taskId);\n      }, focus: function(i) {\n        if (!i) {\n          const a = n.getTaskPosition(n.getTask(this.taskId)), r = n.getTaskHeight(this.taskId), s = n.getScrollState();\n          let o, l;\n          o = n.$task ? n.$task.offsetWidth : s.inner_width, l = n.$grid_data || n.$task_data ? (n.$grid_data || n.$task_data).offsetHeight : s.inner_height, a.top < s.y || a.top + r > s.y + l ? n.scrollTo(null, a.top - 20) : n.config.scroll_on_click && n.config.show_chart && (a.left > s.x + o ? n.scrollTo(a.left - n.config.task_scroll_offset) : a.left + a.width < s.x && n.scrollTo(a.left + a.width - n.config.task_scroll_offset));\n        }\n        n.$keyboardNavigation.KeyNavNode.prototype.focus.apply(this, [i]), function() {\n          var a = n.$ui.getView(\"grid\"), r = parseInt(a.$grid.scrollLeft), s = parseInt(a.$grid_data.scrollTop), o = a.$config.scrollX;\n          if (o && a.$config.scrollable) {\n            var l = n.$ui.getView(o);\n            l && l.scrollTo(r, s);\n          }\n          var d = a.$config.scrollY;\n          if (d) {\n            var c = n.$ui.getView(d);\n            c && c.scrollTo(r, s);\n          }\n        }();\n      }, keys: { pagedown: function() {\n        n.getVisibleTaskCount() && this.moveTo(new n.$keyboardNavigation.TaskRow(n.getTaskByIndex(n.getVisibleTaskCount() - 1).id));\n      }, pageup: function() {\n        n.getVisibleTaskCount() && this.moveTo(new n.$keyboardNavigation.TaskRow(n.getTaskByIndex(0).id));\n      }, up: function() {\n        var i = null, a = n.getPrev(this.taskId);\n        i = n.isTaskExists(a) ? new n.$keyboardNavigation.TaskRow(a) : new n.$keyboardNavigation.HeaderCell(), this.moveTo(i);\n      }, down: function() {\n        var i = n.getNext(this.taskId);\n        n.isTaskExists(i) && this.moveTo(new n.$keyboardNavigation.TaskRow(i));\n      }, \"shift+down\": function() {\n        n.hasChild(this.taskId) && !n.getTask(this.taskId).$open && n.open(this.taskId);\n      }, \"shift+up\": function() {\n        n.hasChild(this.taskId) && n.getTask(this.taskId).$open && n.close(this.taskId);\n      }, \"shift+right\": function() {\n        if (!n.isReadonly(this)) {\n          var i = n.getPrevSibling(this.taskId);\n          n.isTaskExists(i) && !n.isChildOf(this.taskId, i) && (n.getTask(i).$open = !0, n.moveTask(this.taskId, -1, i) !== !1 && n.updateTask(this.taskId));\n        }\n      }, \"shift+left\": function() {\n        if (!n.isReadonly(this)) {\n          var i = n.getParent(this.taskId);\n          n.isTaskExists(i) && n.moveTask(this.taskId, n.getTaskIndex(i) + 1, n.getParent(i)) !== !1 && n.updateTask(this.taskId);\n        }\n      }, space: function(i) {\n        n.isSelectedTask(this.taskId) ? n.unselectTask(this.taskId) : n.selectTask(this.taskId);\n      }, \"ctrl+left\": function(i) {\n        n.close(this.taskId);\n      }, \"ctrl+right\": function(i) {\n        n.open(this.taskId);\n      }, delete: function(i) {\n        n.isReadonly(this) || n.$click.buttons.delete(this.taskId);\n      }, enter: function() {\n        n.isReadonly(this) || n.showLightbox(this.taskId);\n      }, \"ctrl+enter\": function() {\n        n.isReadonly(this) || n.createTask({}, this.taskId);\n      } } }), n.$keyboardNavigation.TaskRow.prototype.bindAll(n.$keyboardNavigation.TaskRow.prototype.keys);\n    }(e), function(n) {\n      n.$keyboardNavigation.TaskCell = function(i, a) {\n        if (!(i = it(i, n.config.root_id))) {\n          var r = n.getChildren(n.config.root_id);\n          r[0] && (i = r[0]);\n        }\n        this.taskId = i, this.columnIndex = a || 0, n.isTaskExists(this.taskId) && (this.index = n.getTaskIndex(this.taskId), this.globalIndex = n.getGlobalTaskIndex(this.taskId));\n      }, n.$keyboardNavigation.TaskCell.prototype = n._compose(n.$keyboardNavigation.TaskRow, { _handlers: null, isValid: function() {\n        return n.$keyboardNavigation.TaskRow.prototype.isValid.call(this) && !!n.getGridColumns()[this.columnIndex];\n      }, fallback: function() {\n        var i = n.$keyboardNavigation.TaskRow.prototype.fallback.call(this), a = i;\n        if (i instanceof n.$keyboardNavigation.TaskRow) {\n          for (var r = n.getGridColumns(), s = this.columnIndex; s >= 0 && !r[s]; ) s--;\n          r[s] && (a = new n.$keyboardNavigation.TaskCell(i.taskId, s));\n        }\n        return a;\n      }, fromDomElement: function(i) {\n        if (!n.config.keyboard_navigation_cells) return null;\n        var a = n.locate(i);\n        if (n.isTaskExists(a)) {\n          var r = 0, s = tt(i, \"data-column-index\");\n          return s && (r = 1 * s.getAttribute(\"data-column-index\")), new n.$keyboardNavigation.TaskCell(a, r);\n        }\n        return null;\n      }, getNode: function() {\n        if (n.isTaskExists(this.taskId) && n.isTaskVisible(this.taskId)) {\n          if (n.config.show_grid) {\n            var i = n.$grid.querySelector(\".gantt_row[\" + n.config.task_attribute + \"='\" + this.taskId + \"']\");\n            return i ? i.querySelector(\"[data-column-index='\" + this.columnIndex + \"']\") : null;\n          }\n          return n.getTaskNode(this.taskId);\n        }\n      }, keys: { up: function() {\n        var i = null, a = n.getPrev(this.taskId);\n        i = n.isTaskExists(a) ? new n.$keyboardNavigation.TaskCell(a, this.columnIndex) : new n.$keyboardNavigation.HeaderCell(this.columnIndex), this.moveTo(i);\n      }, down: function() {\n        var i = n.getNext(this.taskId);\n        n.isTaskExists(i) && this.moveTo(new n.$keyboardNavigation.TaskCell(i, this.columnIndex));\n      }, left: function() {\n        this.columnIndex > 0 && this.moveTo(new n.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex - 1));\n      }, right: function() {\n        var i = n.getGridColumns();\n        this.columnIndex < i.length - 1 && this.moveTo(new n.$keyboardNavigation.TaskCell(this.taskId, this.columnIndex + 1));\n      }, end: function() {\n        var i = n.getGridColumns();\n        this.moveTo(new n.$keyboardNavigation.TaskCell(this.taskId, i.length - 1));\n      }, home: function() {\n        this.moveTo(new n.$keyboardNavigation.TaskCell(this.taskId, 0));\n      }, pagedown: function() {\n        n.getVisibleTaskCount() && this.moveTo(new n.$keyboardNavigation.TaskCell(n.getTaskByIndex(n.getVisibleTaskCount() - 1).id, this.columnIndex));\n      }, pageup: function() {\n        n.getVisibleTaskCount() && this.moveTo(new n.$keyboardNavigation.TaskCell(n.getTaskByIndex(0).id, this.columnIndex));\n      } } }), n.$keyboardNavigation.TaskCell.prototype.bindAll(n.$keyboardNavigation.TaskRow.prototype.keys), n.$keyboardNavigation.TaskCell.prototype.bindAll(n.$keyboardNavigation.TaskCell.prototype.keys);\n    }(e), Rn(e), function(n) {\n      n.$keyboardNavigation.dispatcher = { isActive: !1, activeNode: null, globalNode: new n.$keyboardNavigation.GanttNode(), enable: function() {\n        this.isActive = !0, this.setActiveNode(this.getActiveNode());\n      }, disable: function() {\n        this.isActive = !1;\n      }, isEnabled: function() {\n        return !!this.isActive;\n      }, getDefaultNode: function() {\n        var i;\n        return (i = n.config.keyboard_navigation_cells ? new n.$keyboardNavigation.TaskCell() : new n.$keyboardNavigation.TaskRow()).isValid() || (i = i.fallback()), i;\n      }, setDefaultNode: function() {\n        this.setActiveNode(this.getDefaultNode());\n      }, getActiveNode: function() {\n        var i = this.activeNode;\n        return i && !i.isValid() && (i = i.fallback()), i;\n      }, fromDomElement: function(i) {\n        for (var a = [n.$keyboardNavigation.TaskRow, n.$keyboardNavigation.TaskCell, n.$keyboardNavigation.HeaderCell], r = 0; r < a.length; r++) if (a[r].prototype.fromDomElement) {\n          var s = a[r].prototype.fromDomElement(i);\n          if (s) return s;\n        }\n        return null;\n      }, focusGlobalNode: function() {\n        this.blurNode(this.globalNode), this.focusNode(this.globalNode);\n      }, setActiveNode: function(i) {\n        var a = !0;\n        this.activeNode && this.activeNode.compareTo(i) && (a = !1), this.isEnabled() && (a && this.blurNode(this.activeNode), this.activeNode = i, this.focusNode(this.activeNode, !a));\n      }, focusNode: function(i, a) {\n        i && i.focus && i.focus(a);\n      }, blurNode: function(i) {\n        i && i.blur && i.blur();\n      }, keyDownHandler: function(i) {\n        if (!n.$keyboardNavigation.isModal() && this.isEnabled() && !i.defaultPrevented) {\n          var a = this.globalNode, r = n.$keyboardNavigation.shortcuts.getCommandFromEvent(i), s = this.getActiveNode();\n          n.$keyboardNavigation.facade.callEvent(\"onKeyDown\", [r, i]) !== !1 && (s ? s.findHandler(r) ? s.doAction(r, i) : a.findHandler(r) && a.doAction(r, i) : this.setDefaultNode());\n        }\n      }, _timeout: null, awaitsFocus: function() {\n        return this._timeout !== null;\n      }, delay: function(i, a) {\n        clearTimeout(this._timeout), this._timeout = setTimeout(n.bind(function() {\n          this._timeout = null, i();\n        }, this), a || 1);\n      }, clearDelay: function() {\n        clearTimeout(this._timeout);\n      } };\n    }(e), function() {\n      var n = e.$keyboardNavigation.dispatcher;\n      n.isTaskFocused = function(v) {\n        var b = n.activeNode;\n        return (b instanceof e.$keyboardNavigation.TaskRow || b instanceof e.$keyboardNavigation.TaskCell) && b.taskId == v;\n      };\n      var i = function(v) {\n        if (e.config.keyboard_navigation && (e.config.keyboard_navigation_cells || !s(v)) && !o(v) && !function(b) {\n          return !!lt(b.target, \".gantt_cal_light\");\n        }(v)) return n.keyDownHandler(v);\n      }, a = function(v) {\n        if (n.$preventDefault) return v.preventDefault(), e.$container.blur(), !1;\n        n.awaitsFocus() || n.focusGlobalNode();\n      }, r = function() {\n        if (!n.isEnabled()) return;\n        const v = !G(document.activeElement, e.$container) && document.activeElement.localName != \"body\";\n        var b = n.getActiveNode();\n        if (b && !v) {\n          var _, m, p = b.getNode();\n          p && p.parentNode && (_ = p.parentNode.scrollTop, m = p.parentNode.scrollLeft), b.focus(!0), p && p.parentNode && (p.parentNode.scrollTop = _, p.parentNode.scrollLeft = m);\n        }\n      };\n      function s(v) {\n        return !!lt(v.target, \".gantt_grid_editor_placeholder\");\n      }\n      function o(v) {\n        return !!lt(v.target, \".no_keyboard_navigation\");\n      }\n      function l(v) {\n        if (!e.config.keyboard_navigation || !e.config.keyboard_navigation_cells && s(v)) return !0;\n        if (!o(v)) {\n          var b, _ = n.fromDomElement(v);\n          _ && (n.activeNode instanceof e.$keyboardNavigation.TaskCell && G(v.target, e.$task) && (_ = new e.$keyboardNavigation.TaskCell(_.taskId, n.activeNode.columnIndex)), b = _), b ? n.isEnabled() ? n.delay(function() {\n            n.setActiveNode(b);\n          }) : n.activeNode = b : (n.$preventDefault = !0, setTimeout(function() {\n            n.$preventDefault = !1;\n          }, 300));\n        }\n      }\n      e.attachEvent(\"onDataRender\", function() {\n        e.config.keyboard_navigation && r();\n      }), e.attachEvent(\"onGanttRender\", function() {\n        e.eventRemove(e.$root, \"keydown\", i), e.eventRemove(e.$container, \"focus\", a), e.eventRemove(e.$container, \"mousedown\", l), e.config.keyboard_navigation ? (e.event(e.$root, \"keydown\", i), e.event(e.$container, \"focus\", a), e.event(e.$container, \"mousedown\", l), e.$container.setAttribute(\"tabindex\", \"0\")) : e.$container.removeAttribute(\"tabindex\");\n      });\n      var d = e.attachEvent(\"onGanttReady\", function() {\n        if (e.detachEvent(d), e.$data.tasksStore.attachEvent(\"onStoreUpdated\", function(b) {\n          if (e.config.keyboard_navigation && n.isEnabled()) {\n            const _ = n.getActiveNode(), m = e.$ui.getView(\"grid\"), p = m.getItemTop(b), k = m.$grid_data.scrollTop, $ = k + m.$grid_data.getBoundingClientRect().height;\n            _ && _.taskId == b && k <= p && $ >= p && r();\n          }\n        }), e._smart_render) {\n          var v = e._smart_render._redrawTasks;\n          e._smart_render._redrawTasks = function(b, _) {\n            if (e.config.keyboard_navigation && n.isEnabled()) {\n              var m = n.getActiveNode();\n              if (m && m.taskId !== void 0) {\n                for (var p = !1, k = 0; k < _.length; k++) if (_[k].id == m.taskId && _[k].start_date) {\n                  p = !0;\n                  break;\n                }\n                p || _.push(e.getTask(m.taskId));\n              }\n            }\n            return v.apply(this, arguments);\n          };\n        }\n      });\n      let c = null, u = !1;\n      e.attachEvent(\"onTaskCreated\", function(v) {\n        return c = v.id, !0;\n      }), e.attachEvent(\"onAfterTaskAdd\", function(v, b) {\n        if (!e.config.keyboard_navigation) return !0;\n        if (n.isEnabled()) {\n          if (v == c && (u = !0, setTimeout(() => {\n            u = !1, c = null;\n          })), u && b.type == e.config.types.placeholder) return;\n          var _ = 0, m = n.activeNode;\n          m instanceof e.$keyboardNavigation.TaskCell && (_ = m.columnIndex);\n          var p = e.config.keyboard_navigation_cells ? e.$keyboardNavigation.TaskCell : e.$keyboardNavigation.TaskRow;\n          b.type == e.config.types.placeholder && e.config.placeholder_task.focusOnCreate === !1 || n.setActiveNode(new p(v, _));\n        }\n      }), e.attachEvent(\"onTaskIdChange\", function(v, b) {\n        if (!e.config.keyboard_navigation) return !0;\n        var _ = n.activeNode;\n        return n.isTaskFocused(v) && (_.taskId = b), !0;\n      });\n      var h = setInterval(function() {\n        e.config.keyboard_navigation && (n.isEnabled() || n.enable());\n      }, 500);\n      function g(v) {\n        var b = { gantt: e.$keyboardNavigation.GanttNode, headerCell: e.$keyboardNavigation.HeaderCell, taskRow: e.$keyboardNavigation.TaskRow, taskCell: e.$keyboardNavigation.TaskCell };\n        return b[v] || b.gantt;\n      }\n      function f(v) {\n        for (var b = e.getGridColumns(), _ = 0; _ < b.length; _++) if (b[_].name == v) return _;\n        return 0;\n      }\n      e.attachEvent(\"onDestroy\", function() {\n        clearInterval(h);\n      });\n      var y = {};\n      st(y), e.mixin(y, { addShortcut: function(v, b, _) {\n        var m = g(_);\n        m && m.prototype.bind(v, b);\n      }, getShortcutHandler: function(v, b) {\n        var _ = e.$keyboardNavigation.shortcuts.parse(v);\n        if (_.length) return y.getCommandHandler(_[0], b);\n      }, getCommandHandler: function(v, b) {\n        var _ = g(b);\n        if (_ && v) return _.prototype.findHandler(v);\n      }, removeShortcut: function(v, b) {\n        var _ = g(b);\n        _ && _.prototype.unbind(v);\n      }, focus: function(v) {\n        var b, _ = v ? v.type : null, m = g(_);\n        switch (_) {\n          case \"taskCell\":\n            b = new m(v.id, f(v.column));\n            break;\n          case \"taskRow\":\n            b = new m(v.id);\n            break;\n          case \"headerCell\":\n            b = new m(f(v.column));\n        }\n        n.delay(function() {\n          b ? n.setActiveNode(b) : (n.enable(), n.getActiveNode() ? n.awaitsFocus() || n.enable() : n.setDefaultNode());\n        });\n      }, getActiveNode: function() {\n        if (n.isEnabled()) {\n          var v = n.getActiveNode(), b = (m = v) instanceof e.$keyboardNavigation.GanttNode ? \"gantt\" : m instanceof e.$keyboardNavigation.HeaderCell ? \"headerCell\" : m instanceof e.$keyboardNavigation.TaskRow ? \"taskRow\" : m instanceof e.$keyboardNavigation.TaskCell ? \"taskCell\" : null, _ = e.getGridColumns();\n          switch (b) {\n            case \"taskCell\":\n              return { type: \"taskCell\", id: v.taskId, column: _[v.columnIndex].name };\n            case \"taskRow\":\n              return { type: \"taskRow\", id: v.taskId };\n            case \"headerCell\":\n              return { type: \"headerCell\", column: _[v.index].name };\n          }\n        }\n        var m;\n        return null;\n      } }), e.$keyboardNavigation.facade = y, e.ext.keyboardNavigation = y, e.focus = function() {\n        y.focus();\n      }, e.addShortcut = y.addShortcut, e.getShortcutHandler = y.getShortcutHandler, e.removeShortcut = y.removeShortcut;\n    }();\n  })(t);\n}, quick_info: function(t) {\n  t.ext || (t.ext = {}), t.ext.quickInfo = new Hn(t), t.config.quickinfo_buttons = [\"icon_edit\", \"icon_delete\"], t.config.quick_info_detached = !0, t.config.show_quick_info = !0, t.templates.quick_info_title = function(a, r, s) {\n    return s.text.substr(0, 50);\n  }, t.templates.quick_info_content = function(a, r, s) {\n    return s.details || s.text;\n  }, t.templates.quick_info_date = function(a, r, s) {\n    return t.templates.task_time(a, r, s);\n  }, t.templates.quick_info_class = function(a, r, s) {\n    return \"\";\n  }, t.attachEvent(\"onTaskClick\", function(a, r) {\n    return t.utils.dom.closest(r.target, \".gantt_add\") || setTimeout(function() {\n      t.ext.quickInfo.show(a);\n    }, 0), !0;\n  });\n  const e = [\"onViewChange\", \"onLightbox\", \"onBeforeTaskDelete\", \"onBeforeDrag\"], n = function() {\n    return t.ext.quickInfo.hide(), !0;\n  };\n  for (let a = 0; a < e.length; a++) t.attachEvent(e[a], n);\n  function i() {\n    return t.ext.quickInfo.hide(), t.ext.quickInfo._quickInfoBox = null, !0;\n  }\n  t.attachEvent(\"onEmptyClick\", function(a) {\n    let r = !0;\n    const s = document.querySelector(\".gantt_cal_quick_info\");\n    s && t.utils.dom.isChildOf(a.target, s) && (r = !1), r && n();\n  }), t.attachEvent(\"onGanttReady\", i), t.attachEvent(\"onDestroy\", i), t.event(window, \"keydown\", function(a) {\n    a.keyCode === 27 && t.ext.quickInfo.hide();\n  }), t.showQuickInfo = function() {\n    t.ext.quickInfo.show.apply(t.ext.quickInfo, arguments);\n  }, t.hideQuickInfo = function() {\n    t.ext.quickInfo.hide.apply(t.ext.quickInfo, arguments);\n  };\n}, tooltip: function(t) {\n  t.config.tooltip_timeout = 30, t.config.tooltip_offset_y = 20, t.config.tooltip_offset_x = 10, t.config.tooltip_hide_timeout = 30;\n  const e = new Wn(t);\n  t.ext.tooltips = e, t.attachEvent(\"onGanttReady\", function() {\n    e.tooltipFor({ selector: \"[\" + t.config.task_attribute + \"]:not(.gantt_task_row)\", html: (n) => {\n      if (t.config.touch && !t.config.touch_tooltip) return;\n      const i = t.locate(n);\n      if (t.isTaskExists(i)) {\n        const a = t.getTask(i);\n        return t.templates.tooltip_text(a.start_date, a.end_date, a);\n      }\n      return null;\n    }, global: !1 });\n  }), t.attachEvent(\"onDestroy\", function() {\n    e.destructor();\n  }), t.attachEvent(\"onLightbox\", function() {\n    e.hideTooltip();\n  }), t.attachEvent(\"onBeforeTooltip\", function() {\n    if (t.getState().link_source_id) return !1;\n  }), t.attachEvent(\"onGanttScroll\", function() {\n    e.hideTooltip();\n  });\n}, undo: function(t) {\n  const e = new Fn(t), n = new jn(e, t);\n  function i(d, c, u) {\n    d && (d.id === c && (d.id = u), d.parent === c && (d.parent = u));\n  }\n  function a(d, c, u) {\n    i(d.value, c, u), i(d.oldValue, c, u);\n  }\n  function r(d, c, u) {\n    d && (d.source === c && (d.source = u), d.target === c && (d.target = u));\n  }\n  function s(d, c, u) {\n    r(d.value, c, u), r(d.oldValue, c, u);\n  }\n  function o(d, c, u) {\n    const h = e;\n    for (let g = 0; g < d.length; g++) {\n      const f = d[g];\n      for (let y = 0; y < f.commands.length; y++) f.commands[y].entity === h.command.entity.task ? a(f.commands[y], c, u) : f.commands[y].entity === h.command.entity.link && s(f.commands[y], c, u);\n    }\n  }\n  function l(d, c, u) {\n    const h = e;\n    for (let g = 0; g < d.length; g++) {\n      const f = d[g];\n      for (let y = 0; y < f.commands.length; y++) {\n        const v = f.commands[y];\n        v.entity === h.command.entity.link && (v.value && v.value.id === c && (v.value.id = u), v.oldValue && v.oldValue.id === c && (v.oldValue.id = u));\n      }\n    }\n  }\n  t.config.undo = !0, t.config.redo = !0, t.config.undo_types = { link: \"link\", task: \"task\" }, t.config.undo_actions = { update: \"update\", remove: \"remove\", add: \"add\", move: \"move\" }, t.ext || (t.ext = {}), t.ext.undo = { undo: () => e.undo(), redo: () => e.redo(), getUndoStack: () => e.getUndoStack(), setUndoStack: (d) => e.setUndoStack(d), getRedoStack: () => e.getRedoStack(), setRedoStack: (d) => e.setRedoStack(d), clearUndoStack: () => e.clearUndoStack(), clearRedoStack: () => e.clearRedoStack(), saveState: (d, c) => n.store(d, c, !0), getInitialState: (d, c) => c === t.config.undo_types.link ? n.getInitialLink(d) : n.getInitialTask(d) }, t.undo = t.ext.undo.undo, t.redo = t.ext.undo.redo, t.getUndoStack = t.ext.undo.getUndoStack, t.getRedoStack = t.ext.undo.getRedoStack, t.clearUndoStack = t.ext.undo.clearUndoStack, t.clearRedoStack = t.ext.undo.clearRedoStack, t.attachEvent(\"onTaskIdChange\", (d, c) => {\n    const u = e;\n    o(u.getUndoStack(), d, c), o(u.getRedoStack(), d, c);\n  }), t.attachEvent(\"onLinkIdChange\", (d, c) => {\n    const u = e;\n    l(u.getUndoStack(), d, c), l(u.getRedoStack(), d, c);\n  }), t.attachEvent(\"onGanttReady\", () => {\n    e.updateConfigs();\n  });\n}, marker: function(t) {\n  function e(i) {\n    if (!t.config.show_markers || !i.start_date) return !1;\n    var a = t.getState();\n    if (+i.start_date > +a.max_date || (!i.end_date || +i.end_date < +a.min_date) && +i.start_date < +a.min_date) return;\n    var r = document.createElement(\"div\");\n    r.setAttribute(\"data-marker-id\", i.id);\n    var s = \"gantt_marker\";\n    t.templates.marker_class && (s += \" \" + t.templates.marker_class(i)), i.css && (s += \" \" + i.css), t.templates.marker_class && (s += \" \" + t.templates.marker_class(i)), i.title && (r.title = i.title), r.className = s;\n    var o = t.posFromDate(i.start_date);\n    r.style.left = o + \"px\";\n    let l = Math.max(t.getRowTop(t.getVisibleTaskCount()), 0) + \"px\";\n    if (t.config.timeline_placeholder && t.$task_data && (l = t.$task_data.scrollHeight + \"px\"), r.style.height = l, i.end_date) {\n      var d = t.posFromDate(i.end_date);\n      r.style.width = Math.max(d - o, 0) + \"px\";\n    }\n    return i.text && (r.innerHTML = \"<div class='gantt_marker_content' >\" + i.text + \"</div>\"), r;\n  }\n  function n() {\n    if (t.$task_data) {\n      var i = document.createElement(\"div\");\n      i.className = \"gantt_marker_area\", t.$task_data.appendChild(i), t.$marker_area = i;\n    }\n  }\n  t._markers || (t._markers = t.createDatastore({ name: \"marker\", initItem: function(i) {\n    return i.id = i.id || t.uid(), i;\n  } })), t.config.show_markers = !0, t.attachEvent(\"onBeforeGanttRender\", function() {\n    t.$marker_area || n();\n  }), t.attachEvent(\"onDataRender\", function() {\n    t.$marker_area || (n(), t.renderMarkers());\n  }), t.attachEvent(\"onGanttLayoutReady\", function() {\n    t.attachEvent(\"onBeforeGanttRender\", function() {\n      n(), t.$services.getService(\"layers\").createDataRender({ name: \"marker\", defaultContainer: function() {\n        return t.$marker_area;\n      } }).addLayer(e);\n    }, { once: !0 });\n  }), t.getMarker = function(i) {\n    return this._markers ? this._markers.getItem(i) : null;\n  }, t.addMarker = function(i) {\n    return this._markers.addItem(i);\n  }, t.deleteMarker = function(i) {\n    return !!this._markers.exists(i) && (this._markers.removeItem(i), !0);\n  }, t.updateMarker = function(i) {\n    this._markers.refresh(i);\n  }, t._getMarkers = function() {\n    return this._markers.getItems();\n  }, t.renderMarkers = function() {\n    this._markers.refresh();\n  };\n}, multiselect: function(t) {\n  t.config.multiselect = !0, t.config.multiselect_one_level = !1, t._multiselect = { _selected: {}, _one_level: !1, _active: !0, _first_selected_when_shift: null, getDefaultSelected: function() {\n    var e = this.getSelected();\n    return e.length ? e[e.length - 1] : null;\n  }, setFirstSelected: function(e) {\n    this._first_selected_when_shift = e;\n  }, getFirstSelected: function() {\n    return this._first_selected_when_shift;\n  }, isActive: function() {\n    return this.updateState(), this._active;\n  }, updateState: function() {\n    this._one_level = t.config.multiselect_one_level;\n    var e = this._active;\n    this._active = t.config.select_task, this._active != e && this.reset();\n  }, reset: function() {\n    this._selected = {};\n  }, setLastSelected: function(e) {\n    t.$data.tasksStore.silent(function() {\n      var n = t.$data.tasksStore;\n      e ? n.select(e + \"\") : n.unselect(null);\n    });\n  }, getLastSelected: function() {\n    var e = t.$data.tasksStore.getSelectedId();\n    return e && t.isTaskExists(e) ? e : null;\n  }, select: function(e, n) {\n    return !!(e && t.callEvent(\"onBeforeTaskMultiSelect\", [e, !0, n]) && t.callEvent(\"onBeforeTaskSelected\", [e])) && (this._selected[e] = !0, this.setLastSelected(e), this.afterSelect(e), t.callEvent(\"onTaskMultiSelect\", [e, !0, n]), t.callEvent(\"onTaskSelected\", [e]), !0);\n  }, toggle: function(e, n) {\n    this._selected[e] ? this.unselect(e, n) : this.select(e, n);\n  }, unselect: function(e, n) {\n    e && t.callEvent(\"onBeforeTaskMultiSelect\", [e, !1, n]) && (this._selected[e] = !1, this.getLastSelected() == e && this.setLastSelected(this.getDefaultSelected()), this.afterSelect(e), t.callEvent(\"onTaskMultiSelect\", [e, !1, n]), t.callEvent(\"onTaskUnselected\", [e]));\n  }, isSelected: function(e) {\n    return !(!t.isTaskExists(e) || !this._selected[e]);\n  }, getSelected: function() {\n    var e = [];\n    for (var n in this._selected) this._selected[n] && t.isTaskExists(n) ? e.push(n) : this._selected[n] = !1;\n    return e.sort(function(i, a) {\n      return t.getGlobalTaskIndex(i) > t.getGlobalTaskIndex(a) ? 1 : -1;\n    }), e;\n  }, forSelected: function(e) {\n    for (var n = this.getSelected(), i = 0; i < n.length; i++) e(n[i]);\n  }, isSameLevel: function(e) {\n    if (!this._one_level) return !0;\n    var n = this.getLastSelected();\n    return !n || !t.isTaskExists(n) || !t.isTaskExists(e) || t.calculateTaskLevel(t.getTask(n)) == t.calculateTaskLevel(t.getTask(e));\n  }, afterSelect: function(e) {\n    t.isTaskExists(e) && t._quickRefresh(function() {\n      t.refreshTask(e);\n    });\n  }, doSelection: function(e) {\n    if (!this.isActive() || t._is_icon_open_click(e)) return !1;\n    var n = t.locate(e);\n    if (!n || !t.callEvent(\"onBeforeMultiSelect\", [e])) return !1;\n    var i = this.getSelected(), a = this.getFirstSelected(), r = !1, s = this.getLastSelected(), o = t.config.multiselect, l = (function() {\n      var c = t.ext.inlineEditors, u = c.getState(), h = c.locateCell(e.target);\n      t.config.inline_editors_multiselect_open && h && c.getEditorConfig(h.columnName) && (c.isVisible() && u.id == h.id && u.columnName == h.columnName || c.startEdit(h.id, h.columnName)), this.setFirstSelected(n), this.isSelected(n) || this.select(n, e), i = this.getSelected();\n      for (var g = 0; g < i.length; g++) i[g] !== n && this.unselect(i[g], e);\n    }).bind(this), d = (function() {\n      if (s) {\n        if (n) {\n          var c = t.getGlobalTaskIndex(this.getFirstSelected()), u = t.getGlobalTaskIndex(n), h = t.getGlobalTaskIndex(s);\n          c != -1 && h != -1 || (c = u, this.reset());\n          for (var g = s; t.getGlobalTaskIndex(g) !== c; ) this.unselect(g, e), g = c > h ? t.getNext(g) : t.getPrev(g);\n          for (g = n; t.getGlobalTaskIndex(g) !== c; ) this.select(g, e) && !r && (r = !0, a = g), g = c > u ? t.getNext(g) : t.getPrev(g);\n        }\n      } else s = n;\n    }).bind(this);\n    return o && (e.ctrlKey || e.metaKey) ? (this.isSelected(n) || this.setFirstSelected(n), n && this.toggle(n, e)) : o && e.shiftKey ? (t.isTaskExists(this.getFirstSelected()) && this.getFirstSelected() !== null || this.setFirstSelected(n), i.length ? d() : l()) : l(), this.isSelected(n) ? this.setLastSelected(n) : a ? n == s && this.setLastSelected(e.shiftKey ? a : this.getDefaultSelected()) : this.setLastSelected(null), this.getSelected().length || this.setLastSelected(null), this.getLastSelected() && this.isSelected(this.getFirstSelected()) || this.setFirstSelected(this.getLastSelected()), !0;\n  } }, function() {\n    var e = t.selectTask;\n    t.selectTask = function(i) {\n      if (!(i = it(i, this.config.root_id))) return !1;\n      var a = t._multiselect, r = i;\n      return a.isActive() ? (a.select(i, null) && a.setLastSelected(i), a.setFirstSelected(a.getLastSelected())) : r = e.call(this, i), r;\n    };\n    var n = t.unselectTask;\n    t.unselectTask = function(i) {\n      var a = t._multiselect, r = a.isActive();\n      (i = i || a.getLastSelected()) && r && (a.unselect(i, null), i == a.getLastSelected() && a.setLastSelected(null), t.refreshTask(i), a.setFirstSelected(a.getLastSelected()));\n      var s = i;\n      return r || (s = n.call(this, i)), s;\n    }, t.toggleTaskSelection = function(i) {\n      var a = t._multiselect;\n      i && a.isActive() && (a.toggle(i), a.setFirstSelected(a.getLastSelected()));\n    }, t.getSelectedTasks = function() {\n      var i = t._multiselect;\n      return i.isActive(), i.getSelected();\n    }, t.eachSelectedTask = function(i) {\n      return this._multiselect.forSelected(i);\n    }, t.isSelectedTask = function(i) {\n      return this._multiselect.isSelected(i);\n    }, t.getLastSelectedTask = function() {\n      return this._multiselect.getLastSelected();\n    }, t.attachEvent(\"onGanttReady\", function() {\n      var i = t.$data.tasksStore.isSelected;\n      t.$data.tasksStore.isSelected = function(a) {\n        return t._multiselect.isActive() ? t._multiselect.isSelected(a) : i.call(this, a);\n      };\n    });\n  }(), t.attachEvent(\"onTaskIdChange\", function(e, n) {\n    var i = t._multiselect;\n    if (!i.isActive()) return !0;\n    t.isSelectedTask(e) && (i.unselect(e, null), i.select(n, null));\n  }), t.attachEvent(\"onAfterTaskDelete\", function(e, n) {\n    var i = t._multiselect;\n    if (!i.isActive()) return !0;\n    i._selected[e] && (i._selected[e] = !1, i.setLastSelected(i.getDefaultSelected())), i.forSelected(function(a) {\n      t.isTaskExists(a) || i.unselect(a, null);\n    });\n  }), t.attachEvent(\"onBeforeTaskMultiSelect\", function(e, n, i) {\n    const a = t._multiselect;\n    if (n && a.isActive()) {\n      let r = t.getSelectedId(), s = null;\n      r && (s = t.getTask(r));\n      let o = t.getTask(e), l = !1;\n      if (s && s.$level != o.$level && (l = !0), t.config.multiselect_one_level && l && !i.ctrlKey && !i.shiftKey) return !0;\n      if (a._one_level) return a.isSameLevel(e);\n    }\n    return !0;\n  }), t.attachEvent(\"onTaskClick\", function(e, n) {\n    return t._multiselect.doSelection(n) && t.callEvent(\"onMultiSelect\", [n]), !0;\n  });\n}, export_api: function(t) {\n  return t.ext = t.ext || {}, t.ext.export_api = t.ext.export_api || { _apiUrl: \"https://export.dhtmlx.com/gantt\", _preparePDFConfigRaw(e, n) {\n    let i = null;\n    e.start && e.end && (i = { start_date: t.config.start_date, end_date: t.config.end_date }, t.config.start_date = t.date.str_to_date(t.config.date_format)(e.start), t.config.end_date = t.date.str_to_date(t.config.date_format)(e.end)), e = t.mixin(e, { name: \"gantt.\" + n, data: t.ext.export_api._serializeHtml() }), i && (t.config.start_date = i.start_date, t.config.end_date = i.end_date);\n  }, _prepareConfigPDF: (e, n) => (e = t.mixin(e || {}, { name: \"gantt.\" + n, data: t.ext.export_api._serializeAll(), config: t.config }), t.ext.export_api._fixColumns(e.config.columns), e), _pdfExportRouter(e, n) {\n    e && e.raw ? t.ext.export_api._preparePDFConfigRaw(e, n) : e = t.ext.export_api._prepareConfigPDF(e, n), e.version = t.version, t.ext.export_api._sendToExport(e, n);\n  }, exportToPDF(e) {\n    t.ext.export_api._pdfExportRouter(e, \"pdf\");\n  }, exportToPNG(e) {\n    t.ext.export_api._pdfExportRouter(e, \"png\");\n  }, exportToICal(e) {\n    e = t.mixin(e || {}, { name: \"gantt.ical\", data: t.ext.export_api._serializePlain().data, version: t.version }), t.ext.export_api._sendToExport(e, \"ical\");\n  }, exportToExcel(e) {\n    let n, i, a, r;\n    e = e || {};\n    const s = t.config.smart_rendering;\n    if (e.visual === \"base-colors\" && (t.config.smart_rendering = !1), e.start || e.end) {\n      a = t.getState(), i = [t.config.start_date, t.config.end_date], r = t.getScrollState();\n      const o = t.date.str_to_date(t.config.date_format);\n      n = t.eachTask, e.start && (t.config.start_date = o(e.start)), e.end && (t.config.end_date = o(e.end)), t.render(), t.config.smart_rendering = s, t.eachTask = t.ext.export_api._eachTaskTimed(t.config.start_date, t.config.end_date);\n    } else e.visual === \"base-colors\" && (t.render(), t.config.smart_rendering = s);\n    t._no_progress_colors = e.visual === \"base-colors\", (e = t.mixin(e, { name: \"gantt.xlsx\", title: \"Tasks\", data: t.ext.export_api._serializeTimeline(e).data, columns: t.ext.export_api._serializeGrid({ rawDates: !0 }), version: t.version })).visual && (e.scales = t.ext.export_api._serializeScales(e)), t.ext.export_api._sendToExport(e, \"excel\"), (e.start || e.end) && (t.config.start_date = a.min_date, t.config.end_date = a.max_date, t.eachTask = n, t.render(), t.scrollTo(r.x, r.y), t.config.start_date = i[0], t.config.end_date = i[1]);\n  }, exportToJSON(e) {\n    e = t.mixin(e || {}, { name: \"gantt.json\", data: t.ext.export_api._serializeAll(), config: t.config, columns: t.ext.export_api._serializeGrid(), worktime: t.ext.export_api._getWorktimeSettings(), version: t.version }), t.ext.export_api._sendToExport(e, \"json\");\n  }, importFromExcel(e) {\n    try {\n      const n = e.data;\n      if (n instanceof File) {\n        const i = new FormData();\n        i.append(\"file\", n), e.data = i;\n      }\n    } catch {\n    }\n    t.ext.export_api._sendImportAjaxExcel(e);\n  }, importFromMSProject(e) {\n    const n = e.data;\n    try {\n      if (n instanceof File) {\n        const i = new FormData();\n        i.append(\"file\", n), e.data = i;\n      }\n    } catch {\n    }\n    t.ext.export_api._sendImportAjaxMSP(e);\n  }, importFromPrimaveraP6: (e) => (e.type = \"primaveraP6-parse\", t.importFromMSProject(e)), exportToMSProject(e) {\n    (e = e || {}).skip_circular_links = e.skip_circular_links === void 0 || !!e.skip_circular_links;\n    const n = t.templates.xml_format, i = t.templates.format_date, a = t.config.xml_date, r = t.config.date_format, s = \"%d-%m-%Y %H:%i:%s\";\n    t.config.xml_date = s, t.config.date_format = s, t.templates.xml_format = t.date.date_to_str(s), t.templates.format_date = t.date.date_to_str(s);\n    const o = t.ext.export_api._serializeAll();\n    t.ext.export_api._customProjectProperties(o, e), t.ext.export_api._customTaskProperties(o, e), e.skip_circular_links && t.ext.export_api._clearRecLinks(o), e = t.ext.export_api._exportConfig(o, e), t.ext.export_api._sendToExport(e, e.type || \"msproject\"), t.config.xml_date = a, t.config.date_format = r, t.templates.xml_format = n, t.templates.format_date = i, t.config.$custom_data = null, t.config.custom = null;\n  }, exportToPrimaveraP6: (e) => ((e = e || {}).type = \"primaveraP6\", t.exportToMSProject(e)), _fixColumns(e) {\n    for (let n = 0; n < e.length; n++) e[n].label = e[n].label || t.locale.labels[\"column_\" + e[n].name], typeof e[n].width == \"string\" && (e[n].width = 1 * e[n].width);\n  }, _xdr(e, n, i) {\n    t.ajax.post(e, n, i);\n  }, _markColumns(e) {\n    const n = e.config.columns;\n    if (n) for (let i = 0; i < n.length; i++) n[i].template && (n[i].$template = !0);\n  }, _sendImportAjaxExcel(e) {\n    const n = e.server || t.ext.export_api._apiUrl, i = e.store || 0, a = e.data, r = e.callback;\n    a.append(\"type\", \"excel-parse\"), a.append(\"data\", JSON.stringify({ sheet: e.sheet || 0 })), i && a.append(\"store\", i);\n    const s = new XMLHttpRequest();\n    s.onreadystatechange = function(o) {\n      s.readyState === 4 && s.status === 0 && r && r(null);\n    }, s.onload = function() {\n      let o = null;\n      if (!(s.status > 400)) try {\n        o = JSON.parse(s.responseText);\n      } catch {\n      }\n      r && r(o);\n    }, s.open(\"POST\", n, !0), s.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\"), s.send(a);\n  }, _ajaxToExport(e, n, i) {\n    delete e.callback;\n    const a = e.server || t.ext.export_api._apiUrl, r = \"type=\" + n + \"&store=1&data=\" + encodeURIComponent(JSON.stringify(e));\n    t.ext.export_api._xdr(a, r, function(s) {\n      const o = s.xmlDoc || s;\n      let l = null;\n      if (!(o.status > 400)) try {\n        l = JSON.parse(o.responseText);\n      } catch {\n      }\n      i(l);\n    });\n  }, _serializableGanttConfig(e) {\n    const n = t.mixin({}, e);\n    return n.columns && (n.columns = n.columns.map(function(i) {\n      const a = t.mixin({}, i);\n      return delete a.editor, a;\n    })), delete n.editor_types, n;\n  }, _sendToExport(e, n) {\n    const i = t.date.date_to_str(t.config.date_format || t.config.xml_date);\n    if (e.skin || (e.skin = t.skin), e.config && (e.config = t.copy(t.ext.export_api._serializableGanttConfig(e.config)), t.ext.export_api._markColumns(e, n), e.config.start_date && e.config.end_date && (e.config.start_date instanceof Date && (e.config.start_date = i(e.config.start_date)), e.config.end_date instanceof Date && (e.config.end_date = i(e.config.end_date)))), e.callback) return t.ext.export_api._ajaxToExport(e, n, e.callback);\n    const a = t.ext.export_api._createHiddenForm();\n    a.firstChild.action = e.server || t.ext.export_api._apiUrl, a.firstChild.childNodes[0].value = JSON.stringify(e), a.firstChild.childNodes[1].value = n, a.firstChild.submit();\n  }, _createHiddenForm() {\n    if (!t.ext.export_api._hidden_export_form) {\n      const e = t.ext.export_api._hidden_export_form = document.createElement(\"div\");\n      e.style.display = \"none\", e.innerHTML = \"<form method='POST' target='_blank'><textarea name='data' style='width:0px; height:0px;' readonly='true'></textarea><input type='hidden' name='type' value=''></form>\", document.body.appendChild(e);\n    }\n    return t.ext.export_api._hidden_export_form;\n  }, _copyObjectBase(e) {\n    const n = { start_date: void 0, end_date: void 0, constraint_date: void 0, deadline: void 0 };\n    for (const a in e) a.charAt(0) !== \"$\" && a !== \"baselines\" && (n[a] = e[a]);\n    const i = t.templates.xml_format || t.templates.format_date;\n    return n.start_date = i(n.start_date), n.end_date && (n.end_date = i(n.end_date)), n.constraint_date && (n.constraint_date = i(n.constraint_date)), n.deadline && (n.deadline = i(n.deadline)), n;\n  }, _color_box: null, _color_hash: {}, _getStyles(e) {\n    if (t.ext.export_api._color_box || (t.ext.export_api._color_box = document.createElement(\"DIV\"), t.ext.export_api._color_box.style.cssText = \"position:absolute; display:none;\", document.body.appendChild(t.ext.export_api._color_box)), t.ext.export_api._color_hash[e]) return t.ext.export_api._color_hash[e];\n    t.ext.export_api._color_box.className = e;\n    const n = t.ext.export_api._getColor(t.ext.export_api._color_box, \"color\"), i = t.ext.export_api._getColor(t.ext.export_api._color_box, \"backgroundColor\");\n    return t.ext.export_api._color_hash[e] = n + \";\" + i;\n  }, _getMinutesWorktimeSettings(e) {\n    const n = [];\n    return e.forEach(function(i) {\n      n.push(i.startMinute), n.push(i.endMinute);\n    }), n;\n  }, _getWorktimeSettings() {\n    const e = { hours: [0, 24], minutes: null, dates: { 0: !0, 1: !0, 2: !0, 3: !0, 4: !0, 5: !0, 6: !0 } };\n    let n;\n    if (t.config.work_time) {\n      const i = t._working_time_helper;\n      if (i && i.get_calendar) n = i.get_calendar();\n      else if (i) n = { hours: i.hours, minutes: null, dates: i.dates };\n      else if (t.config.worktimes && t.config.worktimes.global) {\n        const a = t.config.worktimes.global;\n        if (a.parsed) {\n          n = { hours: null, minutes: t.ext.export_api._getMinutesWorktimeSettings(a.parsed.hours), dates: {} };\n          for (const r in a.parsed.dates) Array.isArray(a.parsed.dates[r]) ? n.dates[r] = t.ext.export_api._getMinutesWorktimeSettings(a.parsed.dates[r]) : n.dates[r] = a.parsed.dates[r];\n        } else n = { hours: a.hours, minutes: null, dates: a.dates };\n      } else n = e;\n    } else n = e;\n    return n;\n  }, _eachTaskTimed: (e, n) => function(i, a, r) {\n    a = a || t.config.root_id, r = r || t;\n    const s = t.getChildren(a);\n    if (s) for (let o = 0; o < s.length; o++) {\n      const l = t._pull[s[o]];\n      (!e || l.end_date > e) && (!n || l.start_date < n) && i.call(r, l), t.hasChild(l.id) && t.eachTask(i, l.id, r);\n    }\n  }, _originalCopyObject: t.json._copyObject, _copyObjectPlain(e) {\n    const n = t.templates.task_text(e.start_date, e.end_date, e), i = t.ext.export_api._copyObjectBase(e);\n    return i.text = n || i.text, i;\n  }, _getColor(e, n) {\n    const i = e.currentStyle ? e.currentStyle[n] : getComputedStyle(e, null)[n], a = i.replace(/\\s/g, \"\").match(/^rgba?\\((\\d+),(\\d+),(\\d+)/i);\n    return (a && a.length === 4 ? (\"0\" + parseInt(a[1], 10).toString(16)).slice(-2) + (\"0\" + parseInt(a[2], 10).toString(16)).slice(-2) + (\"0\" + parseInt(a[3], 10).toString(16)).slice(-2) : i).replace(\"#\", \"\");\n  }, _copyObjectTable(e) {\n    const n = t.date.date_to_str(\"%Y-%m-%dT%H:%i:%s.000Z\"), i = t.ext.export_api._copyObjectColumns(e, t.ext.export_api._copyObjectPlain(e));\n    i.start_date && (i.start_date = n(e.start_date)), i.end_date && (i.end_date = n(e.end_date));\n    const a = t._day_index_by_date ? t._day_index_by_date : t.columnIndexByDate;\n    i.$start = a.call(t, e.start_date), i.$end = a.call(t, e.end_date);\n    let r = 0;\n    const s = t.getScale().width;\n    if (s.indexOf(0) > -1) {\n      let l = 0;\n      for (; l < i.$start; l++) s[l] || r++;\n      for (i.$start -= r; l < i.$end; l++) s[l] || r++;\n      i.$end -= r;\n    }\n    i.$level = e.$level, i.$type = e.$rendered_type;\n    const o = t.templates;\n    return i.$text = o.task_text(e.start, e.end_date, e), i.$left = o.leftside_text ? o.leftside_text(e.start, e.end_date, e) : \"\", i.$right = o.rightside_text ? o.rightside_text(e.start, e.end_date, e) : \"\", i;\n  }, _copyObjectColors(e) {\n    const n = t.ext.export_api._copyObjectTable(e), i = t.getTaskNode(e.id);\n    if (i && i.firstChild) {\n      let a = t.ext.export_api._getColor(t._no_progress_colors ? i : i.firstChild, \"backgroundColor\");\n      a === \"363636\" && (a = t.ext.export_api._getColor(i, \"backgroundColor\")), n.$color = a;\n    } else e.color && (n.$color = e.color);\n    return n;\n  }, _copyObjectColumns(e, n) {\n    for (let i = 0; i < t.config.columns.length; i++) {\n      const a = t.config.columns[i].template;\n      if (a) {\n        let r = a(e);\n        r instanceof Date && (r = t.templates.date_grid(r, e)), n[\"_\" + i] = r;\n      }\n    }\n    return n;\n  }, _copyObjectAll(e) {\n    const n = t.ext.export_api._copyObjectBase(e), i = [\"leftside_text\", \"rightside_text\", \"task_text\", \"progress_text\", \"task_class\"];\n    for (let a = 0; a < i.length; a++) {\n      const r = t.templates[i[a]];\n      r && (n[\"$\" + a] = r(e.start_date, e.end_date, e));\n    }\n    return t.ext.export_api._copyObjectColumns(e, n), n.open = e.$open, n;\n  }, _serializeHtml() {\n    const e = t.config.smart_scales, n = t.config.smart_rendering;\n    (e || n) && (t.config.smart_rendering = !1, t.config.smart_scales = !1, t.render());\n    const i = t.$container.parentNode.innerHTML;\n    return (e || n) && (t.config.smart_scales = e, t.config.smart_rendering = n, t.render()), i;\n  }, _serializeAll() {\n    t.json._copyObject = t.ext.export_api._copyObjectAll;\n    const e = t.ext.export_api._exportSerialize();\n    return t.json._copyObject = t.ext.export_api._originalCopyObject, e;\n  }, _serializePlain() {\n    const e = t.templates.xml_format, n = t.templates.format_date;\n    t.templates.xml_format = t.date.date_to_str(\"%Y%m%dT%H%i%s\", !0), t.templates.format_date = t.date.date_to_str(\"%Y%m%dT%H%i%s\", !0), t.json._copyObject = t.ext.export_api._copyObjectPlain;\n    const i = t.ext.export_api._exportSerialize();\n    return t.templates.xml_format = e, t.templates.format_date = n, t.json._copyObject = t.ext.export_api._originalCopyObject, delete i.links, i;\n  }, _getRaw() {\n    if (t._scale_helpers) {\n      const e = t._get_scales(), n = t.config.min_column_width, i = t._get_resize_options().x ? Math.max(t.config.autosize_min_width, 0) : t.config.$task.offsetWidth, a = t.config.config.scale_height - 1;\n      return t._scale_helpers.prepareConfigs(e, n, i, a);\n    }\n    {\n      const e = t.$ui.getView(\"timeline\");\n      if (e) {\n        let n = e.$config.width;\n        t.config.autosize !== \"x\" && t.config.autosize !== \"xy\" || (n = Math.max(t.config.autosize_min_width, 0));\n        const i = t.getState(), a = e._getScales(), r = t.config.min_column_width, s = t.config.scale_height - 1, o = t.config.rtl;\n        return e.$scaleHelper.prepareConfigs(a, r, n, s, i.min_date, i.max_date, o);\n      }\n    }\n  }, _serializeTimeline(e) {\n    t.json._copyObject = e.visual ? t.ext.export_api._copyObjectColors : t.ext.export_api._copyObjectTable;\n    const n = t.ext.export_api._exportSerialize();\n    if (t.json._copyObject = t.ext.export_api._originalCopyObject, delete n.links, e.cellColors) {\n      const i = t.templates.timeline_cell_class || t.templates.task_cell_class;\n      if (i) {\n        const a = t.ext.export_api._getRaw();\n        let r = a[0].trace_x;\n        for (let s = 1; s < a.length; s++) a[s].trace_x.length > r.length && (r = a[s].trace_x);\n        for (let s = 0; s < n.data.length; s++) {\n          n.data[s].styles = [];\n          const o = t.getTask(n.data[s].id);\n          for (let l = 0; l < r.length; l++) {\n            const d = i(o, r[l]);\n            d && n.data[s].styles.push({ index: l, styles: t.ext.export_api._getStyles(d) });\n          }\n        }\n      }\n    }\n    return n;\n  }, _serializeScales(e) {\n    const n = [], i = t.ext.export_api._getRaw();\n    let a = 1 / 0, r = 0;\n    for (let s = 0; s < i.length; s++) a = Math.min(a, i[s].col_width);\n    for (let s = 0; s < i.length; s++) {\n      let o = 0, l = 0;\n      const d = [];\n      n.push(d);\n      const c = i[s];\n      r = Math.max(r, c.trace_x.length);\n      const u = c.format || c.template || (c.date ? t.date.date_to_str(c.date) : t.config.date_scale);\n      for (let h = 0; h < c.trace_x.length; h++) {\n        const g = c.trace_x[h];\n        l = o + Math.round(c.width[h] / a);\n        const f = { text: u(g), start: o, end: l, styles: \"\" };\n        if (e.cellColors) {\n          const y = c.css || t.templates.scaleCell_class;\n          if (y) {\n            const v = y(g);\n            v && (f.styles = t.ext.export_api._getStyles(v));\n          }\n        }\n        d.push(f), o = l;\n      }\n    }\n    return { width: r, height: n.length, data: n };\n  }, _serializeGrid(e) {\n    t.exportMode = !0;\n    const n = [], i = t.config.columns;\n    let a = 0;\n    for (let r = 0; r < i.length; r++) i[r].name !== \"add\" && i[r].name !== \"buttons\" && (n[a] = { id: i[r].template ? \"_\" + r : i[r].name, header: i[r].label || t.locale.labels[\"column_\" + i[r].name], width: i[r].width ? Math.floor(i[r].width / 4) : \"\", tree: i[r].tree || !1 }, i[r].name === \"duration\" && (n[a].type = \"number\"), i[r].name !== \"start_date\" && i[r].name !== \"end_date\" || (n[a].type = \"date\", e && e.rawDates && (n[a].id = i[r].name)), a++);\n    return t.exportMode = !1, n;\n  }, _exportSerialize() {\n    t.exportMode = !0;\n    const e = t.templates.xml_format, n = t.templates.format_date;\n    t.templates.xml_format = t.templates.format_date = t.date.date_to_str(t.config.date_format || t.config.xml_date);\n    const i = t.serialize();\n    return t.templates.xml_format = e, t.templates.format_date = n, t.exportMode = !1, i;\n  }, _setLevel(e) {\n    for (let n = 0; n < e.length; n++) {\n      e[n].parent == 0 && (e[n]._lvl = 1);\n      for (let i = n + 1; i < e.length; i++) e[n].id == e[i].parent && (e[i]._lvl = e[n]._lvl + 1);\n    }\n  }, _clearLevel(e) {\n    for (let n = 0; n < e.length; n++) delete e[n]._lvl;\n  }, _clearRecLinks(e) {\n    t.ext.export_api._setLevel(e.data);\n    const n = {};\n    for (let r = 0; r < e.data.length; r++) n[e.data[r].id] = e.data[r];\n    const i = {};\n    for (let r = 0; r < e.links.length; r++) {\n      const s = e.links[r];\n      t.isTaskExists(s.source) && t.isTaskExists(s.target) && n[s.source] && n[s.target] && (i[s.id] = s);\n    }\n    for (const r in i) t.ext.export_api._makeLinksSameLevel(i[r], n);\n    const a = {};\n    for (const r in n) t.ext.export_api._clearCircDependencies(n[r], i, n, {}, a, null);\n    Object.keys(i) && t.ext.export_api._clearLinksSameLevel(i, n);\n    for (let r = 0; r < e.links.length; r++) i[e.links[r].id] || (e.links.splice(r, 1), r--);\n    t.ext.export_api._clearLevel(e.data);\n  }, _clearCircDependencies(e, n, i, a, r, s) {\n    const o = e.$_source;\n    if (!o) return;\n    a[e.id] && t.ext.export_api._onCircDependencyFind(s, n, a, r), a[e.id] = !0;\n    const l = {};\n    for (let d = 0; d < o.length; d++) {\n      if (r[o[d]]) continue;\n      const c = n[o[d]], u = i[c._target];\n      l[u.id] && t.ext.export_api._onCircDependencyFind(c, n, a, r), l[u.id] = !0, t.ext.export_api._clearCircDependencies(u, n, i, a, r, c);\n    }\n    a[e.id] = !1;\n  }, _onCircDependencyFind(e, n, i, a) {\n    e && (t.callEvent(\"onExportCircularDependency\", [e.id, e]) && delete n[e.id], delete i[e._source], delete i[e._target], a[e.id] = !0);\n  }, _makeLinksSameLevel(e, n) {\n    let i, a;\n    const r = { target: n[e.target], source: n[e.source] };\n    if (r.target._lvl != r.source._lvl) {\n      r.target._lvl < r.source._lvl ? (i = \"source\", a = r.target._lvl) : (i = \"target\", a = r.source._lvl);\n      do {\n        const l = n[r[i].parent];\n        if (!l) break;\n        r[i] = l;\n      } while (r[i]._lvl < a);\n      let s = n[r.source.parent], o = n[r.target.parent];\n      for (; s && o && s.id != o.id; ) r.source = s, r.target = o, s = n[r.source.parent], o = n[r.target.parent];\n    }\n    e._target = r.target.id, e._source = r.source.id, r.target.$_target || (r.target.$_target = []), r.target.$_target.push(e.id), r.source.$_source || (r.source.$_source = []), r.source.$_source.push(e.id);\n  }, _clearLinksSameLevel(e, n) {\n    for (const i in e) delete e[i]._target, delete e[i]._source;\n    for (const i in n) delete n[i].$_source, delete n[i].$_target;\n  }, _customProjectProperties(e, n) {\n    if (n && n.project) {\n      for (const i in n.project) t.config.$custom_data || (t.config.$custom_data = {}), t.config.$custom_data[i] = typeof n.project[i] == \"function\" ? n.project[i](t.config) : n.project[i];\n      delete n.project;\n    }\n  }, _customTaskProperties(e, n) {\n    n && n.tasks && (e.data.forEach(function(i) {\n      for (const a in n.tasks) i.$custom_data || (i.$custom_data = {}), i.$custom_data[a] = typeof n.tasks[a] == \"function\" ? n.tasks[a](i, t.config) : n.tasks[a];\n    }), delete n.tasks);\n  }, _exportConfig(e, n) {\n    const i = n.name || \"gantt.xml\";\n    delete n.name, t.config.custom = n;\n    const a = t.ext.export_api._getWorktimeSettings(), r = t.getSubtaskDates();\n    if (r.start_date && r.end_date) {\n      const l = t.templates.format_date || t.templates.xml_format;\n      t.config.start_end = { start_date: l(r.start_date), end_date: l(r.end_date) };\n    }\n    const s = n.auto_scheduling !== void 0 && !!n.auto_scheduling, o = { callback: n.callback || null, config: t.config, data: e, manual: s, name: i, worktime: a };\n    for (const l in n) o[l] = n[l];\n    return o;\n  }, _sendImportAjaxMSP(e) {\n    const n = e.server || t.ext.export_api._apiUrl, i = e.store || 0, a = e.data, r = e.callback, s = { durationUnit: e.durationUnit || void 0, projectProperties: e.projectProperties || void 0, taskProperties: e.taskProperties || void 0 };\n    a.append(\"type\", e.type || \"msproject-parse\"), a.append(\"data\", JSON.stringify(s)), i && a.append(\"store\", i);\n    const o = new XMLHttpRequest();\n    o.onreadystatechange = function(l) {\n      o.readyState === 4 && o.status === 0 && r && r(null);\n    }, o.onload = function() {\n      let l = null;\n      if (!(o.status > 400)) try {\n        l = JSON.parse(o.responseText);\n      } catch {\n      }\n      r && r(l);\n    }, o.open(\"POST\", n, !0), o.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\"), o.send(a);\n  } }, t.exportToPDF = t.ext.export_api.exportToPDF, t.exportToPNG = t.ext.export_api.exportToPNG, t.exportToICal = t.ext.export_api.exportToICal, t.exportToExcel = t.ext.export_api.exportToExcel, t.exportToJSON = t.ext.export_api.exportToJSON, t.importFromExcel = t.ext.export_api.importFromExcel, t.importFromMSProject = t.ext.export_api.importFromMSProject, t.exportToMSProject = t.ext.export_api.exportToMSProject, t.importFromPrimaveraP6 = t.ext.export_api.importFromPrimaveraP6, t.exportToPrimaveraP6 = t.ext.export_api.exportToPrimaveraP6, t.ext.export_api;\n} }, Un = { KEY_CODES: { UP: 38, DOWN: 40, LEFT: 37, RIGHT: 39, SPACE: 32, ENTER: 13, DELETE: 46, ESC: 27, TAB: 9 } };\nclass qn {\n  constructor(e) {\n    this.addExtension = (n, i) => {\n      this._extensions[n] = i;\n    }, this.getExtension = (n) => this._extensions[n], this._extensions = {};\n    for (const n in e) this._extensions[n] = e[n];\n  }\n}\nconst Gn = () => ({ layout: { css: \"gantt_container\", rows: [{ cols: [{ view: \"grid\", scrollX: \"scrollHor\", scrollY: \"scrollVer\" }, { resizer: !0, width: 1 }, { view: \"timeline\", scrollX: \"scrollHor\", scrollY: \"scrollVer\" }, { view: \"scrollbar\", id: \"scrollVer\" }] }, { view: \"scrollbar\", id: \"scrollHor\", height: 20 }] }, links: { finish_to_start: \"0\", start_to_start: \"1\", finish_to_finish: \"2\", start_to_finish: \"3\" }, types: { task: \"task\", project: \"project\", milestone: \"milestone\" }, auto_types: !1, duration_unit: \"day\", work_time: !1, correct_work_time: !1, skip_off_time: !1, cascade_delete: !0, autosize: !1, autosize_min_width: 0, autoscroll: !0, autoscroll_speed: 30, deepcopy_on_parse: !1, show_links: !0, show_task_cells: !0, static_background: !1, static_background_cells: !0, branch_loading: !1, branch_loading_property: \"$has_child\", show_loading: !1, show_chart: !0, show_grid: !0, min_duration: 36e5, date_format: \"%d-%m-%Y %H:%i\", xml_date: void 0, start_on_monday: !0, server_utc: !1, show_progress: !0, fit_tasks: !1, select_task: !0, scroll_on_click: !0, smart_rendering: !0, preserve_scroll: !0, readonly: !1, container_resize_timeout: 20, deadlines: !0, date_grid: \"%Y-%m-%d\", drag_links: !0, drag_progress: !0, drag_resize: !0, drag_project: !1, drag_move: !0, drag_mode: { resize: \"resize\", progress: \"progress\", move: \"move\", ignore: \"ignore\" }, round_dnd_dates: !0, link_wrapper_width: 20, link_arrow_size: 12, root_id: 0, autofit: !1, columns: [{ name: \"text\", tree: !0, width: \"*\", resize: !0 }, { name: \"start_date\", align: \"center\", resize: !0 }, { name: \"duration\", align: \"center\" }, { name: \"add\", width: 44 }], scale_offset_minimal: !0, inherit_scale_class: !1, scales: [{ unit: \"day\", step: 1, date: \"%d %M\" }], time_step: 60, duration_step: 1, task_date: \"%d %F %Y\", time_picker: \"%H:%i\", task_attribute: \"data-task-id\", link_attribute: \"data-link-id\", layer_attribute: \"data-layer\", buttons_left: [\"gantt_save_btn\", \"gantt_cancel_btn\"], _migrate_buttons: { dhx_save_btn: \"gantt_save_btn\", dhx_cancel_btn: \"gantt_cancel_btn\", dhx_delete_btn: \"gantt_delete_btn\" }, buttons_right: [\"gantt_delete_btn\"], lightbox: { sections: [{ name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: !0 }, { name: \"time\", type: \"duration\", map_to: \"auto\" }], project_sections: [{ name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: !0 }, { name: \"type\", type: \"typeselect\", map_to: \"type\" }, { name: \"time\", type: \"duration\", readonly: !0, map_to: \"auto\" }], milestone_sections: [{ name: \"description\", height: 70, map_to: \"text\", type: \"textarea\", focus: !0 }, { name: \"type\", type: \"typeselect\", map_to: \"type\" }, { name: \"time\", type: \"duration\", single_date: !0, map_to: \"auto\" }] }, drag_lightbox: !0, sort: !1, details_on_create: !0, details_on_dblclick: !0, initial_scroll: !0, task_scroll_offset: 100, order_branch: !1, order_branch_free: !1, task_height: void 0, bar_height: \"full\", bar_height_padding: 9, min_column_width: 70, min_grid_column_width: 70, grid_resizer_column_attribute: \"data-column-index\", keep_grid_width: !1, grid_resize: !1, grid_elastic_columns: !1, show_tasks_outside_timescale: !1, show_unscheduled: !0, resize_rows: !1, task_grid_row_resizer_attribute: \"data-row-index\", min_task_grid_row_height: 30, row_height: 36, readonly_property: \"readonly\", editable_property: \"editable\", calendar_property: \"calendar_id\", resource_calendars: {}, dynamic_resource_calendars: !1, inherit_calendar: !1, type_renderers: {}, open_tree_initially: !1, optimize_render: !0, prevent_default_scroll: !1, show_errors: !0, wai_aria_attributes: !0, smart_scales: !0, rtl: !1, placeholder_task: !1, horizontal_scroll_key: \"shiftKey\", drag_timeline: { useKey: void 0, ignore: \".gantt_task_line, .gantt_task_link\", render: !1 }, drag_multiple: !0, csp: \"auto\" });\nvar et = typeof window < \"u\";\nconst pt = { isIE: et && (navigator.userAgent.indexOf(\"MSIE\") >= 0 || navigator.userAgent.indexOf(\"Trident\") >= 0), isIE6: et && !XMLHttpRequest && navigator.userAgent.indexOf(\"MSIE\") >= 0, isIE7: et && navigator.userAgent.indexOf(\"MSIE 7.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") < 0, isIE8: et && navigator.userAgent.indexOf(\"MSIE 8.0\") >= 0 && navigator.userAgent.indexOf(\"Trident\") >= 0, isOpera: et && navigator.userAgent.indexOf(\"Opera\") >= 0, isChrome: et && navigator.userAgent.indexOf(\"Chrome\") >= 0, isKHTML: et && (navigator.userAgent.indexOf(\"Safari\") >= 0 || navigator.userAgent.indexOf(\"Konqueror\") >= 0), isFF: et && navigator.userAgent.indexOf(\"Firefox\") >= 0, isIPad: et && navigator.userAgent.search(/iPad/gi) >= 0, isEdge: et && navigator.userAgent.indexOf(\"Edge\") != -1, isNode: !et || typeof navigator > \"u\" || !1 };\nfunction Ie(t) {\n  if (typeof t == \"string\" || typeof t == \"number\") return t;\n  let e = \"\";\n  for (const n in t) {\n    let i = \"\";\n    t.hasOwnProperty(n) && (i = typeof t[n] == \"string\" ? encodeURIComponent(t[n]) : typeof t[n] == \"number\" ? String(t[n]) : encodeURIComponent(JSON.stringify(t[n])), i = n + \"=\" + i, e.length && (i = \"&\" + i), e += i);\n  }\n  return e;\n}\nfunction bt(t, e) {\n  var n = { method: t };\n  if (e.length === 0) throw new Error(\"Arguments list of query is wrong.\");\n  if (e.length === 1) return typeof e[0] == \"string\" ? (n.url = e[0], n.async = !0) : (n.url = e[0].url, n.async = e[0].async || !0, n.callback = e[0].callback, n.headers = e[0].headers), e[0].data ? typeof e[0].data != \"string\" ? n.data = Ie(e[0].data) : n.data = e[0].data : n.data = \"\", n;\n  switch (n.url = e[0], t) {\n    case \"GET\":\n    case \"DELETE\":\n      n.callback = e[1], n.headers = e[2];\n      break;\n    case \"POST\":\n    case \"PUT\":\n      e[1] ? typeof e[1] != \"string\" ? n.data = Ie(e[1]) : n.data = e[1] : n.data = \"\", n.callback = e[2], n.headers = e[3];\n  }\n  return n;\n}\nconst Me = { date_to_str: (t, e, n) => {\n  t = t.replace(/%[a-zA-Z]/g, (a) => {\n    switch (a) {\n      case \"%d\":\n        return `\"+to_fixed(date.get${e ? \"UTC\" : \"\"}Date())+\"`;\n      case \"%m\":\n        return `\"+to_fixed((date.get${e ? \"UTC\" : \"\"}Month()+1))+\"`;\n      case \"%j\":\n        return `\"+date.get${e ? \"UTC\" : \"\"}Date()+\"`;\n      case \"%n\":\n        return `\"+(date.get${e ? \"UTC\" : \"\"}Month()+1)+\"`;\n      case \"%y\":\n        return `\"+to_fixed(date.get${e ? \"UTC\" : \"\"}FullYear()%100)+\"`;\n      case \"%Y\":\n        return `\"+date.get${e ? \"UTC\" : \"\"}FullYear()+\"`;\n      case \"%D\":\n        return `\"+locale.date.day_short[date.get${e ? \"UTC\" : \"\"}Day()]+\"`;\n      case \"%l\":\n        return `\"+locale.date.day_full[date.get${e ? \"UTC\" : \"\"}Day()]+\"`;\n      case \"%M\":\n        return `\"+locale.date.month_short[date.get${e ? \"UTC\" : \"\"}Month()]+\"`;\n      case \"%F\":\n        return `\"+locale.date.month_full[date.get${e ? \"UTC\" : \"\"}Month()]+\"`;\n      case \"%h\":\n        return `\"+to_fixed((date.get${e ? \"UTC\" : \"\"}Hours()+11)%12+1)+\"`;\n      case \"%g\":\n        return `\"+((date.get${e ? \"UTC\" : \"\"}Hours()+11)%12+1)+\"`;\n      case \"%G\":\n        return `\"+date.get${e ? \"UTC\" : \"\"}Hours()+\"`;\n      case \"%H\":\n        return `\"+to_fixed(date.get${e ? \"UTC\" : \"\"}Hours())+\"`;\n      case \"%i\":\n        return `\"+to_fixed(date.get${e ? \"UTC\" : \"\"}Minutes())+\"`;\n      case \"%a\":\n        return `\"+(date.get${e ? \"UTC\" : \"\"}Hours()>11?\"pm\":\"am\")+\"`;\n      case \"%A\":\n        return `\"+(date.get${e ? \"UTC\" : \"\"}Hours()>11?\"PM\":\"AM\")+\"`;\n      case \"%s\":\n        return `\"+to_fixed(date.get${e ? \"UTC\" : \"\"}Seconds())+\"`;\n      case \"%W\":\n        return '\"+to_fixed(getISOWeek(date))+\"';\n      case \"%w\":\n        return '\"+to_fixed(getWeek(date))+\"';\n      default:\n        return a;\n    }\n  });\n  const i = new Function(\"date\", \"to_fixed\", \"locale\", \"getISOWeek\", \"getWeek\", `return \"${t}\";`);\n  return (a) => i(a, n.date.to_fixed, n.locale, n.date.getISOWeek, n.date.getWeek);\n}, str_to_date: (t, e, n) => {\n  let i = \"var temp=date.match(/[a-zA-Z]+|[0-9]+/g);\";\n  const a = t.match(/%[a-zA-Z]/g);\n  for (let o = 0; o < a.length; o++) switch (a[o]) {\n    case \"%j\":\n    case \"%d\":\n      i += `set[2]=temp[${o}]||1;`;\n      break;\n    case \"%n\":\n    case \"%m\":\n      i += `set[1]=(temp[${o}]||1)-1;`;\n      break;\n    case \"%y\":\n      i += `set[0]=temp[${o}]*1+(temp[${o}]>50?1900:2000);`;\n      break;\n    case \"%g\":\n    case \"%G\":\n    case \"%h\":\n    case \"%H\":\n      i += `set[3]=temp[${o}]||0;`;\n      break;\n    case \"%i\":\n      i += `set[4]=temp[${o}]||0;`;\n      break;\n    case \"%Y\":\n      i += `set[0]=temp[${o}]||0;`;\n      break;\n    case \"%a\":\n    case \"%A\":\n      i += `set[3]=set[3]%12+((temp[${o}]||'').toLowerCase()=='am'?0:12);`;\n      break;\n    case \"%s\":\n      i += `set[5]=temp[${o}]||0;`;\n      break;\n    case \"%M\":\n      i += `set[1]=locale.date.month_short_hash[temp[${o}]]||0;`;\n      break;\n    case \"%F\":\n      i += `set[1]=locale.date.month_full_hash[temp[${o}]]||0;`;\n  }\n  let r = \"set[0],set[1],set[2],set[3],set[4],set[5]\";\n  e && (r = ` Date.UTC(${r})`);\n  const s = new Function(\"date\", \"locale\", `var set=[0,0,1,0,0,0]; ${i} return new Date(${r});`);\n  return (o) => s(o, n.locale);\n} }, Ne = { date_to_str: (t, e, n) => (i) => t.replace(/%[a-zA-Z]/g, (a) => {\n  switch (a) {\n    case \"%d\":\n      return e ? n.date.to_fixed(i.getUTCDate()) : n.date.to_fixed(i.getDate());\n    case \"%m\":\n      return e ? n.date.to_fixed(i.getUTCMonth() + 1) : n.date.to_fixed(i.getMonth() + 1);\n    case \"%j\":\n      return e ? i.getUTCDate() : i.getDate();\n    case \"%n\":\n      return e ? i.getUTCMonth() + 1 : i.getMonth() + 1;\n    case \"%y\":\n      return e ? n.date.to_fixed(i.getUTCFullYear() % 100) : n.date.to_fixed(i.getFullYear() % 100);\n    case \"%Y\":\n      return e ? i.getUTCFullYear() : i.getFullYear();\n    case \"%D\":\n      return e ? n.locale.date.day_short[i.getUTCDay()] : n.locale.date.day_short[i.getDay()];\n    case \"%l\":\n      return e ? n.locale.date.day_full[i.getUTCDay()] : n.locale.date.day_full[i.getDay()];\n    case \"%M\":\n      return e ? n.locale.date.month_short[i.getUTCMonth()] : n.locale.date.month_short[i.getMonth()];\n    case \"%F\":\n      return e ? n.locale.date.month_full[i.getUTCMonth()] : n.locale.date.month_full[i.getMonth()];\n    case \"%h\":\n      return e ? n.date.to_fixed((i.getUTCHours() + 11) % 12 + 1) : n.date.to_fixed((i.getHours() + 11) % 12 + 1);\n    case \"%g\":\n      return e ? (i.getUTCHours() + 11) % 12 + 1 : (i.getHours() + 11) % 12 + 1;\n    case \"%G\":\n      return e ? i.getUTCHours() : i.getHours();\n    case \"%H\":\n      return e ? n.date.to_fixed(i.getUTCHours()) : n.date.to_fixed(i.getHours());\n    case \"%i\":\n      return e ? n.date.to_fixed(i.getUTCMinutes()) : n.date.to_fixed(i.getMinutes());\n    case \"%a\":\n      return e ? i.getUTCHours() > 11 ? \"pm\" : \"am\" : i.getHours() > 11 ? \"pm\" : \"am\";\n    case \"%A\":\n      return e ? i.getUTCHours() > 11 ? \"PM\" : \"AM\" : i.getHours() > 11 ? \"PM\" : \"AM\";\n    case \"%s\":\n      return e ? n.date.to_fixed(i.getUTCSeconds()) : n.date.to_fixed(i.getSeconds());\n    case \"%W\":\n      return e ? n.date.to_fixed(n.date.getUTCISOWeek(i)) : n.date.to_fixed(n.date.getISOWeek(i));\n    default:\n      return a;\n  }\n}), str_to_date: (t, e, n) => (i) => {\n  const a = [0, 0, 1, 0, 0, 0], r = i.match(/[a-zA-Z]+|[0-9]+/g), s = t.match(/%[a-zA-Z]/g);\n  for (let o = 0; o < s.length; o++) switch (s[o]) {\n    case \"%j\":\n    case \"%d\":\n      a[2] = r[o] || 1;\n      break;\n    case \"%n\":\n    case \"%m\":\n      a[1] = (r[o] || 1) - 1;\n      break;\n    case \"%y\":\n      a[0] = 1 * r[o] + (r[o] > 50 ? 1900 : 2e3);\n      break;\n    case \"%g\":\n    case \"%G\":\n    case \"%h\":\n    case \"%H\":\n      a[3] = r[o] || 0;\n      break;\n    case \"%i\":\n      a[4] = r[o] || 0;\n      break;\n    case \"%Y\":\n      a[0] = r[o] || 0;\n      break;\n    case \"%a\":\n    case \"%A\":\n      a[3] = a[3] % 12 + ((r[o] || \"\").toLowerCase() === \"am\" ? 0 : 12);\n      break;\n    case \"%s\":\n      a[5] = r[o] || 0;\n      break;\n    case \"%M\":\n      a[1] = n.locale.date.month_short_hash[r[o]] || 0;\n      break;\n    case \"%F\":\n      a[1] = n.locale.date.month_full_hash[r[o]] || 0;\n  }\n  return e ? new Date(Date.UTC(a[0], a[1], a[2], a[3], a[4], a[5])) : new Date(a[0], a[1], a[2], a[3], a[4], a[5]);\n} };\nfunction Yn(t) {\n  var e = null;\n  function n() {\n    var a = !1;\n    return t.config.csp === \"auto\" ? (e === null && function() {\n      try {\n        new Function(\"canUseCsp = false;\");\n      } catch {\n        e = !0;\n      }\n    }(), a = e) : a = t.config.csp, a;\n  }\n  var i = { init: function() {\n    for (var a = t.locale, r = a.date.month_short, s = a.date.month_short_hash = {}, o = 0; o < r.length; o++) s[r[o]] = o;\n    for (r = a.date.month_full, s = a.date.month_full_hash = {}, o = 0; o < r.length; o++) s[r[o]] = o;\n  }, date_part: function(a) {\n    var r = new Date(a);\n    return a.setHours(0), this.hour_start(a), a.getHours() && (a.getDate() < r.getDate() || a.getMonth() < r.getMonth() || a.getFullYear() < r.getFullYear()) && a.setTime(a.getTime() + 36e5 * (24 - a.getHours())), a;\n  }, time_part: function(a) {\n    return (a.valueOf() / 1e3 - 60 * a.getTimezoneOffset()) % 86400;\n  }, week_start: function(a) {\n    var r = a.getDay();\n    return t.config.start_on_monday && (r === 0 ? r = 6 : r--), this.date_part(this.add(a, -1 * r, \"day\"));\n  }, month_start: function(a) {\n    return a.setDate(1), this.date_part(a);\n  }, quarter_start: function(a) {\n    this.month_start(a);\n    var r, s = a.getMonth();\n    return r = s >= 9 ? 9 : s >= 6 ? 6 : s >= 3 ? 3 : 0, a.setMonth(r), a;\n  }, year_start: function(a) {\n    return a.setMonth(0), this.month_start(a);\n  }, day_start: function(a) {\n    return this.date_part(a);\n  }, hour_start: function(a) {\n    return a.getMinutes() && a.setMinutes(0), this.minute_start(a), a;\n  }, minute_start: function(a) {\n    return a.getSeconds() && a.setSeconds(0), a.getMilliseconds() && a.setMilliseconds(0), a;\n  }, _add_days: function(a, r, s) {\n    a.setDate(a.getDate() + r);\n    var o = r >= 0, l = !s.getHours() && a.getHours(), d = a.getDate() <= s.getDate() || a.getMonth() < s.getMonth() || a.getFullYear() < s.getFullYear();\n    return o && l && d && a.setTime(a.getTime() + 36e5 * (24 - a.getHours())), r > 1 && l && a.setHours(0), a;\n  }, add: function(a, r, s) {\n    var o = new Date(a.valueOf());\n    switch (s) {\n      case \"day\":\n        o = this._add_days(o, r, a);\n        break;\n      case \"week\":\n        o = this._add_days(o, 7 * r, a);\n        break;\n      case \"month\":\n        o.setMonth(o.getMonth() + r);\n        break;\n      case \"year\":\n        o.setYear(o.getFullYear() + r);\n        break;\n      case \"hour\":\n        o.setTime(o.getTime() + 60 * r * 60 * 1e3);\n        break;\n      case \"minute\":\n        o.setTime(o.getTime() + 60 * r * 1e3);\n        break;\n      default:\n        return this[\"add_\" + s](a, r, s);\n    }\n    return o;\n  }, add_quarter: function(a, r) {\n    return this.add(a, 3 * r, \"month\");\n  }, to_fixed: function(a) {\n    return a < 10 ? \"0\" + a : a;\n  }, copy: function(a) {\n    return new Date(a.valueOf());\n  }, date_to_str: function(a, r) {\n    var s = Me;\n    return n() && (s = Ne), s.date_to_str(a, r, t);\n  }, str_to_date: function(a, r) {\n    var s = Me;\n    return n() && (s = Ne), s.str_to_date(a, r, t);\n  }, getISOWeek: function(a) {\n    return t.date._getWeekNumber(a, !0);\n  }, _getWeekNumber: function(a, r) {\n    if (!a) return !1;\n    var s = a.getDay();\n    r && s === 0 && (s = 7);\n    var o = new Date(a.valueOf());\n    o.setDate(a.getDate() + (4 - s));\n    var l = o.getFullYear(), d = Math.round((o.getTime() - new Date(l, 0, 1).getTime()) / 864e5);\n    return 1 + Math.floor(d / 7);\n  }, getWeek: function(a) {\n    return t.date._getWeekNumber(a, t.config.start_on_monday);\n  }, getUTCISOWeek: function(a) {\n    return t.date.getISOWeek(a);\n  }, convert_to_utc: function(a) {\n    return new Date(a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate(), a.getUTCHours(), a.getUTCMinutes(), a.getUTCSeconds());\n  }, parseDate: function(a, r) {\n    return a && !a.getFullYear && (typeof r != \"function\" && (r = typeof r == \"string\" ? r === \"parse_date\" || r === \"xml_date\" ? t.defined(t.templates.xml_date) ? t.templates.xml_date : t.templates.parse_date : t.defined(t.templates[r]) ? t.templates[r] : t.date.str_to_date(r) : t.defined(t.templates.xml_date) ? t.templates.xml_date : t.templates.parse_date), a = a ? r(a) : null), a;\n  } };\n  return i;\n}\nclass Jn {\n  constructor(e) {\n    const { url: n, token: i } = e;\n    this._url = n, this._token = i, this._mode = 1, this._seed = 1, this._queue = [], this.data = {}, this.api = {}, this._events = {};\n  }\n  headers() {\n    return { Accept: \"application/json\", \"Content-Type\": \"application/json\", \"Remote-Token\": this._token };\n  }\n  fetch(e, n) {\n    const i = { credentials: \"include\", headers: this.headers() };\n    return n && (i.method = \"POST\", i.body = n), fetch(e, i).then((a) => a.json());\n  }\n  load(e) {\n    return e && (this._url = e), this.fetch(this._url).then((n) => this.parse(n));\n  }\n  parse(e) {\n    const { key: n, websocket: i } = e;\n    n && (this._token = e.key);\n    for (const a in e.data) this.data[a] = e.data[a];\n    for (const a in e.api) {\n      const r = this.api[a] = {}, s = e.api[a];\n      for (const o in s) r[o] = this._wrapper(a + \".\" + o);\n    }\n    return i && this.connect(), this;\n  }\n  connect() {\n    const e = this._socket;\n    e && (this._socket = null, e.onclose = function() {\n    }, e.close()), this._mode = 2, this._socket = function(n, i, a, r) {\n      let s = i;\n      s[0] === \"/\" && (s = document.location.protocol + \"//\" + document.location.host + i), s = s.replace(/^http(s|):/, \"ws$1:\");\n      const o = s.indexOf(\"?\") != -1 ? \"&\" : \"?\";\n      s = `${s}${o}token=${a}&ws=1`;\n      const l = new WebSocket(s);\n      return l.onclose = () => setTimeout(() => n.connect(), 2e3), l.onmessage = (d) => {\n        const c = JSON.parse(d.data);\n        switch (c.action) {\n          case \"result\":\n            n.result(c.body, []);\n            break;\n          case \"event\":\n            n.fire(c.body.name, c.body.value);\n            break;\n          case \"start\":\n            r();\n            break;\n          default:\n            n.onError(c.data);\n        }\n      }, l;\n    }(this, this._url, this._token, () => (this._mode = 3, this._send(), this._resubscribe(), this));\n  }\n  _wrapper(e) {\n    return (function() {\n      const n = [].slice.call(arguments);\n      let i = null;\n      const a = new Promise((r, s) => {\n        i = { data: { id: this._uid(), name: e, args: n }, status: 1, resolve: r, reject: s }, this._queue.push(i);\n      });\n      return this.onCall(i, a), this._mode === 3 ? this._send(i) : setTimeout(() => this._send(), 1), a;\n    }).bind(this);\n  }\n  _uid() {\n    return (this._seed++).toString();\n  }\n  _send(e) {\n    if (this._mode == 2) return void setTimeout(() => this._send(), 100);\n    const n = e ? [e] : this._queue.filter((a) => a.status === 1);\n    if (!n.length) return;\n    const i = n.map((a) => (a.status = 2, a.data));\n    this._mode !== 3 ? this.fetch(this._url, JSON.stringify(i)).catch((a) => this.onError(a)).then((a) => this.result(a, i)) : this._socket.send(JSON.stringify({ action: \"call\", body: i }));\n  }\n  result(e, n) {\n    const i = {};\n    if (e) for (let a = 0; a < e.length; a++) i[e[a].id] = e[a];\n    else for (let a = 0; a < n.length; a++) i[n[a].id] = { id: n[a].id, error: \"Network Error\", data: null };\n    for (let a = this._queue.length - 1; a >= 0; a--) {\n      const r = this._queue[a], s = i[r.data.id];\n      s && (this.onResponse(r, s), s.error ? r.reject(s.error) : r.resolve(s.data), this._queue.splice(a, 1));\n    }\n  }\n  on(e, n) {\n    const i = this._uid();\n    let a = this._events[e];\n    const r = !!a;\n    return r || (a = this._events[e] = []), a.push({ id: i, handler: n }), r || this._mode != 3 || this._socket.send(JSON.stringify({ action: \"subscribe\", name: e })), { name: e, id: i };\n  }\n  _resubscribe() {\n    if (this._mode == 3) for (const e in this._events) this._socket.send(JSON.stringify({ action: \"subscribe\", name: e }));\n  }\n  detach(e) {\n    if (!e) {\n      if (this._mode == 3) for (const r in this._events) this._socket.send(JSON.stringify({ action: \"unsubscribe\", key: r }));\n      return void (this._events = {});\n    }\n    const { id: n, name: i } = e, a = this._events[i];\n    if (a) {\n      const r = a.filter((s) => s.id != n);\n      r.length ? this._events[i] = r : (delete this._events[i], this._mode == 3 && this._socket.send(JSON.stringify({ action: \"unsubscribe\", name: i })));\n    }\n  }\n  fire(e, n) {\n    const i = this._events[e];\n    if (i) for (let a = 0; a < i.length; a++) i[a].handler(n);\n  }\n  onError(e) {\n    return null;\n  }\n  onCall(e, n) {\n  }\n  onResponse(e, n) {\n  }\n}\nconst Kn = function(t, e) {\n  const n = new Jn({ url: t, token: e });\n  n.fetch = function(i, a) {\n    const r = { headers: this.headers() };\n    return a && (r.method = \"POST\", r.body = a), fetch(i, r).then((s) => s.json());\n  }, this._ready = n.load().then((i) => this._remote = i), this.ready = function() {\n    return this._ready;\n  }, this.on = function(i, a) {\n    this.ready().then((r) => {\n      if (typeof i == \"string\") r.on(i, a);\n      else for (const s in i) r.on(s, i[s]);\n    });\n  };\n};\nfunction dn(t, e) {\n  if (!e) return !0;\n  if (t._on_timeout) return !1;\n  var n = Math.ceil(1e3 / e);\n  return n < 2 || (setTimeout(function() {\n    delete t._on_timeout;\n  }, n), t._on_timeout = !0), !0;\n}\nvar Xn = function() {\n  var t = {};\n  return { getState: function(e) {\n    if (t[e]) return t[e].method();\n    var n = {};\n    for (var i in t) t[i].internal || N(n, t[i].method(), !0);\n    return n;\n  }, registerProvider: function(e, n, i) {\n    t[e] = { method: n, internal: i };\n  }, unregisterProvider: function(e) {\n    delete t[e];\n  } };\n};\nconst Zn = Promise;\nvar Q = { $create: function(t) {\n  return N(t || [], this);\n}, $removeAt: function(t, e) {\n  t >= 0 && this.splice(t, e || 1);\n}, $remove: function(t) {\n  this.$removeAt(this.$find(t));\n}, $insertAt: function(t, e) {\n  if (e || e === 0) {\n    var n = this.splice(e, this.length - e);\n    this[e] = t, this.push.apply(this, n);\n  } else this.push(t);\n}, $find: function(t) {\n  for (var e = 0; e < this.length; e++) if (t == this[e]) return e;\n  return -1;\n}, $each: function(t, e) {\n  for (var n = 0; n < this.length; n++) t.call(e || this, this[n]);\n}, $map: function(t, e) {\n  for (var n = 0; n < this.length; n++) this[n] = t.call(e || this, this[n]);\n  return this;\n}, $filter: function(t, e) {\n  for (var n = 0; n < this.length; n++) t.call(e || this, this[n]) || (this.splice(n, 1), n--);\n  return this;\n} };\nfunction Lt(t, e, n, i) {\n  return (i = e ? e.config : i) && i.placeholder_task && n.exists(t) ? n.getItem(t).type === i.types.placeholder : !1;\n}\nvar nt = function(t) {\n  return this.pull = {}, this.$initItem = t.initItem, this.visibleOrder = Q.$create(), this.fullOrder = Q.$create(), this._skip_refresh = !1, this._filterRule = null, this._searchVisibleOrder = {}, this._indexRangeCache = {}, this._getItemsCache = null, this.$config = t, st(this), this._attachDataChange(function() {\n    return this._indexRangeCache = {}, this._getItemsCache = null, !0;\n  }), this;\n};\nnt.prototype = { _attachDataChange: function(t) {\n  this.attachEvent(\"onClearAll\", t), this.attachEvent(\"onBeforeParse\", t), this.attachEvent(\"onBeforeUpdate\", t), this.attachEvent(\"onBeforeDelete\", t), this.attachEvent(\"onBeforeAdd\", t), this.attachEvent(\"onParse\", t), this.attachEvent(\"onBeforeFilter\", t);\n}, _parseInner: function(t) {\n  for (var e = null, n = [], i = 0, a = t.length; i < a; i++) e = t[i], this.$initItem && (this.$config.copyOnParse() && (e = q(e)), e = this.$initItem(e)), this.callEvent(\"onItemLoading\", [e]) && (this.pull.hasOwnProperty(e.id) || this.fullOrder.push(e.id), n.push(e), this.pull[e.id] = e);\n  return n;\n}, parse: function(t) {\n  this.isSilent() || this.callEvent(\"onBeforeParse\", [t]);\n  var e = this._parseInner(t);\n  this.isSilent() || (this.refresh(), this.callEvent(\"onParse\", [e]));\n}, getItem: function(t) {\n  return this.pull[t];\n}, _updateOrder: function(t) {\n  t.call(this.visibleOrder), t.call(this.fullOrder);\n}, updateItem: function(t, e) {\n  if (W(e) || (e = this.getItem(t)), !this.isSilent() && this.callEvent(\"onBeforeUpdate\", [e.id, e]) === !1) return !1;\n  N(this.pull[t], e, !0), this.isSilent() || (this.callEvent(\"onAfterUpdate\", [e.id, e]), this.callEvent(\"onStoreUpdated\", [e.id, e, \"update\"]));\n}, _removeItemInner: function(t) {\n  this._updateOrder(function() {\n    this.$remove(t);\n  }), delete this.pull[t];\n}, removeItem: function(t) {\n  var e = this.getItem(t);\n  if (!this.isSilent() && this.callEvent(\"onBeforeDelete\", [e.id, e]) === !1) return !1;\n  this.callEvent(\"onAfterDeleteConfirmed\", [e.id, e]), this._removeItemInner(t), this.isSilent() && this.callEvent(\"onAfterSilentDelete\", [e.id, e]), this.isSilent() || (this.filter(), this.callEvent(\"onAfterDelete\", [e.id, e]), this.callEvent(\"onStoreUpdated\", [e.id, e, \"delete\"]));\n}, _addItemInner: function(t, e) {\n  if (this.exists(t.id)) this.silent(function() {\n    this.updateItem(t.id, t);\n  });\n  else {\n    var n = this.visibleOrder, i = n.length;\n    (!W(e) || e < 0) && (e = i), e > i && (e = Math.min(n.length, e));\n  }\n  this.pull[t.id] = t, this.isSilent() || this._updateOrder(function() {\n    this.$find(t.id) === -1 && this.$insertAt(t.id, e);\n  }), this.filter();\n}, isVisible: function(t) {\n  return this.visibleOrder.$find(t) > -1;\n}, getVisibleItems: function() {\n  return this.getIndexRange();\n}, addItem: function(t, e) {\n  return W(t.id) || (t.id = rt()), this.$initItem && (t = this.$initItem(t)), !(!this.isSilent() && this.callEvent(\"onBeforeAdd\", [t.id, t]) === !1) && (this._addItemInner(t, e), this.isSilent() || (this.callEvent(\"onAfterAdd\", [t.id, t]), this.callEvent(\"onStoreUpdated\", [t.id, t, \"add\"])), t.id);\n}, _changeIdInner: function(t, e) {\n  this.pull[t] && (this.pull[e] = this.pull[t]);\n  var n = this._searchVisibleOrder[t];\n  this.pull[e].id = e, this._updateOrder(function() {\n    this[this.$find(t)] = e;\n  }), this._searchVisibleOrder[e] = n, delete this._searchVisibleOrder[t], delete this.pull[t];\n}, changeId: function(t, e) {\n  this._changeIdInner(t, e), this.callEvent(\"onIdChange\", [t, e]);\n}, exists: function(t) {\n  return !!this.pull[t];\n}, _moveInner: function(t, e) {\n  var n = this.getIdByIndex(t);\n  this._updateOrder(function() {\n    this.$removeAt(t), this.$insertAt(n, Math.min(this.length, e));\n  });\n}, move: function(t, e) {\n  var n = this.getIdByIndex(t), i = this.getItem(n);\n  this._moveInner(t, e), this.isSilent() || this.callEvent(\"onStoreUpdated\", [i.id, i, \"move\"]);\n}, clearAll: function() {\n  this.$destroyed || (this.silent(function() {\n    this.unselect();\n  }), this.pull = {}, this.visibleOrder = Q.$create(), this.fullOrder = Q.$create(), this.isSilent() || (this.callEvent(\"onClearAll\", []), this.refresh()));\n}, silent: function(t, e) {\n  var n = !1;\n  this.isSilent() && (n = !0), this._skip_refresh = !0, t.call(e || this), n || (this._skip_refresh = !1);\n}, isSilent: function() {\n  return !!this._skip_refresh;\n}, arraysEqual: function(t, e) {\n  if (t.length !== e.length) return !1;\n  for (var n = 0; n < t.length; n++) if (t[n] !== e[n]) return !1;\n  return !0;\n}, refresh: function(t, e) {\n  var n, i;\n  if (!this.isSilent() && (t && (n = this.getItem(t)), i = t ? [t, n, \"paint\"] : [null, null, null], this.callEvent(\"onBeforeStoreUpdate\", i) !== !1)) {\n    var a = this._quick_refresh && !this._mark_recompute;\n    if (this._mark_recompute = !1, t) {\n      if (!e && !a) {\n        var r = this.visibleOrder;\n        this.filter(), this.arraysEqual(r, this.visibleOrder) || (t = void 0);\n      }\n    } else a || this.filter();\n    i = t ? [t, n, \"paint\"] : [null, null, null], this.callEvent(\"onStoreUpdated\", i);\n  }\n}, count: function() {\n  return this.fullOrder.length;\n}, countVisible: function() {\n  return this.visibleOrder.length;\n}, sort: function(t) {\n}, serialize: function() {\n}, eachItem: function(t) {\n  for (var e = 0; e < this.fullOrder.length; e++) {\n    var n = this.getItem(this.fullOrder[e]);\n    t.call(this, n);\n  }\n}, find: function(t) {\n  var e = [];\n  return this.eachItem(function(n) {\n    t(n) && e.push(n);\n  }), e;\n}, filter: function(t) {\n  this.isSilent() || this.callEvent(\"onBeforeFilter\", []), this.callEvent(\"onPreFilter\", []);\n  var e = Q.$create(), n = [];\n  this.eachItem(function(a) {\n    this.callEvent(\"onFilterItem\", [a.id, a]) && (Lt(a.id, null, this, this._ganttConfig) ? n.push(a.id) : e.push(a.id));\n  });\n  for (var i = 0; i < n.length; i++) e.push(n[i]);\n  for (this.visibleOrder = e, this._searchVisibleOrder = {}, i = 0; i < this.visibleOrder.length; i++) this._searchVisibleOrder[this.visibleOrder[i]] = i;\n  this.isSilent() || this.callEvent(\"onFilter\", []);\n}, getIndexRange: function(t, e) {\n  var n = Math.min(e || 1 / 0, this.countVisible() - 1), i = t || 0, a = i + \"-\" + n;\n  if (this._indexRangeCache[a]) return this._indexRangeCache[a].slice();\n  for (var r = [], s = i; s <= n; s++) r.push(this.getItem(this.visibleOrder[s]));\n  return this._indexRangeCache[a] = r.slice(), r;\n}, getItems: function() {\n  if (this._getItemsCache) return this._getItemsCache.slice();\n  var t = [];\n  for (var e in this.pull) t.push(this.pull[e]);\n  return this._getItemsCache = t.slice(), t;\n}, getIdByIndex: function(t) {\n  return this.visibleOrder[t];\n}, getIndexById: function(t) {\n  var e = this._searchVisibleOrder[t];\n  return e === void 0 && (e = -1), e;\n}, _getNullIfUndefined: function(t) {\n  return t === void 0 ? null : t;\n}, getFirst: function() {\n  return this._getNullIfUndefined(this.visibleOrder[0]);\n}, getLast: function() {\n  return this._getNullIfUndefined(this.visibleOrder[this.visibleOrder.length - 1]);\n}, getNext: function(t) {\n  return this._getNullIfUndefined(this.visibleOrder[this.getIndexById(t) + 1]);\n}, getPrev: function(t) {\n  return this._getNullIfUndefined(this.visibleOrder[this.getIndexById(t) - 1]);\n}, destructor: function() {\n  this.callEvent(\"onDestroy\", []), this.detachAllEvents(), this.$destroyed = !0, this.pull = null, this.$initItem = null, this.visibleOrder = null, this.fullOrder = null, this._skip_refresh = null, this._filterRule = null, this._searchVisibleOrder = null, this._indexRangeCache = {};\n} };\nvar cn = function(t) {\n  var e;\n  nt.apply(this, [t]), this._branches = {}, this.pull = {}, this.$initItem = function(o) {\n    var l = o;\n    t.initItem && (l = t.initItem(l));\n    var d = this.getItem(o.id);\n    return d && d.parent != l.parent && this.move(l.id, l.$index || -1, l.parent || this._ganttConfig.root_id), l;\n  }, this.$parentProperty = t.parentProperty || \"parent\", typeof t.rootId != \"function\" ? this.$getRootId = (e = t.rootId || 0, function() {\n    return e;\n  }) : this.$getRootId = t.rootId, this.$openInitially = t.openInitially, this.visibleOrder = Q.$create(), this.fullOrder = Q.$create(), this._searchVisibleOrder = {}, this._indexRangeCache = {}, this._eachItemMainRangeCache = null, this._getItemsCache = null, this._skip_refresh = !1, this._ganttConfig = null, t.getConfig && (this._ganttConfig = t.getConfig());\n  var n = {}, i = {}, a = {}, r = {}, s = !1;\n  return this._attachDataChange(function() {\n    return this._indexRangeCache = {}, this._eachItemMainRangeCache = null, this._getItemsCache = null, !0;\n  }), this.attachEvent(\"onPreFilter\", function() {\n    this._indexRangeCache = {}, this._eachItemMainRangeCache = null, n = {}, i = {}, a = {}, r = {}, s = !1, this.eachItem(function(o) {\n      var l = this.getParent(o.id);\n      o.$open && a[l] !== !1 ? a[o.id] = !0 : a[o.id] = !1, this._isSplitItem(o) && (s = !0, n[o.id] = !0, i[o.id] = !0), s && i[l] && (i[o.id] = !0), a[l] || a[l] === void 0 ? r[o.id] = !0 : r[o.id] = !1;\n    });\n  }), this.attachEvent(\"onFilterItem\", function(o, l) {\n    var d = !1;\n    this._ganttConfig && (d = this._ganttConfig.open_split_tasks);\n    var c = r[l.id];\n    return s && (c && i[l.id] && !n[l.id] && (c = !!d), i[l.id] && !n[l.id] && (l.$split_subtask = !0)), l.$expanded_branch = !!r[l.id], !!c;\n  }), this.attachEvent(\"onFilter\", function() {\n    n = {}, i = {}, a = {}, r = {};\n  }), this;\n};\nfunction j(t) {\n  return pt.isNode || !t.$root;\n}\ncn.prototype = N({ _buildTree: function(t) {\n  for (var e = null, n = this.$getRootId(), i = 0, a = t.length; i < a; i++) e = t[i], this.setParent(e, it(this.getParent(e), n) || n);\n  for (i = 0, a = t.length; i < a; i++) e = t[i], this._add_branch(e), e.$level = this.calculateItemLevel(e), e.$local_index = this.getBranchIndex(e.id), W(e.$open) || (e.$open = W(e.open) ? e.open : this.$openInitially());\n  this._updateOrder();\n}, _isSplitItem: function(t) {\n  return t.render == \"split\" && this.hasChild(t.id);\n}, parse: function(t) {\n  this._skip_refresh || this.callEvent(\"onBeforeParse\", [t]);\n  var e = this._parseInner(t);\n  this._buildTree(e), this.filter(), this._skip_refresh || this.callEvent(\"onParse\", [e]);\n}, _addItemInner: function(t, e) {\n  var n = this.getParent(t);\n  W(n) || (n = this.$getRootId(), this.setParent(t, n));\n  var i = this.getIndexById(n) + Math.min(Math.max(e, 0), this.visibleOrder.length);\n  1 * i !== i && (i = void 0), nt.prototype._addItemInner.call(this, t, i), this.setParent(t, n), t.hasOwnProperty(\"$rendered_parent\") && this._move_branch(t, t.$rendered_parent), this._add_branch(t, e);\n}, _changeIdInner: function(t, e) {\n  var n = this.getChildren(t), i = this._searchVisibleOrder[t];\n  nt.prototype._changeIdInner.call(this, t, e);\n  var a = this.getParent(e);\n  this._replace_branch_child(a, t, e), this._branches[t] && (this._branches[e] = this._branches[t]);\n  for (var r = 0; r < n.length; r++) {\n    var s = this.getItem(n[r]);\n    s[this.$parentProperty] = e, s.$rendered_parent = e;\n  }\n  this._searchVisibleOrder[e] = i, delete this._branches[t];\n}, _traverseBranches: function(t, e) {\n  W(e) || (e = this.$getRootId());\n  var n = this._branches[e];\n  if (n) for (var i = 0; i < n.length; i++) {\n    var a = n[i];\n    t.call(this, a), this._branches[a] && this._traverseBranches(t, a);\n  }\n}, _updateOrder: function(t) {\n  this.fullOrder = Q.$create(), this._traverseBranches(function(e) {\n    this.fullOrder.push(e);\n  }), t && nt.prototype._updateOrder.call(this, t);\n}, _removeItemInner: function(t) {\n  var e = [];\n  this.eachItem(function(i) {\n    e.push(i);\n  }, t), e.push(this.getItem(t));\n  for (var n = 0; n < e.length; n++) this._move_branch(e[n], this.getParent(e[n]), null), nt.prototype._removeItemInner.call(this, e[n].id), this._move_branch(e[n], this.getParent(e[n]), null);\n}, move: function(t, e, n) {\n  var i = arguments[3], a = (this._ganttConfig || {}).root_id || 0;\n  if (i = it(i, a)) {\n    if (i === t) return;\n    n = this.getParent(i), e = this.getBranchIndex(i);\n  }\n  if (t != n) {\n    W(n) || (n = this.$getRootId());\n    var r = this.getItem(t), s = this.getParent(r.id), o = this.getChildren(n);\n    if (e == -1 && (e = o.length + 1), s == n && this.getBranchIndex(t) == e) return;\n    if (this.callEvent(\"onBeforeItemMove\", [t, n, e]) === !1) return !1;\n    for (var l = [], d = 0; d < o.length; d++) Lt(o[d], null, this, this._ganttConfig) && (l.push(o[d]), o.splice(d, 1), d--);\n    this._replace_branch_child(s, t);\n    var c = (o = this.getChildren(n))[e];\n    (c = it(c, a)) ? o = o.slice(0, e).concat([t]).concat(o.slice(e)) : o.push(t), l.length && (o = o.concat(l)), r.$rendered_parent !== s && s !== n && (r.$rendered_parent = s), this.setParent(r, n), this._branches[n] = o;\n    var u = this.calculateItemLevel(r) - r.$level;\n    r.$level += u, this.eachItem(function(h) {\n      h.$level += u;\n    }, r.id, this), this._moveInner(this.getIndexById(t), this.getIndexById(n) + e), this.callEvent(\"onAfterItemMove\", [t, n, e]), this.refresh();\n  }\n}, getBranchIndex: function(t) {\n  var e = this.getChildren(this.getParent(t));\n  let n = e.indexOf(t + \"\");\n  return n == -1 && (n = e.indexOf(+t)), n;\n}, hasChild: function(t) {\n  var e = this._branches[t];\n  return e && e.length;\n}, getChildren: function(t) {\n  var e = this._branches[t];\n  return e || Q.$create();\n}, isChildOf: function(t, e) {\n  if (!this.exists(t)) return !1;\n  if (e === this.$getRootId()) return !0;\n  if (!this.hasChild(e)) return !1;\n  var n = this.getItem(t), i = this.getParent(t);\n  if (this.getItem(e).$level >= n.$level) return !1;\n  for (; n && this.exists(i); ) {\n    if ((n = this.getItem(i)) && n.id == e) return !0;\n    i = this.getParent(n);\n  }\n  return !1;\n}, getSiblings: function(t) {\n  if (!this.exists(t)) return Q.$create();\n  var e = this.getParent(t);\n  return this.getChildren(e);\n}, getNextSibling: function(t) {\n  for (var e = this.getSiblings(t), n = 0, i = e.length; n < i; n++) if (e[n] == t) {\n    var a = e[n + 1];\n    return a === 0 && n > 0 && (a = \"0\"), a || null;\n  }\n  return null;\n}, getPrevSibling: function(t) {\n  for (var e = this.getSiblings(t), n = 0, i = e.length; n < i; n++) if (e[n] == t) {\n    var a = e[n - 1];\n    return a === 0 && n > 0 && (a = \"0\"), a || null;\n  }\n  return null;\n}, getParent: function(t) {\n  var e = null;\n  return (e = t.id !== void 0 ? t : this.getItem(t)) ? e[this.$parentProperty] : this.$getRootId();\n}, clearAll: function() {\n  this._branches = {}, nt.prototype.clearAll.call(this);\n}, calculateItemLevel: function(t) {\n  var e = 0;\n  return this.eachParent(function() {\n    e++;\n  }, t), e;\n}, _setParentInner: function(t, e, n) {\n  n || (t.hasOwnProperty(\"$rendered_parent\") ? this._move_branch(t, t.$rendered_parent, e) : this._move_branch(t, t[this.$parentProperty], e));\n}, setParent: function(t, e, n) {\n  this._setParentInner(t, e, n), t[this.$parentProperty] = e;\n}, _eachItemCached: function(t, e) {\n  for (var n = 0, i = e.length; n < i; n++) t.call(this, e[n]);\n}, _eachItemIterate: function(t, e, n) {\n  var i = this.getChildren(e);\n  for (i.length && (i = i.slice().reverse()); i.length; ) {\n    var a = i.pop(), r = this.getItem(a);\n    if (t.call(this, r), n && n.push(r), this.hasChild(r.id)) for (var s = this.getChildren(r.id), o = s.length - 1; o >= 0; o--) i.push(s[o]);\n  }\n}, eachItem: function(t, e) {\n  var n = this.$getRootId();\n  W(e) || (e = n);\n  var i = it(e, n) || n, a = !1, r = !1, s = null;\n  i === n && (this._eachItemMainRangeCache ? (a = !0, s = this._eachItemMainRangeCache) : (r = !0, s = this._eachItemMainRangeCache = [])), a ? this._eachItemCached(t, s) : this._eachItemIterate(t, i, r ? s : null);\n}, eachParent: function(t, e) {\n  for (var n = {}, i = e, a = this.getParent(i); this.exists(a); ) {\n    if (n[a]) throw new Error(\"Invalid tasks tree. Cyclic reference has been detected on task \" + a);\n    n[a] = !0, i = this.getItem(a), t.call(this, i), a = this.getParent(i);\n  }\n}, _add_branch: function(t, e, n) {\n  var i = n === void 0 ? this.getParent(t) : n;\n  this.hasChild(i) || (this._branches[i] = Q.$create());\n  var a = this.getChildren(i);\n  a.indexOf(t.id + \"\") > -1 || a.indexOf(+t.id) > -1 || (1 * e == e ? a.splice(e, 0, t.id) : a.push(t.id), t.$rendered_parent = i);\n}, _move_branch: function(t, e, n) {\n  this._eachItemMainRangeCache = null, this._replace_branch_child(e, t.id), this.exists(n) || n == this.$getRootId() ? this._add_branch(t, void 0, n) : delete this._branches[t.id], t.$level = this.calculateItemLevel(t), this.eachItem(function(i) {\n    i.$level = this.calculateItemLevel(i);\n  }, t.id);\n}, _replace_branch_child: function(t, e, n) {\n  var i = this.getChildren(t);\n  if (i && t !== void 0) {\n    var a = Q.$create();\n    let r = i.indexOf(e + \"\");\n    r != -1 || isNaN(+e) || (r = i.indexOf(+e)), r > -1 && (n ? i.splice(r, 1, n) : i.splice(r, 1)), a = i, this._branches[t] = a;\n  }\n}, sort: function(t, e, n) {\n  this.exists(n) || (n = this.$getRootId()), t || (t = \"order\");\n  var i = typeof t == \"string\" ? function(l, d) {\n    return l[t] == d[t] || X(l[t]) && X(d[t]) && l[t].valueOf() == d[t].valueOf() ? 0 : l[t] > d[t] ? 1 : -1;\n  } : t;\n  if (e) {\n    var a = i;\n    i = function(l, d) {\n      return a(d, l);\n    };\n  }\n  var r = this.getChildren(n);\n  if (r) {\n    for (var s = [], o = r.length - 1; o >= 0; o--) s[o] = this.getItem(r[o]);\n    for (s.sort(i), o = 0; o < s.length; o++) r[o] = s[o].id, this.sort(t, e, r[o]);\n  }\n}, filter: function(t) {\n  for (let e in this.pull) {\n    const n = this.pull[e].$rendered_parent, i = this.getParent(this.pull[e]);\n    n !== i && this._move_branch(this.pull[e], n, i);\n  }\n  return nt.prototype.filter.apply(this, arguments);\n}, open: function(t) {\n  this.exists(t) && (this.getItem(t).$open = !0, this._skipTaskRecalculation = !0, this.callEvent(\"onItemOpen\", [t]));\n}, close: function(t) {\n  this.exists(t) && (this.getItem(t).$open = !1, this._skipTaskRecalculation = !0, this.callEvent(\"onItemClose\", [t]));\n}, destructor: function() {\n  nt.prototype.destructor.call(this), this._branches = null, this._indexRangeCache = {}, this._eachItemMainRangeCache = null;\n} }, nt.prototype);\nconst Qn = function(t, e) {\n  const n = e.getDatastore(t), i = function(o, l) {\n    const d = l.getLayers(), c = n.getItem(o);\n    if (c && n.isVisible(o)) for (let u = 0; u < d.length; u++) d[u].render_item(c);\n  }, a = function(o) {\n    const l = o.getLayers();\n    for (let g = 0; g < l.length; g++) l[g].clear();\n    let d = null;\n    const c = {};\n    for (let g = 0; g < l.length; g++) {\n      const f = l[g];\n      let y;\n      if (f.get_visible_range) {\n        var u = f.get_visible_range(n);\n        if (u.start !== void 0 && u.end !== void 0) {\n          var h = u.start + \" - \" + u.end;\n          c[h] ? y = c[h] : (y = n.getIndexRange(u.start, u.end), c[h] = y);\n        } else {\n          if (u.ids === void 0) throw new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\n          y = u.ids.map(function(v) {\n            return n.getItem(v);\n          });\n        }\n      } else d || (d = n.getVisibleItems()), y = d;\n      f.prepare_data && f.prepare_data(y), l[g].render_items(y);\n    }\n  }, r = function(o) {\n    if (o.update_items) {\n      let d = [];\n      if (o.get_visible_range) {\n        var l = o.get_visible_range(n);\n        if (l.start !== void 0 && l.end !== void 0 && (d = n.getIndexRange(l.start, l.end)), l.ids !== void 0) {\n          let c = l.ids.map(function(u) {\n            return n.getItem(u);\n          });\n          c.length > 0 && (c = c.filter((u) => u !== void 0), d = d.concat(c));\n        }\n        if ((l.start == null || l.end == null) && l.ids == null) throw new Error(\"Invalid range returned from 'getVisibleRange' of the layer\");\n      } else d = n.getVisibleItems();\n      o.prepare_data && o.prepare_data(d, o), o.update_items(d);\n    }\n  };\n  function s(o) {\n    return !!o.$services.getService(\"state\").getState(\"batchUpdate\").batch_update;\n  }\n  n.attachEvent(\"onStoreUpdated\", function(o, l, d) {\n    if (j(e)) return !0;\n    const c = e.$services.getService(\"layers\").getDataRender(t);\n    c && (c.onUpdateRequest = function(u) {\n      r(u);\n    });\n  }), n.attachEvent(\"onStoreUpdated\", function(o, l, d) {\n    s(e) || (o && d != \"move\" && d != \"delete\" ? (n.callEvent(\"onBeforeRefreshItem\", [l.id]), n.callEvent(\"onAfterRefreshItem\", [l.id])) : (n.callEvent(\"onBeforeRefreshAll\", []), n.callEvent(\"onAfterRefreshAll\", [])));\n  }), n.attachEvent(\"onAfterRefreshAll\", function() {\n    if (j(e)) return !0;\n    const o = e.$services.getService(\"layers\").getDataRender(t);\n    o && !s(e) && a(o);\n  }), n.attachEvent(\"onAfterRefreshItem\", function(o) {\n    if (j(e)) return !0;\n    const l = e.$services.getService(\"layers\").getDataRender(t);\n    l && i(o, l);\n  }), n.attachEvent(\"onItemOpen\", function() {\n    if (j(e)) return !0;\n    e.render();\n  }), n.attachEvent(\"onItemClose\", function() {\n    if (j(e)) return !0;\n    e.render();\n  }), n.attachEvent(\"onIdChange\", function(o, l) {\n    if (j(e)) return !0;\n    if (n.callEvent(\"onBeforeIdChange\", [o, l]), !s(e) && !n.isSilent()) {\n      const d = e.$services.getService(\"layers\").getDataRender(t);\n      d ? (function(c, u, h) {\n        for (let g = 0; g < c.length; g++) c[g].change_id(u, h);\n      }(d.getLayers(), o, l, n.getItem(l)), i(l, d)) : e.render();\n    }\n  });\n};\nfunction Zt() {\n  for (var t = this.$services.getService(\"datastores\"), e = [], n = 0; n < t.length; n++) {\n    var i = this.getDatastore(t[n]);\n    i.$destroyed || e.push(i);\n  }\n  return e;\n}\nconst ti = { create: function() {\n  var t = N({}, { createDatastore: function(e) {\n    var n = (e.type || \"\").toLowerCase() == \"treedatastore\" ? cn : nt;\n    if (e) {\n      var i = this;\n      e.openInitially = function() {\n        return i.config.open_tree_initially;\n      }, e.copyOnParse = function() {\n        return i.config.deepcopy_on_parse;\n      };\n    }\n    var a = new n(e);\n    if (this.mixin(a, function(o) {\n      var l = null, d = o._removeItemInner;\n      function c(u) {\n        l = null, this.callEvent(\"onAfterUnselect\", [u]);\n      }\n      return o._removeItemInner = function(u) {\n        return l == u && c.call(this, u), l && this.eachItem && this.eachItem(function(h) {\n          h.id == l && c.call(this, h.id);\n        }, u), d.apply(this, arguments);\n      }, o.attachEvent(\"onIdChange\", function(u, h) {\n        o.getSelectedId() == u && o.silent(function() {\n          o.unselect(u), o.select(h);\n        });\n      }), { select: function(u) {\n        if (u) {\n          if (l == u) return l;\n          if (!this._skip_refresh && !this.callEvent(\"onBeforeSelect\", [u])) return !1;\n          this.unselect(), l = u, this._skip_refresh || (this.refresh(u), this.callEvent(\"onAfterSelect\", [u]));\n        }\n        return l;\n      }, getSelectedId: function() {\n        return l;\n      }, isSelected: function(u) {\n        return u == l;\n      }, unselect: function(u) {\n        (u = u || l) && (l = null, this._skip_refresh || (this.refresh(u), c.call(this, u)));\n      } };\n    }(a)), e.name) {\n      var r = \"datastore:\" + e.name;\n      a.attachEvent(\"onDestroy\", (function() {\n        this.$services.dropService(r);\n        for (var o = this.$services.getService(\"datastores\"), l = 0; l < o.length; l++) if (o[l] === e.name) {\n          o.splice(l, 1);\n          break;\n        }\n      }).bind(this)), this.$services.dropService(r), this.$services.setService(r, function() {\n        return a;\n      });\n      var s = this.$services.getService(\"datastores\");\n      s ? s.indexOf(e.name) < 0 && s.push(e.name) : (s = [], this.$services.setService(\"datastores\", function() {\n        return s;\n      }), s.push(e.name)), Qn(e.name, this);\n    }\n    return a;\n  }, getDatastore: function(e) {\n    return this.$services.getService(\"datastore:\" + e);\n  }, _getDatastores: Zt, refreshData: function() {\n    var e;\n    j(this) || (e = this.getScrollState()), this.callEvent(\"onBeforeDataRender\", []);\n    for (var n = Zt.call(this), i = 0; i < n.length; i++) n[i].refresh();\n    this.config.preserve_scroll && !j(this) && (e.x || e.y) && this.scrollTo(e.x, e.y), this.callEvent(\"onDataRender\", []);\n  }, isChildOf: function(e, n) {\n    return this.$data.tasksStore.isChildOf(e, n);\n  }, refreshTask: function(e, n) {\n    var i = this.getTask(e), a = this;\n    function r() {\n      if (n === void 0 || n) {\n        for (var o = 0; o < i.$source.length; o++) a.refreshLink(i.$source[o]);\n        for (o = 0; o < i.$target.length; o++) a.refreshLink(i.$target[o]);\n      }\n    }\n    if (i && this.isTaskVisible(e)) this.$data.tasksStore.refresh(e, !!this.getState(\"tasksDnd\").drag_id || n === !1), r();\n    else if (this.isTaskExists(e) && this.isTaskExists(this.getParent(e)) && !this._bulk_dnd) {\n      this.refreshTask(this.getParent(e));\n      var s = !1;\n      this.eachParent(function(o) {\n        (s || this.isSplitTask(o)) && (s = !0);\n      }, e), s && r();\n    }\n  }, refreshLink: function(e) {\n    this.$data.linksStore.refresh(e, !!this.getState(\"tasksDnd\").drag_id);\n  }, silent: function(e) {\n    var n = this;\n    n.$data.tasksStore.silent(function() {\n      n.$data.linksStore.silent(function() {\n        e();\n      });\n    });\n  }, clearAll: function() {\n    for (var e = Zt.call(this), n = 0; n < e.length; n++) e[n].silent(function() {\n      e[n].clearAll();\n    });\n    for (n = 0; n < e.length; n++) e[n].clearAll();\n    this._update_flags(), this.userdata = {}, this.callEvent(\"onClear\", []), this.render();\n  }, _clear_data: function() {\n    this.$data.tasksStore.clearAll(), this.$data.linksStore.clearAll(), this._update_flags(), this.userdata = {};\n  }, selectTask: function(e) {\n    var n = this.$data.tasksStore;\n    if (!this.config.select_task) return !1;\n    if (e = it(e, this.config.root_id)) {\n      let i = this.getSelectedId();\n      n._skipResourceRepaint = !0, n.select(e), n._skipResourceRepaint = !1, i && n.pull[i].$split_subtask && i != e && this.refreshTask(i), n.pull[e].$split_subtask && i != e && this.refreshTask(e);\n    }\n    return n.getSelectedId();\n  }, unselectTask: function(e) {\n    var n = this.$data.tasksStore;\n    n.unselect(e), e && n.pull[e].$split_subtask && this.refreshTask(e);\n  }, isSelectedTask: function(e) {\n    return this.$data.tasksStore.isSelected(e);\n  }, getSelectedId: function() {\n    return this.$data.tasksStore.getSelectedId();\n  } });\n  return N(t, { getTask: function(e) {\n    e = it(e, this.config.root_id), this.assert(e, \"Invalid argument for gantt.getTask\");\n    var n = this.$data.tasksStore.getItem(e);\n    return this.assert(n, \"Task not found id=\" + e), n;\n  }, getTaskByTime: function(e, n) {\n    var i = this.$data.tasksStore.getItems(), a = [];\n    if (e || n) {\n      e = +e || -1 / 0, n = +n || 1 / 0;\n      for (var r = 0; r < i.length; r++) {\n        var s = i[r];\n        +s.start_date < n && +s.end_date > e && a.push(s);\n      }\n    } else a = i;\n    return a;\n  }, isTaskExists: function(e) {\n    return !(!this.$data || !this.$data.tasksStore) && this.$data.tasksStore.exists(e);\n  }, updateTask: function(e, n) {\n    W(n) || (n = this.getTask(e)), this.$data.tasksStore.updateItem(e, n), this.isTaskExists(e) && this.refreshTask(e);\n  }, addTask: function(e, n, i) {\n    if (W(e.id) || (e.id = rt()), this.isTaskExists(e.id) && this.getTask(e.id).$index != e.$index) return e.start_date && typeof e.start_date == \"string\" && (e.start_date = this.date.parseDate(e.start_date, \"parse_date\")), e.end_date && typeof e.end_date == \"string\" && (e.end_date = this.date.parseDate(e.end_date, \"parse_date\")), this.$data.tasksStore.updateItem(e.id, e);\n    if (W(n) || (n = this.getParent(e) || 0), this.isTaskExists(n) || (n = this.config.root_id), this.setParent(e, n), this.getState().lightbox && this.isTaskExists(n)) {\n      var a = this.getTask(n);\n      this.callEvent(\"onAfterParentExpand\", [n, a]);\n    }\n    return this.$data.tasksStore.addItem(e, i, n);\n  }, deleteTask: function(e) {\n    return e = it(e, this.config.root_id), this.$data.tasksStore.removeItem(e);\n  }, getTaskCount: function() {\n    return this.$data.tasksStore.count();\n  }, getVisibleTaskCount: function() {\n    return this.$data.tasksStore.countVisible();\n  }, getTaskIndex: function(e) {\n    return this.$data.tasksStore.getBranchIndex(e);\n  }, getGlobalTaskIndex: function(e) {\n    return e = it(e, this.config.root_id), this.assert(e, \"Invalid argument\"), this.$data.tasksStore.getIndexById(e);\n  }, eachTask: function(e, n, i) {\n    return this.$data.tasksStore.eachItem(R(e, i || this), n);\n  }, eachParent: function(e, n, i) {\n    return this.$data.tasksStore.eachParent(R(e, i || this), n);\n  }, changeTaskId: function(e, n) {\n    this.$data.tasksStore.changeId(e, n);\n    var i = this.$data.tasksStore.getItem(n), a = [];\n    i.$source && (a = a.concat(i.$source)), i.$target && (a = a.concat(i.$target));\n    for (var r = 0; r < a.length; r++) {\n      var s = this.getLink(a[r]);\n      s.source == e && (s.source = n), s.target == e && (s.target = n);\n    }\n  }, calculateTaskLevel: function(e) {\n    return this.$data.tasksStore.calculateItemLevel(e);\n  }, getNext: function(e) {\n    return this.$data.tasksStore.getNext(e);\n  }, getPrev: function(e) {\n    return this.$data.tasksStore.getPrev(e);\n  }, getParent: function(e) {\n    return this.$data.tasksStore.getParent(e);\n  }, setParent: function(e, n, i) {\n    return this.$data.tasksStore.setParent(e, n, i);\n  }, getSiblings: function(e) {\n    return this.$data.tasksStore.getSiblings(e).slice();\n  }, getNextSibling: function(e) {\n    return this.$data.tasksStore.getNextSibling(e);\n  }, getPrevSibling: function(e) {\n    return this.$data.tasksStore.getPrevSibling(e);\n  }, getTaskByIndex: function(e) {\n    var n = this.$data.tasksStore.getIdByIndex(e);\n    return this.isTaskExists(n) ? this.getTask(n) : null;\n  }, getChildren: function(e) {\n    return this.hasChild(e) ? this.$data.tasksStore.getChildren(e).slice() : [];\n  }, hasChild: function(e) {\n    return this.$data.tasksStore.hasChild(e);\n  }, open: function(e) {\n    this.$data.tasksStore.open(e);\n  }, close: function(e) {\n    this.$data.tasksStore.close(e);\n  }, moveTask: function(e, n, i) {\n    return i = it(i, this.config.root_id), this.$data.tasksStore.move.apply(this.$data.tasksStore, arguments);\n  }, sort: function(e, n, i, a) {\n    var r = !a;\n    this.$data.tasksStore.sort(e, n, i), this.callEvent(\"onAfterSort\", [e, n, i]), r && this.render();\n  } }), N(t, { getLinkCount: function() {\n    return this.$data.linksStore.count();\n  }, getLink: function(e) {\n    return this.$data.linksStore.getItem(e);\n  }, getLinks: function() {\n    return this.$data.linksStore.getItems();\n  }, isLinkExists: function(e) {\n    return this.$data.linksStore.exists(e);\n  }, addLink: function(e) {\n    const n = this.$data.linksStore.addItem(e);\n    return this.$data.linksStore.isSilent() && this.$data.linksStore.fullOrder.push(n), n;\n  }, updateLink: function(e, n) {\n    W(n) || (n = this.getLink(e)), this.$data.linksStore.updateItem(e, n);\n  }, deleteLink: function(e) {\n    return this.$data.linksStore.removeItem(e);\n  }, changeLinkId: function(e, n) {\n    return this.$data.linksStore.changeId(e, n);\n  } }), t;\n} };\nfunction he(t) {\n  var e = t.date, n = t.$services;\n  return { getSum: function(i, a, r) {\n    r === void 0 && (r = i.length - 1), a === void 0 && (a = 0);\n    for (var s = 0, o = a; o <= r; o++) s += i[o];\n    return s;\n  }, setSumWidth: function(i, a, r, s) {\n    var o = a.width;\n    s === void 0 && (s = o.length - 1), r === void 0 && (r = 0);\n    var l = s - r + 1;\n    if (!(r > o.length - 1 || l <= 0 || s > o.length - 1)) {\n      var d = i - this.getSum(o, r, s);\n      this.adjustSize(d, o, r, s), this.adjustSize(-d, o, s + 1), a.full_width = this.getSum(o);\n    }\n  }, splitSize: function(i, a) {\n    for (var r = [], s = 0; s < a; s++) r[s] = 0;\n    return this.adjustSize(i, r), r;\n  }, adjustSize: function(i, a, r, s) {\n    r || (r = 0), s === void 0 && (s = a.length - 1);\n    for (var o = s - r + 1, l = this.getSum(a, r, s), d = r; d <= s; d++) {\n      var c = Math.floor(i * (l ? a[d] / l : 1 / o));\n      l -= a[d], i -= c, o--, a[d] += c;\n    }\n    a[a.length - 1] += i;\n  }, sortScales: function(i) {\n    function a(s, o) {\n      var l = new Date(1970, 0, 1);\n      return e.add(l, o, s) - l;\n    }\n    i.sort(function(s, o) {\n      return a(s.unit, s.step) < a(o.unit, o.step) ? 1 : a(s.unit, s.step) > a(o.unit, o.step) ? -1 : 0;\n    });\n    for (var r = 0; r < i.length; r++) i[r].index = r;\n  }, _isLegacyMode: function(i) {\n    var a = i || t.config;\n    return a.scale_unit || a.date_scale || a.subscales;\n  }, _prepareScaleObject: function(i) {\n    var a = i.format;\n    return a || (a = i.template || i.date || \"%d %M\"), typeof a == \"string\" && (a = t.date.date_to_str(a)), { unit: i.unit || \"day\", step: i.step || 1, format: a, css: i.css };\n  }, primaryScale: function(i) {\n    var a, r = n.getService(\"templateLoader\"), s = this._isLegacyMode(i), o = i || t.config;\n    if (s) r.initTemplate(\"date_scale\", void 0, void 0, o, t.config.templates), a = { unit: t.config.scale_unit, step: t.config.step, template: t.templates.date_scale, date: t.config.date_scale, css: t.templates.scale_cell_class };\n    else {\n      var l = o.scales[0];\n      a = { unit: l.unit, step: l.step, template: l.template, format: l.format, date: l.date, css: l.css || t.templates.scale_cell_class };\n    }\n    return this._prepareScaleObject(a);\n  }, getSubScales: function(i) {\n    var a, r = this._isLegacyMode(i), s = i || t.config;\n    if (r) {\n      let o = \"https://docs.dhtmlx.com/gantt/migrating.html#:~:text=%3D%20false%3B-,Time%20scale%20settings,-Configuration%20of%20time\";\n      t.env.isFF && (o = \"https://docs.dhtmlx.com/gantt/migrating.html#6162\"), console.warn(`You are using the obsolete scale configuration.\nIt will stop working in the future versions.\nPlease migrate the configuration to the newer version:\n${o}`), a = s.subscales || [];\n    } else a = s.scales.slice(1);\n    return a.map((function(o) {\n      return this._prepareScaleObject(o);\n    }).bind(this));\n  }, prepareConfigs: function(i, a, r, s, o, l, d) {\n    for (var c = this.splitSize(s, i.length), u = r, h = [], g = i.length - 1; g >= 0; g--) {\n      var f = g == i.length - 1, y = this.initScaleConfig(i[g], o, l);\n      f && this.processIgnores(y), this.initColSizes(y, a, u, c[g]), this.limitVisibleRange(y), f && (u = y.full_width), h.unshift(y);\n    }\n    for (g = 0; g < h.length - 1; g++) this.alineScaleColumns(h[h.length - 1], h[g]);\n    for (g = 0; g < h.length; g++) d && this.reverseScale(h[g]), this.setPosSettings(h[g]);\n    return h;\n  }, reverseScale: function(i) {\n    i.width = i.width.reverse(), i.trace_x = i.trace_x.reverse();\n    var a = i.trace_indexes;\n    i.trace_indexes = {}, i.trace_index_transition = {}, i.rtl = !0;\n    for (var r = 0; r < i.trace_x.length; r++) i.trace_indexes[i.trace_x[r].valueOf()] = r, i.trace_index_transition[a[i.trace_x[r].valueOf()]] = r;\n    return i;\n  }, setPosSettings: function(i) {\n    for (var a = 0, r = i.trace_x.length; a < r; a++) i.left.push((i.width[a - 1] || 0) + (i.left[a - 1] || 0));\n  }, _ignore_time_config: function(i, a) {\n    if (t.config.skip_off_time) {\n      for (var r = !0, s = i, o = 0; o < a.step; o++) o && (s = e.add(i, o, a.unit)), r = r && !this.isWorkTime(s, a.unit);\n      return r;\n    }\n    return !1;\n  }, processIgnores: function(i) {\n    i.ignore_x = {}, i.display_count = i.count;\n  }, initColSizes: function(i, a, r, s) {\n    var o = r;\n    i.height = s;\n    var l = i.display_count === void 0 ? i.count : i.display_count;\n    l || (l = 1), i.col_width = Math.floor(o / l), a && i.col_width < a && (i.col_width = a, o = i.col_width * l), i.width = [];\n    for (var d = i.ignore_x || {}, c = 0; c < i.trace_x.length; c++) if (d[i.trace_x[c].valueOf()] || i.display_count == i.count) i.width[c] = 0;\n    else {\n      var u = 1;\n      i.unit == \"month\" && (u = Math.round((e.add(i.trace_x[c], i.step, i.unit) - i.trace_x[c]) / 864e5)), i.width[c] = u;\n    }\n    this.adjustSize(o - this.getSum(i.width), i.width), i.full_width = this.getSum(i.width);\n  }, initScaleConfig: function(i, a, r) {\n    var s = N({ count: 0, col_width: 0, full_width: 0, height: 0, width: [], left: [], trace_x: [], trace_indexes: {}, min_date: new Date(a), max_date: new Date(r) }, i);\n    return this.eachColumn(i.unit, i.step, a, r, function(o) {\n      s.count++, s.trace_x.push(new Date(o)), s.trace_indexes[o.valueOf()] = s.trace_x.length - 1;\n    }), s.trace_x_ascending = s.trace_x.slice(), s;\n  }, iterateScales: function(i, a, r, s, o) {\n    for (var l = a.trace_x, d = i.trace_x, c = r || 0, u = s || d.length - 1, h = 0, g = 1; g < l.length; g++) {\n      var f = i.trace_indexes[+l[g]];\n      f !== void 0 && f <= u && (o && o.apply(this, [h, g, c, f]), c = f, h = g);\n    }\n  }, alineScaleColumns: function(i, a, r, s) {\n    this.iterateScales(i, a, r, s, function(o, l, d, c) {\n      var u = this.getSum(i.width, d, c - 1);\n      this.getSum(a.width, o, l - 1) != u && this.setSumWidth(u, a, o, l - 1);\n    });\n  }, eachColumn: function(i, a, r, s, o) {\n    var l = new Date(r), d = new Date(s);\n    e[i + \"_start\"] && (l = e[i + \"_start\"](l));\n    var c = new Date(l);\n    for (+c >= +d && (d = e.add(c, a, i)); +c < +d; ) {\n      o.call(this, new Date(c));\n      var u = c.getTimezoneOffset();\n      c = e.add(c, a, i), c = t._correct_dst_change(c, u, a, i), e[i + \"_start\"] && (c = e[i + \"_start\"](c));\n    }\n  }, limitVisibleRange: function(i) {\n    var a = i.trace_x, r = i.width.length - 1, s = 0;\n    if (+a[0] < +i.min_date && r != 0) {\n      var o = Math.floor(i.width[0] * ((a[1] - i.min_date) / (a[1] - a[0])));\n      s += i.width[0] - o, i.width[0] = o, a[0] = new Date(i.min_date);\n    }\n    var l = a.length - 1, d = a[l], c = e.add(d, i.step, i.unit);\n    if (+c > +i.max_date && l > 0 && (o = i.width[l] - Math.floor(i.width[l] * ((c - i.max_date) / (c - d))), s += i.width[l] - o, i.width[l] = o), s) {\n      for (var u = this.getSum(i.width), h = 0, g = 0; g < i.width.length; g++) {\n        var f = Math.floor(s * (i.width[g] / u));\n        i.width[g] += f, h += f;\n      }\n      this.adjustSize(s - h, i.width);\n    }\n  } };\n}\nfunction ei(t) {\n  var e = function(c) {\n    var u = new he(c).primaryScale(), h = u.unit, g = u.step;\n    if (c.config.scale_offset_minimal) {\n      var f = new he(c), y = [f.primaryScale()].concat(f.getSubScales());\n      f.sortScales(y), h = y[y.length - 1].unit, g = y[y.length - 1].step || 1;\n    }\n    return { unit: h, step: g };\n  }(t), n = e.unit, i = e.step, a = function(c, u) {\n    var h = { start_date: null, end_date: null };\n    if (u.config.start_date && u.config.end_date) {\n      h.start_date = u.date[c + \"_start\"](new Date(u.config.start_date));\n      var g = new Date(u.config.end_date), f = u.date[c + \"_start\"](new Date(g));\n      g = +g != +f ? u.date.add(f, 1, c) : f, h.end_date = g;\n    }\n    return h;\n  }(n, t);\n  if (!a.start_date || !a.end_date) {\n    for (var r = !0, s = t.getTaskByTime(), o = 0; o < s.length; o++)\n      if (s[o].type !== t.config.types.project) {\n        r = !1;\n        break;\n      }\n    if (s.length && r) {\n      var l = s[0].start_date, d = t.date.add(l, 1, t.config.duration_unit);\n      a = { start_date: new Date(l), end_date: new Date(d) };\n    } else a = t.getSubtaskDates();\n    a.start_date && a.end_date || (a = { start_date: /* @__PURE__ */ new Date(), end_date: /* @__PURE__ */ new Date() }), t.eachTask(function(c) {\n      t.config.deadlines !== !1 && c.deadline && Qt(a, c.deadline, c.deadline), c.constraint_date && c.constraint_type && t.config.constraint_types && c.constraint_type !== t.config.constraint_types.ASAP && c.constraint_type !== t.config.constraint_types.ALAP && Qt(a, c.constraint_date, c.constraint_date), t.config.baselines !== !1 && c.baselines && c.baselines.forEach(function(u) {\n        Qt(a, u.start_date, u.end_date);\n      });\n    }), a.start_date = t.date[n + \"_start\"](a.start_date), a.start_date = t.calculateEndDate({ start_date: t.date[n + \"_start\"](a.start_date), duration: -1, unit: n, step: i }), a.end_date = t.date[n + \"_start\"](a.end_date), a.end_date = t.calculateEndDate({ start_date: a.end_date, duration: 2, unit: n, step: i });\n  }\n  t._min_date = a.start_date, t._max_date = a.end_date;\n}\nfunction Qt(t, e, n) {\n  e < t.start_date && (t.start_date = new Date(e)), n > t.end_date && (t.end_date = new Date(n));\n}\nfunction _e(t) {\n  ei(t), function(e) {\n    if (e.config.fit_tasks) {\n      var n = +e._min_date, i = +e._max_date;\n      if (+e._min_date != n || +e._max_date != i) return e.render(), e.callEvent(\"onScaleAdjusted\", []), !0;\n    }\n  }(t);\n}\nfunction Le(t, e, n) {\n  for (var i = 0; i < e.length; i++) t.isLinkExists(e[i]) && (n[e[i]] = t.getLink(e[i]));\n}\nfunction Pe(t, e, n) {\n  Le(t, e.$source, n), Le(t, e.$target, n);\n}\nconst ge = { getSubtreeLinks: function(t, e) {\n  var n = {};\n  return t.isTaskExists(e) && Pe(t, t.getTask(e), n), t.eachTask(function(i) {\n    Pe(t, i, n);\n  }, e), n;\n}, getSubtreeTasks: function(t, e) {\n  var n = {};\n  return t.eachTask(function(i) {\n    n[i.id] = i;\n  }, e), n;\n} };\nclass ni {\n  constructor(e, n) {\n    this.$gantt = e, this.$dp = n, this._dataProcessorHandlers = [];\n  }\n  attach() {\n    const e = this.$dp, n = this.$gantt, i = {}, a = (o) => this.clientSideDelete(o, e, n);\n    this._dataProcessorHandlers.push(n.attachEvent(\"onAfterTaskAdd\", function(o, l) {\n      n.isTaskExists(o) && (e.setGanttMode(\"tasks\"), e.setUpdated(o, !0, \"inserted\"));\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onAfterTaskUpdate\", function(o, l) {\n      n.isTaskExists(o) && (e.setGanttMode(\"tasks\"), e.setUpdated(o, !0), n._sendTaskOrder && n._sendTaskOrder(o, l));\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onBeforeTaskDelete\", function(o, l) {\n      return n.config.cascade_delete && (i[o] = { tasks: ge.getSubtreeTasks(n, o), links: ge.getSubtreeLinks(n, o) }), !e.deleteAfterConfirmation || (e.setGanttMode(\"tasks\"), e.setUpdated(o, !0, \"deleted\"), !1);\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onAfterTaskDelete\", function(o, l) {\n      e.setGanttMode(\"tasks\");\n      const d = !a(o), c = n.config.cascade_delete && i[o];\n      if (d || c) {\n        if (c) {\n          const u = e.updateMode;\n          e.setUpdateMode(\"off\");\n          const h = i[o];\n          for (const g in h.tasks) a(g) || (e.storeItem(h.tasks[g]), e.setUpdated(g, !0, \"deleted\"));\n          e.setGanttMode(\"links\");\n          for (const g in h.links) a(g) || (e.storeItem(h.links[g]), e.setUpdated(g, !0, \"deleted\"));\n          i[o] = null, u !== \"off\" && e.sendAllData(), e.setGanttMode(\"tasks\"), e.setUpdateMode(u);\n        }\n        d && (e.storeItem(l), e.deleteAfterConfirmation || e.setUpdated(o, !0, \"deleted\")), e.updateMode === \"off\" || e._tSend || e.sendAllData();\n      }\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onAfterLinkUpdate\", function(o, l) {\n      n.isLinkExists(o) && (e.setGanttMode(\"links\"), e.setUpdated(o, !0));\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onAfterLinkAdd\", function(o, l) {\n      n.isLinkExists(o) && (e.setGanttMode(\"links\"), e.setUpdated(o, !0, \"inserted\"));\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onAfterLinkDelete\", function(o, l) {\n      e.setGanttMode(\"links\"), !a(o) && (e.storeItem(l), e.setUpdated(o, !0, \"deleted\"));\n    })), this._dataProcessorHandlers.push(n.attachEvent(\"onRowDragEnd\", function(o, l) {\n      n._sendTaskOrder(o, n.getTask(o));\n    }));\n    let r = null, s = null;\n    this._dataProcessorHandlers.push(n.attachEvent(\"onTaskIdChange\", function(o, l) {\n      if (!e._waitMode) return;\n      const d = n.getChildren(l);\n      if (d.length) {\n        r = r || {};\n        for (let u = 0; u < d.length; u++) {\n          const h = this.getTask(d[u]);\n          r[h.id] = h;\n        }\n      }\n      const c = function(u) {\n        let h = [];\n        return u.$source && (h = h.concat(u.$source)), u.$target && (h = h.concat(u.$target)), h;\n      }(this.getTask(l));\n      if (c.length) {\n        s = s || {};\n        for (let u = 0; u < c.length; u++) {\n          const h = this.getLink(c[u]);\n          s[h.id] = h;\n        }\n      }\n    })), e.attachEvent(\"onAfterUpdateFinish\", function() {\n      (r || s) && (n.batchUpdate(function() {\n        for (const o in r) n.updateTask(r[o].id);\n        for (const o in s) n.updateLink(s[o].id);\n        r = null, s = null;\n      }), r ? n._dp.setGanttMode(\"tasks\") : n._dp.setGanttMode(\"links\"));\n    }), e.attachEvent(\"onBeforeDataSending\", function() {\n      if (this._tMode === \"CUSTOM\") return !0;\n      let o = this._serverProcessor;\n      if (this._tMode === \"REST-JSON\" || this._tMode === \"REST\") {\n        const l = this._ganttMode;\n        o = o.substring(0, o.indexOf(\"?\") > -1 ? o.indexOf(\"?\") : o.length), this.serverProcessor = o + (o.slice(-1) === \"/\" ? \"\" : \"/\") + l;\n      } else {\n        const l = this._ganttMode + \"s\";\n        this.serverProcessor = o + n.ajax.urlSeparator(o) + \"gantt_mode=\" + l;\n      }\n      return !0;\n    }), e.attachEvent(\"insertCallback\", function(o, l, d, c) {\n      const u = o.data || n.xml._xmlNodeToJSON(o.firstChild), h = { add: n.addTask, isExist: n.isTaskExists };\n      c === \"links\" && (h.add = n.addLink, h.isExist = n.isLinkExists), h.isExist.call(n, l) || (u.id = l, h.add.call(n, u));\n    }), e.attachEvent(\"updateCallback\", function(o, l) {\n      const d = o.data || n.xml._xmlNodeToJSON(o.firstChild);\n      if (!n.isTaskExists(l)) return;\n      const c = n.getTask(l);\n      for (const u in d) {\n        let h = d[u];\n        switch (u) {\n          case \"id\":\n            continue;\n          case \"start_date\":\n          case \"end_date\":\n            h = n.defined(n.templates.xml_date) ? n.templates.xml_date(h) : n.templates.parse_date(h);\n            break;\n          case \"duration\":\n            c.end_date = n.calculateEndDate({ start_date: c.start_date, duration: h, task: c });\n        }\n        c[u] = h;\n      }\n      n.updateTask(l), n.refreshData();\n    }), e.attachEvent(\"deleteCallback\", function(o, l, d, c) {\n      const u = { delete: n.deleteTask, isExist: n.isTaskExists };\n      c === \"links\" ? (u.delete = n.deleteLink, u.isExist = n.isLinkExists) : c === \"assignment\" && (u.delete = function(h) {\n        n.$data.assignmentsStore.remove(h);\n      }, u.isExist = function(h) {\n        return n.$data.assignmentsStore.exists(h);\n      }), u.isExist.call(n, l) && u.delete.call(n, l);\n    }), this.handleResourceCRUD(e, n), this.handleResourceAssignmentCRUD(e, n), this.handleBaselineCRUD(e, n);\n  }\n  clientSideDelete(e, n, i) {\n    const a = n.updatedRows.slice();\n    let r = !1;\n    i.getUserData(e, \"!nativeeditor_status\", n._ganttMode) === \"true_deleted\" && (r = !0, n.setUpdated(e, !1));\n    for (let s = 0; s < a.length && !n._in_progress[e]; s++) a[s] === e && (i.getUserData(e, \"!nativeeditor_status\", n._ganttMode) === \"inserted\" && (r = !0), n.setUpdated(e, !1));\n    return r;\n  }\n  handleResourceAssignmentCRUD(e, n) {\n    if (!n.config.resources || n.config.resources.dataprocessor_assignments !== !0) return;\n    const i = n.getDatastore(n.config.resource_assignment_store), a = {}, r = {};\n    function s(o) {\n      const l = o.id;\n      i.exists(l) && (e.setGanttMode(\"assignment\"), e.setUpdated(l, !0, \"inserted\")), delete r[l];\n    }\n    n.attachEvent(\"onBeforeTaskAdd\", function(o, l) {\n      return a[o] = !0, !0;\n    }), n.attachEvent(\"onTaskIdChange\", function(o, l) {\n      delete a[o];\n    }), i.attachEvent(\"onAfterAdd\", (o, l) => {\n      a[l.task_id] ? function(d) {\n        r[d.id] = d, a[d.task_id] = !0;\n      }(l) : s(l);\n    }), i.attachEvent(\"onAfterUpdate\", (o, l) => {\n      i.exists(o) && (r[o] ? s(l) : (e.setGanttMode(\"assignment\"), e.setUpdated(o, !0)));\n    }), i.attachEvent(\"onAfterDelete\", (o, l) => {\n      e.setGanttMode(\"assignment\"), !this.clientSideDelete(o, e, n) && (e.storeItem(l), e.setUpdated(o, !0, \"deleted\"));\n    });\n  }\n  handleResourceCRUD(e, n) {\n    if (!n.config.resources || n.config.resources.dataprocessor_resources !== !0) return;\n    const i = n.getDatastore(n.config.resource_store);\n    i.attachEvent(\"onAfterAdd\", (a, r) => {\n      (function(s) {\n        const o = s.id;\n        i.exists(o) && (e.setGanttMode(\"resource\"), e.setUpdated(o, !0, \"inserted\"));\n      })(r);\n    }), i.attachEvent(\"onAfterUpdate\", (a, r) => {\n      i.exists(a) && (e.setGanttMode(\"resource\"), e.setUpdated(a, !0));\n    }), i.attachEvent(\"onAfterDelete\", (a, r) => {\n      e.setGanttMode(\"resource\"), !this.clientSideDelete(a, e, n) && (e.storeItem(r), e.setUpdated(a, !0, \"deleted\"));\n    });\n  }\n  handleBaselineCRUD(e, n) {\n    if (!n.config.baselines || n.config.baselines.dataprocessor_baselines !== !0) return;\n    const i = n.getDatastore(n.config.baselines.datastore);\n    i.attachEvent(\"onAfterAdd\", (a, r) => {\n      (function(s) {\n        const o = s.id;\n        i.exists(o) && (e.setGanttMode(\"baseline\"), e.setUpdated(o, !0, \"inserted\"));\n      })(r);\n    }), i.attachEvent(\"onAfterUpdate\", (a, r) => {\n      i.exists(a) && (e.setGanttMode(\"baseline\"), e.setUpdated(a, !0));\n    }), i.attachEvent(\"onAfterDelete\", (a, r) => {\n      e.setGanttMode(\"baseline\"), !this.clientSideDelete(a, e, n) && (e.storeItem(r), e.setUpdated(a, !0, \"deleted\"));\n    });\n  }\n  detach() {\n    vt(this._dataProcessorHandlers, (e) => {\n      this.$gantt.detachEvent(e);\n    }), this._dataProcessorHandlers = [];\n  }\n}\nconst Yt = class Yt {\n  constructor() {\n    this.clear = () => {\n      this._storage = {};\n    }, this.storeItem = (e) => {\n      this._storage[e.id] = q(e);\n    }, this.getStoredItem = (e) => this._storage[e] || null, this._storage = {};\n  }\n};\nYt.create = () => new Yt();\nlet qt = Yt, Re = class {\n  constructor(t) {\n    this.serverProcessor = t, this.action_param = \"!nativeeditor_status\", this.updatedRows = [], this.autoUpdate = !0, this.updateMode = \"cell\", this._headers = null, this._payload = null, this._postDelim = \"_\", this._routerParametersFormat = \"parameters\", this._waitMode = 0, this._in_progress = {}, this._storage = qt.create(), this._invalid = {}, this.messages = [], this.styles = { updated: \"font-weight:bold;\", inserted: \"font-weight:bold;\", deleted: \"text-decoration : line-through;\", invalid: \"background-color:FFE0E0;\", invalid_cell: \"border-bottom:2px solid red;\", error: \"color:red;\", clear: \"font-weight:normal;text-decoration:none;\" }, this.enableUTFencoding(!0), st(this);\n  }\n  setTransactionMode(t, e) {\n    typeof t == \"object\" ? (this._tMode = t.mode || this._tMode, W(t.headers) && (this._headers = t.headers), W(t.payload) && (this._payload = t.payload), this._tSend = !!e) : (this._tMode = t, this._tSend = e), this._tMode === \"REST\" && (this._tSend = !1), this._tMode === \"JSON\" || this._tMode === \"REST-JSON\" ? (this._tSend = !1, this._serializeAsJson = !0, this._headers = this._headers || {}, this._headers[\"Content-Type\"] = \"application/json\") : this._headers && !this._headers[\"Content-Type\"] && (this._headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\"), this._tMode === \"CUSTOM\" && (this._tSend = !1, this._router = t.router);\n  }\n  escape(t) {\n    return this._utf ? encodeURIComponent(t) : escape(t);\n  }\n  enableUTFencoding(t) {\n    this._utf = !!t;\n  }\n  getSyncState() {\n    return !this.updatedRows.length;\n  }\n  setUpdateMode(t, e) {\n    this.autoUpdate = t === \"cell\", this.updateMode = t, this.dnd = e;\n  }\n  ignore(t, e) {\n    this._silent_mode = !0, t.call(e || ot), this._silent_mode = !1;\n  }\n  setUpdated(t, e, n) {\n    if (this._silent_mode) return;\n    const i = this.findRow(t);\n    n = n || \"updated\";\n    const a = this.$gantt.getUserData(t, this.action_param, this._ganttMode);\n    a && n === \"updated\" && (n = a), e ? (this.set_invalid(t, !1), this.updatedRows[i] = t, this.$gantt.setUserData(t, this.action_param, n, this._ganttMode), this._in_progress[t] && (this._in_progress[t] = \"wait\")) : this.is_invalid(t) || (this.updatedRows.splice(i, 1), this.$gantt.setUserData(t, this.action_param, \"\", this._ganttMode)), this.markRow(t, e, n), e && this.autoUpdate && this.sendData(t);\n  }\n  markRow(t, e, n) {\n    let i = \"\";\n    const a = this.is_invalid(t);\n    if (a && (i = this.styles[a], e = !0), this.callEvent(\"onRowMark\", [t, e, n, a]) && (i = this.styles[e ? n : \"clear\"] + \" \" + i, this.$gantt[this._methods[0]](t, i), a && a.details)) {\n      i += this.styles[a + \"_cell\"];\n      for (let r = 0; r < a.details.length; r++) a.details[r] && this.$gantt[this._methods[1]](t, r, i);\n    }\n  }\n  getActionByState(t) {\n    return t === \"inserted\" ? \"create\" : t === \"updated\" ? \"update\" : t === \"deleted\" ? \"delete\" : \"update\";\n  }\n  getState(t) {\n    return this.$gantt.getUserData(t, this.action_param, this._ganttMode);\n  }\n  is_invalid(t) {\n    return this._invalid[t];\n  }\n  set_invalid(t, e, n) {\n    n && (e = { value: e, details: n, toString: function() {\n      return this.value.toString();\n    } }), this._invalid[t] = e;\n  }\n  checkBeforeUpdate(t) {\n    return !0;\n  }\n  sendData(t) {\n    if (this.$gantt.editStop && this.$gantt.editStop(), t === void 0 || this._tSend) {\n      const e = [];\n      if (this.modes && [\"task\", \"link\", \"assignment\", \"baseline\"].forEach((n) => {\n        this.modes[n] && this.modes[n].updatedRows.length && e.push(n);\n      }), e.length) {\n        for (let n = 0; n < e.length; n++) this.setGanttMode(e[n]), this.sendAllData();\n        return;\n      }\n      return this.sendAllData();\n    }\n    return !this._in_progress[t] && (this.messages = [], !(!this.checkBeforeUpdate(t) && this.callEvent(\"onValidationError\", [t, this.messages])) && void this._beforeSendData(this._getRowData(t), t));\n  }\n  serialize(t, e) {\n    if (this._serializeAsJson) return this._serializeAsJSON(t);\n    if (typeof t == \"string\") return t;\n    if (e !== void 0) return this.serialize_one(t, \"\");\n    {\n      const n = [], i = [];\n      for (const a in t) t.hasOwnProperty(a) && (n.push(this.serialize_one(t[a], a + this._postDelim)), i.push(a));\n      return n.push(\"ids=\" + this.escape(i.join(\",\"))), this.$gantt.security_key && n.push(\"dhx_security=\" + this.$gantt.security_key), n.join(\"&\");\n    }\n  }\n  serialize_one(t, e) {\n    if (typeof t == \"string\") return t;\n    const n = [];\n    let i = \"\";\n    for (const a in t) if (t.hasOwnProperty(a)) {\n      if ((a === \"id\" || a == this.action_param) && this._tMode === \"REST\") continue;\n      i = typeof t[a] == \"string\" || typeof t[a] == \"number\" ? String(t[a]) : JSON.stringify(t[a]), n.push(this.escape((e || \"\") + a) + \"=\" + this.escape(i));\n    }\n    return n.join(\"&\");\n  }\n  sendAllData() {\n    if (!this.updatedRows.length) return;\n    this.messages = [];\n    let t = !0;\n    if (this._forEachUpdatedRow(function(e) {\n      t = t && this.checkBeforeUpdate(e);\n    }), !t && !this.callEvent(\"onValidationError\", [\"\", this.messages])) return !1;\n    this._tSend ? this._sendData(this._getAllData()) : this._forEachUpdatedRow(function(e) {\n      if (!this._in_progress[e]) {\n        if (this.is_invalid(e)) return;\n        this._beforeSendData(this._getRowData(e), e);\n      }\n    });\n  }\n  findRow(t) {\n    let e = 0;\n    for (e = 0; e < this.updatedRows.length && t != this.updatedRows[e]; e++) ;\n    return e;\n  }\n  defineAction(t, e) {\n    this._uActions || (this._uActions = {}), this._uActions[t] = e;\n  }\n  afterUpdateCallback(t, e, n, i, a) {\n    if (!this.$gantt) return;\n    this.setGanttMode(a);\n    const r = t, s = n !== \"error\" && n !== \"invalid\";\n    if (s || this.set_invalid(t, n), this._uActions && this._uActions[n] && !this._uActions[n](i)) return delete this._in_progress[r];\n    this._in_progress[r] !== \"wait\" && this.setUpdated(t, !1);\n    const o = t;\n    switch (n) {\n      case \"inserted\":\n      case \"insert\":\n        e != t && (this.setUpdated(t, !1), this.$gantt[this._methods[2]](t, e), t = e);\n        break;\n      case \"delete\":\n      case \"deleted\":\n        if (this.deleteAfterConfirmation && this._ganttMode === \"task\") {\n          if (this._ganttMode === \"task\" && this.$gantt.isTaskExists(t)) {\n            this.$gantt.setUserData(t, this.action_param, \"true_deleted\", this._ganttMode);\n            const l = this.$gantt.getTask(t);\n            this.$gantt.silent(() => {\n              this.$gantt.deleteTask(t);\n            }), this.$gantt.callEvent(\"onAfterTaskDelete\", [t, l]), this.$gantt.render(), delete this._in_progress[r];\n          }\n          return this.callEvent(\"onAfterUpdate\", [t, n, e, i]);\n        }\n        return this.$gantt.setUserData(t, this.action_param, \"true_deleted\", this._ganttMode), this.$gantt[this._methods[3]](t), delete this._in_progress[r], this.callEvent(\"onAfterUpdate\", [t, n, e, i]);\n    }\n    this._in_progress[r] !== \"wait\" ? (s && this.$gantt.setUserData(t, this.action_param, \"\", this._ganttMode), delete this._in_progress[r]) : (delete this._in_progress[r], this.setUpdated(e, !0, this.$gantt.getUserData(t, this.action_param, this._ganttMode))), this.callEvent(\"onAfterUpdate\", [o, n, e, i]);\n  }\n  afterUpdate(t, e, n) {\n    let i;\n    i = arguments.length === 3 ? arguments[1] : arguments[4];\n    let a = this.getGanttMode();\n    const r = i.filePath || i.url;\n    a = this._tMode !== \"REST\" && this._tMode !== \"REST-JSON\" ? r.indexOf(\"gantt_mode=links\") !== -1 ? \"link\" : r.indexOf(\"gantt_mode=assignments\") !== -1 ? \"assignment\" : r.indexOf(\"gantt_mode=baselines\") !== -1 ? \"baseline\" : \"task\" : r.indexOf(\"/link\") >= 0 ? \"link\" : r.indexOf(\"/assignment\") >= 0 ? \"assignment\" : r.indexOf(\"/baseline\") >= 0 ? \"baseline\" : \"task\", this.setGanttMode(a);\n    const s = this.$gantt.ajax;\n    let o;\n    try {\n      o = JSON.parse(e.xmlDoc.responseText);\n    } catch {\n      e.xmlDoc.responseText.length || (o = {});\n    }\n    const l = (u) => {\n      const h = o.action || this.getState(u) || \"updated\", g = o.sid || u[0], f = o.tid || u[0];\n      t.afterUpdateCallback(g, f, h, o, a);\n    };\n    if (o) return Array.isArray(n) && n.length > 1 ? n.forEach((u) => l(u)) : l(n), t.finalizeUpdate(), void this.setGanttMode(a);\n    const d = s.xmltop(\"data\", e.xmlDoc);\n    if (!d) return this.cleanUpdate(n);\n    const c = s.xpath(\"//data/action\", d);\n    if (!c.length) return this.cleanUpdate(n);\n    for (let u = 0; u < c.length; u++) {\n      const h = c[u], g = h.getAttribute(\"type\"), f = h.getAttribute(\"sid\"), y = h.getAttribute(\"tid\");\n      t.afterUpdateCallback(f, y, g, h, a);\n    }\n    t.finalizeUpdate();\n  }\n  cleanUpdate(t) {\n    if (t) for (let e = 0; e < t.length; e++) delete this._in_progress[t[e]];\n  }\n  finalizeUpdate() {\n    this._waitMode && this._waitMode--, this.callEvent(\"onAfterUpdateFinish\", []), this.updatedRows.length || this.callEvent(\"onFullSync\", []);\n  }\n  init(t) {\n    if (this._initialized) return;\n    this.$gantt = t, this.$gantt._dp_init && this.$gantt._dp_init(this), this._setDefaultTransactionMode(), this.styles = { updated: \"gantt_updated\", order: \"gantt_updated\", inserted: \"gantt_inserted\", deleted: \"gantt_deleted\", delete_confirmation: \"gantt_deleted\", invalid: \"gantt_invalid\", error: \"gantt_error\", clear: \"\" }, this._methods = [\"_row_style\", \"setCellTextStyle\", \"_change_id\", \"_delete_task\"], function(n, i) {\n      n.getUserData = function(a, r, s) {\n        return this.userdata || (this.userdata = {}), this.userdata[s] = this.userdata[s] || {}, this.userdata[s][a] && this.userdata[s][a][r] ? this.userdata[s][a][r] : \"\";\n      }, n.setUserData = function(a, r, s, o) {\n        this.userdata || (this.userdata = {}), this.userdata[o] = this.userdata[o] || {}, this.userdata[o][a] = this.userdata[o][a] || {}, this.userdata[o][a][r] = s;\n      }, n._change_id = function(a, r) {\n        switch (this._dp._ganttMode) {\n          case \"task\":\n            this.changeTaskId(a, r);\n            break;\n          case \"link\":\n            this.changeLinkId(a, r);\n            break;\n          case \"assignment\":\n            this.$data.assignmentsStore.changeId(a, r);\n            break;\n          case \"resource\":\n            this.$data.resourcesStore.changeId(a, r);\n            break;\n          case \"baseline\":\n            this.$data.baselineStore.changeId(a, r);\n            break;\n          default:\n            throw new Error(`Invalid mode of the dataProcessor after database id is received: ${this._dp._ganttMode}, new id: ${r}`);\n        }\n      }, n._row_style = function(a, r) {\n        this._dp._ganttMode === \"task\" && n.isTaskExists(a) && (n.getTask(a).$dataprocessor_class = r, n.refreshTask(a));\n      }, n._delete_task = function(a, r) {\n      }, n._sendTaskOrder = function(a, r) {\n        r.$drop_target && (this._dp.setGanttMode(\"task\"), this.getTask(a).target = r.$drop_target, this._dp.setUpdated(a, !0, \"order\"), delete this.getTask(a).$drop_target);\n      }, n.setDp = function() {\n        this._dp = i;\n      }, n.setDp();\n    }(this.$gantt, this);\n    const e = new ni(this.$gantt, this);\n    e.attach(), this.attachEvent(\"onDestroy\", function() {\n      delete this.setGanttMode, delete this._getRowData, delete this.$gantt._dp, delete this.$gantt._change_id, delete this.$gantt._row_style, delete this.$gantt._delete_task, delete this.$gantt._sendTaskOrder, delete this.$gantt, e.detach();\n    }), this.$gantt.callEvent(\"onDataProcessorReady\", [this]), this._initialized = !0;\n  }\n  setOnAfterUpdate(t) {\n    this.attachEvent(\"onAfterUpdate\", t);\n  }\n  setOnBeforeUpdateHandler(t) {\n    this.attachEvent(\"onBeforeDataSending\", t);\n  }\n  setAutoUpdate(t, e) {\n    t = t || 2e3, this._user = e || (/* @__PURE__ */ new Date()).valueOf(), this._needUpdate = !1, this._updateBusy = !1, this.attachEvent(\"onAfterUpdate\", this.afterAutoUpdate), this.attachEvent(\"onFullSync\", this.fullSync), setInterval(() => {\n      this.loadUpdate();\n    }, t);\n  }\n  afterAutoUpdate(t, e, n, i) {\n    return e !== \"collision\" || (this._needUpdate = !0, !1);\n  }\n  fullSync() {\n    return this._needUpdate && (this._needUpdate = !1, this.loadUpdate()), !0;\n  }\n  getUpdates(t, e) {\n    const n = this.$gantt.ajax;\n    if (this._updateBusy) return !1;\n    this._updateBusy = !0, n.get(t, e);\n  }\n  loadUpdate() {\n    const t = this.$gantt.ajax, e = this.$gantt.getUserData(0, \"version\", this._ganttMode);\n    let n = this.serverProcessor + t.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, \"dhx_version=\" + e].join(\"&\");\n    n = n.replace(\"editing=true&\", \"\"), this.getUpdates(n, (i) => {\n      const a = t.xpath(\"//userdata\", i);\n      this.$gantt.setUserData(0, \"version\", this._getXmlNodeValue(a[0]), this._ganttMode);\n      const r = t.xpath(\"//update\", i);\n      if (r.length) {\n        this._silent_mode = !0;\n        for (let s = 0; s < r.length; s++) {\n          const o = r[s].getAttribute(\"status\"), l = r[s].getAttribute(\"id\"), d = r[s].getAttribute(\"parent\");\n          switch (o) {\n            case \"inserted\":\n              this.callEvent(\"insertCallback\", [r[s], l, d]);\n              break;\n            case \"updated\":\n              this.callEvent(\"updateCallback\", [r[s], l, d]);\n              break;\n            case \"deleted\":\n              this.callEvent(\"deleteCallback\", [r[s], l, d]);\n          }\n        }\n        this._silent_mode = !1;\n      }\n      this._updateBusy = !1;\n    });\n  }\n  destructor() {\n    this.callEvent(\"onDestroy\", []), this.detachAllEvents(), this.updatedRows = [], this._in_progress = {}, this._invalid = {}, this._storage.clear(), this._storage = null, this._headers = null, this._payload = null, delete this._initialized;\n  }\n  setGanttMode(t) {\n    t === \"tasks\" ? t = \"task\" : t === \"links\" && (t = \"link\");\n    const e = this.modes || {}, n = this.getGanttMode();\n    n && (e[n] = { _in_progress: this._in_progress, _invalid: this._invalid, _storage: this._storage, updatedRows: this.updatedRows });\n    let i = e[t];\n    i || (i = e[t] = { _in_progress: {}, _invalid: {}, _storage: qt.create(), updatedRows: [] }), this._in_progress = i._in_progress, this._invalid = i._invalid, this._storage = i._storage, this.updatedRows = i.updatedRows, this.modes = e, this._ganttMode = t;\n  }\n  getGanttMode() {\n    return this._ganttMode;\n  }\n  storeItem(t) {\n    this._storage.storeItem(t);\n  }\n  url(t) {\n    this.serverProcessor = this._serverProcessor = t;\n  }\n  _beforeSendData(t, e) {\n    if (!this.callEvent(\"onBeforeUpdate\", [e, this.getState(e), t])) return !1;\n    this._sendData(t, e);\n  }\n  _serializeAsJSON(t) {\n    if (typeof t == \"string\") return t;\n    const e = q(t);\n    return this._tMode === \"REST-JSON\" && (delete e.id, delete e[this.action_param]), JSON.stringify(e);\n  }\n  _applyPayload(t) {\n    const e = this.$gantt.ajax;\n    if (this._payload) for (const n in this._payload) t = t + e.urlSeparator(t) + this.escape(n) + \"=\" + this.escape(this._payload[n]);\n    return t;\n  }\n  _cleanupArgumentsBeforeSend(t) {\n    let e;\n    if (t[this.action_param] === void 0) {\n      e = {};\n      for (const n in t) e[n] = this._cleanupArgumentsBeforeSend(t[n]);\n    } else e = this._cleanupItemBeforeSend(t);\n    return e;\n  }\n  _cleanupItemBeforeSend(t) {\n    let e = null;\n    return t && (t[this.action_param] === \"deleted\" ? (e = {}, e.id = t.id, e[this.action_param] = t[this.action_param]) : e = t), e;\n  }\n  _sendData(t, e) {\n    if (!t) return;\n    if (!this.callEvent(\"onBeforeDataSending\", e ? [e, this.getState(e), t] : [null, null, t])) return !1;\n    e && (this._in_progress[e] = (/* @__PURE__ */ new Date()).valueOf());\n    const n = this.$gantt.ajax;\n    if (this._tMode === \"CUSTOM\") {\n      const l = this.getState(e), d = this.getActionByState(l), c = this.getGanttMode(), u = (g) => {\n        let f = l || \"updated\", y = e, v = e;\n        g && (f = g.action || l, y = g.sid || y, v = g.id || g.tid || v), this.afterUpdateCallback(y, v, f, g, c);\n      };\n      let h;\n      if (this._router instanceof Function) if (this._routerParametersFormat === \"object\") {\n        const g = { entity: c, action: d, data: t, id: e };\n        h = this._router(g);\n      } else h = this._router(c, d, t, e);\n      else if (this._router[c] instanceof Function) h = this._router[c](d, t, e);\n      else {\n        const g = \"Incorrect configuration of gantt.createDataProcessor\", f = `\nYou need to either add missing properties to the dataProcessor router object or to use a router function.\nSee https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and https://docs.dhtmlx.com/gantt/api__gantt_createdataprocessor.html for details.`;\n        if (!this._router[c]) throw new Error(`${g}: router for the **${c}** entity is not defined. ${f}`);\n        switch (l) {\n          case \"inserted\":\n            if (!this._router[c].create) throw new Error(`${g}: **create** action for the **${c}** entity is not defined. ${f}`);\n            h = this._router[c].create(t);\n            break;\n          case \"deleted\":\n            if (!this._router[c].delete) throw new Error(`${g}: **delete** action for the **${c}** entity is not defined. ${f}`);\n            h = this._router[c].delete(e);\n            break;\n          default:\n            if (!this._router[c].update) throw new Error(`${g}: **update**\" action for the **${c}** entity is not defined. ${f}`);\n            h = this._router[c].update(t, e);\n        }\n      }\n      if (h) {\n        if (!h.then && h.id === void 0 && h.tid === void 0 && h.action === void 0) throw new Error(\"Incorrect router return value. A Promise or a response object is expected\");\n        h.then ? h.then(u).catch((g) => {\n          g && g.action ? u(g) : u({ action: \"error\", value: g });\n        }) : u(h);\n      } else u(null);\n      return;\n    }\n    let i;\n    i = { callback: (l) => {\n      const d = [];\n      if (e) d.push(e);\n      else if (t) for (const c in t) d.push(c);\n      return this.afterUpdate(this, l, d);\n    }, headers: this._headers };\n    const a = \"dhx_version=\" + this.$gantt.getUserData(0, \"version\", this._ganttMode), r = this.serverProcessor + (this._user ? n.urlSeparator(this.serverProcessor) + [\"dhx_user=\" + this._user, a].join(\"&\") : \"\");\n    let s, o = this._applyPayload(r);\n    switch (this._tMode) {\n      case \"GET\":\n        s = this._cleanupArgumentsBeforeSend(t), i.url = o + n.urlSeparator(o) + this.serialize(s, e), i.method = \"GET\";\n        break;\n      case \"POST\":\n        s = this._cleanupArgumentsBeforeSend(t), i.url = o, i.method = \"POST\", i.data = this.serialize(s, e);\n        break;\n      case \"JSON\":\n        s = {};\n        const l = this._cleanupItemBeforeSend(t);\n        for (const d in l) d !== this.action_param && d !== \"id\" && d !== \"gr_id\" && (s[d] = l[d]);\n        i.url = o, i.method = \"POST\", i.data = JSON.stringify({ id: e, action: t[this.action_param], data: s });\n        break;\n      case \"REST\":\n      case \"REST-JSON\":\n        switch (o = r.replace(/(&|\\?)editing=true/, \"\"), s = \"\", this.getState(e)) {\n          case \"inserted\":\n            i.method = \"POST\", i.data = this.serialize(t, e);\n            break;\n          case \"deleted\":\n            i.method = \"DELETE\", o = o + (o.slice(-1) === \"/\" ? \"\" : \"/\") + e;\n            break;\n          default:\n            i.method = \"PUT\", i.data = this.serialize(t, e), o = o + (o.slice(-1) === \"/\" ? \"\" : \"/\") + e;\n        }\n        i.url = this._applyPayload(o);\n    }\n    return this._waitMode++, n.query(i);\n  }\n  _forEachUpdatedRow(t) {\n    const e = this.updatedRows.slice();\n    for (let n = 0; n < e.length; n++) {\n      const i = e[n];\n      this.$gantt.getUserData(i, this.action_param, this._ganttMode) && t.call(this, i);\n    }\n  }\n  _setDefaultTransactionMode() {\n    this.serverProcessor && (this.setTransactionMode(\"POST\", !0), this.serverProcessor += (this.serverProcessor.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + \"editing=true\", this._serverProcessor = this.serverProcessor);\n  }\n  _getXmlNodeValue(t) {\n    return t.firstChild ? t.firstChild.nodeValue : \"\";\n  }\n  _getAllData() {\n    const t = {};\n    let e = !1;\n    return this._forEachUpdatedRow(function(n) {\n      if (this._in_progress[n] || this.is_invalid(n)) return;\n      const i = this._getRowData(n);\n      this.callEvent(\"onBeforeUpdate\", [n, this.getState(n), i]) && (t[n] = i, e = !0, this._in_progress[n] = (/* @__PURE__ */ new Date()).valueOf());\n    }), e ? t : null;\n  }\n  _prepareDate(t) {\n    return this.$gantt.defined(this.$gantt.templates.xml_format) ? this.$gantt.templates.xml_format(t) : this.$gantt.templates.format_date(t);\n  }\n  _prepareArray(t, e) {\n    return e.push(t), t.map((n) => X(n) ? this._prepareDate(n) : Array.isArray(n) && !Ot(e, n) ? this._prepareArray(n, e) : n && typeof n == \"object\" && !Ot(e, n) ? this._prepareObject(n, e) : n);\n  }\n  _prepareObject(t, e) {\n    const n = {};\n    e.push(t);\n    for (const i in t) {\n      if (i.substr(0, 1) === \"$\") continue;\n      const a = t[i];\n      X(a) ? n[i] = this._prepareDate(a) : a === null ? n[i] = \"\" : Array.isArray(a) && !Ot(e, a) ? n[i] = this._prepareArray(a, e) : a && typeof a == \"object\" && !Ot(e, a) ? n[i] = this._prepareObject(a, e) : n[i] = a;\n    }\n    return n;\n  }\n  _prepareDataItem(t) {\n    const e = this._prepareObject(t, []);\n    return e[this.action_param] = this.$gantt.getUserData(t.id, this.action_param, this._ganttMode), e;\n  }\n  getStoredItem(t) {\n    return this._storage.getStoredItem(t);\n  }\n  _getRowData(t) {\n    let e;\n    const n = this.$gantt;\n    return this.getGanttMode() === \"task\" ? n.isTaskExists(t) && (e = this.$gantt.getTask(t)) : this.getGanttMode() === \"assignment\" ? this.$gantt.$data.assignmentsStore.exists(t) && (e = this.$gantt.$data.assignmentsStore.getItem(t)) : this.getGanttMode() === \"baseline\" ? this.$gantt.$data.baselineStore.exists(t) && (e = this.$gantt.$data.baselineStore.getItem(t)) : n.isLinkExists(t) && (e = this.$gantt.getLink(t)), e || (e = this.getStoredItem(t)), e || (e = { id: t }), this._prepareDataItem(e);\n  }\n};\nconst He = { DEPRECATED_api: function(t) {\n  return new Re(t);\n}, createDataProcessor: function(t) {\n  let e, n, i;\n  t instanceof Function ? e = t : t.hasOwnProperty(\"router\") ? e = t.router : t.hasOwnProperty(\"assignment\") || t.hasOwnProperty(\"baseline\") || t.hasOwnProperty(\"link\") || t.hasOwnProperty(\"task\") ? e = t : t.hasOwnProperty(\"headers\") && (i = t.headers), n = e ? \"CUSTOM\" : t.mode || \"REST-JSON\";\n  const a = new Re(t.url);\n  return a.init(this), a.setTransactionMode({ mode: n, router: e, headers: i }, t.batchUpdate), t.deleteAfterConfirmation && (a.deleteAfterConfirmation = t.deleteAfterConfirmation), a;\n} };\nfunction ii(t) {\n  var e = {}, n = !1;\n  function i(l, d) {\n    d = typeof d == \"function\" ? d : function() {\n    }, e[l] || (e[l] = this[l], this[l] = d);\n  }\n  function a(l) {\n    e[l] && (this[l] = e[l], e[l] = null);\n  }\n  function r(l) {\n    for (var d in l) i.call(this, d, l[d]);\n  }\n  function s() {\n    for (var l in e) a.call(this, l);\n  }\n  function o(l) {\n    try {\n      l();\n    } catch (d) {\n      ot.console.error(d);\n    }\n  }\n  return t.$services.getService(\"state\").registerProvider(\"batchUpdate\", function() {\n    return { batch_update: n };\n  }, !1), function(l, d) {\n    if (n) o(l);\n    else {\n      var c, u = this._dp && this._dp.updateMode != \"off\";\n      u && (c = this._dp.updateMode, this._dp.setUpdateMode(\"off\"));\n      var h = {}, g = { render: !0, refreshData: !0, refreshTask: !0, refreshLink: !0, resetProjectDates: function(y) {\n        h[y.id] = y;\n      } };\n      for (var f in r.call(this, g), n = !0, this.callEvent(\"onBeforeBatchUpdate\", []), o(l), this.callEvent(\"onAfterBatchUpdate\", []), s.call(this), h) this.resetProjectDates(h[f]);\n      n = !1, d || this.render(), u && (this._dp.setUpdateMode(c), this._dp.setGanttMode(\"task\"), this._dp.sendData(), this._dp.setGanttMode(\"link\"), this._dp.sendData());\n    }\n  };\n}\nfunction ai(t) {\n  t.batchUpdate = ii(t);\n}\nvar ri = function(t) {\n  return { _needRecalc: !0, reset: function() {\n    this._needRecalc = !0;\n  }, _isRecalcNeeded: function() {\n    return !this._isGroupSort() && this._needRecalc;\n  }, _isGroupSort: function() {\n    return !!t.getState().group_mode;\n  }, _getWBSCode: function(e) {\n    return e ? (this._isRecalcNeeded() && this._calcWBS(), e.$virtual ? \"\" : this._isGroupSort() ? e.$wbs || \"\" : (e.$wbs || (this.reset(), this._calcWBS()), e.$wbs)) : \"\";\n  }, _setWBSCode: function(e, n) {\n    e.$wbs = n;\n  }, getWBSCode: function(e) {\n    return this._getWBSCode(e);\n  }, getByWBSCode: function(e) {\n    for (var n = e.split(\".\"), i = t.config.root_id, a = 0; a < n.length; a++) {\n      var r = t.getChildren(i), s = 1 * n[a] - 1;\n      if (!t.isTaskExists(r[s])) return null;\n      i = r[s];\n    }\n    return t.isTaskExists(i) ? t.getTask(i) : null;\n  }, _calcWBS: function() {\n    if (this._isRecalcNeeded()) {\n      var e = !0;\n      t.eachTask(function(n) {\n        if (e) return e = !1, void this._setWBSCode(n, \"1\");\n        var i = t.getPrevSibling(n.id);\n        if (i !== null) {\n          var a = t.getTask(i).$wbs;\n          a && ((a = a.split(\".\"))[a.length - 1]++, this._setWBSCode(n, a.join(\".\")));\n        } else {\n          var r = t.getParent(n.id);\n          this._setWBSCode(n, t.getTask(r).$wbs + \".1\");\n        }\n      }, t.config.root_id, this), this._needRecalc = !1;\n    }\n  } };\n};\nfunction si(t) {\n  var e = ri(t);\n  function n() {\n    return e.reset(), !0;\n  }\n  t.getWBSCode = function(i) {\n    return e.getWBSCode(i);\n  }, t.getTaskByWBSCode = function(i) {\n    return e.getByWBSCode(i);\n  }, t.attachEvent(\"onAfterTaskMove\", n), t.attachEvent(\"onBeforeParse\", n), t.attachEvent(\"onAfterTaskDelete\", n), t.attachEvent(\"onAfterTaskAdd\", n), t.attachEvent(\"onAfterSort\", n);\n}\nfunction oi(t) {\n  var e = {}, n = !1;\n  t.$data.tasksStore.attachEvent(\"onStoreUpdated\", function() {\n    e = {}, n = !1;\n  }), t.attachEvent(\"onBeforeGanttRender\", function() {\n    e = {};\n  });\n  var i = String(Math.random());\n  function a(l) {\n    return l === null ? i + String(l) : String(l);\n  }\n  function r(l, d, c) {\n    return Array.isArray(l) ? l.map(function(u) {\n      return a(u);\n    }).join(\"_\") + `_${d}_${c}` : a(l) + `_${d}_${c}`;\n  }\n  function s(l, d, c) {\n    var u, h = r(d, l, JSON.stringify(c)), g = {};\n    return vt(d, function(f) {\n      g[a(f)] = !0;\n    }), e[h] ? u = e[h] : (u = e[h] = [], t.eachTask(function(f) {\n      if (c) {\n        if (!c[t.getTaskType(f)]) return;\n      } else if (f.type == t.config.types.project) return;\n      l in f && vt(ue(f[l]) ? f[l] : [f[l]], function(y) {\n        var v = y && y.resource_id ? y.resource_id : y;\n        if (g[a(v)]) u.push(f);\n        else if (!n) {\n          var b = r(y, l);\n          e[b] || (e[b] = []), e[b].push(f);\n        }\n      });\n    }), n = !0), u;\n  }\n  function o(l, d, c) {\n    var u = t.config.resource_property, h = [];\n    if (t.getDatastore(\"task\").exists(d)) {\n      var g = t.getTask(d);\n      h = g[u] || [];\n    }\n    Array.isArray(h) || (h = [h]);\n    for (var f = 0; f < h.length; f++) h[f].resource_id == l && c.push({ task_id: g.id, resource_id: h[f].resource_id, value: h[f].value });\n  }\n  return { getTaskBy: function(l, d, c) {\n    return typeof l == \"function\" ? (u = l, h = [], t.eachTask(function(g) {\n      u(g) && h.push(g);\n    }), h) : ue(d) ? s(l, d, c) : s(l, [d], c);\n    var u, h;\n  }, getResourceAssignments: function(l, d) {\n    var c = [], u = t.config.resource_property;\n    return d !== void 0 ? o(l, d, c) : t.getTaskBy(u, l).forEach(function(h) {\n      o(l, h.id, c);\n    }), c;\n  } };\n}\nfunction li(t) {\n  var e = oi(t);\n  t.ext.resources = /* @__PURE__ */ function(a) {\n    const r = { renderEditableLabel: function(s, o, l, d, c) {\n      const u = a.config.readonly ? \"\" : \"contenteditable\";\n      if (s < l.end_date && o > l.start_date) {\n        for (let h = 0; h < c.length; h++) {\n          const g = c[h];\n          return \"<div \" + u + \" data-assignment-cell data-assignment-id='\" + g.id + \"' data-row-id='\" + l.id + \"' data-task='\" + l.$task_id + \"' data-start-date='\" + a.templates.format_date(s) + \"' data-end-date='\" + a.templates.format_date(o) + \"'>\" + g.value + \"</div>\";\n        }\n        return \"<div \" + u + \" data-assignment-cell data-empty  data-row-id='\" + l.id + \"' data-resource-id='\" + l.$resource_id + \"' data-task='\" + l.$task_id + \"' data-start-date='\" + a.templates.format_date(s) + \"''  data-end-date='\" + a.templates.format_date(o) + \"'>-</div>\";\n      }\n      return \"\";\n    }, renderSummaryLabel: function(s, o, l, d, c) {\n      let u = c.reduce(function(h, g) {\n        return h + Number(g.value);\n      }, 0);\n      return u % 1 && (u = Math.round(10 * u) / 10), u ? \"<div>\" + u + \"</div>\" : \"\";\n    }, editableResourceCellTemplate: function(s, o, l, d, c) {\n      return l.$role === \"task\" ? r.renderEditableLabel(s, o, l, d, c) : r.renderSummaryLabel(s, o, l, d, c);\n    }, editableResourceCellClass: function(s, o, l, d, c) {\n      const u = [];\n      u.push(\"resource_marker\"), l.$role === \"task\" ? u.push(\"task_cell\") : u.push(\"resource_cell\");\n      const h = c.reduce(function(f, y) {\n        return f + Number(y.value);\n      }, 0);\n      let g = Number(l.capacity);\n      return isNaN(g) && (g = 8), h <= g ? u.push(\"workday_ok\") : u.push(\"workday_over\"), u.join(\" \");\n    }, getSummaryResourceAssignments: function(s) {\n      let o;\n      const l = a.getDatastore(a.config.resource_store), d = l.getItem(s);\n      return d.$role === \"task\" ? o = a.getResourceAssignments(d.$resource_id, d.$task_id) : (o = a.getResourceAssignments(s), l.eachItem && l.eachItem(function(c) {\n        c.$role !== \"task\" && (o = o.concat(a.getResourceAssignments(c.id)));\n      }, s)), o;\n    }, initEditableDiagram: function() {\n      a.config.resource_render_empty_cells = !0, function() {\n        let s = null;\n        function o() {\n          return s && cancelAnimationFrame(s), s = requestAnimationFrame(function() {\n            a.$container && Array.prototype.slice.call(a.$container.querySelectorAll(\".resourceTimeline_cell [data-assignment-cell]\")).forEach(function(l) {\n              l.contentEditable = !0;\n            });\n          }), !0;\n        }\n        a.attachEvent(\"onGanttReady\", function() {\n          a.getDatastore(a.config.resource_assignment_store).attachEvent(\"onStoreUpdated\", o), a.getDatastore(a.config.resource_store).attachEvent(\"onStoreUpdated\", o);\n        }, { once: !0 }), a.attachEvent(\"onGanttLayoutReady\", function() {\n          a.$layout.getCellsByType(\"viewCell\").forEach(function(l) {\n            l.$config && l.$config.view === \"resourceTimeline\" && l.$content && l.$content.attachEvent(\"onScroll\", o);\n          });\n        });\n      }(), a.attachEvent(\"onGanttReady\", function() {\n        let s = !1;\n        a.event(a.$container, \"keypress\", function(o) {\n          var l = o.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\n          l && (o.keyCode !== 13 && o.keyCode !== 27 || l.blur());\n        }), a.event(a.$container, \"focusout\", function(o) {\n          if (!s) {\n            s = !0, setTimeout(function() {\n              s = !1;\n            }, 300);\n            var l = o.target.closest(\".resourceTimeline_cell [data-assignment-cell]\");\n            if (l) {\n              var d = (l.innerText || \"\").trim();\n              d == \"-\" && (d = \"0\");\n              var c = Number(d), u = l.getAttribute(\"data-row-id\"), h = l.getAttribute(\"data-assignment-id\"), g = l.getAttribute(\"data-task\"), f = l.getAttribute(\"data-resource-id\"), y = a.templates.parse_date(l.getAttribute(\"data-start-date\")), v = a.templates.parse_date(l.getAttribute(\"data-end-date\")), b = a.getDatastore(a.config.resource_assignment_store);\n              if (isNaN(c)) a.getDatastore(a.config.resource_store).refresh(u);\n              else {\n                var _ = a.getTask(g);\n                if (a.plugins().undo && a.ext.undo.saveState(g, \"task\"), h) {\n                  if (c === (p = b.getItem(h)).value) return;\n                  if (p.start_date.valueOf() === y.valueOf() && p.end_date.valueOf() === v.valueOf()) p.value = c, c ? b.updateItem(p.id) : b.removeItem(p.id);\n                  else {\n                    if (p.end_date.valueOf() > v.valueOf()) {\n                      var m = a.copy(p);\n                      m.id = a.uid(), m.start_date = v, m.duration = a.calculateDuration({ start_date: m.start_date, end_date: m.end_date, task: _ }), m.delay = a.calculateDuration({ start_date: _.start_date, end_date: m.start_date, task: _ }), m.mode = p.mode || \"default\", m.duration !== 0 && b.addItem(m);\n                    }\n                    p.start_date.valueOf() < y.valueOf() ? (p.end_date = y, p.duration = a.calculateDuration({ start_date: p.start_date, end_date: p.end_date, task: _ }), p.mode = \"fixedDuration\", p.duration === 0 ? b.removeItem(p.id) : b.updateItem(p.id)) : b.removeItem(p.id), c && b.addItem({ task_id: p.task_id, resource_id: p.resource_id, value: c, start_date: y, end_date: v, duration: a.calculateDuration({ start_date: y, end_date: v, task: _ }), delay: a.calculateDuration({ start_date: _.start_date, end_date: y, task: _ }), mode: \"fixedDuration\" });\n                  }\n                  a.updateTaskAssignments(_.id), a.updateTask(_.id);\n                } else if (c) {\n                  var p = { task_id: g, resource_id: f, value: c, start_date: y, end_date: v, duration: a.calculateDuration({ start_date: y, end_date: v, task: _ }), delay: a.calculateDuration({ start_date: _.start_date, end_date: y, task: _ }), mode: \"fixedDuration\" };\n                  b.addItem(p), a.updateTaskAssignments(_.id), a.updateTask(_.id);\n                }\n              }\n            }\n          }\n        });\n      }, { once: !0 });\n    } };\n    return r;\n  }(t), t.config.resources = { dataprocessor_assignments: !1, dataprocessor_resources: !1, editable_resource_diagram: !1, resource_store: { type: \"treeDataStore\", fetchTasks: !1, initItem: function(a) {\n    return a.parent = a.parent || t.config.root_id, a[t.config.resource_property] = a.parent, a.open = !0, a;\n  } }, lightbox_resources: function(a) {\n    const r = [], s = t.getDatastore(t.config.resource_store);\n    return a.forEach(function(o) {\n      if (!s.hasChild(o.id)) {\n        const l = t.copy(o);\n        l.key = o.id, l.label = o.text, r.push(l);\n      }\n    }), r;\n  } }, t.attachEvent(\"onBeforeGanttReady\", function() {\n    if (t.getDatastore(t.config.resource_store)) return;\n    const a = t.config.resources ? t.config.resources.resource_store : void 0;\n    let r = a ? a.fetchTasks : void 0;\n    t.config.resources && t.config.resources.editable_resource_diagram && (r = !0);\n    let s = function(l) {\n      return l.parent = l.parent || t.config.root_id, l[t.config.resource_property] = l.parent, l.open = !0, l;\n    };\n    a && a.initItem && (s = a.initItem);\n    const o = a && a.type ? a.type : \"treeDatastore\";\n    t.$resourcesStore = t.createDatastore({ name: t.config.resource_store, type: o, fetchTasks: r !== void 0 && r, initItem: s }), t.$data.resourcesStore = t.$resourcesStore, t.$resourcesStore.attachEvent(\"onParse\", function() {\n      let l = function(c) {\n        const u = [];\n        return c.forEach(function(h) {\n          if (!t.$resourcesStore.hasChild(h.id)) {\n            var g = t.copy(h);\n            g.key = h.id, g.label = h.text, u.push(g);\n          }\n        }), u;\n      };\n      t.config.resources && t.config.resources.lightbox_resources && (l = t.config.resources.lightbox_resources);\n      const d = l(t.$resourcesStore.getItems());\n      t.updateCollection(\"resourceOptions\", d);\n    });\n  }), t.getTaskBy = e.getTaskBy, t.getResourceAssignments = e.getResourceAssignments, t.config.resource_property = \"owner_id\", t.config.resource_store = \"resource\", t.config.resource_render_empty_cells = !1, t.templates.histogram_cell_class = function(a, r, s, o, l) {\n  }, t.templates.histogram_cell_label = function(a, r, s, o, l) {\n    return o.length + \"/3\";\n  }, t.templates.histogram_cell_allocated = function(a, r, s, o, l) {\n    return o.length / 3;\n  }, t.templates.histogram_cell_capacity = function(a, r, s, o, l) {\n    return 0;\n  };\n  const n = function(a, r, s, o, l) {\n    return o.length <= 1 ? \"gantt_resource_marker_ok\" : \"gantt_resource_marker_overtime\";\n  }, i = function(a, r, s, o, l) {\n    return 8 * o.length;\n  };\n  t.templates.resource_cell_value = i, t.templates.resource_cell_class = n, t.attachEvent(\"onBeforeGanttReady\", function() {\n    t.config.resources && t.config.resources.editable_resource_diagram && (t.config.resource_render_empty_cells = !0, t.templates.resource_cell_value === i && (t.templates.resource_cell_value = t.ext.resources.editableResourceCellTemplate), t.templates.resource_cell_class === n && (t.templates.resource_cell_class = t.ext.resources.editableResourceCellClass), t.ext.resources.initEditableDiagram(t));\n  });\n}\nfunction di(t) {\n  var e = \"$resourceAssignments\";\n  t.config.resource_assignment_store = \"resourceAssignments\", t.config.process_resource_assignments = !0;\n  var n = { auto: \"auto\", singleValue: \"singleValue\", valueArray: \"valueArray\", resourceValueArray: \"resourceValueArray\", assignmentsArray: \"assignmentsArray\" }, i = n.auto, a = { fixedDates: \"fixedDates\", fixedDuration: \"fixedDuration\", default: \"default\" };\n  function r(f, y) {\n    f.start_date ? f.start_date = t.date.parseDate(f.start_date, \"parse_date\") : f.start_date = null, f.end_date ? f.end_date = t.date.parseDate(f.end_date, \"parse_date\") : f.end_date = null;\n    var v = Number(f.delay), b = !1;\n    if (isNaN(v) ? (f.delay = 0, b = !0) : f.delay = v, t.defined(f.value) || (f.value = null), !f.task_id || !f.resource_id) return !1;\n    if (f.mode = f.mode || a.default, f.mode === a.fixedDuration && (isNaN(Number(f.duration)) && (y = y || t.getTask(f.task_id), f.duration = t.calculateDuration({ start_date: f.start_date, end_date: f.end_date, id: y })), b && (y = y || t.getTask(f.task_id), f.delay = t.calculateDuration({ start_date: y.start_date, end_date: f.start_date, id: y }))), f.mode !== a.fixedDates && (y || t.isTaskExists(f.task_id))) {\n      var _ = o(f, y = y || t.getTask(f.task_id));\n      f.start_date = _.start_date, f.end_date = _.end_date, f.duration = _.duration;\n    }\n  }\n  var s = t.createDatastore({ name: t.config.resource_assignment_store, initItem: function(f) {\n    return f.id || (f.id = t.uid()), r(f), f;\n  } });\n  function o(f, y) {\n    if (f.mode === a.fixedDates) return { start_date: f.start_date, end_date: f.end_date, duration: f.duration };\n    var v, b, _ = f.delay ? t.calculateEndDate({ start_date: y.start_date, duration: f.delay, task: y }) : new Date(y.start_date);\n    return f.mode === a.fixedDuration ? (v = t.calculateEndDate({ start_date: _, duration: f.duration, task: y }), b = f.duration) : (v = new Date(y.end_date), b = y.duration - f.delay), { start_date: _, end_date: v, duration: b };\n  }\n  function l(f) {\n    const y = t.config.resource_property;\n    let v = f[y];\n    const b = [];\n    let _ = i === n.auto;\n    if (t.defined(v) && v) {\n      Array.isArray(v) || (v = [v], _ && (i = n.singleValue, _ = !1));\n      const m = {};\n      v.forEach(function(p) {\n        p.resource_id || (p = { resource_id: p }, _ && (i = n.valueArray, _ = !1)), _ && (p.id && p.resource_id ? (i = n.assignmentsArray, _ = !1) : (i = n.resourceValueArray, _ = !1));\n        let k, $ = a.default;\n        p.mode || (p.start_date && p.end_date || p.start_date && p.duration) && ($ = a.fixedDuration), k = p.id || !p.$id || m[p.$id] ? p.id && !m[p.id] ? p.id : t.uid() : p.$id, m[k] = !0;\n        const w = { id: k, start_date: p.start_date, duration: p.duration, end_date: p.end_date, delay: p.delay, task_id: f.id, resource_id: p.resource_id, value: p.value, mode: p.mode || $ };\n        Object.keys(p).forEach((x) => {\n          x != \"$id\" && (w[x] = p[x]);\n        }), w.start_date && w.start_date.getMonth && w.end_date && w.end_date.getMonth && typeof w.duration == \"number\" || r(w, f), b.push(w);\n      });\n    }\n    return b;\n  }\n  function d(f) {\n    if (t.isTaskExists(f)) {\n      var y = t.getTask(f);\n      c(y, t.getTaskAssignments(y.id));\n    }\n  }\n  function c(f, y) {\n    y.sort(function(v, b) {\n      return v.start_date && b.start_date && v.start_date.valueOf() != b.start_date.valueOf() ? v.start_date - b.start_date : 0;\n    }), i == n.assignmentsArray ? f[t.config.resource_property] = y : i == n.resourceValueArray && (f[t.config.resource_property] = y.map(function(v) {\n      return { $id: v.id, start_date: v.start_date, duration: v.duration, end_date: v.end_date, delay: v.delay, resource_id: v.resource_id, value: v.value, mode: v.mode };\n    })), f[e] = y;\n  }\n  function u(f) {\n    var y = l(f);\n    return y.forEach(function(v) {\n      v.id = v.id || t.uid();\n    }), y;\n  }\n  function h(f, y) {\n    var v = function(b, _) {\n      var m = { inBoth: [], inTaskNotInStore: [], inStoreNotInTask: [] };\n      if (i == n.singleValue) {\n        var p = b[0], k = p ? p.resource_id : null, $ = !1;\n        _.forEach(function(T) {\n          T.resource_id != k ? m.inStoreNotInTask.push(T) : T.resource_id == k && (m.inBoth.push({ store: T, task: p }), $ = !0);\n        }), !$ && p && m.inTaskNotInStore.push(p);\n      } else if (i == n.valueArray) {\n        var w = {}, x = {}, S = {};\n        b.forEach(function(T) {\n          w[T.resource_id] = T;\n        }), _.forEach(function(T) {\n          x[T.resource_id] = T;\n        }), b.concat(_).forEach(function(T) {\n          if (!S[T.resource_id]) {\n            S[T.resource_id] = !0;\n            var E = w[T.resource_id], C = x[T.resource_id];\n            E && C ? m.inBoth.push({ store: C, task: E }) : E && !C ? m.inTaskNotInStore.push(E) : !E && C && m.inStoreNotInTask.push(C);\n          }\n        });\n      } else i != n.assignmentsArray && i != n.resourceValueArray || (w = {}, x = {}, S = {}, b.forEach(function(T) {\n        w[T.id || T.$id] = T;\n      }), _.forEach(function(T) {\n        x[T.id] = T;\n      }), b.concat(_).forEach(function(T) {\n        var E = T.id || T.$id;\n        if (!S[E]) {\n          S[E] = !0;\n          var C = w[E], D = x[E];\n          C && D ? m.inBoth.push({ store: D, task: C }) : C && !D ? m.inTaskNotInStore.push(C) : !C && D && m.inStoreNotInTask.push(D);\n        }\n      }));\n      return m;\n    }(l(f), y);\n    v.inStoreNotInTask.forEach(function(b) {\n      s.removeItem(b.id);\n    }), v.inTaskNotInStore.forEach(function(b) {\n      s.addItem(b);\n    }), v.inBoth.forEach(function(b) {\n      if (function(m, p) {\n        var k = { id: !0 };\n        for (var $ in m) if (!k[$] && String(m[$]) !== String(p[$])) return !0;\n        return !1;\n      }(b.task, b.store)) (function(m, p) {\n        var k = { id: !0 };\n        for (var $ in m) k[$] || (p[$] = m[$]);\n      })(b.task, b.store), s.updateItem(b.store.id);\n      else if (b.task.start_date && b.task.end_date && b.task.mode !== a.fixedDates) {\n        var _ = o(b.store, f);\n        b.store.start_date.valueOf() == _.start_date.valueOf() && b.store.end_date.valueOf() == _.end_date.valueOf() || (b.store.start_date = _.start_date, b.store.end_date = _.end_date, b.store.duration = _.duration, s.updateItem(b.store.id));\n      }\n    }), d(f.id);\n  }\n  function g(f) {\n    var y = f[e] || s.find(function(v) {\n      return v.task_id == f.id;\n    });\n    h(f, y);\n  }\n  t.$data.assignmentsStore = s, t.attachEvent(\"onGanttReady\", function() {\n    if (t.config.process_resource_assignments) {\n      t.attachEvent(\"onParse\", function() {\n        t.silent(function() {\n          s.clearAll();\n          var k = [];\n          t.eachTask(function($) {\n            if ($.type !== t.config.types.project) {\n              var w = u($);\n              c($, w), w.forEach(function(x) {\n                k.push(x);\n              });\n            }\n          }), s.parse(k);\n        });\n      });\n      var f = !1, y = !1, v = {}, b = !1;\n      t.attachEvent(\"onBeforeBatchUpdate\", function() {\n        f = !0;\n      }), t.attachEvent(\"onAfterBatchUpdate\", function() {\n        if (y) {\n          var k = {};\n          for (var $ in v) k[$] = t.getTaskAssignments(v[$].id);\n          for (var $ in v) h(v[$], k[$]);\n        }\n        y = !1, f = !1, v = {};\n      }), t.attachEvent(\"onTaskCreated\", function(k) {\n        var $ = u(k);\n        return s.parse($), c(k, $), !0;\n      }), t.attachEvent(\"onAfterTaskUpdate\", function(k, $) {\n        f ? (y = !0, v[k] = $) : $.unscheduled || g($);\n      }), t.attachEvent(\"onAfterTaskAdd\", function(k, $) {\n        f ? (y = !0, v[k] = $) : g($);\n      }), t.attachEvent(\"onRowDragEnd\", function(k) {\n        g(t.getTask(k));\n      }), t.$data.tasksStore.attachEvent(\"onAfterDeleteConfirmed\", function(k, $) {\n        var w, x = [k];\n        t.eachTask(function(S) {\n          x.push(S.id);\n        }, k), w = {}, x.forEach(function(S) {\n          w[S] = !0;\n        }), s.find(function(S) {\n          return w[S.task_id];\n        }).forEach(function(S) {\n          s.removeItem(S.id);\n        });\n      }), t.$data.tasksStore.attachEvent(\"onClearAll\", function() {\n        return _ = null, m = null, p = null, s.clearAll(), !0;\n      }), t.attachEvent(\"onTaskIdChange\", function(k, $) {\n        s.find(function(w) {\n          return w.task_id == k;\n        }).forEach(function(w) {\n          w.task_id = $, s.updateItem(w.id);\n        }), d($);\n      }), t.attachEvent(\"onBeforeUndo\", function(k) {\n        return b = !0, !0;\n      }), t.attachEvent(\"onAfterUndo\", function(k) {\n        b = !0;\n      });\n      var _ = null, m = null, p = null;\n      s.attachEvent(\"onStoreUpdated\", function() {\n        return f && !b || (_ = null, m = null, p = null), !0;\n      }), t.getResourceAssignments = function(k, $) {\n        var w = t.defined($) && $ !== null;\n        return _ === null && (_ = {}, m = {}, s.eachItem(function(x) {\n          _[x.resource_id] || (_[x.resource_id] = []), _[x.resource_id].push(x);\n          var S = x.resource_id + \"-\" + x.task_id;\n          m[S] || (m[S] = []), m[S].push(x);\n        })), w ? (m[k + \"-\" + $] || []).slice() : (_[k] || []).slice();\n      }, t.getTaskAssignments = function(k) {\n        if (p === null) {\n          var $ = [];\n          p = {}, s.eachItem(function(w) {\n            p[w.task_id] || (p[w.task_id] = []), p[w.task_id].push(w), w.task_id == k && $.push(w);\n          });\n        }\n        return (p[k] || []).slice();\n      }, t.getTaskResources = function(k) {\n        const $ = t.getDatastore(\"resource\"), w = t.getTaskAssignments(k), x = {};\n        w.forEach(function(T) {\n          x[T.resource_id] || (x[T.resource_id] = T.resource_id);\n        });\n        const S = [];\n        for (const T in x) {\n          const E = $.getItem(x[T]);\n          E && S.push(E);\n        }\n        return S;\n      }, t.updateTaskAssignments = d;\n    }\n  }, { once: !0 });\n}\nfunction ci(t) {\n  function e(o) {\n    return function() {\n      return !t.config.placeholder_task || o.apply(this, arguments);\n    };\n  }\n  function n() {\n    var o = t.getTaskBy(\"type\", t.config.types.placeholder);\n    if (!o.length || !t.isTaskExists(o[0].id)) {\n      var l = { unscheduled: !0, type: t.config.types.placeholder, duration: 0, text: t.locale.labels.new_task };\n      if (t.callEvent(\"onTaskCreated\", [l]) === !1) return;\n      t.addTask(l);\n    }\n  }\n  function i(o) {\n    var l = t.getTask(o);\n    l.type == t.config.types.placeholder && (l.start_date && l.end_date && l.unscheduled && (l.unscheduled = !1), t.batchUpdate(function() {\n      var d = t.copy(l);\n      t.silent(function() {\n        t.deleteTask(l.id);\n      }), delete d[\"!nativeeditor_status\"], d.type = t.config.types.task, d.id = t.uid(), t.addTask(d);\n    }));\n  }\n  t.config.types.placeholder = \"placeholder\", t.attachEvent(\"onDataProcessorReady\", e(function(o) {\n    o && !o._silencedPlaceholder && (o._silencedPlaceholder = !0, o.attachEvent(\"onBeforeUpdate\", e(function(l, d, c) {\n      return c.type != t.config.types.placeholder || (o.setUpdated(l, !1), !1);\n    })));\n  }));\n  var a = !1;\n  function r(o) {\n    return !!(t.config.types.placeholder && t.isTaskExists(o) && t.getTask(o).type == t.config.types.placeholder);\n  }\n  function s(o) {\n    return !(!r(o.source) && !r(o.target));\n  }\n  t.attachEvent(\"onGanttReady\", function() {\n    a || (a = !0, t.attachEvent(\"onAfterTaskUpdate\", e(i)), t.attachEvent(\"onAfterTaskAdd\", e(function(o, l) {\n      l.type != t.config.types.placeholder && (t.getTaskBy(\"type\", t.config.types.placeholder).forEach(function(d) {\n        t.silent(function() {\n          t.isTaskExists(d.id) && t.deleteTask(d.id);\n        });\n      }), n());\n    })), t.attachEvent(\"onParse\", e(n)));\n  }), t.attachEvent(\"onLinkValidation\", function(o) {\n    return !s(o);\n  }), t.attachEvent(\"onBeforeLinkAdd\", function(o, l) {\n    return !s(l);\n  }), t.attachEvent(\"onBeforeUndoStack\", function(o) {\n    for (var l = 0; l < o.commands.length; l++) {\n      var d = o.commands[l];\n      d.entity === \"task\" && d.value.type === t.config.types.placeholder && (o.commands.splice(l, 1), l--);\n    }\n    return !0;\n  });\n}\nfunction ui(t) {\n  function e(c) {\n    return function() {\n      return !t.config.auto_types || t.getTaskType(t.config.types.project) != t.config.types.project || c.apply(this, arguments);\n    };\n  }\n  function n(c, u) {\n    var h = t.getTask(c), g = r(h);\n    g !== !1 && t.getTaskType(h) !== g && (u.$needsUpdate = !0, u[h.id] = { task: h, type: g });\n  }\n  function i(c) {\n    if (!t.getState().group_mode) {\n      var u = function(h, g) {\n        return n(h, g = g || {}), t.eachParent(function(f) {\n          n(f.id, g);\n        }, h), g;\n      }(c);\n      u.$needsUpdate && t.batchUpdate(function() {\n        (function(h) {\n          for (var g in h) if (h[g] && h[g].task) {\n            var f = h[g].task;\n            f.type = h[g].type, t.updateTask(f.id);\n          }\n        })(u);\n      });\n    }\n  }\n  var a;\n  function r(c) {\n    var u = t.config.types, h = t.hasChild(c.id), g = t.getTaskType(c.type);\n    return h && g === u.task ? u.project : !h && g === u.project && u.task;\n  }\n  var s, o, l = !0;\n  function d(c) {\n    c != t.config.root_id && t.isTaskExists(c) && i(c);\n  }\n  t.attachEvent(\"onParse\", e(function() {\n    l = !1, t.getState().group_mode || (t.batchUpdate(function() {\n      t.eachTask(function(c) {\n        var u = r(c);\n        u !== !1 && function(h, g) {\n          t.getState().group_mode || (h.type = g, t.updateTask(h.id));\n        }(c, u);\n      });\n    }), l = !0);\n  })), t.attachEvent(\"onAfterTaskAdd\", e(function(c) {\n    l && i(c);\n  })), t.attachEvent(\"onAfterTaskUpdate\", e(function(c) {\n    l && i(c);\n  })), t.attachEvent(\"onBeforeTaskDelete\", e(function(c, u) {\n    return a = t.getParent(c), !0;\n  })), t.attachEvent(\"onAfterTaskDelete\", e(function(c, u) {\n    d(a);\n  })), t.attachEvent(\"onRowDragStart\", e(function(c, u, h) {\n    return s = t.getParent(c), !0;\n  })), t.attachEvent(\"onRowDragEnd\", e(function(c, u) {\n    d(s), i(c);\n  })), t.attachEvent(\"onBeforeTaskMove\", e(function(c, u, h) {\n    return o = t.getParent(c), !0;\n  })), t.attachEvent(\"onAfterTaskMove\", e(function(c, u, h) {\n    document.querySelector(\".gantt_drag_marker\") || (d(o), i(c));\n  }));\n}\nconst Jt = class Jt {\n  constructor() {\n    this.canParse = (e) => !isNaN(this.parse(e)), this.format = (e) => String(e), this.parse = (e) => parseInt(e, 10);\n  }\n};\nJt.create = (e = null) => new Jt();\nlet Nt = Jt;\nconst Kt = class Kt {\n  constructor(e) {\n    this.format = (n) => this._getWBSCode(n.source), this.canParse = (n) => this._linkReg.test(n), this.parse = (n) => {\n      if (!this.canParse(n)) return null;\n      const i = this._linkReg.exec(n)[0].trim();\n      return { id: void 0, source: this._findSource(i) || null, target: null, type: this._gantt.config.links.finish_to_start, lag: 0 };\n    }, this._getWBSCode = (n) => {\n      const i = this._gantt.getTask(n);\n      return this._gantt.getWBSCode(i);\n    }, this._findSource = (n) => {\n      const i = new RegExp(\"^[0-9.]+\", \"i\");\n      if (i.exec(n)) {\n        const a = i.exec(n)[0], r = this._gantt.getTaskByWBSCode(a);\n        if (r) return r.id;\n      }\n      return null;\n    }, this._linkReg = /^[0-9\\.]+/, this._gantt = e;\n  }\n};\nKt.create = (e = null, n) => new Kt(n);\nlet fe = Kt;\nfunction hi(t) {\n  t.ext.formatters = { durationFormatter: function(e) {\n    return e || (e = {}), e.store || (e.store = t.config.duration_unit), e.enter || (e.enter = t.config.duration_unit), Nt.create(e, t);\n  }, linkFormatter: function(e) {\n    return fe.create(e, t);\n  } };\n}\nfunction _i(t) {\n  t.ext = t.ext || {}, t.config.show_empty_state = !1, t.ext.emptyStateElement = t.ext.emptyStateElement || { isEnabled: () => t.config.show_empty_state === !0, isGanttEmpty: () => !t.getTaskByTime().length, renderContent(e) {\n    const n = `<div class='gantt_empty_state'><div class='gantt_empty_state_image'></div>${`<div class='gantt_empty_state_text'>\n    <div class='gantt_empty_state_text_link' data-empty-state-create-task>${t.locale.labels.empty_state_text_link}</div>\n    <div class='gantt_empty_state_text_description'>${t.locale.labels.empty_state_text_description}</div>\n    </div>`}</div>`;\n    e.innerHTML = n;\n  }, clickEvents: [], attachAddTaskEvent() {\n    const e = t.attachEvent(\"onEmptyClick\", function(n) {\n      t.utils.dom.closest(n.target, \"[data-empty-state-create-task]\") && t.createTask({ id: t.uid(), text: \"New Task\" });\n    });\n    this.clickEvents.push(e);\n  }, detachAddTaskEvents() {\n    this.clickEvents.forEach(function(e) {\n      t.detachEvent(e);\n    }), this.clickEvents = [];\n  }, getContainer() {\n    if (t.$container) {\n      const e = t.utils.dom;\n      if (t.$container.contains(t.$grid_data)) return e.closest(t.$grid_data, \".gantt_layout_content\");\n      if (t.$container.contains(t.$task_data)) return e.closest(t.$task_data, \".gantt_layout_content\");\n    }\n    return null;\n  }, getNode() {\n    const e = this.getContainer();\n    return e ? e.querySelector(\".gantt_empty_state_wrapper\") : null;\n  }, show() {\n    const e = this.getContainer();\n    if (!e && this.isGanttEmpty()) return null;\n    const n = document.createElement(\"div\");\n    n.className = \"gantt_empty_state_wrapper\", n.style.marginTop = t.config.scale_height - e.offsetHeight + \"px\";\n    const i = t.$container.querySelectorAll(\".gantt_empty_state_wrapper\");\n    Array.prototype.forEach.call(i, function(a) {\n      a.parentNode.removeChild(a);\n    }), this.detachAddTaskEvents(), this.attachAddTaskEvent(), e.appendChild(n), this.renderContent(n);\n  }, hide() {\n    const e = this.getNode();\n    if (!e) return !1;\n    e.parentNode.removeChild(e);\n  }, init() {\n  } }, t.attachEvent(\"onDataRender\", function() {\n    const e = t.ext.emptyStateElement;\n    e.isEnabled() && e.isGanttEmpty() ? e.show() : e.hide();\n  });\n}\nconst un = function(t, e) {\n  const n = e.baselines && e.baselines.length, i = t.config.baselines.render_mode == \"separateRow\" || t.config.baselines.render_mode == \"individualRow\";\n  if (n && i) return !0;\n}, gi = function(t, e) {\n  let n = !1;\n  return t.eachTask(function(i) {\n    n || (n = un(t, i));\n  }, e), n;\n}, xt = function(t) {\n  return t.render && t.render == \"split\" && !t.$open;\n}, fi = function(t, e, n, i) {\n  let a = i || e.$task_data.scrollHeight, r = !1, s = !1;\n  return t.eachParent(function(o) {\n    if (xt(o)) {\n      s = !0;\n      const l = e.getItemPosition(o).rowHeight;\n      l < a && (a = l, r = !0);\n    }\n  }, n.id), { maxHeight: a, shrinkHeight: r, splitChild: s };\n};\nfunction pi(t) {\n  t.config.baselines = { datastore: \"baselines\", render_mode: !1, dataprocessor_baselines: !1, row_height: 16, bar_height: 8 };\n  const e = t.createDatastore({ name: t.config.baselines.datastore, initItem: function(a) {\n    return a.id || (a.id = t.uid()), function(r) {\n      if (!r.task_id || !r.start_date && !r.end_date) return !1;\n      r.start_date ? r.start_date = t.date.parseDate(r.start_date, \"parse_date\") : r.start_date = null, r.end_date ? r.end_date = t.date.parseDate(r.end_date, \"parse_date\") : r.end_date = null, r.duration = r.duration || 1, r.start_date && !r.end_date ? r.end_date = t.calculateEndDate(r.start_date, r.duration) : r.end_date && !r.start_date && (r.start_date = t.calculateEndDate(r.end_date, -r.duration));\n    }(a), a;\n  } });\n  function n(a) {\n    let r = 0;\n    t.adjustTaskHeightForBaselines(a), t.eachTask(function(s) {\n      let o = s.row_height || t.config.row_height;\n      r = r || o, o > r && (r = o);\n    }, a.id), a.row_height < r && (a.row_height = r);\n  }\n  function i(a) {\n    t.eachParent(function(r) {\n      if (xt(r)) {\n        const s = r.row_height || t.getLayoutView(\"timeline\").getBarHeight(r.id);\n        let o = a.row_height;\n        t.getChildren(r.id).forEach(function(l) {\n          const d = t.getTask(l);\n          if (d.id == a.id) return;\n          const c = d.row_height || t.getLayoutView(\"timeline\").getBarHeight(d.id);\n          o = o || c, c > o && (o = c);\n        }), r.row_height = o, r.bar_height = r.bar_height || s;\n      }\n    }, a.id);\n  }\n  t.$data.baselineStore = e, t.adjustTaskHeightForBaselines = function(a) {\n    let r, s, o = a.baselines && a.baselines.length || 0;\n    const l = t.config.baselines.row_height;\n    switch (t.config.baselines.render_mode) {\n      case \"taskRow\":\n        a.row_height = a.bar_height + 4;\n        break;\n      case \"separateRow\":\n        r = t.getLayoutView(\"timeline\").getBarHeight(a.id), o ? (a.bar_height = a.bar_height || r, a.bar_height > r && (r = a.bar_height), a.row_height = r + l) : a.bar_height && (a.row_height = a.bar_height + 4), i(a);\n        break;\n      case \"individualRow\":\n        r = t.getLayoutView(\"timeline\").getBarHeight(a.id), o ? (a.bar_height = a.bar_height || r, a.bar_height > r && (r = a.bar_height), s = l * o, a.row_height = r + s + 2) : a.bar_height && (a.row_height = a.bar_height + 4), i(a);\n    }\n  }, t.attachEvent(\"onGanttReady\", function() {\n    t.config.baselines !== !1 && (t.attachEvent(\"onParse\", function() {\n      e.eachItem(function(a) {\n        const r = a.task_id;\n        if (t.isTaskExists(r)) {\n          const s = t.getTask(r);\n          s.baselines = s.baselines || [];\n          let o = !0;\n          for (let l = 0; l < s.baselines.length; l++) {\n            let d = s.baselines[l];\n            if (d.id == a.id) {\n              o = !1, t.mixin(d, a, !0);\n              break;\n            }\n          }\n          o && s.baselines.push(a), xt(s) ? n(s) : t.adjustTaskHeightForBaselines(s);\n        }\n      });\n    }), t.attachEvent(\"onBeforeTaskUpdate\", function(a, r) {\n      return function(s) {\n        let o = !1;\n        const l = {}, d = s.baselines || [], c = t.getTaskBaselines(s.id);\n        d.length != c.length && (o = !0), d.forEach(function(u) {\n          l[u.id] = !0;\n          const h = e.getItem(u.id);\n          if (h) {\n            const g = +h.start_date != +u.start_date, f = +h.end_date != +u.end_date;\n            (g || f) && e.updateItem(u.id, u);\n          } else e.addItem(u);\n        }), c.forEach(function(u) {\n          l[u.id] || e.removeItem(u.id);\n        }), o && (xt(s) ? n(s) : t.adjustTaskHeightForBaselines(s), t.render());\n      }(r), !0;\n    }), t.attachEvent(\"onAfterUndo\", function(a) {\n      if ((t.config.baselines.render_mode == \"separateRow\" || t.config.baselines.render_mode == \"individualRow\") && a) {\n        let r = !1;\n        a.commands.forEach(function(s) {\n          if (s.entity == \"task\") {\n            const o = s.value.id;\n            if (t.isTaskExists(o)) {\n              const l = t.getTask(o);\n              if (l.parent && t.isTaskExists(l.parent)) {\n                const d = t.getTask(l.parent);\n                xt(d) && (n(d), r = !0);\n              }\n            }\n          }\n        }), r && t.render();\n      }\n    }), t.attachEvent(\"onAfterTaskDelete\", function(a, r) {\n      if (un && r.parent && t.isTaskExists(r.parent)) {\n        const s = t.getTask(r.parent);\n        xt(s) && n(s);\n      }\n      e.eachItem(function(s) {\n        t.isTaskExists(s.task_id) || e.removeItem(s.id);\n      });\n    }), t.getTaskBaselines = function(a) {\n      const r = [];\n      return e.eachItem(function(s) {\n        s.task_id == a && r.push(s);\n      }), r;\n    }, t.$data.baselineStore.attachEvent(\"onClearAll\", function() {\n      return t.eachTask(function(a) {\n        a.baselines && delete a.baselines;\n      }), !0;\n    }), t.$data.tasksStore.attachEvent(\"onClearAll\", function() {\n      return e.clearAll(), !0;\n    }), t.attachEvent(\"onTaskIdChange\", function(a, r) {\n      e.find(function(s) {\n        return s.task_id == a;\n      }).forEach(function(s) {\n        s.task_id = r, e.updateItem(s.id);\n      });\n    }));\n  }, { once: !0 });\n}\nfunction mi(t) {\n  function e(n) {\n    throw t.assert(!1, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. Actual argument value: \" + JSON.stringify(n)), new Error(\"Invalid argument for gantt.parse or gantt.load. An object or a JSON string of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#json is expected. Actual argument value: \" + JSON.stringify(n));\n  }\n  t.load = function() {\n    throw new Error(\"gantt.load() method is not available in the node.js, use gantt.parse() instead\");\n  }, t.parse = function(n, i) {\n    this.on_load({ xmlDoc: { responseText: n } }, i);\n  }, t.serialize = function(n) {\n    return this[n = n || \"json\"].serialize();\n  }, t.on_load = function(n, i) {\n    if (n.xmlDoc && n.xmlDoc.status === 404) this.assert(!1, \"Failed to load the data from <a href='\" + n.xmlDoc.responseURL + \"' target='_blank'>\" + n.xmlDoc.responseURL + \"</a>, server returns 404\");\n    else if (!t.$destroyed) {\n      this.callEvent(\"onBeforeParse\", []), i || (i = \"json\"), this.assert(this[i], \"Invalid data type:'\" + i + \"'\");\n      var a = n.xmlDoc.responseText, r = this[i].parse(a, n);\n      this._process_loading(r);\n    }\n  }, t._process_loading = function(n) {\n    n.collections && this._load_collections(n.collections), n.resources && this.$data.resourcesStore && this.$data.resourcesStore.parse(n.resources), t.config.baselines !== !1 && n.baselines && this.$data.baselineStore && this.$data.baselineStore.parse(n.baselines);\n    const i = n.data || n.tasks;\n    n.assignments && function(r, s) {\n      const o = {};\n      s.forEach((l) => {\n        o[l.task_id] || (o[l.task_id] = []), o[l.task_id].push(l);\n      }), r.forEach((l) => {\n        l[t.config.resource_property] = o[l.id] || [];\n      });\n    }(i, n.assignments), this.$data.tasksStore.parse(i);\n    var a = n.links || (n.collections ? n.collections.links : []);\n    this.$data.linksStore.parse(a), this.callEvent(\"onParse\", []), this.render();\n  }, t._load_collections = function(n) {\n    var i = !1;\n    for (var a in n) if (n.hasOwnProperty(a)) {\n      i = !0;\n      var r = n[a];\n      this.serverList[a] = this.serverList[a] || [];\n      var s = this.serverList[a];\n      if (!s) continue;\n      s.splice(0, s.length);\n      for (var o = 0; o < r.length; o++) {\n        var l = r[o], d = this.copy(l);\n        for (var c in d.key = d.value, l) if (l.hasOwnProperty(c)) {\n          if (c == \"value\" || c == \"label\") continue;\n          d[c] = l[c];\n        }\n        s.push(d);\n      }\n    }\n    i && this.callEvent(\"onOptionsLoad\", []);\n  }, t.attachEvent(\"onBeforeTaskDisplay\", function(n, i) {\n    return !i.$ignore;\n  }), t.json = { parse: function(n) {\n    if (n || e(n), typeof n == \"string\") if (typeof JSON != null) try {\n      n = JSON.parse(n);\n    } catch {\n      e(n);\n    }\n    else t.assert(!1, \"JSON is not supported\");\n    return n.data || n.tasks || e(n), n.dhx_security && (t.security_key = n.dhx_security), n;\n  }, serializeTask: function(n) {\n    return this._copyObject(n);\n  }, serializeLink: function(n) {\n    return this._copyLink(n);\n  }, _copyLink: function(n) {\n    var i = {};\n    for (var a in n) i[a] = n[a];\n    return i;\n  }, _copyObject: function(n) {\n    var i = {};\n    for (var a in n) a.charAt(0) != \"$\" && (i[a] = n[a], X(i[a]) && (i[a] = t.defined(t.templates.xml_format) ? t.templates.xml_format(i[a]) : t.templates.format_date(i[a])));\n    return i;\n  }, serialize: function() {\n    var n = [], i = [];\n    let a = [];\n    t.eachTask(function(o) {\n      t.resetProjectDates(o), n.push(this.serializeTask(o));\n    }, t.config.root_id, this);\n    for (var r = t.getLinks(), s = 0; s < r.length; s++) i.push(this.serializeLink(r[s]));\n    return t.getDatastore(\"baselines\").eachItem(function(o) {\n      const l = t.json.serializeTask(o);\n      a.push(l);\n    }), { data: n, links: i, baselines: a };\n  } }, t.xml = { _xmlNodeToJSON: function(n, i) {\n    for (var a = {}, r = 0; r < n.attributes.length; r++) a[n.attributes[r].name] = n.attributes[r].value;\n    if (!i) {\n      for (r = 0; r < n.childNodes.length; r++) {\n        var s = n.childNodes[r];\n        s.nodeType == 1 && (a[s.tagName] = s.firstChild ? s.firstChild.nodeValue : \"\");\n      }\n      a.text || (a.text = n.firstChild ? n.firstChild.nodeValue : \"\");\n    }\n    return a;\n  }, _getCollections: function(n) {\n    for (var i = {}, a = t.ajax.xpath(\"//coll_options\", n), r = 0; r < a.length; r++) for (var s = i[a[r].getAttribute(\"for\")] = [], o = t.ajax.xpath(\".//item\", a[r]), l = 0; l < o.length; l++) {\n      for (var d = o[l].attributes, c = { key: o[l].getAttribute(\"value\"), label: o[l].getAttribute(\"label\") }, u = 0; u < d.length; u++) {\n        var h = d[u];\n        h.nodeName != \"value\" && h.nodeName != \"label\" && (c[h.nodeName] = h.nodeValue);\n      }\n      s.push(c);\n    }\n    return i;\n  }, _getXML: function(n, i, a) {\n    a = a || \"data\", i.getXMLTopNode || (i = t.ajax.parse(i));\n    var r = t.ajax.xmltop(a, i.xmlDoc);\n    r && r.tagName == a || function(o) {\n      throw t.assert(!1, \"Can't parse data: incorrect value of gantt.parse or gantt.load method. Actual argument value: \" + JSON.stringify(o)), new Error(\"Invalid argument for gantt.parse or gantt.load. An XML of format https://docs.dhtmlx.com/gantt/desktop__supported_data_formats.html#xmldhtmlxgantt20 is expected. Actual argument value: \" + JSON.stringify(o));\n    }(n);\n    var s = r.getAttribute(\"dhx_security\");\n    return s && (t.security_key = s), r;\n  }, parse: function(n, i) {\n    i = this._getXML(n, i);\n    for (var a = {}, r = a.data = [], s = t.ajax.xpath(\"//task\", i), o = 0; o < s.length; o++) r[o] = this._xmlNodeToJSON(s[o]);\n    return a.collections = this._getCollections(i), a;\n  }, _copyLink: function(n) {\n    return \"<item id='\" + n.id + \"' source='\" + n.source + \"' target='\" + n.target + \"' type='\" + n.type + \"' />\";\n  }, _copyObject: function(n) {\n    return \"<task id='\" + n.id + \"' parent='\" + (n.parent || \"\") + \"' start_date='\" + n.start_date + \"' duration='\" + n.duration + \"' open='\" + !!n.open + \"' progress='\" + n.progress + \"' end_date='\" + n.end_date + \"'><![CDATA[\" + n.text + \"]]></task>\";\n  }, serialize: function() {\n    for (var n = [], i = [], a = t.json.serialize(), r = 0, s = a.data.length; r < s; r++) n.push(this._copyObject(a.data[r]));\n    for (r = 0, s = a.links.length; r < s; r++) i.push(this._copyLink(a.links[r]));\n    return \"<data>\" + n.join(\"\") + \"<coll_options for='links'>\" + i.join(\"\") + \"</coll_options></data>\";\n  } }, t.oldxml = { parse: function(n, i) {\n    i = t.xml._getXML(n, i, \"projects\");\n    for (var a = { collections: { links: [] } }, r = a.data = [], s = t.ajax.xpath(\"//task\", i), o = 0; o < s.length; o++) {\n      r[o] = t.xml._xmlNodeToJSON(s[o]);\n      var l = s[o].parentNode;\n      l.tagName == \"project\" ? r[o].parent = \"project-\" + l.getAttribute(\"id\") : r[o].parent = l.parentNode.getAttribute(\"id\");\n    }\n    for (s = t.ajax.xpath(\"//project\", i), o = 0; o < s.length; o++)\n      (d = t.xml._xmlNodeToJSON(s[o], !0)).id = \"project-\" + d.id, r.push(d);\n    for (o = 0; o < r.length; o++) {\n      var d;\n      (d = r[o]).start_date = d.startdate || d.est, d.end_date = d.enddate, d.text = d.name, d.duration = d.duration / 8, d.open = 1, d.duration || d.end_date || (d.duration = 1), d.predecessortasks && a.collections.links.push({ target: d.id, source: d.predecessortasks, type: t.config.links.finish_to_start });\n    }\n    return a;\n  }, serialize: function() {\n    t.message(\"Serialization to 'old XML' is not implemented\");\n  } }, t.serverList = function(n, i) {\n    return i ? this.serverList[n] = i.slice(0) : this.serverList[n] || (this.serverList[n] = []), this.serverList[n];\n  };\n}\nfunction te(t, e, n, i, a) {\n  return this.date = t, this.unit = e, this.task = n, this.id = i, this.calendar = a, this;\n}\nfunction ee(t, e, n, i, a, r) {\n  return this.date = t, this.dir = e, this.unit = n, this.task = i, this.id = a, this.calendar = r, this;\n}\nfunction ne(t, e, n, i, a, r, s) {\n  return this.start_date = t, this.duration = e, this.unit = n, this.step = i, this.task = a, this.id = r, this.calendar = s, this;\n}\nfunction vi(t, e, n, i) {\n  return this.start_date = t, this.end_date = e, this.task = n, this.calendar = i, this.unit = null, this.step = null, this;\n}\nvar hn = function(t) {\n  return { getWorkHoursArguments: function() {\n    var e = arguments[0];\n    if (!yt((e = X(e) ? { date: e } : N({}, e)).date)) throw t.assert(!1, \"Invalid date argument for getWorkHours method\"), new Error(\"Invalid date argument for getWorkHours method\");\n    return e;\n  }, setWorkTimeArguments: function() {\n    return arguments[0];\n  }, unsetWorkTimeArguments: function() {\n    return arguments[0];\n  }, isWorkTimeArguments: function() {\n    var e, n = arguments[0];\n    if (n instanceof te) return n;\n    if ((e = n.date ? new te(n.date, n.unit, n.task, null, n.calendar) : new te(arguments[0], arguments[1], arguments[2], null, arguments[3])).unit = e.unit || t.config.duration_unit, !yt(e.date)) throw t.assert(!1, \"Invalid date argument for isWorkTime method\"), new Error(\"Invalid date argument for isWorkTime method\");\n    return e;\n  }, getClosestWorkTimeArguments: function(e) {\n    var n, i = arguments[0];\n    if (i instanceof ee) return i;\n    if (n = X(i) ? new ee(i) : new ee(i.date, i.dir, i.unit, i.task, null, i.calendar), i.id && (n.task = i), n.dir = i.dir || \"any\", n.unit = i.unit || t.config.duration_unit, !yt(n.date)) throw t.assert(!1, \"Invalid date argument for getClosestWorkTime method\"), new Error(\"Invalid date argument for getClosestWorkTime method\");\n    return n;\n  }, _getStartEndConfig: function(e) {\n    var n, i = vi;\n    if (e instanceof i) return e;\n    if (X(e) ? n = new i(arguments[0], arguments[1], arguments[2], arguments[3]) : (n = new i(e.start_date, e.end_date, e.task), e.id !== null && e.id !== void 0 && (n.task = e)), n.unit = n.unit || t.config.duration_unit, n.step = n.step || t.config.duration_step, n.start_date = n.start_date || n.start || n.date, !yt(n.start_date)) throw t.assert(!1, \"Invalid start_date argument for getDuration method\"), new Error(\"Invalid start_date argument for getDuration method\");\n    if (!yt(n.end_date)) throw t.assert(!1, \"Invalid end_date argument for getDuration method\"), new Error(\"Invalid end_date argument for getDuration method\");\n    return n;\n  }, getDurationArguments: function(e, n, i, a) {\n    return this._getStartEndConfig.apply(this, arguments);\n  }, hasDurationArguments: function(e, n, i, a) {\n    return this._getStartEndConfig.apply(this, arguments);\n  }, calculateEndDateArguments: function(e, n, i, a) {\n    var r, s = arguments[0];\n    if (s instanceof ne) return s;\n    if (r = X(s) ? new ne(arguments[0], arguments[1], arguments[2], void 0, arguments[3], void 0, arguments[4]) : new ne(s.start_date, s.duration, s.unit, s.step, s.task, null, s.calendar), s.id !== null && s.id !== void 0 && (r.task = s, r.unit = null, r.step = null), r.unit = r.unit || t.config.duration_unit, r.step = r.step || t.config.duration_step, !yt(r.start_date)) throw t.assert(!1, \"Invalid start_date argument for calculateEndDate method\"), new Error(\"Invalid start_date argument for calculateEndDate method\");\n    return r;\n  } };\n};\nfunction _n() {\n}\n_n.prototype = { _getIntervals: function(t) {\n  for (var e = [], n = 0; n < t.length; n += 2) e.push({ start: t[n], end: t[n + 1] });\n  return e;\n}, _toHoursArray: function(t) {\n  var e = [];\n  function n(a) {\n    var r, s = Math.floor(a / 3600), o = a - 60 * s * 60, l = Math.floor(o / 60);\n    return s + \":\" + ((r = String(l)).length < 2 && (r = \"0\" + r), r);\n  }\n  for (var i = 0; i < t.length; i++) e.push(n(t[i].start) + \"-\" + n(t[i].end));\n  return e;\n}, _intersectHourRanges: function(t, e) {\n  var n = [], i = t.length > e.length ? t : e, a = t === i ? e : t;\n  i = i.slice(), a = a.slice(), n = [];\n  for (var r = 0; r < i.length; r++) for (var s = i[r], o = 0; o < a.length; o++) {\n    var l = a[o];\n    l.start < s.end && l.end > s.start && (n.push({ start: Math.max(s.start, l.start), end: Math.min(s.end, l.end) }), s.end > l.end && (a.splice(o, 1), o--, r--));\n  }\n  return n;\n}, _mergeAdjacentIntervals: function(t) {\n  var e = t.slice();\n  e.sort(function(r, s) {\n    return r.start - s.start;\n  });\n  for (var n = e[0], i = 1; i < e.length; i++) {\n    var a = e[i];\n    a.start <= n.end ? (a.end > n.end && (n.end = a.end), e.splice(i, 1), i--) : n = a;\n  }\n  return e;\n}, _mergeHoursConfig: function(t, e) {\n  return this._mergeAdjacentIntervals(this._intersectHourRanges(t, e));\n}, merge: function(t, e) {\n  var n = q(t.getConfig().parsed), i = q(e.getConfig().parsed), a = { hours: this._toHoursArray(this._mergeHoursConfig(n.hours, i.hours)), dates: {}, customWeeks: {} };\n  const r = (o, l) => {\n    for (let d in o.dates) {\n      const c = o.dates[d];\n      +d > 1e3 && (a.dates[d] = !1);\n      for (const u in l.dates) {\n        const h = l.dates[u];\n        if (u == d && (a.dates[d] = !(!c || !h)), Array.isArray(c)) {\n          const g = Array.isArray(h) ? h : l.hours;\n          a.dates[d] = this._toHoursArray(this._mergeHoursConfig(c, g));\n        }\n      }\n    }\n  };\n  if (r(n, i), r(i, n), n.customWeeks) for (var s in n.customWeeks) a.customWeeks[s] = n.customWeeks[s];\n  if (i.customWeeks) for (var s in i.customWeeks) a.customWeeks[s] = i.customWeeks[s];\n  return a;\n} };\nclass ki {\n  constructor() {\n    this.clear();\n  }\n  getItem(e, n, i) {\n    if (this._cache.has(e)) {\n      const a = this._cache.get(e)[i.getFullYear()];\n      if (a && a.has(n)) return a.get(n);\n    }\n    return -1;\n  }\n  setItem(e, n, i, a) {\n    if (!e || !n) return;\n    const r = this._cache, s = a.getFullYear();\n    let o;\n    r.has(e) ? o = r.get(e) : (o = [], r.set(e, o));\n    let l = o[s];\n    l || (l = o[s] = /* @__PURE__ */ new Map()), l.set(n, i);\n  }\n  clear() {\n    this._cache = /* @__PURE__ */ new Map();\n  }\n}\nclass yi {\n  constructor() {\n    this.clear();\n  }\n  getItem(e, n, i) {\n    const a = this._cache;\n    if (a && a[e]) {\n      const r = a[e];\n      if (r === void 0) return -1;\n      const s = r[i.getFullYear()];\n      if (s && s[n] !== void 0) return s[n];\n    }\n    return -1;\n  }\n  setItem(e, n, i, a) {\n    if (!e || !n) return;\n    const r = this._cache;\n    if (!r) return;\n    r[e] || (r[e] = []);\n    const s = r[e], o = a.getFullYear();\n    let l = s[o];\n    l || (l = s[o] = {}), l[n] = i;\n  }\n  clear() {\n    this._cache = {};\n  }\n}\nclass bi {\n  constructor(e) {\n    this.getMinutesPerWeek = (n) => {\n      const i = n.valueOf();\n      if (this._weekCache.has(i)) return this._weekCache.get(i);\n      const a = this._calendar, r = this._calendar.$gantt;\n      let s = 0, o = r.date.week_start(new Date(n));\n      for (let l = 0; l < 7; l++) s += 60 * a.getHoursPerDay(o), o = r.date.add(o, 1, \"day\");\n      return this._weekCache.set(i, s), s;\n    }, this.getMinutesPerMonth = (n) => {\n      const i = n.valueOf();\n      if (this._monthCache.has(i)) return this._monthCache.get(i);\n      const a = this._calendar, r = this._calendar.$gantt;\n      let s = 0, o = r.date.week_start(new Date(n));\n      const l = r.date.add(o, 1, \"month\").valueOf();\n      for (; o.valueOf() < l; ) s += 60 * a.getHoursPerDay(o), o = r.date.add(o, 1, \"day\");\n      return this._monthCache.set(i, s), s;\n    }, this.clear = () => {\n      this._weekCache = /* @__PURE__ */ new Map(), this._monthCache = /* @__PURE__ */ new Map();\n    }, this.clear(), this._calendar = e;\n  }\n}\nclass xi {\n  constructor() {\n    this.clear();\n  }\n  _getCacheObject(e, n, i) {\n    const a = this._cache;\n    a[n] || (a[n] = []);\n    let r = a[n];\n    r || (r = a[n] = {});\n    let s = r[i];\n    s || (s = r[i] = {});\n    const o = e.getFullYear();\n    let l = s[o];\n    return l || (l = s[o] = { durations: {}, endDates: {} }), l;\n  }\n  _endDateCacheKey(e, n) {\n    return String(e) + \"-\" + String(n);\n  }\n  _durationCacheKey(e, n) {\n    return String(e) + \"-\" + String(n);\n  }\n  getEndDate(e, n, i, a, r) {\n    const s = this._getCacheObject(e, i, a), o = e.valueOf(), l = this._endDateCacheKey(o, n);\n    let d;\n    if (s.endDates[l] === void 0) {\n      const c = r(), u = c.valueOf();\n      s.endDates[l] = u, s.durations[this._durationCacheKey(o, u)] = n, d = c;\n    } else d = new Date(s.endDates[l]);\n    return d;\n  }\n  getDuration(e, n, i, a, r) {\n    const s = this._getCacheObject(e, i, a), o = e.valueOf(), l = n.valueOf(), d = this._durationCacheKey(o, l);\n    let c;\n    if (s.durations[d] === void 0) {\n      const u = r();\n      s.durations[d] = u.valueOf(), c = u;\n    } else c = s.durations[d];\n    return c;\n  }\n  clear() {\n    this._cache = {};\n  }\n}\nfunction pe(t, e) {\n  this.argumentsHelper = e, this.$gantt = t, this._workingUnitsCache = typeof Map < \"u\" ? new ki() : new yi(), this._largeUnitsCache = new bi(this), this._dateDurationCache = new xi(), this._worktime = null, this._cached_timestamps = {}, this._cached_timestamps_count = 0;\n}\npe.prototype = { units: [\"year\", \"month\", \"week\", \"day\", \"hour\", \"minute\"], _clearCaches: function() {\n  this._workingUnitsCache.clear(), this._largeUnitsCache.clear(), this._dateDurationCache.clear();\n}, _getUnitOrder: function(t) {\n  for (var e = 0, n = this.units.length; e < n; e++) if (this.units[e] == t) return e;\n}, _resetTimestampCache: function() {\n  this._cached_timestamps = {}, this._cached_timestamps_count = 0;\n}, _timestamp: function(t) {\n  this._cached_timestamps_count > 1e6 && this._resetTimestampCache();\n  var e = null;\n  if (t.day || t.day === 0) e = t.day;\n  else if (t.date) {\n    var n = String(t.date.valueOf());\n    this._cached_timestamps[n] ? e = this._cached_timestamps[n] : (e = Date.UTC(t.date.getFullYear(), t.date.getMonth(), t.date.getDate()), this._cached_timestamps[n] = e, this._cached_timestamps_count++);\n  }\n  return e;\n}, _checkIfWorkingUnit: function(t, e) {\n  if (!this[\"_is_work_\" + e]) {\n    const n = this.$gantt.date[`${e}_start`](new Date(t)), i = this.$gantt.date.add(n, 1, e);\n    return this.hasDuration(n, i);\n  }\n  return this[\"_is_work_\" + e](t);\n}, _is_work_day: function(t) {\n  var e = this._getWorkHours(t);\n  return !!Array.isArray(e) && e.length > 0;\n}, _is_work_hour: function(t) {\n  for (var e = this._getWorkHours(t), n = t.getHours(), i = 0; i < e.length; i++) if (n >= e[i].startHour && n < e[i].endHour) return !0;\n  return !1;\n}, _getTimeOfDayStamp: function(t, e) {\n  var n = t.getHours();\n  return t.getHours() || t.getMinutes() || !e || (n = 24), 60 * n * 60 + 60 * t.getMinutes();\n}, _is_work_minute: function(t) {\n  for (var e = this._getWorkHours(t), n = this._getTimeOfDayStamp(t), i = 0; i < e.length; i++) if (n >= e[i].start && n < e[i].end) return !0;\n  return !1;\n}, _nextDate: function(t, e, n) {\n  return this.$gantt.date.add(t, n, e);\n}, _getWorkUnitsBetweenGeneric: function(t, e, n, i) {\n  var a = this.$gantt.date, r = new Date(t), s = new Date(e);\n  i = i || 1;\n  var o, l, d = 0, c = null, u = !1;\n  (o = a[n + \"_start\"](new Date(r))).valueOf() != r.valueOf() && (u = !0);\n  var h = !1;\n  (l = a[n + \"_start\"](new Date(e))).valueOf() != e.valueOf() && (h = !0);\n  for (var g = !1; r.valueOf() < s.valueOf(); ) {\n    if (g = (c = this._nextDate(r, n, i)).valueOf() > s.valueOf(), this._isWorkTime(r, n)) (u || h && g) && (o = a[n + \"_start\"](new Date(r)), l = a.add(o, i, n)), u ? (u = !1, c = this._nextDate(o, n, i), d += (l.valueOf() - r.valueOf()) / (l.valueOf() - o.valueOf())) : h && g ? (h = !1, d += (s.valueOf() - r.valueOf()) / (l.valueOf() - o.valueOf())) : d++;\n    else {\n      var f = this._getUnitOrder(n), y = this.units[f - 1];\n      y && !this._isWorkTime(r, y) && (c = this._getClosestWorkTimeFuture(r, y));\n    }\n    r = c;\n  }\n  return d;\n}, _getMinutesPerHour: function(t) {\n  var e = this._getTimeOfDayStamp(t), n = this._getTimeOfDayStamp(this._nextDate(t, \"hour\", 1));\n  n === 0 && (n = 86400);\n  for (var i = this._getWorkHours(t), a = 0; a < i.length; a++) {\n    var r = i[a];\n    if (e >= r.start && n <= r.end) return 60;\n    if (e < r.end && n > r.start) return (Math.min(n, r.end) - Math.max(e, r.start)) / 60;\n  }\n  return 0;\n}, _getMinutesPerDay: function(t) {\n  var e = this._getWorkHours(t), n = 0;\n  return e.forEach(function(i) {\n    n += i.durationMinutes;\n  }), n;\n}, getHoursPerDay: function(t) {\n  var e = this._getWorkHours(t), n = 0;\n  return e.forEach(function(i) {\n    n += i.durationHours;\n  }), n;\n}, _getWorkUnitsForRange: function(t, e, n, i) {\n  var a, r = 0, s = new Date(t), o = new Date(e);\n  for (a = R(n == \"minute\" ? this._getMinutesPerDay : this.getHoursPerDay, this); s.valueOf() < o.valueOf(); ) if (o - s > 27648e5 && s.getDate() === 0) {\n    var l = this._largeUnitsCache.getMinutesPerMonth(s);\n    n == \"hour\" && (l /= 60), r += l, s = this.$gantt.date.add(s, 1, \"month\");\n  } else {\n    if (o - s > 13824e5) {\n      var d = this.$gantt.date.week_start(new Date(s));\n      if (s.valueOf() === d.valueOf()) {\n        l = this._largeUnitsCache.getMinutesPerWeek(s), n == \"hour\" && (l /= 60), r += l, s = this.$gantt.date.add(s, 7, \"day\");\n        continue;\n      }\n    }\n    r += a(s), s = this._nextDate(s, \"day\", 1);\n  }\n  return r / i;\n}, _getMinutesBetweenSingleDay: function(t, e) {\n  for (var n = this._getIntervalTimestamp(t, e), i = this._getWorkHours(t), a = 0, r = 0; r < i.length; r++) {\n    var s = i[r];\n    if (n.end >= s.start && n.start <= s.end) {\n      var o = Math.max(s.start, n.start), l = Math.min(s.end, n.end);\n      a += (l - o) / 60, n.start = l;\n    }\n  }\n  return Math.floor(a);\n}, _getMinutesBetween: function(t, e, n, i) {\n  var a = new Date(t), r = new Date(e);\n  i = i || 1;\n  var s = new Date(a), o = this.$gantt.date.add(this.$gantt.date.day_start(new Date(a)), 1, \"day\");\n  if (r.valueOf() <= o.valueOf()) return this._getMinutesBetweenSingleDay(t, e);\n  var l = this.$gantt.date.day_start(new Date(r)), d = r, c = this._getMinutesBetweenSingleDay(s, o), u = this._getMinutesBetweenSingleDay(l, d);\n  return c + this._getWorkUnitsForRange(o, l, n, i) + u;\n}, _getHoursBetween: function(t, e, n, i) {\n  var a = new Date(t), r = new Date(e);\n  i = i || 1;\n  var s = new Date(a), o = this.$gantt.date.add(this.$gantt.date.day_start(new Date(a)), 1, \"day\");\n  if (r.valueOf() <= o.valueOf()) return Math.round(this._getMinutesBetweenSingleDay(t, e) / 60);\n  var l = this.$gantt.date.day_start(new Date(r)), d = r, c = this._getMinutesBetweenSingleDay(s, o, n, i) / 60, u = this._getMinutesBetweenSingleDay(l, d, n, i) / 60, h = c + this._getWorkUnitsForRange(o, l, n, i) + u;\n  return Math.round(h);\n}, getConfig: function() {\n  return this._worktime;\n}, _setConfig: function(t) {\n  this._worktime = t, this._parseSettings(), this._clearCaches();\n}, _parseSettings: function() {\n  var t = this.getConfig();\n  for (var e in t.parsed = { dates: {}, hours: null, haveCustomWeeks: !1, customWeeks: {}, customWeeksRangeStart: null, customWeeksRangeEnd: null, customWeeksBoundaries: [] }, t.parsed.hours = this._parseHours(t.hours), t.dates) t.parsed.dates[e] = this._parseHours(t.dates[e]);\n  if (t.customWeeks) {\n    var n = null, i = null;\n    for (var e in t.customWeeks) {\n      var a = t.customWeeks[e];\n      if (a.from && a.to) {\n        var r = a.from, s = a.to;\n        (!n || n > r.valueOf()) && (n = r.valueOf()), (!i || i < s.valueOf()) && (i = s.valueOf()), t.parsed.customWeeksBoundaries.push({ from: r.valueOf(), fromReadable: new Date(r), to: s.valueOf(), toReadable: new Date(s), name: e }), t.parsed.haveCustomWeeks = !0;\n        var o = t.parsed.customWeeks[e] = { from: a.from, to: a.to, hours: this._parseHours(a.hours), dates: {} };\n        for (var l in a.dates) o.dates[l] = this._parseHours(a.dates[l]);\n      }\n    }\n    t.parsed.customWeeksRangeStart = n, t.parsed.customWeeksRangeEnd = i;\n  }\n}, _tryChangeCalendarSettings: function(t) {\n  var e = JSON.stringify(this.getConfig());\n  return t(), !!this.hasWorkTime() || (this._setConfig(JSON.parse(e)), this._clearCaches(), !1);\n}, _arraysEqual: function(t, e) {\n  if (t === e) return !0;\n  if (!t || !e || t.length != e.length) return !1;\n  for (var n = 0; n < t.length; ++n) if (t[n] !== e[n]) return !1;\n  return !0;\n}, _compareSettings: function(t, e) {\n  if (!this._arraysEqual(t.hours, e.hours)) return !1;\n  var n = Object.keys(t.dates), i = Object.keys(e.dates);\n  if (n.sort(), i.sort(), !this._arraysEqual(n, i)) return !1;\n  for (var a = 0; a < n.length; a++) {\n    var r = n[a], s = t.dates[r], o = t.dates[r];\n    if (s !== o && !(Array.isArray(s) && Array.isArray(o) && this._arraysEqual(s, o))) return !1;\n  }\n  return !0;\n}, equals: function(t) {\n  if (!(t instanceof pe)) return !1;\n  var e = this.getConfig(), n = t.getConfig();\n  if (!this._compareSettings(e, n)) return !1;\n  if (e.parsed.haveCustomWeeks && n.parsed.haveCustomWeeks) {\n    if (e.parsed.customWeeksBoundaries.length != n.parsed.customWeeksBoundaries.length) return !1;\n    for (var i in e.parsed.customWeeks) {\n      var a = e.parsed.customWeeks[i], r = n.parsed.customWeeks[i];\n      if (!r || !this._compareSettings(a, r)) return !1;\n    }\n  } else if (e.parse.haveCustomWeeks !== n.parsed.haveCustomWeeks) return !1;\n  return !0;\n}, getWorkHours: function() {\n  var t = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments);\n  return this._getWorkHours(t.date, !1);\n}, _getWorkHours: function(t, e) {\n  var n = this.getConfig();\n  if (e !== !1 && (n = n.parsed), !t) return n.hours;\n  var i = this._timestamp({ date: t });\n  if (n.haveCustomWeeks && n.customWeeksRangeStart <= i && n.customWeeksRangeEnd > i) {\n    for (var a = 0; a < n.customWeeksBoundaries.length; a++) if (n.customWeeksBoundaries[a].from <= i && n.customWeeksBoundaries[a].to > i) {\n      n = n.customWeeks[n.customWeeksBoundaries[a].name];\n      break;\n    }\n  }\n  var r = !0;\n  return n.dates[i] !== void 0 ? r = n.dates[i] : n.dates[t.getDay()] !== void 0 && (r = n.dates[t.getDay()]), r === !0 ? n.hours : r || [];\n}, _getIntervalTimestamp: function(t, e) {\n  var n = { start: 0, end: 0 };\n  n.start = 60 * t.getHours() * 60 + 60 * t.getMinutes() + t.getSeconds();\n  var i = e.getHours();\n  return !i && !e.getMinutes() && !e.getSeconds() && t.valueOf() < e.valueOf() && (i = 24), n.end = 60 * i * 60 + 60 * e.getMinutes() + e.getSeconds(), n;\n}, _parseHours: function(t) {\n  if (Array.isArray(t)) {\n    var e = [];\n    t.forEach(function(o) {\n      typeof o == \"number\" ? e.push(60 * o * 60) : typeof o == \"string\" && o.split(\"-\").map(function(l) {\n        return l.trim();\n      }).forEach(function(l) {\n        var d = l.split(\":\").map(function(u) {\n          return u.trim();\n        }), c = parseInt(60 * d[0] * 60);\n        d[1] && (c += parseInt(60 * d[1])), d[2] && (c += parseInt(d[2])), e.push(c);\n      });\n    });\n    for (var n = [], i = 0; i < e.length; i += 2) {\n      var a = e[i], r = e[i + 1], s = r - a;\n      n.push({ start: a, end: r, startHour: Math.floor(a / 3600), startMinute: Math.floor(a / 60), endHour: Math.ceil(r / 3600), endMinute: Math.ceil(r / 60), durationSeconds: s, durationMinutes: s / 60, durationHours: s / 3600 });\n    }\n    return n;\n  }\n  return t;\n}, setWorkTime: function(t) {\n  return this._tryChangeCalendarSettings(R(function() {\n    var e = t.hours === void 0 || t.hours, n = this._timestamp(t), i = this.getConfig();\n    if (n !== null ? i.dates[n] = e : t.customWeeks || (i.hours = e), t.customWeeks) {\n      if (i.customWeeks || (i.customWeeks = {}), typeof t.customWeeks == \"string\") n !== null ? i.customWeeks[t.customWeeks].dates[n] = e : t.customWeeks || (i.customWeeks[t.customWeeks].hours = e);\n      else if (typeof t.customWeeks == \"object\" && Function.prototype.toString.call(t.customWeeks.constructor) === \"function Object() { [native code] }\") for (var a in t.customWeeks) i.customWeeks[a] = t.customWeeks[a];\n    }\n    this._parseSettings(), this._clearCaches();\n  }, this));\n}, unsetWorkTime: function(t) {\n  return this._tryChangeCalendarSettings(R(function() {\n    if (t) {\n      var e = this._timestamp(t);\n      e !== null && delete this.getConfig().dates[e];\n    } else this.reset_calendar();\n    this._parseSettings(), this._clearCaches();\n  }, this));\n}, _isWorkTime: function(t, e) {\n  var n, i = -1;\n  return n = String(t.valueOf()), (i = this._workingUnitsCache.getItem(e, n, t)) == -1 && (i = this._checkIfWorkingUnit(t, e), this._workingUnitsCache.setItem(e, n, i, t)), i;\n}, isWorkTime: function() {\n  var t = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\n  return this._isWorkTime(t.date, t.unit);\n}, calculateDuration: function() {\n  var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n  if (!t.unit) return !1;\n  var e = this;\n  return this._dateDurationCache.getDuration(t.start_date, t.end_date, t.unit, t.step, function() {\n    return e._calculateDuration(t.start_date, t.end_date, t.unit, t.step);\n  });\n}, _calculateDuration: function(t, e, n, i) {\n  var a = 0, r = 1;\n  if (t.valueOf() > e.valueOf()) {\n    var s = e;\n    e = t, t = s, r = -1;\n  }\n  return a = n == \"hour\" && i == 1 ? this._getHoursBetween(t, e, n, i) : n == \"minute\" && i == 1 ? this._getMinutesBetween(t, e, n, i) : this._getWorkUnitsBetweenGeneric(t, e, n, i), r * Math.round(a);\n}, hasDuration: function() {\n  var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments), e = t.start_date, n = t.end_date, i = t.unit, a = t.step;\n  if (!i) return !1;\n  var r = new Date(e), s = new Date(n);\n  for (a = a || 1; r.valueOf() < s.valueOf(); ) {\n    if (this._isWorkTime(r, i)) return !0;\n    r = this._nextDate(r, i, a);\n  }\n  return !1;\n}, calculateEndDate: function() {\n  var t = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments), e = t.start_date, n = t.duration, i = t.unit, a = t.step;\n  if (!i) return !1;\n  var r = t.duration >= 0 ? 1 : -1;\n  n = Math.abs(1 * n);\n  var s = this;\n  return this._dateDurationCache.getEndDate(e, n, i, a * r, function() {\n    return s._calculateEndDate(e, n, i, a * r);\n  });\n}, _calculateEndDate: function(t, e, n, i) {\n  return !!n && (i == 1 && n == \"minute\" ? this._calculateMinuteEndDate(t, e, i) : i == -1 && n == \"minute\" ? this._subtractMinuteDate(t, e, i) : i == 1 && n == \"hour\" ? this._calculateHourEndDate(t, e, i) : this._addInterval(t, e, n, i, null).end);\n}, _addInterval: function(t, e, n, i, a) {\n  for (var r = 0, s = t, o = !1; r < e && (!a || !a(s)); ) {\n    var l = this._nextDate(s, n, i);\n    n == \"day\" && (o = o || !s.getHours() && l.getHours()) && (l.setHours(0), l.getHours() || (o = !1));\n    var d = new Date(l.valueOf() + 1);\n    i > 0 && (d = new Date(l.valueOf() - 1)), this._isWorkTime(d, n) && !o && r++, s = l;\n  }\n  return { end: s, start: t, added: r };\n}, _addHoursUntilDayEnd: function(t, e) {\n  for (var n = this.$gantt.date.add(this.$gantt.date.day_start(new Date(t)), 1, \"day\"), i = 0, a = e, r = this._getIntervalTimestamp(t, n), s = this._getWorkHours(t), o = 0; o < s.length && i < e; o++) {\n    var l = s[o];\n    if (r.end >= l.start && r.start <= l.end) {\n      var d = Math.max(l.start, r.start), c = Math.min(l.end, r.end), u = (c - d) / 3600;\n      u > a && (u = a, c = d + 60 * a * 60);\n      var h = Math.round((c - d) / 3600);\n      i += h, a -= h, r.start = c;\n    }\n  }\n  var g = n;\n  return i === e && (g = new Date(t.getFullYear(), t.getMonth(), t.getDate(), 0, 0, r.start)), { added: i, end: g };\n}, _calculateHourEndDate: function(t, e, n) {\n  var i = new Date(t), a = 0;\n  n = n || 1, e = Math.abs(1 * e);\n  var r = this._addHoursUntilDayEnd(i, e);\n  if (a = r.added, i = r.end, d = e - a) {\n    for (var s = i; a < e; ) {\n      var o = this._nextDate(s, \"day\", n);\n      o.setHours(0), o.setMinutes(0), o.setSeconds(0);\n      var l = 0;\n      if (a + (l = n > 0 ? this.getHoursPerDay(new Date(o.valueOf() - 1)) : this.getHoursPerDay(new Date(o.valueOf() + 1))) >= e) break;\n      a += l, s = o;\n    }\n    i = s;\n  }\n  if (a < e) {\n    var d = e - a;\n    i = (r = this._addHoursUntilDayEnd(i, d)).end;\n  }\n  return i;\n}, _addMinutesUntilHourEnd: function(t, e) {\n  if (t.getMinutes() === 0) return { added: 0, end: new Date(t) };\n  for (var n = this.$gantt.date.add(this.$gantt.date.hour_start(new Date(t)), 1, \"hour\"), i = 0, a = e, r = this._getIntervalTimestamp(t, n), s = this._getWorkHours(t), o = 0; o < s.length && i < e; o++) {\n    var l = s[o];\n    if (r.end >= l.start && r.start <= l.end) {\n      var d = Math.max(l.start, r.start), c = Math.min(l.end, r.end), u = (c - d) / 60;\n      u > a && (u = a, c = d + 60 * a);\n      var h = Math.round((c - d) / 60);\n      a -= h, i += h, r.start = c;\n    }\n  }\n  var g = n;\n  return i === e && (g = new Date(t.getFullYear(), t.getMonth(), t.getDate(), 0, 0, r.start)), { added: i, end: g };\n}, _subtractMinutesUntilHourStart: function(t, e) {\n  for (var n = this.$gantt.date.hour_start(new Date(t)), i = 0, a = e, r = 60 * n.getHours() * 60 + 60 * n.getMinutes() + n.getSeconds(), s = 60 * t.getHours() * 60 + 60 * t.getMinutes() + t.getSeconds(), o = this._getWorkHours(t), l = o.length - 1; l >= 0 && i < e; l--) {\n    var d = o[l];\n    if (s > d.start && r <= d.end) {\n      var c = Math.min(s, d.end), u = Math.max(r, d.start), h = (c - u) / 60;\n      h > a && (h = a, u = c - 60 * a);\n      var g = Math.abs(Math.round((c - u) / 60));\n      a -= g, i += g, s = u;\n    }\n  }\n  var f = n;\n  return i === e && (f = new Date(t.getFullYear(), t.getMonth(), t.getDate(), 0, 0, s)), { added: i, end: f };\n}, _subtractMinuteDate: function(t, e, n) {\n  var i = new Date(t), a = 0;\n  n = n || -1, e = Math.abs(1 * e), e = Math.round(e);\n  const r = this._isMinutePrecision(i);\n  let s = this._subtractMinutesUntilHourStart(i, e);\n  a += s.added, i = s.end;\n  for (var o = 0, l = [], d = 0; a < e; ) {\n    var c = this.$gantt.date.day_start(new Date(i)), u = !1;\n    i.valueOf() === c.valueOf() && (c = this.$gantt.date.add(c, -1, \"day\"), u = !0);\n    var h = new Date(c.getFullYear(), c.getMonth(), c.getDate(), 23, 59, 59, 999).valueOf();\n    h !== o && (l = this._getWorkHours(c), d = this._getMinutesPerDay(c), o = h);\n    var g = e - a, f = this._getTimeOfDayStamp(i, u);\n    if (l.length && d) if (l[l.length - 1].end <= f && g > d) a += d, i = this.$gantt.date.add(i, -1, \"day\");\n    else {\n      for (var y = !1, v = null, b = null, _ = l.length - 1; _ >= 0; _--) if (l[_].start < f - 1 && l[_].end >= f - 1) {\n        y = !0, v = l[_], b = l[_ - 1];\n        break;\n      }\n      if (y) if (f === v.end && g >= v.durationMinutes) a += v.durationMinutes, i = this.$gantt.date.add(i, -v.durationMinutes, \"minute\");\n      else if (!r && g <= f / 60 - v.startMinute) a += g, i = this.$gantt.date.add(i, -g, \"minute\");\n      else if (r) g <= f / 60 - v.startMinute ? (a += g, i = this.$gantt.date.add(i, -g, \"minute\")) : (a += f / 60 - v.startMinute, i = b ? new Date(i.getFullYear(), i.getMonth(), i.getDate(), 0, 0, b.end) : this.$gantt.date.day_start(i));\n      else {\n        var m = this._getMinutesPerHour(i);\n        m <= g ? (a += m, i = this._nextDate(i, \"hour\", n)) : (s = this._subtractMinutesUntilHourStart(i, g), a += s.added, i = s.end);\n      }\n      else if (i.getHours() === 0 && i.getMinutes() === 0 && i.getSeconds() === 0) {\n        if ((p = this._getClosestWorkTimePast(i, \"hour\")).valueOf() === i.valueOf()) {\n          var p = this.$gantt.date.add(i, -1, \"day\"), k = this._getWorkHours(p);\n          if (k.length) {\n            var $ = k[k.length - 1];\n            p.setSeconds($.durationSeconds);\n          }\n        }\n        i = p;\n      } else i = this._getClosestWorkTimePast(new Date(i - 1), \"hour\");\n    }\n    else i = this.$gantt.date.add(i, -1, \"day\");\n  }\n  if (a < e) {\n    var w = e - a;\n    s = this._subtractMinutesUntilHourStart(i, w), a += s.added, i = s.end;\n  }\n  return i;\n}, _calculateMinuteEndDate: function(t, e, n) {\n  var i = new Date(t), a = 0;\n  n = n || 1, e = Math.abs(1 * e), e = Math.round(e);\n  var r = this._addMinutesUntilHourEnd(i, e);\n  a += r.added, i = r.end;\n  for (var s = 0, o = [], l = 0, d = this._isMinutePrecision(i); a < e; ) {\n    var c = this.$gantt.date.day_start(new Date(i)).valueOf();\n    c !== s && (o = this._getWorkHours(i), l = this._getMinutesPerDay(i), s = c);\n    var u = e - a, h = this._getTimeOfDayStamp(i);\n    if (o.length && l) if (o[0].start >= h && u >= l) {\n      if (a += l, u == l) {\n        i = new Date(i.getFullYear(), i.getMonth(), i.getDate(), 0, 0, o[o.length - 1].end);\n        break;\n      }\n      i = this.$gantt.date.add(i, 1, \"day\"), i = this.$gantt.date.day_start(i);\n    } else {\n      for (var g = !1, f = null, y = 0; y < o.length; y++) if (o[y].start <= h && o[y].end > h) {\n        g = !0, f = o[y];\n        break;\n      }\n      if (g) if (h === f.start && u >= f.durationMinutes) a += f.durationMinutes, i = this.$gantt.date.add(i, f.durationMinutes, \"minute\");\n      else if (u <= f.endMinute - h / 60) a += u, i = this.$gantt.date.add(i, u, \"minute\");\n      else {\n        var v = this._getMinutesPerHour(i);\n        v <= u ? (a += v, i = d ? this.$gantt.date.add(i, v, \"minute\") : this._nextDate(i, \"hour\", n)) : (a += (r = this._addMinutesUntilHourEnd(i, u)).added, i = r.end);\n      }\n      else i = this._getClosestWorkTimeFuture(i, \"hour\");\n    }\n    else i = this.$gantt.date.add(this.$gantt.date.day_start(i), 1, \"day\");\n  }\n  if (a < e) {\n    var b = e - a;\n    a += (r = this._addMinutesUntilHourEnd(i, b)).added, i = r.end;\n  }\n  return i;\n}, getClosestWorkTime: function() {\n  var t = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments);\n  return this._getClosestWorkTime(t.date, t.unit, t.dir);\n}, _getClosestWorkTime: function(t, e, n) {\n  var i = new Date(t);\n  if (this._isWorkTime(i, e)) return i;\n  if (i = this.$gantt.date[e + \"_start\"](i), n != \"any\" && n) i = n == \"past\" ? this._getClosestWorkTimePast(i, e) : this._getClosestWorkTimeFuture(i, e);\n  else {\n    var a = this._getClosestWorkTimeFuture(i, e), r = this._getClosestWorkTimePast(i, e);\n    i = Math.abs(a - t) <= Math.abs(t - r) ? a : r;\n  }\n  return i;\n}, _getClosestWorkTimeFuture: function(t, e) {\n  return this._getClosestWorkTimeGeneric(t, e, 1);\n}, _getClosestWorkTimePast: function(t, e) {\n  var n = this._getClosestWorkTimeGeneric(t, e, -1);\n  return this.$gantt.date.add(n, 1, e);\n}, _findClosestTimeInDay: function(t, e, n) {\n  var i = new Date(t), a = null, r = !1;\n  this._getWorkHours(i).length || (i = this._getClosestWorkTime(i, \"day\", e < 0 ? \"past\" : \"future\"), e < 0 && (i = new Date(i.valueOf() - 1), r = !0), n = this._getWorkHours(i));\n  var s = this._getTimeOfDayStamp(i);\n  if (r && (s = this._getTimeOfDayStamp(new Date(i.valueOf() + 1), r)), e > 0) {\n    for (var o = 0; o < n.length; o++) if (n[o].start >= s) {\n      a = new Date(i.getFullYear(), i.getMonth(), i.getDate(), 0, 0, n[o].start);\n      break;\n    }\n  } else for (o = n.length - 1; o >= 0; o--) {\n    if (n[o].end <= s) {\n      a = new Date(i.getFullYear(), i.getMonth(), i.getDate(), 0, 0, n[o].end);\n      break;\n    }\n    if (n[o].end > s && n[o].start <= s) {\n      a = new Date(i.getFullYear(), i.getMonth(), i.getDate(), 0, 0, s);\n      break;\n    }\n  }\n  return a;\n}, _getClosestWorkMinute: function(t, e, n) {\n  var i = new Date(t), a = this._getWorkHours(i), r = this._findClosestTimeInDay(i, n, a);\n  return r || (i = this.calculateEndDate(i, n, \"day\"), n > 0 ? i = this.$gantt.date.day_start(i) : (i = this.$gantt.date.day_start(i), i = this.$gantt.date.add(i, 1, \"day\"), i = new Date(i.valueOf() - 1)), a = this._getWorkHours(i), r = this._findClosestTimeInDay(i, n, a)), n < 0 && (r = this.$gantt.date.add(r, -1, e)), r;\n}, _getClosestWorkTimeGeneric: function(t, e, n) {\n  if (e === \"hour\" || e === \"minute\") return this._getClosestWorkMinute(t, e, n);\n  for (var i = this._getUnitOrder(e), a = this.units[i - 1], r = t, s = 0; !this._isWorkTime(r, e) && (!a || this._isWorkTime(r, a) || (r = n > 0 ? this._getClosestWorkTimeFuture(r, a) : this._getClosestWorkTimePast(r, a), !this._isWorkTime(r, e))); ) {\n    if (++s > 3e3) return this.$gantt.assert(!1, \"Invalid working time check\"), !1;\n    var o = r.getTimezoneOffset();\n    r = this.$gantt.date.add(r, n, e), r = this.$gantt._correct_dst_change(r, o, n, e), this.$gantt.date[e + \"_start\"] && (r = this.$gantt.date[e + \"_start\"](r));\n  }\n  return r;\n}, hasWorkTime: function() {\n  var t = this.getConfig(), e = t.dates;\n  for (var n in t.dates) ;\n  var i = this._checkWorkHours(t.hours), a = !1;\n  return [0, 1, 2, 3, 4, 5, 6].forEach((function(r) {\n    if (!a) {\n      var s = e[r];\n      s === !0 ? a = i : Array.isArray(s) && (a = this._checkWorkHours(s));\n    }\n  }).bind(this)), a;\n}, _checkWorkHours: function(t) {\n  if (t.length === 0) return !1;\n  for (var e = !1, n = 0; n < t.length; n += 2) t[n] !== t[n + 1] && (e = !0);\n  return e;\n}, _isMinutePrecision: function(t) {\n  let e = !1;\n  return this._getWorkHours(t).forEach(function(n) {\n    (n.startMinute % 60 || n.endMinute % 60) && (e = !0);\n  }), e;\n} };\nconst At = { isLegacyResourceCalendarFormat: function(t) {\n  if (!t) return !1;\n  for (var e in t) if (t[e] && typeof t[e] == \"object\") return !0;\n  return !1;\n}, getResourceProperty: function(t) {\n  var e = t.resource_calendars, n = t.resource_property;\n  if (this.isLegacyResourceCalendarFormat(e)) for (var i in t) {\n    n = i;\n    break;\n  }\n  return n;\n}, getCalendarIdFromLegacyConfig: function(t, e) {\n  if (e) for (var n in e) {\n    var i = e[n];\n    if (t[n]) {\n      var a = i[t[n]];\n      if (a) return a;\n    }\n  }\n  return null;\n} }, $i = (Bt = {}, { getCalendarIdFromMultipleResources: function(t, e) {\n  var n = function(a) {\n    return a.map(function(r) {\n      return r && r.resource_id ? r.resource_id : r;\n    }).sort().join(\"-\");\n  }(t);\n  if (t.length) {\n    if (t.length === 1) return e.getResourceCalendar(n).id;\n    if (Bt[n]) return Bt[n].id;\n    var i = function(a, r) {\n      return r.mergeCalendars(a.map(function(s) {\n        var o = s && s.resource_id ? s.resource_id : s;\n        return r.getResourceCalendar(o);\n      }));\n    }(t, e);\n    return Bt[n] = i, e.addCalendar(i);\n  }\n  return null;\n} });\nvar Bt;\nfunction gn(t) {\n  this.$gantt = t, this._calendars = {}, this._legacyConfig = void 0, this.$gantt.attachEvent(\"onGanttReady\", (function() {\n    this.$gantt.config.resource_calendars && (this._isLegacyConfig = At.isLegacyResourceCalendarFormat(this.$gantt.config.resource_calendars));\n  }).bind(this)), this.$gantt.attachEvent(\"onBeforeGanttReady\", (function() {\n    this.createDefaultCalendars();\n  }).bind(this)), this.$gantt.attachEvent(\"onBeforeGanttRender\", (function() {\n    this.createDefaultCalendars();\n  }).bind(this));\n}\nfunction me(t, e) {\n  this.argumentsHelper = e, this.$gantt = t;\n}\nfunction fn(t) {\n  this.$gantt = t.$gantt, this.argumentsHelper = hn(this.$gantt), this.calendarManager = t, this.$disabledCalendar = new me(this.$gantt, this.argumentsHelper);\n}\ngn.prototype = { _calendars: {}, _convertWorkTimeSettings: function(t) {\n  var e = t.days;\n  if (e && !t.dates) {\n    t.dates = t.dates || {};\n    for (var n = 0; n < e.length; n++) t.dates[n] = e[n], e[n] instanceof Array || (t.dates[n] = !!e[n]);\n  }\n  return delete t.days, t;\n}, mergeCalendars: function() {\n  var t = [], e = arguments;\n  if (Array.isArray(e[0])) t = e[0].slice();\n  else for (var n = 0; n < arguments.length; n++) t.push(arguments[n]);\n  var i, a = new _n();\n  return t.forEach((function(r) {\n    i = i ? this._createCalendarFromConfig(a.merge(i, r)) : r;\n  }).bind(this)), this.createCalendar(i);\n}, _createCalendarFromConfig: function(t) {\n  var e = new pe(this.$gantt, hn(this.$gantt));\n  e.id = String(rt());\n  var n = this._convertWorkTimeSettings(t);\n  if (n.customWeeks) for (var i in n.customWeeks) n.customWeeks[i] = this._convertWorkTimeSettings(n.customWeeks[i]);\n  return e._setConfig(n), e;\n}, createCalendar: function(t) {\n  var e;\n  return t || (t = {}), N(e = t.getConfig ? q(t.getConfig()) : t.worktime ? q(t.worktime) : q(t), q(this.defaults.fulltime.worktime)), this._createCalendarFromConfig(e);\n}, getCalendar: function(t) {\n  t = t || \"global\";\n  var e = this._calendars[t];\n  return e || (this.createDefaultCalendars(), e = this._calendars[t]), e;\n}, getCalendars: function() {\n  var t = [];\n  for (var e in this._calendars) t.push(this.getCalendar(e));\n  return t;\n}, _getOwnCalendar: function(t) {\n  var e = this.$gantt.config;\n  if (t[e.calendar_property]) return this.getCalendar(t[e.calendar_property]);\n  if (e.resource_calendars) {\n    var n;\n    if (n = this._legacyConfig === !1 ? e.resource_property : At.getResourceProperty(e), Array.isArray(t[n])) e.dynamic_resource_calendars && (i = $i.getCalendarIdFromMultipleResources(t[n], this));\n    else if (this._legacyConfig === void 0 && (this._legacyConfig = At.isLegacyResourceCalendarFormat(e.resource_calendars)), this._legacyConfig) var i = At.getCalendarIdFromLegacyConfig(t, e.resource_calendars);\n    else if (n && t[n] && e.resource_calendars[t[n]]) var a = this.getResourceCalendar(t[n]);\n    if (i && (a = this.getCalendar(i)), a) return a;\n  }\n  return null;\n}, getResourceCalendar: function(t) {\n  if (t == null) return this.getCalendar();\n  var e = null;\n  e = typeof t == \"number\" || typeof t == \"string\" ? t : t.id || t.key;\n  var n = this.$gantt.config, i = n.resource_calendars, a = null;\n  if (i) {\n    if (this._legacyConfig === void 0 && (this._legacyConfig = At.isLegacyResourceCalendarFormat(n.resource_calendars)), this._legacyConfig) {\n      for (var r in i) if (i[r][e]) {\n        a = i[r][e];\n        break;\n      }\n    } else a = i[e];\n    if (a) return this.getCalendar(a);\n  }\n  return this.getCalendar();\n}, getTaskCalendar: function(t) {\n  var e, n = this.$gantt;\n  if (t == null) return this.getCalendar();\n  if (!(e = typeof t != \"number\" && typeof t != \"string\" || !n.isTaskExists(t) ? t : n.getTask(t))) return this.getCalendar();\n  var i = this._getOwnCalendar(e), a = !!n.getState().group_mode;\n  if (!i && n.config.inherit_calendar && n.isTaskExists(e.parent)) {\n    for (var r = e; n.isTaskExists(r.parent) && (r = n.getTask(r.parent), !n.isSummaryTask(r) || !(i = this._getOwnCalendar(r))); ) ;\n    a && !i && t.$effective_calendar && (i = this.getCalendar(t.$effective_calendar));\n  }\n  return i || this.getCalendar();\n}, addCalendar: function(t) {\n  if (!this.isCalendar(t)) {\n    var e = t.id;\n    (t = this.createCalendar(t)).id = e;\n  }\n  if (t._tryChangeCalendarSettings(function() {\n  })) {\n    var n = this.$gantt.config;\n    return t.id = t.id || rt(), this._calendars[t.id] = t, n.worktimes || (n.worktimes = {}), n.worktimes[t.id] = t.getConfig(), t.id;\n  }\n  return this.$gantt.callEvent(\"onCalendarError\", [{ message: \"Invalid calendar settings, no worktime available\" }, t]), null;\n}, deleteCalendar: function(t) {\n  var e = this.$gantt.config;\n  return !!t && !!this._calendars[t] && (delete this._calendars[t], e.worktimes && e.worktimes[t] && delete e.worktimes[t], !0);\n}, restoreConfigCalendars: function(t) {\n  for (var e in t) if (!this._calendars[e]) {\n    var n = t[e], i = this.createCalendar(n);\n    i.id = e, this.addCalendar(i);\n  }\n}, defaults: { global: { id: \"global\", worktime: { hours: [8, 12, 13, 17], days: [0, 1, 1, 1, 1, 1, 0] } }, fulltime: { id: \"fulltime\", worktime: { hours: [0, 24], days: [1, 1, 1, 1, 1, 1, 1] } } }, createDefaultCalendars: function() {\n  var t = this.$gantt.config;\n  this.restoreConfigCalendars(this.defaults), this.restoreConfigCalendars(t.worktimes);\n}, isCalendar: function(t) {\n  return [t.isWorkTime, t.setWorkTime, t.getWorkHours, t.unsetWorkTime, t.getClosestWorkTime, t.calculateDuration, t.hasDuration, t.calculateEndDate].every(function(e) {\n    return e instanceof Function;\n  });\n} }, me.prototype = { getWorkHours: function() {\n  return [0, 24];\n}, setWorkTime: function() {\n  return !0;\n}, unsetWorkTime: function() {\n  return !0;\n}, isWorkTime: function() {\n  return !0;\n}, getClosestWorkTime: function(t) {\n  return this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments).date;\n}, calculateDuration: function() {\n  var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments), e = t.start_date, n = t.end_date, i = t.unit, a = t.step;\n  return this._calculateDuration(e, n, i, a);\n}, _calculateDuration: function(t, e, n, i) {\n  var a = this.$gantt.date, r = { week: 6048e5, day: 864e5, hour: 36e5, minute: 6e4 }, s = 0;\n  if (r[n]) s = Math.round((e - t) / (i * r[n]));\n  else {\n    for (var o = new Date(t), l = new Date(e); o.valueOf() < l.valueOf(); ) s += 1, o = a.add(o, i, n);\n    o.valueOf() != e.valueOf() && (s += (l - o) / (a.add(o, i, n) - o));\n  }\n  return Math.round(s);\n}, hasDuration: function() {\n  var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments), e = t.start_date, n = t.end_date;\n  return !!t.unit && (e = new Date(e), n = new Date(n), e.valueOf() < n.valueOf());\n}, hasWorkTime: function() {\n  return !0;\n}, equals: function(t) {\n  return t instanceof me;\n}, calculateEndDate: function() {\n  var t = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments), e = t.start_date, n = t.duration, i = t.unit, a = t.step;\n  return this.$gantt.date.add(e, a * n, i);\n} }, fn.prototype = { _getCalendar: function(t) {\n  var e;\n  if (this.$gantt.config.work_time) {\n    var n = this.calendarManager;\n    t.task ? e = n.getTaskCalendar(t.task) : t.id ? e = n.getTaskCalendar(t) : t.calendar && (e = t.calendar), e || (e = n.getTaskCalendar());\n  } else e = this.$disabledCalendar;\n  return e;\n}, getWorkHours: function(t) {\n  return t = this.argumentsHelper.getWorkHoursArguments.apply(this.argumentsHelper, arguments), this._getCalendar(t).getWorkHours(t.date);\n}, setWorkTime: function(t, e) {\n  return t = this.argumentsHelper.setWorkTimeArguments.apply(this.argumentsHelper, arguments), e || (e = this.calendarManager.getCalendar()), e.setWorkTime(t);\n}, unsetWorkTime: function(t, e) {\n  return t = this.argumentsHelper.unsetWorkTimeArguments.apply(this.argumentsHelper, arguments), e || (e = this.calendarManager.getCalendar()), e.unsetWorkTime(t);\n}, isWorkTime: function(t, e, n, i) {\n  var a = this.argumentsHelper.isWorkTimeArguments.apply(this.argumentsHelper, arguments);\n  return (i = this._getCalendar(a)).isWorkTime(a);\n}, getClosestWorkTime: function(t) {\n  return t = this.argumentsHelper.getClosestWorkTimeArguments.apply(this.argumentsHelper, arguments), this._getCalendar(t).getClosestWorkTime(t);\n}, calculateDuration: function() {\n  var t = this.argumentsHelper.getDurationArguments.apply(this.argumentsHelper, arguments);\n  return this._getCalendar(t).calculateDuration(t);\n}, hasDuration: function() {\n  var t = this.argumentsHelper.hasDurationArguments.apply(this.argumentsHelper, arguments);\n  return this._getCalendar(t).hasDuration(t);\n}, calculateEndDate: function(t) {\n  return t = this.argumentsHelper.calculateEndDateArguments.apply(this.argumentsHelper, arguments), this._getCalendar(t).calculateEndDate(t);\n} };\nconst wi = { create: function(t, e) {\n  return { getWorkHours: function(n) {\n    return e.getWorkHours(n);\n  }, setWorkTime: function(n) {\n    return e.setWorkTime(n);\n  }, unsetWorkTime: function(n) {\n    e.unsetWorkTime(n);\n  }, isWorkTime: function(n, i, a) {\n    return e.isWorkTime(n, i, a);\n  }, getClosestWorkTime: function(n) {\n    return e.getClosestWorkTime(n);\n  }, calculateDuration: function(n, i, a) {\n    return e.calculateDuration(n, i, a);\n  }, _hasDuration: function(n, i, a) {\n    return e.hasDuration(n, i, a);\n  }, calculateEndDate: function(n, i, a, r) {\n    return e.calculateEndDate(n, i, a, r);\n  }, mergeCalendars: R(t.mergeCalendars, t), createCalendar: R(t.createCalendar, t), addCalendar: R(t.addCalendar, t), getCalendar: R(t.getCalendar, t), getCalendars: R(t.getCalendars, t), getResourceCalendar: R(t.getResourceCalendar, t), getTaskCalendar: R(t.getTaskCalendar, t), deleteCalendar: R(t.deleteCalendar, t) };\n} };\nfunction Si(t) {\n  t.isUnscheduledTask = function(s) {\n    return t.assert(s && s instanceof Object, \"Invalid argument <b>task</b>=\" + s + \" of gantt.isUnscheduledTask. Task object was expected\"), !!s.unscheduled || !s.start_date;\n  }, t._isAllowedUnscheduledTask = function(s) {\n    return !(!s.unscheduled || !t.config.show_unscheduled);\n  }, t._isTaskInTimelineLimits = function(s) {\n    var o = s.start_date ? s.start_date.valueOf() : null, l = s.end_date ? s.end_date.valueOf() : null;\n    return !!(o && l && o <= this._max_date.valueOf() && l >= this._min_date.valueOf());\n  }, t.isTaskVisible = function(s) {\n    if (!this.isTaskExists(s)) return !1;\n    var o = this.getTask(s);\n    return !(!this._isAllowedUnscheduledTask(o) && !this._isTaskInTimelineLimits(o)) && this.getGlobalTaskIndex(s) >= 0;\n  }, t._getProjectEnd = function() {\n    if (t.config.project_end) return t.config.project_end;\n    var s = t.getTaskByTime();\n    return (s = s.sort(function(o, l) {\n      return +o.end_date > +l.end_date ? 1 : -1;\n    })).length ? s[s.length - 1].end_date : null;\n  }, t._getProjectStart = function() {\n    if (t.config.project_start) return t.config.project_start;\n    if (t.config.start_date) return t.config.start_date;\n    if (t.getState().min_date) return t.getState().min_date;\n    var s = t.getTaskByTime();\n    return (s = s.sort(function(o, l) {\n      return +o.start_date > +l.start_date ? 1 : -1;\n    })).length ? s[0].start_date : null;\n  };\n  var e = function(s, o) {\n    var l = !!(o && o != t.config.root_id && t.isTaskExists(o)) && t.getTask(o), d = null;\n    if (l) if (t.config.schedule_from_end) d = t.calculateEndDate({ start_date: l.end_date, duration: -t.config.duration_step, task: s });\n    else {\n      if (!l.start_date) return e(l, t.getParent(l));\n      d = l.start_date;\n    }\n    else if (t.config.schedule_from_end) d = t.calculateEndDate({ start_date: t._getProjectEnd(), duration: -t.config.duration_step, task: s });\n    else {\n      const c = t.getTaskByIndex(0), u = t.config.start_date || t.getState().min_date;\n      d = c ? c.start_date ? c.start_date : c.end_date ? t.calculateEndDate({ start_date: c.end_date, duration: -t.config.duration_step, task: s }) : u : u;\n    }\n    return t.assert(d, \"Invalid dates\"), new Date(d);\n  };\n  t._set_default_task_timing = function(s) {\n    s.start_date = s.start_date || e(s, t.getParent(s)), s.duration = s.duration || t.config.duration_step, s.end_date = s.end_date || t.calculateEndDate(s);\n  }, t.createTask = function(s, o, l) {\n    if (s = s || {}, t.defined(s.id) || (s.id = t.uid()), s.start_date || (s.start_date = e(s, o)), s.text === void 0 && (s.text = t.locale.labels.new_task), s.duration === void 0 && (s.duration = 1), this.isTaskExists(o)) {\n      this.setParent(s, o, !0);\n      var d = this.getTask(o);\n      d.$open = !0, this.config.details_on_create || this.callEvent(\"onAfterParentExpand\", [o, d]);\n    }\n    return this.callEvent(\"onTaskCreated\", [s]) ? (this.config.details_on_create ? (t.isTaskExists(s.id) ? t.getTask(s.id).$index != s.$index && (s.start_date && typeof s.start_date == \"string\" && (s.start_date = this.date.parseDate(s.start_date, \"parse_date\")), s.end_date && typeof s.end_date == \"string\" && (s.end_date = this.date.parseDate(s.end_date, \"parse_date\")), this.$data.tasksStore.updateItem(s.id, s)) : (s.$new = !0, this.silent(function() {\n      t.$data.tasksStore.addItem(s, l);\n    })), this.selectTask(s.id), this.refreshData(), this.showLightbox(s.id)) : this.addTask(s, o, l) && (this.showTask(s.id), this.selectTask(s.id)), s.id) : null;\n  }, t._update_flags = function(s, o) {\n    var l = t.$data.tasksStore;\n    s === void 0 ? (this._lightbox_id = null, l.silent(function() {\n      l.unselect();\n    }), this.getSelectedTasks && this._multiselect.reset(), this._tasks_dnd && this._tasks_dnd.drag && (this._tasks_dnd.drag.id = null)) : (this._lightbox_id == s && (this._lightbox_id = o), l.getSelectedId() == s && l.silent(function() {\n      l.unselect(s), l.select(o);\n    }), this._tasks_dnd && this._tasks_dnd.drag && this._tasks_dnd.drag.id == s && (this._tasks_dnd.drag.id = o));\n  };\n  var n = function(s, o) {\n    var l = t.getTaskType(s.type), d = { type: l, $no_start: !1, $no_end: !1, scheduled_summary: !1 };\n    return l === t.config.types.project && s.auto_scheduling === !1 && (d.scheduled_summary = !0), o || l != s.$rendered_type ? (l == t.config.types.project ? d.$no_end = d.$no_start = !0 : l != t.config.types.milestone && (d.$no_end = !(s.end_date || s.duration), d.$no_start = !s.start_date, t._isAllowedUnscheduledTask(s) && (d.$no_end = d.$no_start = !1)), d) : (d.$no_start = s.$no_start, d.$no_end = s.$no_end, d);\n  };\n  function i(s) {\n    s.$effective_calendar = t.getTaskCalendar(s).id, s.start_date = t.getClosestWorkTime({ dir: \"future\", date: s.start_date, unit: t.config.duration_unit, task: s }), s.end_date = t.calculateEndDate(s);\n  }\n  function a(s, o, l, d) {\n    const c = { start: \"start_date\", end: \"end_date\" }, u = { start: \"$auto_start_date\", end: \"$auto_end_date\" };\n    let h;\n    h = s.type === t.config.types.project && s.auto_scheduling === !1 ? u : c, o.$no_start && (s[h.start] = l ? new Date(l) : e(s, this.getParent(s))), o.$no_end && (s[h.end] = d ? new Date(d) : this.calculateEndDate({ start_date: s[h.start], duration: this.config.duration_step, task: s })), (o.$no_start || o.$no_end) && this._init_task_timing(s);\n  }\n  function r(s) {\n    var o = null, l = null, d = s !== void 0 ? s : t.config.root_id, c = [];\n    return t.eachTask(function(u) {\n      const h = t.getTaskType(u.type) == t.config.types.project && u.auto_scheduling === !1;\n      t.getTaskType(u.type) == t.config.types.project && !h || t.isUnscheduledTask(u) || (u.rollup && c.push(u.id), !u.start_date || u.$no_start && !h || o && !(o > u.start_date.valueOf()) || (o = u.start_date.valueOf()), !u.end_date || u.$no_end && !h || l && !(l < u.end_date.valueOf()) || (l = u.end_date.valueOf()));\n    }, d), { start_date: o ? new Date(o) : null, end_date: l ? new Date(l) : null, rollup: c };\n  }\n  t._init_task_timing = function(s) {\n    var o = n(s, !0), l = s.$rendered_type != o.type, d = o.type;\n    l && (s.$no_start = o.$no_start, s.$no_end = o.$no_end, s.$rendered_type = o.type), l && d != this.config.types.milestone && d == this.config.types.project && (this._set_default_task_timing(s), s.$calculate_duration = !1), d == this.config.types.milestone && (s.end_date = s.start_date), s.start_date && s.end_date && s.$calculate_duration !== !1 && (s.duration = this.calculateDuration(s)), s.$calculate_duration || (s.$calculate_duration = !0), s.end_date || (s.end_date = s.start_date), s.duration = s.duration || 0, this.config.min_duration === 0 && s.duration === 0 && (s.$no_end = !1);\n    var c = this.getTaskCalendar(s);\n    s.$effective_calendar && s.$effective_calendar !== c.id && (i(s), this.config.inherit_calendar && this.isSummaryTask(s) && this.eachTask(function(u) {\n      i(u);\n    }, s.id)), s.$effective_calendar = c.id;\n  }, t.isSummaryTask = function(s) {\n    t.assert(s && s instanceof Object, \"Invalid argument <b>task</b>=\" + s + \" of gantt.isSummaryTask. Task object was expected\");\n    var o = n(s);\n    return !(!o.$no_end && !o.$no_start);\n  }, t.resetProjectDates = function(s) {\n    var o = n(s);\n    if (o.$no_end || o.$no_start) {\n      var l = r(s.id);\n      a.call(this, s, o, l.start_date, l.end_date), s.$rollup = l.rollup;\n    }\n  }, t.getSubtaskDuration = function(s) {\n    var o = 0, l = s !== void 0 ? s : t.config.root_id;\n    return this.eachTask(function(d) {\n      this.getTaskType(d.type) == t.config.types.project || this.isUnscheduledTask(d) || (o += d.duration);\n    }, l), o;\n  }, t.getSubtaskDates = function(s) {\n    var o = r(s);\n    return { start_date: o.start_date, end_date: o.end_date };\n  }, t._update_parents = function(s, o, l) {\n    if (s) {\n      var d = this.getTask(s);\n      d.rollup && (l = !0);\n      var c = this.getParent(d), u = n(d), h = !0;\n      if (l || d.start_date && d.end_date && (u.$no_start || u.$no_end)) {\n        const y = d.$auto_start_date ? \"$auto_start_date\" : \"start_date\", v = d.$auto_end_date ? \"$auto_end_date\" : \"end_date\";\n        var g = d[y].valueOf(), f = d[v].valueOf();\n        t.resetProjectDates(d), l || g != d[y].valueOf() || f != d[v].valueOf() || (h = !1), h && !o && this.refreshTask(d.id, !0), u.scheduled_summary && (h = !0);\n      }\n      h && c && this.isTaskExists(c) && this._update_parents(c, o, l);\n    }\n  }, t.roundDate = function(s) {\n    var o = t.getScale();\n    X(s) && (s = { date: s, unit: o ? o.unit : t.config.duration_unit, step: o ? o.step : t.config.duration_step });\n    var l, d, c, u = s.date, h = s.step, g = s.unit;\n    if (!o) return u;\n    if (g == o.unit && h == o.step && +u >= +o.min_date && +u <= +o.max_date) c = Math.floor(t.columnIndexByDate(u)), o.trace_x[c] || (c -= 1, o.rtl && (c = 0)), d = new Date(o.trace_x[c]), l = t.date.add(d, h, g);\n    else {\n      for (c = Math.floor(t.columnIndexByDate(u)), l = t.date[g + \"_start\"](new Date(o.min_date)), o.trace_x[c] && (l = t.date[g + \"_start\"](o.trace_x[c])); +l < +u; ) {\n        var f = (l = t.date[g + \"_start\"](t.date.add(l, h, g))).getTimezoneOffset();\n        l = t._correct_dst_change(l, f, l, g), t.date[g + \"_start\"] && (l = t.date[g + \"_start\"](l));\n      }\n      d = t.date.add(l, -1 * h, g);\n    }\n    return s.dir && s.dir == \"future\" ? l : s.dir && s.dir == \"past\" || Math.abs(u - d) < Math.abs(l - u) ? d : l;\n  }, t.correctTaskWorkTime = function(s) {\n    t.config.work_time && t.config.correct_work_time && (this.isWorkTime(s.start_date, void 0, s) ? this.isWorkTime(new Date(+s.end_date - 1), void 0, s) || (s.end_date = this.calculateEndDate(s)) : (s.start_date = this.getClosestWorkTime({ date: s.start_date, dir: \"future\", task: s }), s.end_date = this.calculateEndDate(s)));\n  }, t.attachEvent(\"onBeforeTaskUpdate\", function(s, o) {\n    return t._init_task_timing(o), !0;\n  }), t.attachEvent(\"onBeforeTaskAdd\", function(s, o) {\n    return t._init_task_timing(o), !0;\n  }), t.attachEvent(\"onAfterTaskMove\", function(s, o, l) {\n    return t._init_task_timing(t.getTask(s)), !0;\n  });\n}\nfunction Oe(t, e) {\n  var n, i = t.config.container_resize_timeout || 20;\n  let a = Be(t);\n  if (t.config.container_resize_method == \"timeout\") l();\n  else try {\n    t.event(e, \"resize\", function() {\n      if (t.$scrollbarRepaint) t.$scrollbarRepaint = null;\n      else {\n        let d = Be(t);\n        if (a.x == d.x && a.y == d.y) return;\n        a = d, r();\n      }\n    });\n  } catch {\n    l();\n  }\n  function r() {\n    clearTimeout(n), n = setTimeout(function() {\n      t.$destroyed || t.render();\n    }, i);\n  }\n  var s = t.$root.offsetHeight, o = t.$root.offsetWidth;\n  function l() {\n    t.$root.offsetHeight == s && t.$root.offsetWidth == o || r(), s = t.$root.offsetHeight, o = t.$root.offsetWidth, setTimeout(l, i);\n  }\n}\nfunction Be(t) {\n  return { x: t.$root.offsetWidth, y: t.$root.offsetHeight };\n}\nfunction Ti(t) {\n  t.assert = /* @__PURE__ */ function(r) {\n    return function(s, o) {\n      s || r.config.show_errors && r.callEvent(\"onError\", [o]) !== !1 && (r.message ? r.message({ type: \"error\", text: o, expire: -1 }) : console.log(o));\n    };\n  }(t);\n  var e = \"Invalid value of the first argument of `gantt.init`. Supported values: HTMLElement, String (element id).This error means that either invalid object is passed into `gantt.init` or that the element with the specified ID doesn't exist on the page when `gantt.init` is called.\";\n  function n(r) {\n    if (!r || typeof r == \"string\" && document.getElementById(r) || function(s) {\n      try {\n        s.cloneNode(!1);\n      } catch {\n        return !1;\n      }\n      return !0;\n    }(r)) return !0;\n    throw t.assert(!1, e), new Error(e);\n  }\n  t.init = function(r, s, o) {\n    t.env.isNode ? r = null : n(r), s && o && (this.config.start_date = this._min_date = new Date(s), this.config.end_date = this._max_date = new Date(o)), this.date.init(), this.init = function(l) {\n      t.env.isNode ? l = null : n(l), this.$container && this.$container.parentNode && (this.$container.parentNode.removeChild(this.$container), this.$container = null), this.$layout && this.$layout.clear(), this._reinit(l);\n    }, this._reinit(r);\n  }, t._quickRefresh = function(r) {\n    for (var s = this._getDatastores.call(this), o = 0; o < s.length; o++) s[o]._quick_refresh = !0;\n    for (r(), o = 0; o < s.length; o++) s[o]._quick_refresh = !1;\n  };\n  var i = (function() {\n    this._clearTaskLayers && this._clearTaskLayers(), this._clearLinkLayers && this._clearLinkLayers(), this.$layout && (this.$layout.destructor(), this.$layout = null, this.$ui.reset());\n  }).bind(t), a = (function() {\n    j(t) || (this.$root.innerHTML = \"\", this.$root.gantt = this, _e(this), this.config.layout.id = \"main\", this.$layout = this.$ui.createView(\"layout\", this.$root, this.config.layout), this.$layout.attachEvent(\"onBeforeResize\", function() {\n      for (var r = t.$services.getService(\"datastores\"), s = 0; s < r.length; s++) t.getDatastore(r[s]).filter(), t.$data.tasksStore._skipTaskRecalculation ? t.$data.tasksStore._skipTaskRecalculation != \"lightbox\" && (t.$data.tasksStore._skipTaskRecalculation = !1) : t.getDatastore(r[s]).callEvent(\"onBeforeRefreshAll\", []);\n    }), this.$layout.attachEvent(\"onResize\", function() {\n      t._quickRefresh(function() {\n        t.refreshData();\n      });\n    }), this.callEvent(\"onGanttLayoutReady\", []), this.$layout.render(), this.$container = this.$layout.$container.firstChild, function(r) {\n      window.getComputedStyle(r.$root).getPropertyValue(\"position\") == \"static\" && (r.$root.style.position = \"relative\");\n      var s = document.createElement(\"iframe\");\n      s.className = \"gantt_container_resize_watcher\", s.tabIndex = -1, r.config.wai_aria_attributes && (s.setAttribute(\"role\", \"none\"), s.setAttribute(\"aria-hidden\", !0)), (window.Sfdc || window.$A || window.Aura) && (r.config.container_resize_method = \"timeout\"), r.$root.appendChild(s), s.contentWindow ? Oe(r, s.contentWindow) : (r.$root.removeChild(s), Oe(r, window));\n    }(this));\n  }).bind(t);\n  t.resetLayout = function() {\n    i(), a(), this.render();\n  }, t._reinit = function(r) {\n    this.callEvent(\"onBeforeGanttReady\", []), this._update_flags(), this.$services.getService(\"templateLoader\").initTemplates(this), i(), this.$root = null, r && (this.$root = be(r), a(), this.$mouseEvents.reset(this.$root), function(s) {\n      s.$container && !s.config.autosize && s.$root.offsetHeight < 50 && console.warn(`The Gantt container has a small height, so you cannot see its content. If it is not intended, you need to set the 'height' style rule to the container:\nhttps://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);\n    }(t)), this.callEvent(\"onTemplatesReady\", []), this.callEvent(\"onGanttReady\", []), this.render();\n  }, t.$click = { buttons: { edit: function(r) {\n    t.isReadonly(t.getTask(r)) || t.showLightbox(r);\n  }, delete: function(r) {\n    var s = t.getTask(r);\n    if (!t.isReadonly(s)) {\n      var o = t.locale.labels.confirm_deleting, l = t.locale.labels.confirm_deleting_title;\n      t._simple_confirm(o, l, function() {\n        t.isTaskExists(r) && (s.$new ? (t.$data.tasksStore._skipTaskRecalculation = \"lightbox\", t.silent(function() {\n          t.deleteTask(r, !0);\n        }), t.$data.tasksStore._skipTaskRecalculation = !1, t.refreshData()) : (t.$data.tasksStore._skipTaskRecalculation = !0, t.deleteTask(r))), t.hideLightbox();\n      });\n    }\n  } } }, t.render = function() {\n    var r;\n    if (this.callEvent(\"onBeforeGanttRender\", []), !j(t)) {\n      !this.config.sort && this._sort && (this._sort = void 0), this.$root && (this.config.rtl ? (this.$root.classList.add(\"gantt_rtl\"), this.$root.firstChild.classList.add(\"gantt_rtl\")) : (this.$root.classList.remove(\"gantt_rtl\"), this.$root.firstChild.classList.remove(\"gantt_rtl\")));\n      var s = this.getScrollState(), o = s ? s.x : 0;\n      this._getHorizontalScrollbar() && (o = this._getHorizontalScrollbar().$config.codeScrollLeft || o || 0), r = null, o && (r = t.dateFromPos(o + this.config.task_scroll_offset));\n    }\n    if (_e(this), j(t)) t.refreshData();\n    else {\n      this.$layout.$config.autosize = this.config.autosize;\n      var l = this.config.preserve_scroll;\n      if (this.config.preserve_scroll = !1, this.$layout.resize(), this.config.preserve_scroll = l, this.config.preserve_scroll && s) {\n        if (o || s.y) {\n          var d = t.getScrollState();\n          if (+r != +t.dateFromPos(d.x) || d.y != s.y) {\n            o = null;\n            var c = null;\n            r && (o = Math.max(t.posFromDate(r) - t.config.task_scroll_offset, 0)), s.y && (c = s.y), t.scrollTo(o, c);\n          }\n        }\n        var u = t.$ui.getView(\"grid\");\n        if (u) {\n          var h = u.$config.scrollY, g = t.$ui.getView(h);\n          g && (t.utils.dom.isChildOf(g.$view, t.$container) || u.scrollTo(void 0, 0));\n        }\n      }\n    }\n    this.callEvent(\"onGanttRender\", []);\n  }, t.setSizes = t.render, t.getTaskRowNode = function(r) {\n    for (var s = this.$grid_data.childNodes, o = this.config.task_attribute, l = 0; l < s.length; l++)\n      if (s[l].getAttribute && s[l].getAttribute(o) == r) return s[l];\n    return null;\n  }, t.changeLightboxType = function(r) {\n    if (this.getLightboxType() == r) return !0;\n    t._silent_redraw_lightbox(r);\n  }, t._get_link_type = function(r, s) {\n    var o = null;\n    return r && s ? o = t.config.links.start_to_start : !r && s ? o = t.config.links.finish_to_start : r || s ? r && !s && (o = t.config.links.start_to_finish) : o = t.config.links.finish_to_finish, o;\n  }, t.isLinkAllowed = function(r, s, o, l) {\n    var d = null;\n    if (!(d = typeof r == \"object\" ? r : { source: r, target: s, type: this._get_link_type(o, l) }) || !(d.source && d.target && d.type) || d.source == d.target) return !1;\n    var c = !0;\n    return this.checkEvent(\"onLinkValidation\") && (c = this.callEvent(\"onLinkValidation\", [d])), c;\n  }, t._correct_dst_change = function(r, s, o, l) {\n    var d = jt(l) * o;\n    if (d > 3600 && d < 86400) {\n      var c = r.getTimezoneOffset() - s;\n      c && (r = t.date.add(r, c, \"minute\"));\n    }\n    return r;\n  }, t.isSplitTask = function(r) {\n    return t.assert(r && r instanceof Object, \"Invalid argument <b>task</b>=\" + r + \" of gantt.isSplitTask. Task object was expected\"), this.$data.tasksStore._isSplitItem(r);\n  }, t._is_icon_open_click = function(r) {\n    if (!r) return !1;\n    var s = r.target || r.srcElement;\n    if (!s || !s.className) return !1;\n    var o = K(s);\n    return o.indexOf(\"gantt_tree_icon\") !== -1 && (o.indexOf(\"gantt_close\") !== -1 || o.indexOf(\"gantt_open\") !== -1);\n  };\n}\nconst Ei = { date: { month_full: [\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"أيار\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"], month_short: [\"يناير\", \"فبراير\", \"مارس\", \"أبريل\", \"مايو\", \"يونيو\", \"يوليو\", \"أغسطس\", \"سبتمبر\", \"أكتوبر\", \"نوفمبر\", \"ديسمبر\"], day_full: [\"الأحد\", \"الأثنين\", \"ألثلاثاء\", \"الأربعاء\", \"ألحميس\", \"ألجمعة\", \"السبت\"], day_short: [\"احد\", \"اثنين\", \"ثلاثاء\", \"اربعاء\", \"خميس\", \"جمعة\", \"سبت\"] }, labels: { new_task: \"مهمة جديد\", icon_save: \"اخزن\", icon_cancel: \"الغاء\", icon_details: \"تفاصيل\", icon_edit: \"تحرير\", icon_delete: \"حذف\", confirm_closing: \"التغييرات سوف تضيع, هل انت متأكد؟\", confirm_deleting: \"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟\", section_description: \"الوصف\", section_time: \"الفترة الزمنية\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"الغاء\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ci = { date: { month_full: [\"Студзень\", \"Люты\", \"Сакавік\", \"Красавік\", \"Maй\", \"Чэрвень\", \"Ліпень\", \"Жнівень\", \"Верасень\", \"Кастрычнік\", \"Лістапад\", \"Снежань\"], month_short: [\"Студз\", \"Лют\", \"Сак\", \"Крас\", \"Maй\", \"Чэр\", \"Ліп\", \"Жнів\", \"Вер\", \"Каст\", \"Ліст\", \"Снеж\"], day_full: [\"Нядзеля\", \"Панядзелак\", \"Аўторак\", \"Серада\", \"Чацвер\", \"Пятніца\", \"Субота\"], day_short: [\"Нд\", \"Пн\", \"Аўт\", \"Ср\", \"Чцв\", \"Пт\", \"Сб\"] }, labels: { new_task: \"Новае заданне\", icon_save: \"Захаваць\", icon_cancel: \"Адмяніць\", icon_details: \"Дэталі\", icon_edit: \"Змяніць\", icon_delete: \"Выдаліць\", confirm_closing: \"\", confirm_deleting: \"Падзея будзе выдалена незваротна, працягнуць?\", section_description: \"Апісанне\", section_time: \"Перыяд часу\", section_type: \"Тып\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"ІСР\", column_text: \"Задача\", column_start_date: \"Пачатак\", column_duration: \"Працяг\", column_add: \"\", link: \"Сувязь\", confirm_link_deleting: \"будзе выдалена\", link_start: \"(пачатак)\", link_end: \"(канец)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Хвiлiна\", hours: \"Гадзiна\", days: \"Дзень\", weeks: \"Тыдзень\", months: \"Месяц\", years: \"Год\", message_ok: \"OK\", message_cancel: \"Адмяніць\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Di = { date: { month_full: [\"Gener\", \"Febrer\", \"Març\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"], month_short: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"], day_full: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"], day_short: [\"Dg\", \"Dl\", \"Dm\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"] }, labels: { new_task: \"Nova tasca\", icon_save: \"Guardar\", icon_cancel: \"Cancel·lar\", icon_details: \"Detalls\", icon_edit: \"Editar\", icon_delete: \"Esborrar\", confirm_closing: \"\", confirm_deleting: \"L'esdeveniment s'esborrarà definitivament, continuar ?\", section_description: \"Descripció\", section_time: \"Periode de temps\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Cancel·lar\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ai = { date: { month_full: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"], month_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"], day_full: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"], day_short: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"] }, labels: { new_task: \"新任務\", icon_save: \"保存\", icon_cancel: \"关闭\", icon_details: \"详细\", icon_edit: \"编辑\", icon_delete: \"删除\", confirm_closing: \"请确认是否撤销修改!\", confirm_deleting: \"是否删除日程?\", section_description: \"描述\", section_time: \"时间范围\", section_type: \"类型\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"工作分解结构\", column_text: \"任务名\", column_start_date: \"开始时间\", column_duration: \"持续时间\", column_add: \"\", link: \"关联\", confirm_link_deleting: \"将被删除\", link_start: \" (开始)\", link_end: \" (结束)\", type_task: \"任务\", type_project: \"项目\", type_milestone: \"里程碑\", minutes: \"分钟\", hours: \"小时\", days: \"天\", weeks: \"周\", months: \"月\", years: \"年\", message_ok: \"OK\", message_cancel: \"关闭\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ii = { date: { month_full: [\"Leden\", \"Únor\", \"Březen\", \"Duben\", \"Květen\", \"Červen\", \"Červenec\", \"Srpen\", \"Září\", \"Říjen\", \"Listopad\", \"Prosinec\"], month_short: [\"Led\", \"Ún\", \"Bře\", \"Dub\", \"Kvě\", \"Čer\", \"Čec\", \"Srp\", \"Září\", \"Říj\", \"List\", \"Pro\"], day_full: [\"Neděle\", \"Pondělí\", \"Úterý\", \"Středa\", \"Čtvrtek\", \"Pátek\", \"Sobota\"], day_short: [\"Ne\", \"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"] }, labels: { new_task: \"Nová práce\", icon_save: \"Uložit\", icon_cancel: \"Zpět\", icon_details: \"Detail\", icon_edit: \"Edituj\", icon_delete: \"Smazat\", confirm_closing: \"\", confirm_deleting: \"Událost bude trvale smazána, opravdu?\", section_description: \"Poznámky\", section_time: \"Doba platnosti\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Zpět\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Mi = { date: { month_full: [\"Januar\", \"Februar\", \"Marts\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"], day_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"], day_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"] }, labels: { new_task: \"Ny opgave\", icon_save: \"Gem\", icon_cancel: \"Fortryd\", icon_details: \"Detaljer\", icon_edit: \"Tilret\", icon_delete: \"Slet\", confirm_closing: \"Dine rettelser vil gå tabt.. Er dy sikker?\", confirm_deleting: \"Bigivenheden vil blive slettet permanent. Er du sikker?\", section_description: \"Beskrivelse\", section_time: \"Tidsperiode\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Fortryd\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ni = { date: { month_full: [\" Januar\", \" Februar\", \" März \", \" April\", \" Mai\", \" Juni\", \" Juli\", \" August\", \" September \", \" Oktober\", \" November \", \" Dezember\"], month_short: [\"Jan\", \"Feb\", \"Mär\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dez\"], day_full: [\"Sonntag\", \"Montag\", \"Dienstag\", \" Mittwoch\", \" Donnerstag\", \"Freitag\", \"Samstag\"], day_short: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"] }, labels: { new_task: \"Neue Aufgabe\", icon_save: \"Speichern\", icon_cancel: \"Abbrechen\", icon_details: \"Details\", icon_edit: \"Ändern\", icon_delete: \"Löschen\", confirm_closing: \"\", confirm_deleting: \"Der Eintrag wird gelöscht\", section_description: \"Beschreibung\", section_time: \"Zeitspanne\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"PSP\", column_text: \"Task-Namen\", column_start_date: \"Startzeit\", column_duration: \"Dauer\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"werden gelöscht\", link_start: \"(starten)\", link_end: \"(ende)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minuten\", hours: \"Stunden\", days: \"Tage\", weeks: \"Wochen\", months: \"Monate\", years: \"Jahre\", message_ok: \"OK\", message_cancel: \"Abbrechen\", section_constraint: \"Regel\", constraint_type: \"Regel\", constraint_date: \"Regel - Datum\", asap: \"So bald wie möglich\", alap: \"So spät wie möglich\", snet: \"Beginn nicht vor\", snlt: \"Beginn nicht später als\", fnet: \"Fertigstellung nicht vor\", fnlt: \"Fertigstellung nicht später als\", mso: \"Muss beginnen am\", mfo: \"Muss fertig sein am\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Li = { date: { month_full: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάϊος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"], month_short: [\"ΙΑΝ\", \"ΦΕΒ\", \"ΜΑΡ\", \"ΑΠΡ\", \"ΜΑΙ\", \"ΙΟΥΝ\", \"ΙΟΥΛ\", \"ΑΥΓ\", \"ΣΕΠ\", \"ΟΚΤ\", \"ΝΟΕ\", \"ΔΕΚ\"], day_full: [\"Κυριακή\", \"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Κυριακή\"], day_short: [\"ΚΥ\", \"ΔΕ\", \"ΤΡ\", \"ΤΕ\", \"ΠΕ\", \"ΠΑ\", \"ΣΑ\"] }, labels: { new_task: \"Νέα εργασία\", icon_save: \"Αποθήκευση\", icon_cancel: \"Άκυρο\", icon_details: \"Λεπτομέρειες\", icon_edit: \"Επεξεργασία\", icon_delete: \"Διαγραφή\", confirm_closing: \"\", confirm_deleting: \"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;\", section_description: \"Περιγραφή\", section_time: \"Χρονική περίοδος\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Άκυρο\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Pi = { date: { month_full: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], day_full: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], day_short: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"] }, labels: { new_task: \"New task\", icon_save: \"Save\", icon_cancel: \"Cancel\", icon_details: \"Details\", icon_edit: \"Edit\", icon_delete: \"Delete\", confirm_closing: \"\", confirm_deleting: \"Task will be deleted permanently, are you sure?\", section_description: \"Description\", section_time: \"Time period\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Cancel\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ri = { date: { month_full: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"], month_short: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"], day_full: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"], day_short: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"] }, labels: { new_task: \"Nueva tarea\", icon_save: \"Guardar\", icon_cancel: \"Cancelar\", icon_details: \"Detalles\", icon_edit: \"Editar\", icon_delete: \"Eliminar\", confirm_closing: \"\", confirm_deleting: \"El evento se borrará definitivamente, ¿continuar?\", section_description: \"Descripción\", section_time: \"Período\", section_type: \"Tipo\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"EDT\", column_text: \"Tarea\", column_start_date: \"Inicio\", column_duration: \"Duración\", column_add: \"\", link: \"Enlace\", confirm_link_deleting: \"será borrada\", link_start: \" (inicio)\", link_end: \" (fin)\", type_task: \"Tarea\", type_project: \"Proyecto\", type_milestone: \"Hito\", minutes: \"Minutos\", hours: \"Horas\", days: \"Días\", weeks: \"Semanas\", months: \"Meses\", years: \"Años\", message_ok: \"OK\", message_cancel: \"Cancelar\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Hi = { date: { month_full: [\"ژانویه\", \"فوریه\", \"مارس\", \"آوریل\", \"مه\", \"ژوئن\", \"ژوئیه\", \"اوت\", \"سپتامبر\", \"اکتبر\", \"نوامبر\", \"دسامبر\"], month_short: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"], day_full: [\"يکشنبه\", \"دوشنبه\", \"سه‌شنبه\", \"چهارشنبه\", \"پنجشنبه\", \"جمعه\", \"شنبه\"], day_short: [\"ی\", \"د\", \"س\", \"چ\", \"پ\", \"ج\", \"ش\"] }, labels: { new_task: \"وظیفه جدید\", icon_save: \"ذخیره\", icon_cancel: \"لغو\", icon_details: \"جزییات\", icon_edit: \"ویرایش\", icon_delete: \"حذف\", confirm_closing: \"تغییرات شما ازدست خواهد رفت، آیا مطمئن هستید؟\", confirm_deleting: \"این مورد برای همیشه حذف خواهد شد، آیا مطمئن هستید؟\", section_description: \"توضیحات\", section_time: \"مدت زمان\", section_type: \"نوع\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"عنوان\", column_start_date: \"زمان شروع\", column_duration: \"مدت\", column_add: \"\", link: \"ارتباط\", confirm_link_deleting: \"حذف خواهد شد\", link_start: \" (آغاز)\", link_end: \" (پایان)\", type_task: \"وظیفه\", type_project: \"پروژه\", type_milestone: \"نگارش\", minutes: \"دقایق\", hours: \"ساعات\", days: \"روزها\", weeks: \"هفته\", months: \"ماه‌ها\", years: \"سال‌ها\", message_ok: \"تایید\", message_cancel: \"لغو\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Oi = { date: { month_full: [\"Tammikuu\", \"Helmikuu\", \"Maaliskuu\", \"Huhtikuu\", \"Toukokuu\", \"Kes&auml;kuu\", \"Hein&auml;kuu\", \"Elokuu\", \"Syyskuu\", \"Lokakuu\", \"Marraskuu\", \"Joulukuu\"], month_short: [\"Tam\", \"Hel\", \"Maa\", \"Huh\", \"Tou\", \"Kes\", \"Hei\", \"Elo\", \"Syy\", \"Lok\", \"Mar\", \"Jou\"], day_full: [\"Sunnuntai\", \"Maanantai\", \"Tiistai\", \"Keskiviikko\", \"Torstai\", \"Perjantai\", \"Lauantai\"], day_short: [\"Su\", \"Ma\", \"Ti\", \"Ke\", \"To\", \"Pe\", \"La\"] }, labels: { new_task: \"Uusi tehtävä\", icon_save: \"Tallenna\", icon_cancel: \"Peru\", icon_details: \"Tiedot\", icon_edit: \"Muokkaa\", icon_delete: \"Poista\", confirm_closing: \"\", confirm_deleting: \"Haluatko varmasti poistaa tapahtuman?\", section_description: \"Kuvaus\", section_time: \"Aikajakso\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Peru\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Bi = { date: { month_full: [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"], month_short: [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Juin\", \"Juil\", \"Aoû\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"], day_full: [\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"], day_short: [\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"] }, labels: { new_task: \"Nouvelle tâche\", icon_save: \"Enregistrer\", icon_cancel: \"Annuler\", icon_details: \"Détails\", icon_edit: \"Modifier\", icon_delete: \"Effacer\", confirm_closing: \"\", confirm_deleting: \"L'événement sera effacé sans appel, êtes-vous sûr ?\", section_description: \"Description\", section_time: \"Période\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"OTP\", column_text: \"Nom de la tâche\", column_start_date: \"Date initiale\", column_duration: \"Durée\", column_add: \"\", link: \"Le lien\", confirm_link_deleting: \"sera supprimé\", link_start: \"(début)\", link_end: \"(fin)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Heures\", days: \"Jours\", weeks: \"Semaines\", months: \"Mois\", years: \"Années\", message_ok: \"OK\", message_cancel: \"Annuler\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, zi = { date: { month_full: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"], month_short: [\"ינו\", \"פבר\", \"מרץ\", \"אפר\", \"מאי\", \"יונ\", \"יול\", \"אוג\", \"ספט\", \"אוק\", \"נוב\", \"דצמ\"], day_full: [\"ראשון\", \"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"], day_short: [\"א\", \"ב\", \"ג\", \"ד\", \"ה\", \"ו\", \"ש\"] }, labels: { new_task: \"משימה חדש\", icon_save: \"שמור\", icon_cancel: \"בטל\", icon_details: \"פרטים\", icon_edit: \"ערוך\", icon_delete: \"מחק\", confirm_closing: \"\", confirm_deleting: \"ארוע ימחק סופית.להמשיך?\", section_description: \"הסבר\", section_time: \"תקופה\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"בטל\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Wi = { date: { month_full: [\"Siječanj\", \"Veljača\", \"Ožujak\", \"Travanj\", \"Svibanj\", \"Lipanj\", \"Srpanj\", \"Kolovoz\", \"Rujan\", \"Listopad\", \"Studeni\", \"Prosinac\"], month_short: [\"Sij\", \"Velj\", \"Ožu\", \"Tra\", \"Svi\", \"Lip\", \"Srp\", \"Kol\", \"Ruj\", \"Lis\", \"Stu\", \"Pro\"], day_full: [\"Nedjelja\", \"Ponedjeljak\", \"Utorak\", \"Srijeda\", \"Četvrtak\", \"Petak\", \"Subota\"], day_short: [\"Ned\", \"Pon\", \"Uto\", \"Sri\", \"Čet\", \"Pet\", \"Sub\"] }, labels: { new_task: \"Novi Zadatak\", icon_save: \"Spremi\", icon_cancel: \"Odustani\", icon_details: \"Detalji\", icon_edit: \"Izmjeni\", icon_delete: \"Obriši\", confirm_closing: \"\", confirm_deleting: \"Zadatak će biti trajno izbrisan, jeste li sigurni?\", section_description: \"Opis\", section_time: \"Vremenski Period\", section_type: \"Tip\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Naziv Zadatka\", column_start_date: \"Početno Vrijeme\", column_duration: \"Trajanje\", column_add: \"\", link: \"Poveznica\", confirm_link_deleting: \"će biti izbrisan\", link_start: \" (početak)\", link_end: \" (kraj)\", type_task: \"Zadatak\", type_project: \"Projekt\", type_milestone: \"Milestone\", minutes: \"Minute\", hours: \"Sati\", days: \"Dani\", weeks: \"Tjedni\", months: \"Mjeseci\", years: \"Godine\", message_ok: \"OK\", message_cancel: \"Odustani\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, ji = { date: { month_full: [\"Január\", \"Február\", \"Március\", \"Április\", \"Május\", \"Június\", \"Július\", \"Augusztus\", \"Szeptember\", \"Október\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"Már\", \"Ápr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"], day_full: [\"Vasárnap\", \"Hétfõ\", \"Kedd\", \"Szerda\", \"Csütörtök\", \"Péntek\", \"szombat\"], day_short: [\"Va\", \"Hé\", \"Ke\", \"Sze\", \"Csü\", \"Pé\", \"Szo\"] }, labels: { new_task: \"Új feladat\", icon_save: \"Mentés\", icon_cancel: \"Mégse\", icon_details: \"Részletek\", icon_edit: \"Szerkesztés\", icon_delete: \"Törlés\", confirm_closing: \"\", confirm_deleting: \"Az esemény törölve lesz, biztosan folytatja?\", section_description: \"Leírás\", section_time: \"Idõszak\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Mégse\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Fi = { date: { month_full: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ags\", \"Sep\", \"Okt\", \"Nov\", \"Des\"], day_full: [\"Minggu\", \"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jumat\", \"Sabtu\"], day_short: [\"Ming\", \"Sen\", \"Sel\", \"Rab\", \"Kam\", \"Jum\", \"Sab\"] }, labels: { new_task: \"Tugas baru\", icon_save: \"Simpan\", icon_cancel: \"Batal\", icon_details: \"Detail\", icon_edit: \"Edit\", icon_delete: \"Hapus\", confirm_closing: \"\", confirm_deleting: \"Acara akan dihapus\", section_description: \"Keterangan\", section_time: \"Periode\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Batal\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Vi = { date: { month_full: [\"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"], month_short: [\"Gen\", \"Feb\", \"Mar\", \"Apr\", \"Mag\", \"Giu\", \"Lug\", \"Ago\", \"Set\", \"Ott\", \"Nov\", \"Dic\"], day_full: [\"Domenica\", \"Lunedì\", \"Martedì\", \"Mercoledì\", \"Giovedì\", \"Venerdì\", \"Sabato\"], day_short: [\"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"] }, labels: { new_task: \"Nuovo compito\", icon_save: \"Salva\", icon_cancel: \"Chiudi\", icon_details: \"Dettagli\", icon_edit: \"Modifica\", icon_delete: \"Elimina\", confirm_closing: \"\", confirm_deleting: \"Sei sicuro di confermare l'eliminazione?\", section_description: \"Descrizione\", section_time: \"Periodo di tempo\", section_type: \"Tipo\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Nome Attività\", column_start_date: \"Inizio\", column_duration: \"Durata\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"sarà eliminato\", link_start: \" (inizio)\", link_end: \" (fine)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minuti\", hours: \"Ore\", days: \"Giorni\", weeks: \"Settimane\", months: \"Mesi\", years: \"Anni\", message_ok: \"OK\", message_cancel: \"Chiudi\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ui = { date: { month_full: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"], month_short: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"], day_full: [\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"], day_short: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"] }, labels: { new_task: \"新しい仕事\", icon_save: \"保存\", icon_cancel: \"キャンセル\", icon_details: \"詳細\", icon_edit: \"編集\", icon_delete: \"削除\", confirm_closing: \"\", confirm_deleting: \"イベント完全に削除されます、宜しいですか?\", section_description: \"デスクリプション\", section_time: \"期間\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"キャンセル\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, qi = { date: { month_full: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"], month_short: [\"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"], day_full: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"], day_short: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"] }, labels: { new_task: \"이름없는 작업\", icon_save: \"저장\", icon_cancel: \"취소\", icon_details: \"세부 사항\", icon_edit: \"수정\", icon_delete: \"삭제\", confirm_closing: \"\", confirm_deleting: \"작업을 삭제하시겠습니까?\", section_description: \"설명\", section_time: \"기간\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"작업명\", column_start_date: \"시작일\", column_duration: \"기간\", column_add: \"\", link: \"전제\", confirm_link_deleting: \"삭제 하시겠습니까?\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"작업\", type_project: \"프로젝트\", type_milestone: \"마일스톤\", minutes: \"분\", hours: \"시간\", days: \"일\", weeks: \"주\", months: \"달\", years: \"년\", message_ok: \"OK\", message_cancel: \"취소\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } };\nclass Gi {\n  constructor(e) {\n    this.addLocale = (n, i) => {\n      this._locales[n] = i;\n    }, this.getLocale = (n) => this._locales[n], this._locales = {};\n    for (const n in e) this._locales[n] = e[n];\n  }\n}\nconst Yi = { date: { month_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"], day_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"], day_short: [\"Søn\", \"Mon\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"] }, labels: { new_task: \"Ny oppgave\", icon_save: \"Lagre\", icon_cancel: \"Avbryt\", icon_details: \"Detaljer\", icon_edit: \"Rediger\", icon_delete: \"Slett\", confirm_closing: \"\", confirm_deleting: \"Hendelsen vil bli slettet permanent. Er du sikker?\", section_description: \"Beskrivelse\", section_time: \"Tidsperiode\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Avbryt\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ji = { date: { month_full: [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"mrt\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"], day_full: [\"Zondag\", \"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrijdag\", \"Zaterdag\"], day_short: [\"Zo\", \"Ma\", \"Di\", \"Wo\", \"Do\", \"Vr\", \"Za\"] }, labels: { new_task: \"Nieuwe taak\", icon_save: \"Opslaan\", icon_cancel: \"Annuleren\", icon_details: \"Details\", icon_edit: \"Bewerken\", icon_delete: \"Verwijderen\", confirm_closing: \"\", confirm_deleting: \"Item zal permanent worden verwijderd, doorgaan?\", section_description: \"Beschrijving\", section_time: \"Tijd periode\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Taak omschrijving\", column_start_date: \"Startdatum\", column_duration: \"Duur\", column_add: \"\", link: \"Koppeling\", confirm_link_deleting: \"zal worden verwijderd\", link_start: \" (start)\", link_end: \" (eind)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"minuten\", hours: \"uren\", days: \"dagen\", weeks: \"weken\", months: \"maanden\", years: \"jaren\", message_ok: \"OK\", message_cancel: \"Annuleren\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Ki = { date: { month_full: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Des\"], day_full: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"], day_short: [\"Søn\", \"Man\", \"Tir\", \"Ons\", \"Tor\", \"Fre\", \"Lør\"] }, labels: { new_task: \"Ny oppgave\", icon_save: \"Lagre\", icon_cancel: \"Avbryt\", icon_details: \"Detaljer\", icon_edit: \"Endre\", icon_delete: \"Slett\", confirm_closing: \"Endringer blir ikke lagret, er du sikker?\", confirm_deleting: \"Oppføringen vil bli slettet, er du sikker?\", section_description: \"Beskrivelse\", section_time: \"Tidsperiode\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Avbryt\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Xi = { date: { month_full: [\"Styczeń\", \"Luty\", \"Marzec\", \"Kwiecień\", \"Maj\", \"Czerwiec\", \"Lipiec\", \"Sierpień\", \"Wrzesień\", \"Październik\", \"Listopad\", \"Grudzień\"], month_short: [\"Sty\", \"Lut\", \"Mar\", \"Kwi\", \"Maj\", \"Cze\", \"Lip\", \"Sie\", \"Wrz\", \"Paź\", \"Lis\", \"Gru\"], day_full: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"], day_short: [\"Nie\", \"Pon\", \"Wto\", \"Śro\", \"Czw\", \"Pią\", \"Sob\"] }, labels: { new_task: \"Nowe zadanie\", icon_save: \"Zapisz\", icon_cancel: \"Anuluj\", icon_details: \"Szczegóły\", icon_edit: \"Edytuj\", icon_delete: \"Usuń\", confirm_closing: \"\", confirm_deleting: \"Zdarzenie zostanie usunięte na zawsze, kontynuować?\", section_description: \"Opis\", section_time: \"Okres czasu\", section_type: \"Typ\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Nazwa zadania\", column_start_date: \"Początek\", column_duration: \"Czas trwania\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"zostanie usunięty\", link_start: \" (początek)\", link_end: \" (koniec)\", type_task: \"Zadanie\", type_project: \"Projekt\", type_milestone: \"Milestone\", minutes: \"Minuty\", hours: \"Godziny\", days: \"Dni\", weeks: \"Tydzień\", months: \"Miesiące\", years: \"Lata\", message_ok: \"OK\", message_cancel: \"Anuluj\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Zi = { date: { month_full: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"], month_short: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"], day_full: [\"Domingo\", \"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"], day_short: [\"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"] }, labels: { new_task: \"Nova tarefa\", icon_save: \"Salvar\", icon_cancel: \"Cancelar\", icon_details: \"Detalhes\", icon_edit: \"Editar\", icon_delete: \"Excluir\", confirm_closing: \"\", confirm_deleting: \"As tarefas serão excluidas permanentemente, confirme?\", section_description: \"Descrição\", section_time: \"Período\", section_type: \"Tipo\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"EAP\", column_text: \"Nome tarefa\", column_start_date: \"Data início\", column_duration: \"Duração\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"Será excluído!\", link_start: \" (início)\", link_end: \" (fim)\", type_task: \"Task\", type_project: \"Projeto\", type_milestone: \"Marco\", minutes: \"Minutos\", hours: \"Horas\", days: \"Dias\", weeks: \"Semanas\", months: \"Meses\", years: \"Anos\", message_ok: \"OK\", message_cancel: \"Cancelar\", section_constraint: \"Restrição\", constraint_type: \"Tipo Restrição\", constraint_date: \"Data restrição\", asap: \"Mais breve possível\", alap: \"Mais tarde possível\", snet: \"Não começar antes de\", snlt: \"Não começar depois de\", fnet: \"Não terminar antes de\", fnlt: \"Não terminar depois de\", mso: \"Precisa começar em\", mfo: \"Precisa terminar em\", resources_filter_placeholder: \"Tipo de filtros\", resources_filter_label: \"Ocultar vazios\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, Qi = { date: { month_full: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"November\", \"December\"], month_short: [\"Ian\", \"Feb\", \"Mar\", \"Apr\", \"Mai\", \"Iun\", \"Iul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], day_full: [\"Duminica\", \"Luni\", \"Marti\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sambata\"], day_short: [\"Du\", \"Lu\", \"Ma\", \"Mi\", \"Jo\", \"Vi\", \"Sa\"] }, labels: { new_task: \"Sarcina noua\", icon_save: \"Salveaza\", icon_cancel: \"Anuleaza\", icon_details: \"Detalii\", icon_edit: \"Editeaza\", icon_delete: \"Sterge\", confirm_closing: \"Schimbarile nu vor fi salvate, esti sigur?\", confirm_deleting: \"Evenimentul va fi sters permanent, esti sigur?\", section_description: \"Descriere\", section_time: \"Interval\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Anuleaza\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, ta = { date: { month_full: [\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Maй\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Oктябрь\", \"Ноябрь\", \"Декабрь\"], month_short: [\"Янв\", \"Фев\", \"Maр\", \"Aпр\", \"Maй\", \"Июн\", \"Июл\", \"Aвг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"], day_full: [\"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"], day_short: [\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"] }, labels: { new_task: \"Новое задание\", icon_save: \"Сохранить\", icon_cancel: \"Отменить\", icon_details: \"Детали\", icon_edit: \"Изменить\", icon_delete: \"Удалить\", confirm_closing: \"\", confirm_deleting: \"Событие будет удалено безвозвратно, продолжить?\", section_description: \"Описание\", section_time: \"Период времени\", section_type: \"Тип\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"ИСР\", column_text: \"Задача\", column_start_date: \"Начало\", column_duration: \"Длительность\", column_add: \"\", link: \"Связь\", confirm_link_deleting: \"будет удалена\", link_start: \" (начало)\", link_end: \" (конец)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Минута\", hours: \"Час\", days: \"День\", weeks: \"Неделя\", months: \"Месяц\", years: \"Год\", message_ok: \"OK\", message_cancel: \"Отменить\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"начните вводить слово для фильтрации\", resources_filter_label: \"спрятать не установленные\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, ea = { date: { month_full: [\"Januar\", \"Februar\", \"Marec\", \"April\", \"Maj\", \"Junij\", \"Julij\", \"Avgust\", \"September\", \"Oktober\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"], day_full: [\"Nedelja\", \"Ponedeljek\", \"Torek\", \"Sreda\", \"Četrtek\", \"Petek\", \"Sobota\"], day_short: [\"Ned\", \"Pon\", \"Tor\", \"Sre\", \"Čet\", \"Pet\", \"Sob\"] }, labels: { new_task: \"Nova naloga\", icon_save: \"Shrani\", icon_cancel: \"Prekliči\", icon_details: \"Podrobnosti\", icon_edit: \"Uredi\", icon_delete: \"Izbriši\", confirm_closing: \"\", confirm_deleting: \"Dogodek bo izbrisan. Želite nadaljevati?\", section_description: \"Opis\", section_time: \"Časovni okvir\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Prekliči\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, na = { date: { month_full: [\"Január\", \"Február\", \"Marec\", \"Apríl\", \"Máj\", \"Jún\", \"Júl\", \"August\", \"September\", \"Október\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Máj\", \"Jún\", \"Júl\", \"Aug\", \"Sept\", \"Okt\", \"Nov\", \"Dec\"], day_full: [\"Nedeľa\", \"Pondelok\", \"Utorok\", \"Streda\", \"Štvrtok\", \"Piatok\", \"Sobota\"], day_short: [\"Ne\", \"Po\", \"Ut\", \"St\", \"Št\", \"Pi\", \"So\"] }, labels: { new_task: \"Nová úloha\", icon_save: \"Uložiť\", icon_cancel: \"Späť\", icon_details: \"Detail\", icon_edit: \"Edituj\", icon_delete: \"Zmazať\", confirm_closing: \"Vaše zmeny nebudú uložené. Skutočne?\", confirm_deleting: \"Udalosť bude natrvalo vymazaná. Skutočne?\", section_description: \"Poznámky\", section_time: \"Doba platnosti\", section_type: \"Type\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Späť\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, ia = { date: { month_full: [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"], month_short: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"Maj\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"], day_full: [\"Söndag\", \"Måndag\", \"Tisdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lördag\"], day_short: [\"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"] }, labels: { new_task: \"Ny uppgift\", icon_save: \"Spara\", icon_cancel: \"Avbryt\", icon_details: \"Detajer\", icon_edit: \"Ändra\", icon_delete: \"Ta bort\", confirm_closing: \"\", confirm_deleting: \"Är du säker på att du vill ta bort händelsen permanent?\", section_description: \"Beskrivning\", section_time: \"Tid\", section_type: \"Typ\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Uppgiftsnamn\", column_start_date: \"Starttid\", column_duration: \"Varaktighet\", column_add: \"\", link: \"Länk\", confirm_link_deleting: \"kommer tas bort\", link_start: \" (start)\", link_end: \" (slut)\", type_task: \"Uppgift\", type_project: \"Projekt\", type_milestone: \"Milstolpe\", minutes: \"Minuter\", hours: \"Timmar\", days: \"Dagar\", weeks: \"Veckor\", months: \"Månader\", years: \"År\", message_ok: \"OK\", message_cancel: \"Avbryt\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, aa = { date: { month_full: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"], month_short: [\"Oca\", \"Şub\", \"Mar\", \"Nis\", \"May\", \"Haz\", \"Tem\", \"Ağu\", \"Eyl\", \"Eki\", \"Kas\", \"Ara\"], day_full: [\"Pazar\", \"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"], day_short: [\"Paz\", \"Pzt\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cmt\"] }, labels: { new_task: \"Yeni görev\", icon_save: \"Kaydet\", icon_cancel: \"İptal\", icon_details: \"Detaylar\", icon_edit: \"Düzenle\", icon_delete: \"Sil\", confirm_closing: \"\", confirm_deleting: \"Görev silinecek, emin misiniz?\", section_description: \"Açıklama\", section_time: \"Zaman Aralığı\", section_type: \"Tip\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Görev Adı\", column_start_date: \"Başlangıç\", column_duration: \"Süre\", column_add: \"\", link: \"Bağlantı\", confirm_link_deleting: \"silinecek\", link_start: \" (başlangıç)\", link_end: \" (bitiş)\", type_task: \"Görev\", type_project: \"Proje\", type_milestone: \"Kilometretaşı\", minutes: \"Dakika\", hours: \"Saat\", days: \"Gün\", weeks: \"Hafta\", months: \"Ay\", years: \"Yıl\", message_ok: \"OK\", message_cancel: \"Ýptal\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } }, ra = { date: { month_full: [\"Січень\", \"Лютий\", \"Березень\", \"Квітень\", \"Травень\", \"Червень\", \"Липень\", \"Серпень\", \"Вересень\", \"Жовтень\", \"Листопад\", \"Грудень\"], month_short: [\"Січ\", \"Лют\", \"Бер\", \"Кві\", \"Тра\", \"Чер\", \"Лип\", \"Сер\", \"Вер\", \"Жов\", \"Лис\", \"Гру\"], day_full: [\"Неділя\", \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\", \"Субота\"], day_short: [\"Нед\", \"Пон\", \"Вів\", \"Сер\", \"Чет\", \"Птн\", \"Суб\"] }, labels: { new_task: \"Нове завдання\", icon_save: \"Зберегти\", icon_cancel: \"Відміна\", icon_details: \"Деталі\", icon_edit: \"Редагувати\", icon_delete: \"Вилучити\", confirm_closing: \"\", confirm_deleting: \"Подія вилучиться назавжди. Ви впевнені?\", section_description: \"Опис\", section_time: \"Часовий проміжок\", section_type: \"Тип\", section_deadline: \"Deadline\", section_baselines: \"Baselines\", column_wbs: \"WBS\", column_text: \"Task name\", column_start_date: \"Start time\", column_duration: \"Duration\", column_add: \"\", link: \"Link\", confirm_link_deleting: \"will be deleted\", link_start: \" (start)\", link_end: \" (end)\", type_task: \"Task\", type_project: \"Project\", type_milestone: \"Milestone\", minutes: \"Minutes\", hours: \"Hours\", days: \"Days\", weeks: \"Week\", months: \"Months\", years: \"Years\", message_ok: \"OK\", message_cancel: \"Відміна\", section_constraint: \"Constraint\", constraint_type: \"Constraint type\", constraint_date: \"Constraint date\", asap: \"As Soon As Possible\", alap: \"As Late As Possible\", snet: \"Start No Earlier Than\", snlt: \"Start No Later Than\", fnet: \"Finish No Earlier Than\", fnlt: \"Finish No Later Than\", mso: \"Must Start On\", mfo: \"Must Finish On\", resources_filter_placeholder: \"type to filter\", resources_filter_label: \"hide empty\", empty_state_text_link: \"Click here\", empty_state_text_description: \"to create your first task\", baselines_section_placeholder: \"Start adding a new baseline\", baselines_add_button: \"Add Baseline\", baselines_remove_button: \"Remove\", baselines_remove_all_button: \"Remove All\", deadline_enable_button: \"Set\", deadline_disable_button: \"Remove\" } };\nfunction sa() {\n  this.constants = Un, this.version = \"9.0.3\", this.license = \"gpl\", this.templates = {}, this.ext = {}, this.keys = { edit_save: this.constants.KEY_CODES.ENTER, edit_cancel: this.constants.KEY_CODES.ESC };\n}\nfunction oa(t) {\n  var e = new sa(), n = new qn(t), i = {};\n  e.plugins = function(l) {\n    for (var d in l) if (l[d] && !i[d]) {\n      var c = n.getExtension(d);\n      c && (c(e), i[d] = !0);\n    }\n    return i;\n  }, e.$services = /* @__PURE__ */ function() {\n    var l = {};\n    return { services: {}, setService: function(d, c) {\n      l[d] = c;\n    }, getService: function(d) {\n      return l[d] ? l[d]() : null;\n    }, dropService: function(d) {\n      l[d] && delete l[d];\n    }, destructor: function() {\n      for (var d in l) if (l[d]) {\n        var c = l[d];\n        c && c.destructor && c.destructor();\n      }\n      l = null;\n    } };\n  }(), e.config = Gn(), e.ajax = /* @__PURE__ */ function(l) {\n    return { cache: !0, method: \"get\", parse: function(d) {\n      return typeof d != \"string\" ? d : (d = d.replace(/^[\\s]+/, \"\"), typeof DOMParser > \"u\" || pt.isIE ? ot.ActiveXObject !== void 0 && ((c = new ot.ActiveXObject(\"Microsoft.XMLDOM\")).async = \"false\", c.loadXML(d)) : c = new DOMParser().parseFromString(d, \"text/xml\"), c);\n      var c;\n    }, xmltop: function(d, c, u) {\n      if (c.status === void 0 || c.status < 400) {\n        var h = c.responseXML ? c.responseXML || c : this.parse(c.responseText || c);\n        if (h && h.documentElement !== null && !h.getElementsByTagName(\"parsererror\").length) return h.getElementsByTagName(d)[0];\n      }\n      return u !== -1 && l.callEvent(\"onLoadXMLError\", [\"Incorrect XML\", arguments[1], u]), document.createElement(\"DIV\");\n    }, xpath: function(d, c) {\n      if (c.nodeName || (c = c.responseXML || c), pt.isIE) return c.selectNodes(d) || [];\n      for (var u, h = [], g = (c.ownerDocument || c).evaluate(d, c, null, XPathResult.ANY_TYPE, null); u = g.iterateNext(); ) h.push(u);\n      return h;\n    }, query: function(d) {\n      return this._call(d.method || \"GET\", d.url, d.data || \"\", d.async || !0, d.callback, d.headers);\n    }, get: function(d, c, u) {\n      var h = bt(\"GET\", arguments);\n      return this.query(h);\n    }, getSync: function(d, c) {\n      var u = bt(\"GET\", arguments);\n      return u.async = !1, this.query(u);\n    }, put: function(d, c, u, h) {\n      var g = bt(\"PUT\", arguments);\n      return this.query(g);\n    }, del: function(d, c, u) {\n      var h = bt(\"DELETE\", arguments);\n      return this.query(h);\n    }, post: function(d, c, u, h) {\n      arguments.length == 1 ? c = \"\" : arguments.length == 2 && typeof c == \"function\" && (u = c, c = \"\");\n      var g = bt(\"POST\", arguments);\n      return this.query(g);\n    }, postSync: function(d, c, u) {\n      c = c === null ? \"\" : String(c);\n      var h = bt(\"POST\", arguments);\n      return h.async = !1, this.query(h);\n    }, _call: function(d, c, u, h, g, f) {\n      return new l.Promise(function(y, v) {\n        var b = typeof XMLHttpRequest !== void 0 ? new XMLHttpRequest() : new ot.ActiveXObject(\"Microsoft.XMLHTTP\"), _ = navigator.userAgent.match(/AppleWebKit/) !== null && navigator.userAgent.match(/Qt/) !== null && navigator.userAgent.match(/Safari/) !== null;\n        h && (b.onreadystatechange = function() {\n          if (b.readyState == 4 || _ && b.readyState == 3) {\n            if ((b.status != 200 || b.responseText === \"\") && !l.callEvent(\"onAjaxError\", [b])) return;\n            setTimeout(function() {\n              typeof g == \"function\" && g.apply(ot, [{ xmlDoc: b, filePath: c }]), y(b), typeof g == \"function\" && (g = null, b = null);\n            }, 0);\n          }\n        });\n        var m = !this || !this.cache;\n        if (d == \"GET\" && m && (c += (c.indexOf(\"?\") >= 0 ? \"&\" : \"?\") + \"dhxr\" + (/* @__PURE__ */ new Date()).getTime() + \"=1\"), b.open(d, c, h), f) for (var p in f) b.setRequestHeader(p, f[p]);\n        else d.toUpperCase() == \"POST\" || d == \"PUT\" || d == \"DELETE\" ? b.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\") : d == \"GET\" && (u = null);\n        if (b.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\"), b.send(u), !h) return { xmlDoc: b, filePath: c };\n      });\n    }, urlSeparator: function(d) {\n      return d.indexOf(\"?\") != -1 ? \"&\" : \"?\";\n    } };\n  }(e), e.date = Yn(e), e.RemoteEvents = Kn;\n  var a = function(l) {\n    function d(u) {\n      return { target: u.target || u.srcElement, pageX: u.pageX, pageY: u.pageY, clientX: u.clientX, clientY: u.clientY, metaKey: u.metaKey, shiftKey: u.shiftKey, ctrlKey: u.ctrlKey, altKey: u.altKey };\n    }\n    function c(u, h) {\n      this._obj = u, this._settings = h || {}, st(this);\n      var g = this.getInputMethods();\n      this._drag_start_timer = null, l.attachEvent(\"onGanttScroll\", R(function(v, b) {\n        this.clearDragTimer();\n      }, this));\n      for (var f = { passive: !1 }, y = 0; y < g.length; y++) R(function(v) {\n        l.event(u, v.down, R(function(_) {\n          v.accessor(_) && (_.button !== void 0 && _.button !== 0 || (h.preventDefault && h.selector && lt(_.target, h.selector) && _.preventDefault(), l.config.touch && _.timeStamp && _.timeStamp - 0 < 300 || (this._settings.original_target = d(_), this._settings.original_element_sizes = { ...at(_, nn(u)), width: _.target.offsetWidth, height: _.target.offsetHeight }, l.config.touch ? (this.clearDragTimer(), this._drag_start_timer = setTimeout(R(function() {\n            l.getState().lightbox || this.dragStart(u, _, v);\n          }, this), l.config.touch_drag)) : this.dragStart(u, _, v))));\n        }, this), f);\n        var b = document.body;\n        l.event(b, v.up, R(function(_) {\n          v.accessor(_) && this.clearDragTimer();\n        }, this), f);\n      }, this)(g[y]);\n    }\n    return c.prototype = { traceDragEvents: function(u, h) {\n      var g = R(function(m) {\n        return this.dragMove(u, m, h.accessor);\n      }, this);\n      R(function(m) {\n        return this.dragScroll(u, m);\n      }, this);\n      var f = R(function(m) {\n        if (!this.config.started || !W(this.config.updates_per_second) || dn(this, this.config.updates_per_second)) {\n          var p = g(m);\n          if (p) try {\n            m && m.preventDefault && m.cancelable && m.preventDefault();\n          } catch {\n          }\n          return p;\n        }\n      }, this), y = mt(l.$root), v = this.config.mousemoveContainer || mt(l.$root), b = { passive: !1 }, _ = R(function(m) {\n        return l.eventRemove(v, h.move, f), l.eventRemove(y, h.up, _, b), this.dragEnd(u);\n      }, this);\n      l.event(v, h.move, f, b), l.event(y, h.up, _, b);\n    }, checkPositionChange: function(u) {\n      var h = u.x - this.config.pos.x, g = u.y - this.config.pos.y;\n      return Math.sqrt(Math.pow(Math.abs(h), 2) + Math.pow(Math.abs(g), 2)) > this.config.sensitivity;\n    }, initDnDMarker: function() {\n      var u = this.config.marker = document.createElement(\"div\");\n      u.className = \"gantt_drag_marker\", u.innerHTML = \"\", document.body.appendChild(u);\n    }, backupEventTarget: function(u, h) {\n      if (l.config.touch) {\n        var g = h(u), f = g.target || g.srcElement, y = f.cloneNode(!0);\n        this.config.original_target = d(g), this.config.original_target.target = y, this.config.backup_element = f, f.parentNode.appendChild(y), f.style.display = \"none\", (this.config.mousemoveContainer || document.body).appendChild(f);\n      }\n    }, getInputMethods: function() {\n      var u = [];\n      if (u.push({ move: \"mousemove\", down: \"mousedown\", up: \"mouseup\", accessor: function(g) {\n        return g;\n      } }), l.config.touch) {\n        var h = !0;\n        try {\n          document.createEvent(\"TouchEvent\");\n        } catch {\n          h = !1;\n        }\n        h ? u.push({ move: \"touchmove\", down: \"touchstart\", up: \"touchend\", accessor: function(g) {\n          return g.touches && g.touches.length > 1 ? null : g.touches[0] ? { target: document.elementFromPoint(g.touches[0].clientX, g.touches[0].clientY), pageX: g.touches[0].pageX, pageY: g.touches[0].pageY, clientX: g.touches[0].clientX, clientY: g.touches[0].clientY } : g;\n        } }) : ot.navigator.pointerEnabled ? u.push({ move: \"pointermove\", down: \"pointerdown\", up: \"pointerup\", accessor: function(g) {\n          return g.pointerType == \"mouse\" ? null : g;\n        } }) : ot.navigator.msPointerEnabled && u.push({ move: \"MSPointerMove\", down: \"MSPointerDown\", up: \"MSPointerUp\", accessor: function(g) {\n          return g.pointerType == g.MSPOINTER_TYPE_MOUSE ? null : g;\n        } });\n      }\n      return u;\n    }, clearDragTimer: function() {\n      this._drag_start_timer && (clearTimeout(this._drag_start_timer), this._drag_start_timer = null);\n    }, dragStart: function(u, h, g) {\n      this.config && this.config.started || (this.config = { obj: u, marker: null, started: !1, pos: this.getPosition(h), sensitivity: 4 }, this._settings && N(this.config, this._settings, !0), this.traceDragEvents(u, g), l._prevent_touch_scroll = !0, document.body.classList.add(\"gantt_noselect\"), l.config.touch && this.dragMove(u, h, g.accessor));\n    }, dragMove: function(u, h, g) {\n      var f = g(h);\n      if (!f) return !1;\n      if (!this.config.marker && !this.config.started) {\n        var y = this.getPosition(f);\n        if (l.config.touch || this.checkPositionChange(y)) {\n          if (this.config.started = !0, this.config.ignore = !1, l._touch_drag = !0, this.callEvent(\"onBeforeDragStart\", [u, this.config.original_target]) === !1) return this.config.ignore = !0, !1;\n          this.backupEventTarget(h, g), this.initDnDMarker(), l._touch_feedback(), this.callEvent(\"onAfterDragStart\", [u, this.config.original_target]);\n        } else this.config.ignore = !0;\n      }\n      return this.config.ignore ? !1 : h.targetTouches && !f.target ? void 0 : (f.pos = this.getPosition(f), this.config.marker.style.left = f.pos.x + \"px\", this.config.marker.style.top = f.pos.y + \"px\", this.callEvent(\"onDragMove\", [u, f]), !0);\n    }, dragEnd: function(u) {\n      var h = this.config.backup_element;\n      h && h.parentNode && h.parentNode.removeChild(h), l._prevent_touch_scroll = !1, this.config.marker && (this.config.marker.parentNode.removeChild(this.config.marker), this.config.marker = null, this.callEvent(\"onDragEnd\", [])), this.config.started = !1, l._touch_drag = !1, document.body.classList.remove(\"gantt_noselect\");\n    }, getPosition: function(u) {\n      var h = 0, g = 0;\n      return u.pageX || u.pageY ? (h = u.pageX, g = u.pageY) : (u.clientX || u.clientY) && (h = u.clientX + document.body.scrollLeft + document.documentElement.scrollLeft, g = u.clientY + document.body.scrollTop + document.documentElement.scrollTop), { x: h, y: g };\n    } }, c;\n  }(e);\n  e.$services.setService(\"dnd\", function() {\n    return a;\n  });\n  var r = /* @__PURE__ */ function(l) {\n    var d = {};\n    function c(u, h, g) {\n      g = g || u;\n      var f = l.config, y = l.templates;\n      l.config[u] && d[g] != f[u] && (h && y[g] || (y[g] = l.date.date_to_str(f[u]), d[g] = f[u]));\n    }\n    return { initTemplates: function() {\n      var u = l.locale.labels;\n      u.gantt_save_btn = u.icon_save, u.gantt_cancel_btn = u.icon_cancel, u.gantt_delete_btn = u.icon_delete;\n      var h = l.date, g = h.date_to_str, f = l.config, y = g(f.xml_date || f.date_format, f.server_utc), v = h.str_to_date(f.xml_date || f.date_format, f.server_utc);\n      c(\"date_scale\", !0, void 0, l.config, l.templates), c(\"date_grid\", !0, \"grid_date_format\", l.config, l.templates), c(\"task_date\", !0, void 0, l.config, l.templates), l.mixin(l.templates, { xml_format: void 0, format_date: y, xml_date: void 0, parse_date: v, progress_text: function(b, _, m) {\n        return \"\";\n      }, grid_header_class: function(b, _) {\n        return \"\";\n      }, task_text: function(b, _, m) {\n        return m.text;\n      }, task_class: function(b, _, m) {\n        return \"\";\n      }, task_end_date: function(b) {\n        return l.templates.task_date(b);\n      }, grid_row_class: function(b, _, m) {\n        return \"\";\n      }, task_row_class: function(b, _, m) {\n        return \"\";\n      }, timeline_cell_class: function(b, _) {\n        return \"\";\n      }, timeline_cell_content: function(b, _) {\n        return \"\";\n      }, scale_cell_class: function(b) {\n        return \"\";\n      }, scale_row_class: function(b) {\n        return \"\";\n      }, grid_indent: function(b) {\n        return \"<div class='gantt_tree_indent'></div>\";\n      }, grid_folder: function(b) {\n        return \"<div class='gantt_tree_icon gantt_folder_\" + (b.$open ? \"open\" : \"closed\") + \"'></div>\";\n      }, grid_file: function(b) {\n        return \"<div class='gantt_tree_icon gantt_file'></div>\";\n      }, grid_open: function(b) {\n        return \"<div class='gantt_tree_icon gantt_\" + (b.$open ? \"close\" : \"open\") + \"'></div>\";\n      }, grid_blank: function(b) {\n        return \"<div class='gantt_tree_icon gantt_blank'></div>\";\n      }, date_grid: function(b, _, m) {\n        return _ && l.isUnscheduledTask(_) && l.config.show_unscheduled ? l.templates.task_unscheduled_time(_) : l.templates.grid_date_format(b, m);\n      }, task_time: function(b, _, m) {\n        return l.isUnscheduledTask(m) && l.config.show_unscheduled ? l.templates.task_unscheduled_time(m) : l.templates.task_date(b) + \" - \" + l.templates.task_end_date(_);\n      }, task_unscheduled_time: function(b) {\n        return \"\";\n      }, time_picker: g(f.time_picker), link_class: function(b) {\n        return \"\";\n      }, link_description: function(b) {\n        var _ = l.getTask(b.source), m = l.getTask(b.target);\n        return \"<b>\" + _.text + \"</b> &ndash;  <b>\" + m.text + \"</b>\";\n      }, drag_link: function(b, _, m, p) {\n        b = l.getTask(b);\n        var k = l.locale.labels, $ = \"<b>\" + b.text + \"</b> \" + (_ ? k.link_start : k.link_end) + \"<br/>\";\n        return m && ($ += \"<b> \" + (m = l.getTask(m)).text + \"</b> \" + (p ? k.link_start : k.link_end) + \"<br/>\"), $;\n      }, drag_link_class: function(b, _, m, p) {\n        var k = \"\";\n        return b && m && (k = \" \" + (l.isLinkAllowed(b, m, _, p) ? \"gantt_link_allow\" : \"gantt_link_deny\")), \"gantt_link_tooltip\" + k;\n      }, tooltip_date_format: h.date_to_str(\"%Y-%m-%d\"), tooltip_text: function(b, _, m) {\n        return `<div>Task: ${m.text}</div>\n\t\t\t\t<div>Start date: ${l.templates.tooltip_date_format(b)}</div>\n\t\t\t\t<div>End date: ${l.templates.tooltip_date_format(_)}</div>`;\n      }, baseline_text: function(b, _, m) {\n        return \"\";\n      } });\n    }, initTemplate: c };\n  }(e);\n  e.$services.setService(\"templateLoader\", function() {\n    return r;\n  }), st(e);\n  var s = new Xn();\n  s.registerProvider(\"global\", function() {\n    var l = { min_date: e._min_date, max_date: e._max_date, selected_task: null };\n    return e.$data && e.$data.tasksStore && (l.selected_task = e.$data.tasksStore.getSelectedId()), l;\n  }), e.getState = s.getState, e.$services.setService(\"state\", function() {\n    return s;\n  }), N(e, Bn), e.Promise = Zn, e.env = pt, function(l) {\n    var d = ti.create();\n    N(l, d);\n    var c, u = l.createDatastore({ name: \"task\", type: \"treeDatastore\", rootId: function() {\n      return l.config.root_id;\n    }, initItem: R(function(_) {\n      this.defined(_.id) || (_.id = this.uid()), _.start_date && (_.start_date = l.date.parseDate(_.start_date, \"parse_date\")), _.end_date && (_.end_date = l.date.parseDate(_.end_date, \"parse_date\"));\n      var m = null;\n      (_.duration || _.duration === 0) && (_.duration = m = 1 * _.duration), m && (_.start_date && !_.end_date ? _.end_date = this.calculateEndDate(_) : !_.start_date && _.end_date && (_.start_date = this.calculateEndDate({ start_date: _.end_date, duration: -_.duration, task: _ }))), l.config.deadlines !== !1 && _.deadline && (_.deadline = l.date.parseDate(_.deadline, \"parse_date\")), _.progress = Number(_.progress) || 0, this._isAllowedUnscheduledTask(_) && this._set_default_task_timing(_), this._init_task_timing(_), _.start_date && _.end_date && this.correctTaskWorkTime(_), _.$source = [], _.$target = [];\n      var p = this.$data.tasksStore.getItem(_.id);\n      return p && !W(_.open) && (_.$open = p.$open), _.parent === void 0 && (_.parent = this.config.root_id), _.open && (_.$open = !0), _;\n    }, l), getConfig: function() {\n      return l.config;\n    } }), h = l.createDatastore({ name: \"link\", initItem: R(function(_) {\n      return this.defined(_.id) || (_.id = this.uid()), _;\n    }, l) });\n    function g(_) {\n      var m = l.isTaskVisible(_);\n      if (!m && l.isTaskExists(_)) {\n        var p = l.getParent(_);\n        l.isTaskExists(p) && l.isTaskVisible(p) && (p = l.getTask(p), l.isSplitTask(p) && (m = !0));\n      }\n      return m;\n    }\n    function f(_) {\n      if (l.isTaskExists(_.source)) {\n        var m = l.getTask(_.source);\n        m.$source = m.$source || [], m.$source.push(_.id);\n      }\n      if (l.isTaskExists(_.target)) {\n        var p = l.getTask(_.target);\n        p.$target = p.$target || [], p.$target.push(_.id);\n      }\n    }\n    function y(_) {\n      if (l.isTaskExists(_.source)) {\n        for (var m = l.getTask(_.source), p = 0; p < m.$source.length; p++) if (m.$source[p] == _.id) {\n          m.$source.splice(p, 1);\n          break;\n        }\n      }\n      if (l.isTaskExists(_.target)) {\n        var k = l.getTask(_.target);\n        for (p = 0; p < k.$target.length; p++) if (k.$target[p] == _.id) {\n          k.$target.splice(p, 1);\n          break;\n        }\n      }\n    }\n    function v() {\n      for (var _ = null, m = l.$data.tasksStore.getItems(), p = 0, k = m.length; p < k; p++) (_ = m[p]).$source = [], _.$target = [];\n      var $ = l.$data.linksStore.getItems();\n      for (p = 0, k = $.length; p < k; p++) f($[p]);\n    }\n    function b(_) {\n      var m = _.source, p = _.target;\n      for (var k in _.events) (function($, w) {\n        m.attachEvent($, function() {\n          return p.callEvent(w, Array.prototype.slice.call(arguments));\n        }, w);\n      })(k, _.events[k]);\n    }\n    l.attachEvent(\"onDestroy\", function() {\n      u.destructor(), h.destructor();\n    }), l.attachEvent(\"onLinkValidation\", function(_) {\n      if (l.isLinkExists(_.id) || _.id === \"predecessor_generated\") return !0;\n      for (var m = l.getTask(_.source).$source, p = 0; p < m.length; p++) {\n        var k = l.getLink(m[p]), $ = _.source == k.source, w = _.target == k.target, x = _.type == k.type;\n        if ($ && w && x) return !1;\n      }\n      return !0;\n    }), u.attachEvent(\"onBeforeRefreshAll\", function() {\n      if (!u._skipTaskRecalculation) for (var _ = u.getVisibleItems(), m = 0; m < _.length; m++) {\n        var p = _[m];\n        p.$index = m, p.$local_index = l.getTaskIndex(p.id), l.resetProjectDates(p);\n      }\n    }), u.attachEvent(\"onFilterItem\", function(_, m) {\n      if (l.config.show_tasks_outside_timescale) return !0;\n      var p = null, k = null;\n      if (l.config.start_date && l.config.end_date) {\n        if (l._isAllowedUnscheduledTask(m)) return !0;\n        if (p = l.config.start_date.valueOf(), k = l.config.end_date.valueOf(), +m.start_date > k || +m.end_date < +p) return !1;\n      }\n      return !0;\n    }), u.attachEvent(\"onIdChange\", function(_, m) {\n      l._update_flags(_, m);\n      var p = l.getTask(m);\n      u.isSilent() || (p.$split_subtask || p.rollup) && l.eachParent(function(k) {\n        l.refreshTask(k.id);\n      }, m);\n    }), u.attachEvent(\"onAfterUpdate\", function(_) {\n      if (l._update_parents(_), l.getState(\"batchUpdate\").batch_update) return !0;\n      var m = u.getItem(_);\n      m.$source || (m.$source = []);\n      for (var p = 0; p < m.$source.length; p++) h.refresh(m.$source[p]);\n      for (m.$target || (m.$target = []), p = 0; p < m.$target.length; p++) h.refresh(m.$target[p]);\n    }), u.attachEvent(\"onBeforeItemMove\", function(_, m, p) {\n      return !Lt(_, l, u) || (console.log(\"The placeholder task cannot be moved to another position.\"), !1);\n    }), u.attachEvent(\"onAfterItemMove\", function(_, m, p) {\n      var k = l.getTask(_);\n      this.getNextSibling(_) !== null ? k.$drop_target = this.getNextSibling(_) : this.getPrevSibling(_) !== null ? k.$drop_target = \"next:\" + this.getPrevSibling(_) : k.$drop_target = \"next:null\";\n    }), u.attachEvent(\"onStoreUpdated\", function(_, m, p) {\n      if (p == \"delete\" && l._update_flags(_, null), !l.$services.getService(\"state\").getState(\"batchUpdate\").batch_update) {\n        if (l.config.fit_tasks && p !== \"paint\") {\n          var k = l.getState();\n          _e(l);\n          var $ = l.getState();\n          if (+k.min_date != +$.min_date || +k.max_date != +$.max_date) return l.render(), l.callEvent(\"onScaleAdjusted\", []), !0;\n        }\n        p == \"add\" || p == \"move\" || p == \"delete\" ? l.$layout && (this.$config.name != \"task\" || p != \"add\" && p != \"delete\" || this._skipTaskRecalculation != \"lightbox\" && (this._skipTaskRecalculation = !0), l.$layout.resize()) : _ || h.refresh();\n      }\n    }), h.attachEvent(\"onAfterAdd\", function(_, m) {\n      f(m);\n    }), h.attachEvent(\"onAfterUpdate\", function(_, m) {\n      v();\n    }), h.attachEvent(\"onAfterDelete\", function(_, m) {\n      y(m);\n    }), h.attachEvent(\"onAfterSilentDelete\", function(_, m) {\n      y(m);\n    }), h.attachEvent(\"onBeforeIdChange\", function(_, m) {\n      y(l.mixin({ id: _ }, l.$data.linksStore.getItem(m))), f(l.$data.linksStore.getItem(m));\n    }), h.attachEvent(\"onFilterItem\", function(_, m) {\n      if (!l.config.show_links) return !1;\n      var p = g(m.source), k = g(m.target);\n      return !(!p || !k || l._isAllowedUnscheduledTask(l.getTask(m.source)) || l._isAllowedUnscheduledTask(l.getTask(m.target))) && l.callEvent(\"onBeforeLinkDisplay\", [_, m]);\n    }), c = {}, l.attachEvent(\"onBeforeTaskDelete\", function(_, m) {\n      return c[_] = ge.getSubtreeLinks(l, _), !0;\n    }), l.attachEvent(\"onAfterTaskDelete\", function(_, m) {\n      c[_] && l.$data.linksStore.silent(function() {\n        for (var p in c[_]) l.isLinkExists(p) && l.$data.linksStore.removeItem(p), y(c[_][p]);\n        c[_] = null;\n      });\n    }), l.attachEvent(\"onAfterLinkDelete\", function(_, m) {\n      l.refreshTask(m.source), l.refreshTask(m.target);\n    }), l.attachEvent(\"onParse\", v), b({ source: h, target: l, events: { onItemLoading: \"onLinkLoading\", onBeforeAdd: \"onBeforeLinkAdd\", onAfterAdd: \"onAfterLinkAdd\", onBeforeUpdate: \"onBeforeLinkUpdate\", onAfterUpdate: \"onAfterLinkUpdate\", onBeforeDelete: \"onBeforeLinkDelete\", onAfterDelete: \"onAfterLinkDelete\", onIdChange: \"onLinkIdChange\" } }), b({ source: u, target: l, events: { onItemLoading: \"onTaskLoading\", onBeforeAdd: \"onBeforeTaskAdd\", onAfterAdd: \"onAfterTaskAdd\", onBeforeUpdate: \"onBeforeTaskUpdate\", onAfterUpdate: \"onAfterTaskUpdate\", onBeforeDelete: \"onBeforeTaskDelete\", onAfterDelete: \"onAfterTaskDelete\", onIdChange: \"onTaskIdChange\", onBeforeItemMove: \"onBeforeTaskMove\", onAfterItemMove: \"onAfterTaskMove\", onFilterItem: \"onBeforeTaskDisplay\", onItemOpen: \"onTaskOpened\", onItemClose: \"onTaskClosed\", onBeforeSelect: \"onBeforeTaskSelected\", onAfterSelect: \"onTaskSelected\", onAfterUnselect: \"onTaskUnselected\" } }), l.$data = { tasksStore: u, linksStore: h };\n  }(e), e.dataProcessor = He.DEPRECATED_api, e.createDataProcessor = He.createDataProcessor, function(l) {\n    l.ext || (l.ext = {});\n    for (var d = [ai, si, li, di, ci, ui, hi, _i, pi], c = 0; c < d.length; c++) d[c] && d[c](l);\n  }(e), function(l) {\n    l.getGridColumn = function(d) {\n      for (var c = l.config.columns, u = 0; u < c.length; u++) if (c[u].name == d) return c[u];\n      return null;\n    }, l.getGridColumns = function() {\n      return l.config.columns.slice();\n    };\n  }(e), function(l) {\n    l.isReadonly = function(d) {\n      return typeof d != \"number\" && typeof d != \"string\" || !l.isTaskExists(d) || (d = l.getTask(d)), (!d || !d[this.config.editable_property]) && (d && d[this.config.readonly_property] || this.config.readonly);\n    };\n  }(e), mi(e), function(l) {\n    var d = new gn(l), c = new fn(d);\n    N(l, wi.create(d, c));\n  }(e), Si(e), function(l) {\n    l.getTaskType = function(d) {\n      return \"task\";\n    };\n  }(e), function(l) {\n    function d() {\n      return l._cached_functions.update_if_changed(l), l._cached_functions.active || l._cached_functions.activate(), !0;\n    }\n    l._cached_functions = { cache: {}, mode: !1, critical_path_mode: !1, wrap_methods: function(u, h) {\n      if (h._prefetch_originals) for (var g in h._prefetch_originals) h[g] = h._prefetch_originals[g];\n      for (h._prefetch_originals = {}, g = 0; g < u.length; g++) this.prefetch(u[g], h);\n    }, prefetch: function(u, h) {\n      var g = h[u];\n      if (g) {\n        var f = this;\n        h._prefetch_originals[u] = g, h[u] = function() {\n          for (var y = new Array(arguments.length), v = 0, b = arguments.length; v < b; v++) y[v] = arguments[v];\n          if (f.active) {\n            var _ = f.get_arguments_hash(Array.prototype.slice.call(y));\n            f.cache[u] || (f.cache[u] = {});\n            var m = f.cache[u];\n            if (f.has_cached_value(m, _)) return f.get_cached_value(m, _);\n            var p = g.apply(this, y);\n            return f.cache_value(m, _, p), p;\n          }\n          return g.apply(this, y);\n        };\n      }\n      return g;\n    }, cache_value: function(u, h, g) {\n      this.is_date(g) && (g = new Date(g)), u[h] = g;\n    }, has_cached_value: function(u, h) {\n      return u.hasOwnProperty(h);\n    }, get_cached_value: function(u, h) {\n      var g = u[h];\n      return this.is_date(g) && (g = new Date(g)), g;\n    }, is_date: function(u) {\n      return u && u.getUTCDate;\n    }, get_arguments_hash: function(u) {\n      for (var h = [], g = 0; g < u.length; g++) h.push(this.stringify_argument(u[g]));\n      return \"(\" + h.join(\";\") + \")\";\n    }, stringify_argument: function(u) {\n      return (u.id ? u.id : this.is_date(u) ? u.valueOf() : u) + \"\";\n    }, activate: function() {\n      this.clear(), this.active = !0;\n    }, deactivate: function() {\n      this.clear(), this.active = !1;\n    }, clear: function() {\n      this.cache = {};\n    }, setup: function(u) {\n      var h = [], g = [\"_isProjectEnd\", \"_getProjectEnd\", \"_getSlack\"];\n      this.mode == \"auto\" ? u.config.highlight_critical_path && (h = g) : this.mode === !0 && (h = g), this.wrap_methods(h, u);\n    }, update_if_changed: function(u) {\n      (this.critical_path_mode != u.config.highlight_critical_path || this.mode !== u.config.optimize_render) && (this.critical_path_mode = u.config.highlight_critical_path, this.mode = u.config.optimize_render, this.setup(u));\n    } }, l.attachEvent(\"onBeforeGanttRender\", d), l.attachEvent(\"onBeforeDataRender\", d), l.attachEvent(\"onBeforeSmartRender\", function() {\n      d();\n    }), l.attachEvent(\"onBeforeParse\", d), l.attachEvent(\"onDataRender\", function() {\n      l._cached_functions.deactivate();\n    });\n    var c = null;\n    l.attachEvent(\"onSmartRender\", function() {\n      c && clearTimeout(c), c = setTimeout(function() {\n        l._cached_functions.deactivate();\n      }, 1e3);\n    }), l.attachEvent(\"onBeforeGanttReady\", function() {\n      return l._cached_functions.update_if_changed(l), !0;\n    });\n  }(e), Ti(e), function(l) {\n    l.destructor = function() {\n      for (var d in this.clearAll(), this.callEvent(\"onDestroy\", []), this.$root && delete this.$root.gantt, this._eventRemoveAll && this._eventRemoveAll(), this.$layout && this.$layout.destructor(), this.resetLightbox && this.resetLightbox(), this.ext.inlineEditors && this.ext.inlineEditors.destructor(), this._dp && this._dp.destructor && this._dp.destructor(), this.$services.destructor(), this.detachAllEvents(), this) d.indexOf(\"$\") === 0 && delete this[d];\n      this.$destroyed = !0;\n    };\n  }(e);\n  var o = new Gi({ en: Pi, ar: Ei, be: Ci, ca: Di, cn: Ai, cs: Ii, da: Mi, de: Ni, el: Li, es: Ri, fa: Hi, fi: Oi, fr: Bi, he: zi, hr: Wi, hu: ji, id: Fi, it: Vi, jp: Ui, kr: qi, nb: Yi, nl: Ji, no: Ki, pl: Xi, pt: Zi, ro: Qi, ru: ta, si: ea, sk: na, sv: ia, tr: aa, ua: ra });\n  return e.i18n = { addLocale: o.addLocale, setLocale: function(l) {\n    if (typeof l == \"string\") {\n      var d = o.getLocale(l);\n      d || (d = o.getLocale(\"en\")), e.locale = d;\n    } else if (l) if (e.locale) for (var c in l) l[c] && typeof l[c] == \"object\" ? (e.locale[c] || (e.locale[c] = {}), e.mixin(e.locale[c], l[c], !0)) : e.locale[c] = l[c];\n    else e.locale = l;\n  }, getLocale: o.getLocale }, e.i18n.setLocale(\"en\"), e;\n}\nfunction la(t) {\n  var e = \"data-dhxbox\", n = null;\n  function i(_, m) {\n    var p = _.callback;\n    y.hide(_.box), n = _.box = null, p && p(m);\n  }\n  function a(_) {\n    if (n) {\n      var m = _.which || _.keyCode, p = !1;\n      if (v.keyboard) {\n        if (m == 13 || m == 32) {\n          var k = _.target || _.srcElement;\n          K(k).indexOf(\"gantt_popup_button\") > -1 && k.click ? k.click() : (i(n, !0), p = !0);\n        }\n        m == 27 && (i(n, !1), p = !0);\n      }\n      return p ? (_.preventDefault && _.preventDefault(), !(_.cancelBubble = !0)) : void 0;\n    }\n  }\n  var r = mt(t.$root) || document;\n  function s(_) {\n    s.cover || (s.cover = document.createElement(\"div\"), s.cover.onkeydown = a, s.cover.className = \"dhx_modal_cover\", document.body.appendChild(s.cover)), s.cover.style.display = _ ? \"inline-block\" : \"none\";\n  }\n  function o(_, m, p) {\n    return \"<div \" + t._waiAria.messageButtonAttrString(_) + \" class='gantt_popup_button \" + (\"gantt_\" + m.toLowerCase().replace(/ /g, \"_\") + \"_button\") + \"' data-result='\" + p + \"' result='\" + p + \"' ><div>\" + _ + \"</div></div>\";\n  }\n  function l() {\n    for (var _ = [].slice.apply(arguments, [0]), m = 0; m < _.length; m++) if (_[m]) return _[m];\n  }\n  function d(_, m, p) {\n    var k = _.tagName ? _ : function(x, S, T) {\n      var E = document.createElement(\"div\"), C = rt();\n      t._waiAria.messageModalAttr(E, C), E.className = \" gantt_modal_box gantt-\" + x.type, E.setAttribute(e, 1);\n      var D = \"\";\n      if (x.width && (E.style.width = x.width), x.height && (E.style.height = x.height), x.title && (D += '<div class=\"gantt_popup_title\">' + x.title + \"</div>\"), D += '<div class=\"gantt_popup_text\" id=\"' + C + '\"><span>' + (x.content ? \"\" : x.text) + '</span></div><div  class=\"gantt_popup_controls\">', S && (D += o(l(x.ok, t.locale.labels.message_ok, \"OK\"), \"ok\", !0)), T && (D += o(l(x.cancel, t.locale.labels.message_cancel, \"Cancel\"), \"cancel\", !1)), x.buttons) for (var A = 0; A < x.buttons.length; A++) {\n        var I = x.buttons[A];\n        D += typeof I == \"object\" ? o(I.label, I.css || \"gantt_\" + I.label.toLowerCase() + \"_button\", I.value || A) : o(I, I, A);\n      }\n      if (D += \"</div>\", E.innerHTML = D, x.content) {\n        var M = x.content;\n        typeof M == \"string\" && (M = document.getElementById(M)), M.style.display == \"none\" && (M.style.display = \"\"), E.childNodes[x.title ? 1 : 0].appendChild(M);\n      }\n      return E.onclick = function(L) {\n        var P = L.target || L.srcElement;\n        if (P.className || (P = P.parentNode), lt(P, \".gantt_popup_button\")) {\n          var H = P.getAttribute(\"data-result\");\n          i(x, H = H == \"true\" || H != \"false\" && H);\n        }\n      }, x.box = E, (S || T) && (n = x), E;\n    }(_, m, p);\n    _.hidden || s(!0), document.body.appendChild(k);\n    var $ = Math.abs(Math.floor(((window.innerWidth || document.documentElement.offsetWidth) - k.offsetWidth) / 2)), w = Math.abs(Math.floor(((window.innerHeight || document.documentElement.offsetHeight) - k.offsetHeight) / 2));\n    return _.position == \"top\" ? k.style.top = \"-3px\" : k.style.top = w + \"px\", k.style.left = $ + \"px\", k.onkeydown = a, y.focus(k), _.hidden && y.hide(k), t.callEvent(\"onMessagePopup\", [k]), k;\n  }\n  function c(_) {\n    return d(_, !0, !1);\n  }\n  function u(_) {\n    return d(_, !0, !0);\n  }\n  function h(_) {\n    return d(_);\n  }\n  function g(_, m, p) {\n    return typeof _ != \"object\" && (typeof m == \"function\" && (p = m, m = \"\"), _ = { text: _, type: m, callback: p }), _;\n  }\n  function f(_, m, p, k) {\n    return typeof _ != \"object\" && (_ = { text: _, type: m, expire: p, id: k }), _.id = _.id || rt(), _.expire = _.expire || v.expire, _;\n  }\n  t.event(r, \"keydown\", a, !0);\n  var y = function() {\n    var _ = g.apply(this, arguments);\n    return _.type = _.type || \"alert\", h(_);\n  };\n  y.hide = function(_) {\n    for (; _ && _.getAttribute && !_.getAttribute(e); ) _ = _.parentNode;\n    _ && (_.parentNode.removeChild(_), s(!1), t.callEvent(\"onAfterMessagePopup\", [_]));\n  }, y.focus = function(_) {\n    setTimeout(function() {\n      var m = ye(_);\n      m.length && m[0].focus && m[0].focus();\n    }, 1);\n  };\n  var v = function(_, m, p, k) {\n    switch ((_ = f.apply(this, arguments)).type = _.type || \"info\", _.type.split(\"-\")[0]) {\n      case \"alert\":\n        return c(_);\n      case \"confirm\":\n        return u(_);\n      case \"modalbox\":\n        return h(_);\n      default:\n        return function($) {\n          v.area || (v.area = document.createElement(\"div\"), v.area.className = \"gantt_message_area\", v.area.style[v.position] = \"5px\", document.body.appendChild(v.area)), v.hide($.id);\n          var w = document.createElement(\"div\");\n          return w.innerHTML = \"<div>\" + $.text + \"</div>\", w.className = \"gantt-info gantt-\" + $.type, w.onclick = function() {\n            v.hide($.id), $ = null;\n          }, t._waiAria.messageInfoAttr(w), v.position == \"bottom\" && v.area.firstChild ? v.area.insertBefore(w, v.area.firstChild) : v.area.appendChild(w), $.expire > 0 && (v.timers[$.id] = window.setTimeout(function() {\n            v && v.hide($.id);\n          }, $.expire)), v.pull[$.id] = w, w = null, $.id;\n        }(_);\n    }\n  };\n  v.seed = (/* @__PURE__ */ new Date()).valueOf(), v.uid = rt, v.expire = 4e3, v.keyboard = !0, v.position = \"top\", v.pull = {}, v.timers = {}, v.hideAll = function() {\n    for (var _ in v.pull) v.hide(_);\n  }, v.hide = function(_) {\n    var m = v.pull[_];\n    m && m.parentNode && (window.setTimeout(function() {\n      m.parentNode.removeChild(m), m = null;\n    }, 2e3), m.className += \" hidden\", v.timers[_] && window.clearTimeout(v.timers[_]), delete v.pull[_]);\n  };\n  var b = [];\n  return t.attachEvent(\"onMessagePopup\", function(_) {\n    b.push(_);\n  }), t.attachEvent(\"onAfterMessagePopup\", function(_) {\n    for (var m = 0; m < b.length; m++) b[m] === _ && (b.splice(m, 1), m--);\n  }), t.attachEvent(\"onDestroy\", function() {\n    s.cover && s.cover.parentNode && s.cover.parentNode.removeChild(s.cover);\n    for (var _ = 0; _ < b.length; _++) b[_].parentNode && b[_].parentNode.removeChild(b[_]);\n    b = null, v.area && v.area.parentNode && v.area.parentNode.removeChild(v.area), v = null;\n  }), { alert: function() {\n    var _ = g.apply(this, arguments);\n    return _.type = _.type || \"confirm\", c(_);\n  }, confirm: function() {\n    var _ = g.apply(this, arguments);\n    return _.type = _.type || \"alert\", u(_);\n  }, message: v, modalbox: y };\n}\nfunction ze(t, e) {\n  var n = this.$config[t];\n  return n ? (n.$extendedConfig || (n.$extendedConfig = !0, Object.setPrototypeOf(n, e)), n) : e;\n}\nfunction da(t, e) {\n  var n, i, a;\n  N(t, (n = e, { $getConfig: function() {\n    return i || (i = n ? n.$getConfig() : this.$gantt.config), this.$config.config ? ze.call(this, \"config\", i) : i;\n  }, $getTemplates: function() {\n    return a || (a = n ? n.$getTemplates() : this.$gantt.templates), this.$config.templates ? ze.call(this, \"templates\", a) : a;\n  } }));\n}\nconst ca = function(t) {\n  var e = {}, n = {};\n  function i(a, r, s, o) {\n    var l = e[a];\n    if (!l || !l.create) return !1;\n    a != \"resizer\" || s.mode || (o.$config.cols ? s.mode = \"x\" : s.mode = \"y\"), a != \"viewcell\" || s.view != \"scrollbar\" || s.scroll || (o.$config.cols ? s.scroll = \"y\" : s.scroll = \"x\"), (s = q(s)).id || n[s.view] || (s.id = s.view), s.id && !s.css && (s.css = s.id + \"_cell\");\n    var d = new l.create(r, s, this, t);\n    return l.configure && l.configure(d), da(d, o), d.$id || (d.$id = s.id || t.uid()), d.$parent || typeof r != \"object\" || (d.$parent = r), d.$config || (d.$config = s), n[d.$id] && (d.$id = t.uid()), n[d.$id] = d, d;\n  }\n  return { initUI: function(a, r) {\n    var s = \"cell\";\n    return a.view ? s = \"viewcell\" : a.resizer ? s = \"resizer\" : a.rows || a.cols ? s = \"layout\" : a.views && (s = \"multiview\"), i.call(this, s, null, a, r);\n  }, reset: function() {\n    n = {};\n  }, registerView: function(a, r, s) {\n    e[a] = { create: r, configure: s };\n  }, createView: i, getView: function(a) {\n    return n[a];\n  } };\n};\nvar ua = /* @__PURE__ */ function(t) {\n  return function(e) {\n    var n = { click: {}, doubleclick: {}, contextMenu: {} };\n    function i(h, g, f, y) {\n      n[h][g] || (n[h][g] = []), n[h][g].push({ handler: f, root: y });\n    }\n    function a(h) {\n      h = h || window.event;\n      var g = e.locate(h), f = s(h, n.click), y = !0;\n      if (g !== null ? y = !e.checkEvent(\"onTaskClick\") || e.callEvent(\"onTaskClick\", [g, h]) : e.callEvent(\"onEmptyClick\", [h]), y) {\n        if (!o(f, h, g)) return;\n        switch (h.target.nodeName) {\n          case \"SELECT\":\n          case \"INPUT\":\n            return;\n        }\n        g && e.getTask(g) && !e._multiselect && e.config.select_task && e.selectTask(g);\n      }\n    }\n    function r(h) {\n      var g = (h = h || window.event).target || h.srcElement, f = e.locate(g), y = e.locate(g, e.config.link_attribute), v = !e.checkEvent(\"onContextMenu\") || e.callEvent(\"onContextMenu\", [f, y, h]);\n      return v || (h.preventDefault ? h.preventDefault() : h.returnValue = !1), v;\n    }\n    function s(h, g) {\n      for (var f = h.target || h.srcElement, y = []; f; ) {\n        var v = t.getClassName(f);\n        if (v) {\n          v = v.split(\" \");\n          for (var b = 0; b < v.length; b++) if (v[b] && g[v[b]]) for (var _ = g[v[b]], m = 0; m < _.length; m++) _[m].root && !t.isChildOf(f, _[m].root) || y.push(_[m].handler);\n        }\n        f = f.parentNode;\n      }\n      return y;\n    }\n    function o(h, g, f) {\n      for (var y = !0, v = 0; v < h.length; v++) {\n        var b = h[v].call(e, g, f, g.target || g.srcElement);\n        y = y && !(b !== void 0 && b !== !0);\n      }\n      return y;\n    }\n    function l(h) {\n      h = h || window.event;\n      var g = e.locate(h), f = s(h, n.doubleclick), y = !e.checkEvent(\"onTaskDblClick\") || g === null || e.callEvent(\"onTaskDblClick\", [g, h]);\n      if (y) {\n        if (!o(f, h, g)) return;\n        g !== null && e.getTask(g) && y && e.config.details_on_dblclick && !e.isReadonly(g) && e.showLightbox(g);\n      }\n    }\n    function d(h) {\n      if (e.checkEvent(\"onMouseMove\")) {\n        var g = e.locate(h);\n        e._last_move_event = h, e.callEvent(\"onMouseMove\", [g, h]);\n      }\n    }\n    var c = e._createDomEventScope();\n    function u(h) {\n      c.detachAll(), h && (c.attach(h, \"click\", a), c.attach(h, \"dblclick\", l), c.attach(h, \"mousemove\", d), c.attach(h, \"contextmenu\", r));\n    }\n    return { reset: u, global: function(h, g, f) {\n      i(h, g, f, null);\n    }, delegate: i, detach: function(h, g, f, y) {\n      if (n[h] && n[h][g]) {\n        for (var v = n[h], b = v[g], _ = 0; _ < b.length; _++) b[_].root == y && (b.splice(_, 1), _--);\n        b.length || delete v[g];\n      }\n    }, callHandler: function(h, g, f, y) {\n      var v = n[h][g];\n      if (v) for (var b = 0; b < v.length; b++) (f || v[b].root) && v[b].root !== f || v[b].handler.apply(this, y);\n    }, onDoubleClick: l, onMouseMove: d, onContextMenu: r, onClick: a, destructor: function() {\n      u(), n = null, c = null;\n    } };\n  };\n}(rn);\nconst ha = { init: ua };\nfunction We(t, e, n) {\n  return !!e && !(e.left > t.x_end || e.left + e.width < t.x) && !(e.top > t.y_end || e.top + e.height < t.y);\n}\nfunction Mt(t) {\n  return t.config.smart_rendering && t._smart_render;\n}\nfunction Gt(t, e, n) {\n  return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: 0, right: 1 / 0 };\n}\nfunction gt(t, e, n, i, a) {\n  var r = e.getItemIndexByTopPosition(a.y) || 0, s = e.getItemIndexByTopPosition(a.y_end) || i.count(), o = Math.max(0, r - 1), l = Math.min(i.count(), s + 1);\n  const d = [];\n  if (t.config.keyboard_navigation && t.getSelectedId() && d.push(t.getSelectedId()), t.$ui.getView(\"grid\") && t.ext.inlineEditors && t.ext.inlineEditors.getState().id) {\n    let c = t.ext.inlineEditors.getState().id;\n    i.exists(c) && d.push(c);\n  }\n  return { start: o, end: l, ids: d };\n}\nvar _a = function(t) {\n  var e = /* @__PURE__ */ function(n) {\n    var i = {}, a = {};\n    function r(o) {\n      var l = null;\n      return typeof o.view == \"string\" ? l = n.$ui.getView(o.view) : o.view && (l = o.view), l;\n    }\n    function s(o, l, d) {\n      if (a[o]) return a[o];\n      l.renderer || n.assert(!1, \"Invalid renderer call\");\n      var c = null, u = null, h = null, g = null, f = null;\n      typeof l.renderer == \"function\" ? (c = l.renderer, h = Gt) : (c = l.renderer.render, u = l.renderer.update, g = l.renderer.onrender, l.renderer.isInViewPort ? f = l.renderer.isInViewPort : h = l.renderer.getRectangle, h || h === null || (h = Gt));\n      var y = l.filter;\n      return d && d.setAttribute(n.config.layer_attribute, !0), a[o] = { render_item: function(v, b, _, m, p) {\n        if (b = b || d, !y || y(v)) {\n          var k = m || r(l), $ = p || (k ? k.$getConfig() : null), w = _;\n          !w && $ && $.smart_rendering && (w = k.getViewPort());\n          var x = null;\n          !Mt(n) && (h || f) && w ? (f ? f(v, w, k, $, n) : We(w, h(v, k, $, n))) && (x = c.call(n, v, k, $, w)) : x = c.call(n, v, k, $, w), this.append(v, x, b);\n          var S = b.nodeType == 11;\n          g && !S && x && g.call(n, v, x, k);\n        } else this.remove_item(v.id);\n      }, clear: function(v) {\n        this.rendered = i[o] = {}, l.append || this.clear_container(v);\n      }, clear_container: function(v) {\n        (v = v || d) && (v.innerHTML = \"\");\n      }, get_visible_range: function(v) {\n        var b, _, m = r(l), p = m ? m.$getConfig() : null;\n        return p && p.smart_rendering && (b = m.getViewPort()), m && b && (typeof l.renderer == \"function\" ? _ = gt(n, m, 0, v, b) : l.renderer && l.renderer.getVisibleRange && (_ = l.renderer.getVisibleRange(n, m, p, v, b))), _ || (_ = { start: 0, end: v.count() }), _;\n      }, prepare_data: function(v) {\n        if (l.renderer && l.renderer.prepareData) return l.renderer.prepareData(v, n, l);\n      }, render_items: function(v, b) {\n        b = b || d;\n        var _ = document.createDocumentFragment();\n        this.clear(b);\n        var m = null, p = r(l), k = p ? p.$getConfig() : null;\n        k && k.smart_rendering && (m = p.getViewPort());\n        for (var $ = 0, w = v.length; $ < w; $++) this.render_item(v[$], _, m, p, k);\n        b.appendChild(_, b);\n        var x = {};\n        v.forEach(function(E) {\n          x[E.id] = E;\n        });\n        var S = {};\n        if (g) {\n          var T = {};\n          for (var $ in this.rendered) S[$] || (T[$] = this.rendered[$], g.call(n, x[$], this.rendered[$], p));\n        }\n      }, update_items: function(v, b) {\n        var _ = r(l), m = _ ? _.$getConfig() : null;\n        if (_ && _.$getConfig().smart_rendering && !Mt(n) && this.rendered && (h || f)) {\n          b = b || d;\n          var p = document.createDocumentFragment(), k = null;\n          _ && (k = _.getViewPort());\n          var $ = {};\n          v.forEach(function(I) {\n            $[I.id] = I;\n          });\n          var w = {}, x = {};\n          for (var S in this.rendered) x[S] = !0, w[S] = !0;\n          for (var T = {}, E = (S = 0, v.length); S < E; S++) {\n            var C = v[S], D = this.rendered[C.id];\n            x[C.id] = !1, D && D.parentNode ? (f ? f(C, k, _, m, n) : We(k, h(C, _, m, n))) ? (u && u.call(n, C, D, _, m, k), this.restore(C, p)) : x[C.id] = !0 : (T[v[S].id] = !0, this.render_item(v[S], p, k, _, m));\n          }\n          for (var S in x) x[S] && this.hide(S);\n          if (p.childNodes.length && b.appendChild(p, b), g) {\n            var A = {};\n            for (var S in this.rendered) w[S] && !T[S] || (A[S] = this.rendered[S], g.call(n, $[S], this.rendered[S], _));\n          }\n        }\n      }, append: function(v, b, _) {\n        this.rendered && (b ? (this.rendered[v.id] && this.rendered[v.id].parentNode ? this.replace_item(v.id, b) : _.appendChild(b), this.rendered[v.id] = b) : this.rendered[v.id] && this.remove_item(v.id));\n      }, replace_item: function(v, b) {\n        var _ = this.rendered[v];\n        _ && _.parentNode && _.parentNode.replaceChild(b, _), this.rendered[v] = b;\n      }, remove_item: function(v) {\n        this.hide(v), delete this.rendered[v];\n      }, hide: function(v) {\n        var b = this.rendered[v];\n        b && b.parentNode && b.parentNode.removeChild(b);\n      }, restore: function(v, b) {\n        var _ = this.rendered[v.id];\n        _ ? _.parentNode || this.append(v, _, b || d) : this.render_item(v, b || d);\n      }, change_id: function(v, b) {\n        this.rendered[b] = this.rendered[v], delete this.rendered[v];\n      }, rendered: i[o], node: d, destructor: function() {\n        this.clear(), delete a[o], delete i[o];\n      } }, a[o];\n    }\n    return { getRenderer: s, clearRenderers: function() {\n      for (var o in a) s(o).destructor();\n    } };\n  }(t);\n  return { createGroup: function(n, i, a, r) {\n    var s = { tempCollection: [], renderers: {}, container: n, filters: [], getLayers: function() {\n      this._add();\n      var o = [];\n      for (var l in this.renderers) o.push(this.renderers[l]);\n      return o;\n    }, getLayer: function(o) {\n      return this.renderers[o];\n    }, _add: function(o) {\n      o && (o.id = o.id || rt(), this.tempCollection.push(o));\n      for (var l = this.container(), d = this.tempCollection, c = 0; c < d.length; c++) if (o = d[c], this.container() || o && o.container && G(o.container, document.body)) {\n        var u = o.container, h = o.id, g = o.topmost;\n        if (!u.parentNode) if (g) l.appendChild(u);\n        else {\n          var f = i ? i() : l.firstChild;\n          f && f.parentNode == l ? l.insertBefore(u, f) : l.appendChild(u);\n        }\n        this.renderers[h] = e.getRenderer(h, o, u), r && r(o, t), this.tempCollection.splice(c, 1), c--;\n      }\n    }, addLayer: function(o) {\n      if (o) {\n        typeof o == \"function\" && (o = { renderer: o }), o.filter === void 0 ? o.filter = je(a || []) : o.filter instanceof Array && (o.filter.push(a), o.filter = je(o.filter)), o.container || (o.container = document.createElement(\"div\"));\n        var l = this;\n        o.requestUpdate = function() {\n          t.config.smart_rendering && !Mt(t) && l.renderers[o.id] && l.onUpdateRequest(l.renderers[o.id]);\n        };\n      }\n      return this._add(o), o ? o.id : void 0;\n    }, onUpdateRequest: function(o) {\n    }, eachLayer: function(o) {\n      for (var l in this.renderers) o(this.renderers[l]);\n    }, removeLayer: function(o) {\n      this.renderers[o] && (this.renderers[o].destructor(), delete this.renderers[o]);\n    }, clear: function() {\n      for (var o in this.renderers) this.renderers[o].destructor();\n      this.renderers = {};\n    } };\n    return t.attachEvent(\"onDestroy\", function() {\n      s.clear(), s = null;\n    }), s;\n  } };\n};\nfunction je(t) {\n  return t instanceof Array || (t = Array.prototype.slice.call(arguments, 0)), function(e) {\n    for (var n = !0, i = 0, a = t.length; i < a; i++) {\n      var r = t[i];\n      r && (n = n && r(e.id, e) !== !1);\n    }\n    return n;\n  };\n}\nfunction Fe(t, e, n) {\n  if (!t.start_date || !t.end_date) return null;\n  var i = e.posFromDate(t.start_date), a = e.posFromDate(t.end_date), r = Math.min(i, a) - 200, s = Math.max(i, a) + 200;\n  return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: r, width: s - r };\n}\nfunction pn() {\n  var t = [], e = !1;\n  function n() {\n    t = [], e = !1;\n  }\n  function i(r, s, o) {\n    s.$getConfig(), r.getVisibleItems().forEach(function(l) {\n      var d = function(c, u, h, g) {\n        if (!g.isTaskExists(c.source) || !g.isTaskExists(c.target)) return null;\n        var f = Fe(g.getTask(c.source), u), y = Fe(g.getTask(c.target), u);\n        if (!f || !y) return null;\n        var v = 100, b = Math.min(f.left, y.left) - v, _ = Math.max(f.left + f.width, y.left + y.width) + v, m = Math.min(f.top, y.top) - v, p = Math.max(f.top + f.height, y.top + y.height) + v;\n        return { top: m, height: p - m, bottom: p, left: b, width: _ - b, right: _ };\n      }(l, s, 0, o);\n      d && t.push({ id: l.id, rec: d });\n    }), t.sort(function(l, d) {\n      return l.rec.right < d.rec.right ? -1 : 1;\n    }), e = !0;\n  }\n  var a = !1;\n  return function(r, s, o, l, d) {\n    (function(f) {\n      a || (a = !0, f.attachEvent(\"onPreFilter\", n), f.attachEvent(\"onStoreUpdated\", n), f.attachEvent(\"onClearAll\", n), f.attachEvent(\"onBeforeStoreUpdate\", n));\n    })(l), e || i(l, s, r);\n    for (var c = [], u = 0; u < t.length; u++) {\n      var h = t[u], g = h.rec;\n      g.right < d.x || g.left < d.x_end && g.right > d.x && g.top < d.y_end && g.bottom > d.y && c.push(h.id);\n    }\n    return { ids: c };\n  };\n}\nfunction mn(t, e, n, i, a) {\n  var r = n.$gantt.getTask(t.source), s = n.$gantt.getTask(t.target), o = n.getItemTop(r.id), l = n.getItemHeight(r.id), d = n.getItemTop(s.id), c = n.getItemHeight(s.id);\n  if (e.y > o + l && e.y > d + c || e.y_end < d && e.y_end < o) return !1;\n  var u = 100, h = n.posFromDate(r.start_date), g = n.posFromDate(r.end_date), f = n.posFromDate(s.start_date), y = n.posFromDate(s.end_date);\n  if (h > g) {\n    var v = g;\n    g = h, h = v;\n  }\n  return f > y && (v = y, y = f, f = v), h += -100, g += u, f += -100, y += u, !(e.x > g && e.x > y) && !(e.x_end < h && e.x_end < f);\n}\nfunction ga(t, e) {\n  if (t.view) {\n    var n = t.view;\n    typeof n == \"string\" && (n = e.$ui.getView(n)), n && n.attachEvent && n.attachEvent(\"onScroll\", function() {\n      e.$services.getService(\"state\").getState(\"batchUpdate\").batch_update || n.$config.$skipSmartRenderOnScroll || t.requestUpdate && t.requestUpdate();\n    });\n  }\n}\nvar Pt = function() {\n  function t(e, n, i, a) {\n    e && (this.$container = be(e), this.$parent = e), this.$config = N(n, { headerHeight: 33 }), this.$gantt = a, this.$domEvents = a._createDomEventScope(), this.$id = n.id || \"c\" + rt(), this.$name = \"cell\", this.$factory = i, st(this);\n  }\n  return t.prototype.destructor = function() {\n    this.$parent = this.$container = this.$view = null, this.$gantt.$services.getService(\"mouseEvents\").detach(\"click\", \"gantt_header_arrow\", this._headerClickHandler), this.$domEvents.detachAll(), this.callEvent(\"onDestroy\", []), this.detachAllEvents();\n  }, t.prototype.cell = function(e) {\n    return null;\n  }, t.prototype.scrollTo = function(e, n) {\n    var i = this.$view;\n    this.$config.html && (i = this.$view.firstChild), 1 * e == e && (i.scrollLeft = e), 1 * n == n && (i.scrollTop = n);\n  }, t.prototype.clear = function() {\n    this.getNode().innerHTML = \"\", this.getNode().className = \"gantt_layout_content\", this.getNode().style.padding = \"0\";\n  }, t.prototype.resize = function(e) {\n    if (this.$parent) return this.$parent.resize(e);\n    e === !1 && (this.$preResize = !0);\n    var n = this.$container, i = n.offsetWidth, a = n.offsetHeight, r = this.getSize();\n    n === document.body && (i = document.body.offsetWidth, a = document.body.offsetHeight), i < r.minWidth && (i = r.minWidth), i > r.maxWidth && (i = r.maxWidth), a < r.minHeight && (a = r.minHeight), a > r.maxHeight && (a = r.maxHeight), this.setSize(i, a), this.$preResize, this.$preResize = !1;\n  }, t.prototype.hide = function() {\n    this._hide(!0), this.resize();\n  }, t.prototype.show = function(e) {\n    this._hide(!1), e && this.$parent && this.$parent.show(), this.resize();\n  }, t.prototype._hide = function(e) {\n    if (e === !0 && this.$view.parentNode) this.$view.parentNode.removeChild(this.$view);\n    else if (e === !1 && !this.$view.parentNode) {\n      var n = this.$parent.cellIndex(this.$id);\n      this.$parent.moveView(this, n);\n    }\n    this.$config.hidden = e;\n  }, t.prototype.$toHTML = function(e, n) {\n    e === void 0 && (e = \"\"), n = [n || \"\", this.$config.css || \"\"].join(\" \");\n    var i = this.$config, a = \"\";\n    return i.raw ? e = typeof i.raw == \"string\" ? i.raw : \"\" : (e || (e = \"<div class='gantt_layout_content' \" + (n ? \" class='\" + n + \"' \" : \"\") + \" >\" + (i.html || \"\") + \"</div>\"), i.header && (a = \"<div class='gantt_layout_header'>\" + (i.canCollapse ? \"<div class='gantt_layout_header_arrow'></div>\" : \"\") + \"<div class='gantt_layout_header_content'>\" + i.header + \"</div></div>\")), \"<div class='gantt_layout_cell \" + n + \"' data-cell-id='\" + this.$id + \"'>\" + a + e + \"</div>\";\n  }, t.prototype.$fill = function(e, n) {\n    this.$view = e, this.$parent = n, this.init();\n  }, t.prototype.getNode = function() {\n    return this.$view.querySelector(\"gantt_layout_cell\") || this.$view;\n  }, t.prototype.init = function() {\n    var e = this;\n    this._headerClickHandler = function(n) {\n      tt(n, \"data-cell-id\") == e.$id && e.toggle();\n    }, this.$gantt.$services.getService(\"mouseEvents\").delegate(\"click\", \"gantt_header_arrow\", this._headerClickHandler), this.callEvent(\"onReady\", []);\n  }, t.prototype.toggle = function() {\n    this.$config.collapsed = !this.$config.collapsed, this.resize();\n  }, t.prototype.getSize = function() {\n    var e = { height: this.$config.height || 0, width: this.$config.width || 0, gravity: this.$config.gravity || 1, minHeight: this.$config.minHeight || 0, minWidth: this.$config.minWidth || 0, maxHeight: this.$config.maxHeight || 1e11, maxWidth: this.$config.maxWidth || 1e11 };\n    if (this.$config.collapsed) {\n      var n = this.$config.mode === \"x\";\n      e[n ? \"width\" : \"height\"] = e[n ? \"maxWidth\" : \"maxHeight\"] = this.$config.headerHeight;\n    }\n    return e;\n  }, t.prototype.getContentSize = function() {\n    var e = this.$lastSize.contentX;\n    e !== 1 * e && (e = this.$lastSize.width);\n    var n = this.$lastSize.contentY;\n    return n !== 1 * n && (n = this.$lastSize.height), { width: e, height: n };\n  }, t.prototype._getBorderSizes = function() {\n    var e = { top: 0, right: 0, bottom: 0, left: 0, horizontal: 0, vertical: 0 };\n    return this._currentBorders && (this._currentBorders[this._borders.left] && (e.left = 1, e.horizontal++), this._currentBorders[this._borders.right] && (e.right = 1, e.horizontal++), this._currentBorders[this._borders.top] && (e.top = 1, e.vertical++), this._currentBorders[this._borders.bottom] && (e.bottom = 1, e.vertical++)), e;\n  }, t.prototype.setSize = function(e, n) {\n    this.$view.style.width = e + \"px\", this.$view.style.height = n + \"px\";\n    var i = this._getBorderSizes(), a = n - i.vertical, r = e - i.horizontal;\n    this.$lastSize = { x: e, y: n, contentX: r, contentY: a }, this.$config.header ? this._sizeHeader() : this._sizeContent();\n  }, t.prototype._borders = { left: \"gantt_layout_cell_border_left\", right: \"gantt_layout_cell_border_right\", top: \"gantt_layout_cell_border_top\", bottom: \"gantt_layout_cell_border_bottom\" }, t.prototype._setBorders = function(e, n) {\n    n || (n = this);\n    var i = n.$view;\n    for (var a in this._borders) Ut(i, this._borders[a]);\n    typeof e == \"string\" && (e = [e]);\n    var r = {};\n    for (a = 0; a < e.length; a++) $t(i, e[a]), r[e[a]] = !0;\n    n._currentBorders = r;\n  }, t.prototype._sizeContent = function() {\n    var e = this.$view.childNodes[0];\n    e && e.className == \"gantt_layout_content\" && (e.style.height = this.$lastSize.contentY + \"px\");\n  }, t.prototype._sizeHeader = function() {\n    var e = this.$lastSize;\n    e.contentY -= this.$config.headerHeight;\n    var n = this.$view.childNodes[0], i = this.$view.childNodes[1], a = this.$config.mode === \"x\";\n    if (this.$config.collapsed) if (i.style.display = \"none\", a) {\n      n.className = \"gantt_layout_header collapsed_x\", n.style.width = e.y + \"px\";\n      var r = Math.floor(e.y / 2 - e.x / 2);\n      n.style.transform = \"rotate(90deg) translate(\" + r + \"px, \" + r + \"px)\", i.style.display = \"none\";\n    } else n.className = \"gantt_layout_header collapsed_y\";\n    else n.className = a ? \"gantt_layout_header\" : \"gantt_layout_header vertical\", n.style.width = \"auto\", n.style.transform = \"\", i.style.display = \"\", i.style.height = e.contentY + \"px\";\n    n.style.height = this.$config.headerHeight + \"px\";\n  }, t;\n}();\nfunction z(t, e) {\n  for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);\n  function i() {\n    this.constructor = t;\n  }\n  t.prototype = e === null ? Object.create(e) : (i.prototype = e.prototype, new i());\n}\nvar vn = function(t) {\n  function e(n, i, a) {\n    var r = t.apply(this, arguments) || this;\n    return n && (r.$root = !0), r._parseConfig(i), r.$name = \"layout\", r;\n  }\n  return z(e, t), e.prototype.destructor = function() {\n    this.$container && this.$view && Qe(this.$view);\n    for (var n = 0; n < this.$cells.length; n++)\n      this.$cells[n].destructor();\n    this.$cells = [], t.prototype.destructor.call(this);\n  }, e.prototype._resizeScrollbars = function(n, i) {\n    var a = !1, r = [], s = [];\n    const o = [];\n    function l(f) {\n      f.$parent.show(), a = !0, r.push(f);\n    }\n    function d(f) {\n      f.$parent.hide(), a = !0, s.push(f);\n    }\n    for (var c, u = 0; u < i.length; u++) n[(c = i[u]).$config.scroll] ? d(c) : c.shouldHide() ? o.push(c) : c.shouldShow() ? l(c) : c.isVisible() ? r.push(c) : s.push(c);\n    var h = {};\n    for (u = 0; u < r.length; u++) r[u].$config.group && (h[r[u].$config.group] = !0);\n    for (o.forEach(function(f) {\n      f.$config.group && h[f.$config.group] || d(f);\n    }), u = 0; u < s.length; u++) if ((c = s[u]).$config.group && h[c.$config.group]) {\n      l(c);\n      for (var g = 0; g < r.length; g++) if (r[g] == c) {\n        this.$gantt.$scrollbarRepaint = !0;\n        break;\n      }\n    }\n    return a;\n  }, e.prototype._syncCellSizes = function(n, i) {\n    if (n) {\n      var a = {};\n      return this._eachChild(function(r) {\n        r.$config.group && r.$name != \"scrollbar\" && r.$name != \"resizer\" && (a[r.$config.group] || (a[r.$config.group] = []), a[r.$config.group].push(r));\n      }), a[n] && this._syncGroupSize(a[n], i), a[n];\n    }\n  }, e.prototype._syncGroupSize = function(n, i) {\n    if (n.length) for (var a = n[0].$parent._xLayout ? \"width\" : \"height\", r = n[0].$parent.getNextSibling(n[0].$id) ? 1 : -1, s = i.value, o = i.isGravity, l = 0; l < n.length; l++) {\n      var d = n[l].getSize(), c = r > 0 ? n[l].$parent.getNextSibling(n[l].$id) : n[l].$parent.getPrevSibling(n[l].$id);\n      c.$name == \"resizer\" && (c = r > 0 ? c.$parent.getNextSibling(c.$id) : c.$parent.getPrevSibling(c.$id));\n      var u = c.getSize();\n      if (o) n[l].$config.gravity = s;\n      else if (c[a]) {\n        var h = d.gravity + u.gravity, g = d[a] + u[a], f = h / g;\n        n[l].$config.gravity = f * s, c.$config[a] = g - s, c.$config.gravity = h - f * s;\n      } else n[l].$config[a] = s;\n      var y = this.$gantt.$ui.getView(\"grid\");\n      !y || n[l].$content !== y || y.$config.scrollable || o || (this.$gantt.config.grid_width = s);\n    }\n  }, e.prototype.resize = function(n) {\n    var i = !1;\n    if (this.$root && !this._resizeInProgress && (this.callEvent(\"onBeforeResize\", []), i = !0, this._resizeInProgress = !0), t.prototype.resize.call(this, !0), t.prototype.resize.call(this, !1), i) {\n      var a = [];\n      a = (a = (a = a.concat(this.getCellsByType(\"viewCell\"))).concat(this.getCellsByType(\"viewLayout\"))).concat(this.getCellsByType(\"hostCell\"));\n      for (var r = this.getCellsByType(\"scroller\"), s = 0; s < a.length; s++) a[s].$config.hidden || a[s].setContentSize();\n      var o = this._getAutosizeMode(this.$config.autosize), l = this._resizeScrollbars(o, r);\n      if (this.$config.autosize && (this.autosize(this.$config.autosize), a.forEach(function(d) {\n        const c = d.$parent, u = c.getContentSize(o);\n        o.x && (c.$config.$originalWidthStored || (c.$config.$originalWidthStored = !0, c.$config.$originalWidth = c.$config.width), c.$config.width = u.width), o.y && (c.$config.$originalHeightStored || (c.$config.$originalHeightStored = !0, c.$config.$originalHeight = c.$config.height), c.$config.height = u.height);\n      }), l = !0), l)\n        for (this.resize(), s = 0; s < a.length; s++) a[s].$config.hidden || a[s].setContentSize();\n      this.callEvent(\"onResize\", []);\n    }\n    i && (this._resizeInProgress = !1);\n  }, e.prototype._eachChild = function(n, i) {\n    if (n(i = i || this), i.$cells) for (var a = 0; a < i.$cells.length; a++) this._eachChild(n, i.$cells[a]);\n  }, e.prototype.isChild = function(n) {\n    var i = !1;\n    return this._eachChild(function(a) {\n      a !== n && a.$content !== n || (i = !0);\n    }), i;\n  }, e.prototype.getCellsByType = function(n) {\n    var i = [];\n    if (n === this.$name && i.push(this), this.$content && this.$content.$name == n && i.push(this.$content), this.$cells) for (var a = 0; a < this.$cells.length; a++) {\n      var r = e.prototype.getCellsByType.call(this.$cells[a], n);\n      r.length && i.push.apply(i, r);\n    }\n    return i;\n  }, e.prototype.getNextSibling = function(n) {\n    var i = this.cellIndex(n);\n    return i >= 0 && this.$cells[i + 1] ? this.$cells[i + 1] : null;\n  }, e.prototype.getPrevSibling = function(n) {\n    var i = this.cellIndex(n);\n    return i >= 0 && this.$cells[i - 1] ? this.$cells[i - 1] : null;\n  }, e.prototype.cell = function(n) {\n    for (var i = 0; i < this.$cells.length; i++) {\n      var a = this.$cells[i];\n      if (a.$id === n) return a;\n      var r = a.cell(n);\n      if (r) return r;\n    }\n  }, e.prototype.cellIndex = function(n) {\n    for (var i = 0; i < this.$cells.length; i++) if (this.$cells[i].$id === n) return i;\n    return -1;\n  }, e.prototype.moveView = function(n, i) {\n    if (this.$cells[i] !== n) return window.alert(\"Not implemented\");\n    i += this.$config.header ? 1 : 0;\n    var a = this.$view;\n    i >= a.childNodes.length ? a.appendChild(n.$view) : a.insertBefore(n.$view, a.childNodes[i]);\n  }, e.prototype._parseConfig = function(n) {\n    this.$cells = [], this._xLayout = !n.rows;\n    for (var i = n.rows || n.cols || n.views, a = 0; a < i.length; a++) {\n      var r = i[a];\n      r.mode = this._xLayout ? \"x\" : \"y\";\n      var s = this.$factory.initUI(r, this);\n      s ? (s.$parent = this, this.$cells.push(s)) : (i.splice(a, 1), a--);\n    }\n  }, e.prototype.getCells = function() {\n    return this.$cells;\n  }, e.prototype.render = function() {\n    var n = Ze(this.$container, this.$toHTML());\n    this.$fill(n, null), this.callEvent(\"onReady\", []), this.resize(), this.render = this.resize;\n  }, e.prototype.$fill = function(n, i) {\n    this.$view = n, this.$parent = i;\n    for (var a = tn(n, \"gantt_layout_cell\"), r = a.length - 1; r >= 0; r--) {\n      var s = this.$cells[r];\n      s.$fill(a[r], this), s.$config.hidden && s.$view.parentNode.removeChild(s.$view);\n    }\n  }, e.prototype.$toHTML = function() {\n    for (var n = this._xLayout ? \"x\" : \"y\", i = [], a = 0; a < this.$cells.length; a++) i.push(this.$cells[a].$toHTML());\n    return t.prototype.$toHTML.call(this, i.join(\"\"), (this.$root ? \"gantt_layout_root \" : \"\") + \"gantt_layout gantt_layout_\" + n);\n  }, e.prototype.getContentSize = function(n) {\n    for (var i, a, r, s = 0, o = 0, l = 0; l < this.$cells.length; l++) (a = this.$cells[l]).$config.hidden || (i = a.getContentSize(n), a.$config.view === \"scrollbar\" && n[a.$config.scroll] && (i.height = 0, i.width = 0), a.$config.resizer && (this._xLayout ? i.height = 0 : i.width = 0), r = a._getBorderSizes(), this._xLayout ? (s += i.width + r.horizontal, o = Math.max(o, i.height + r.vertical)) : (s = Math.max(s, i.width + r.horizontal), o += i.height + r.vertical));\n    return { width: s += (r = this._getBorderSizes()).horizontal, height: o += r.vertical };\n  }, e.prototype._cleanElSize = function(n) {\n    return 1 * (n || \"\").toString().replace(\"px\", \"\") || 0;\n  }, e.prototype._getBoxStyles = function(n) {\n    var i = null, a = [\"width\", \"height\", \"paddingTop\", \"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"borderLeftWidth\", \"borderRightWidth\", \"borderTopWidth\", \"borderBottomWidth\"], r = { boxSizing: (i = window.getComputedStyle ? window.getComputedStyle(n, null) : { width: n.clientWidth, height: n.clientHeight }).boxSizing == \"border-box\" };\n    i.MozBoxSizing && (r.boxSizing = i.MozBoxSizing == \"border-box\");\n    for (var s = 0; s < a.length; s++) r[a[s]] = i[a[s]] ? this._cleanElSize(i[a[s]]) : 0;\n    var o = { horPaddings: r.paddingLeft + r.paddingRight + r.borderLeftWidth + r.borderRightWidth, vertPaddings: r.paddingTop + r.paddingBottom + r.borderTopWidth + r.borderBottomWidth, borderBox: r.boxSizing, innerWidth: r.width, innerHeight: r.height, outerWidth: r.width, outerHeight: r.height };\n    return o.borderBox ? (o.innerWidth -= o.horPaddings, o.innerHeight -= o.vertPaddings) : (o.outerWidth += o.horPaddings, o.outerHeight += o.vertPaddings), o;\n  }, e.prototype._getAutosizeMode = function(n) {\n    var i = { x: !1, y: !1 };\n    return n === \"xy\" ? i.x = i.y = !0 : n === \"y\" || n === !0 ? i.y = !0 : n === \"x\" && (i.x = !0), i;\n  }, e.prototype.autosize = function(n) {\n    var i = this._getAutosizeMode(n), a = this._getBoxStyles(this.$container), r = this.getContentSize(n), s = this.$container;\n    i.x && (a.borderBox && (r.width += a.horPaddings), s.style.width = r.width + \"px\"), i.y && (a.borderBox && (r.height += a.vertPaddings), s.style.height = r.height + \"px\");\n  }, e.prototype.getSize = function() {\n    this._sizes = [];\n    for (var n = 0, i = 0, a = 1e11, r = 0, s = 1e11, o = 0, l = 0; l < this.$cells.length; l++) {\n      var d = this._sizes[l] = this.$cells[l].getSize();\n      this.$cells[l].$config.hidden || (this._xLayout ? (!d.width && d.minWidth ? n += d.minWidth : n += d.width, a += d.maxWidth, i += d.minWidth, r = Math.max(r, d.height), s = Math.min(s, d.maxHeight), o = Math.max(o, d.minHeight)) : (!d.height && d.minHeight ? r += d.minHeight : r += d.height, s += d.maxHeight, o += d.minHeight, n = Math.max(n, d.width), a = Math.min(a, d.maxWidth), i = Math.max(i, d.minWidth)));\n    }\n    var c = t.prototype.getSize.call(this);\n    return c.maxWidth >= 1e5 && (c.maxWidth = a), c.maxHeight >= 1e5 && (c.maxHeight = s), c.minWidth = c.minWidth != c.minWidth ? 0 : c.minWidth, c.minHeight = c.minHeight != c.minHeight ? 0 : c.minHeight, this._xLayout ? (c.minWidth += this.$config.margin * this.$cells.length || 0, c.minWidth += 2 * this.$config.padding || 0, c.minHeight += 2 * this.$config.padding || 0) : (c.minHeight += this.$config.margin * this.$cells.length || 0, c.minHeight += 2 * this.$config.padding || 0), c;\n  }, e.prototype._calcFreeSpace = function(n, i, a) {\n    var r = a ? i.minWidth : i.minHeight, s = i.maxWidth, o = n;\n    return o ? (o > s && (o = s), o < r && (o = r), this._free -= o) : ((o = Math.floor(this._free / this._gravity * i.gravity)) > s && (o = s, this._free -= o, this._gravity -= i.gravity), o < r && (o = r, this._free -= o, this._gravity -= i.gravity)), o;\n  }, e.prototype._calcSize = function(n, i, a) {\n    var r = n, s = a ? i.minWidth : i.minHeight, o = a ? i.maxWidth : i.maxHeight;\n    return r || (r = Math.floor(this._free / this._gravity * i.gravity)), r > o && (r = o), r < s && (r = s), r;\n  }, e.prototype._configureBorders = function() {\n    this.$root && this._setBorders([this._borders.left, this._borders.top, this._borders.right, this._borders.bottom], this);\n    for (var n = this._xLayout ? this._borders.right : this._borders.bottom, i = this.$cells, a = i.length - 1, r = a; r >= 0; r--) if (!i[r].$config.hidden) {\n      a = r;\n      break;\n    }\n    for (r = 0; r < i.length; r++) if (!i[r].$config.hidden) {\n      var s = r >= a, o = \"\";\n      !s && i[r + 1] && i[r + 1].$config.view == \"scrollbar\" && (this._xLayout ? s = !0 : o = \"gantt_layout_cell_border_transparent\"), this._setBorders(s ? [] : [n, o], i[r]);\n    }\n  }, e.prototype._updateCellVisibility = function() {\n    for (var n = this._visibleCells || {}, i = !this._visibleCells, a = {}, r = null, s = [], o = 0; o < this._sizes.length; o++) (r = this.$cells[o]).$config.hide_empty && s.push(r), !i && r.$config.hidden && n[r.$id] ? r._hide(!0) : r.$config.hidden || n[r.$id] || r._hide(!1), r.$config.hidden || (a[r.$id] = !0);\n    for (this._visibleCells = a, o = 0; o < s.length; o++) {\n      var l = (r = s[o]).$cells, d = !0;\n      l.forEach(function(c) {\n        c.$config.hidden || c.$config.resizer || (d = !1);\n      }), r.$config.hidden = d;\n    }\n  }, e.prototype.setSize = function(n, i) {\n    this._configureBorders(), t.prototype.setSize.call(this, n, i), i = this.$lastSize.contentY, n = this.$lastSize.contentX;\n    var a, r, s = this.$config.padding || 0;\n    this.$view.style.padding = s + \"px\", this._gravity = 0, this._free = this._xLayout ? n : i, this._free -= 2 * s, this._updateCellVisibility();\n    for (var o = 0; o < this._sizes.length; o++) if (!(a = this.$cells[o]).$config.hidden) {\n      var l = this.$config.margin || 0;\n      a.$name != \"resizer\" || l || (l = -1);\n      var d = a.$view, c = this._xLayout ? \"marginRight\" : \"marginBottom\";\n      o !== this.$cells.length - 1 && (d.style[c] = l + \"px\", this._free -= l), r = this._sizes[o], this._xLayout ? r.width || (this._gravity += r.gravity) : r.height || (this._gravity += r.gravity);\n    }\n    for (o = 0; o < this._sizes.length; o++) if (!(a = this.$cells[o]).$config.hidden) {\n      var u = (r = this._sizes[o]).width, h = r.height;\n      this._xLayout ? this._calcFreeSpace(u, r, !0) : this._calcFreeSpace(h, r, !1);\n    }\n    for (o = 0; o < this.$cells.length; o++) if (!(a = this.$cells[o]).$config.hidden) {\n      r = this._sizes[o];\n      var g = void 0, f = void 0;\n      this._xLayout ? (g = this._calcSize(r.width, r, !0), f = i - 2 * s) : (g = n - 2 * s, f = this._calcSize(r.height, r, !1)), a.setSize(g, f);\n    }\n  }, e;\n}(Pt), fa = function(t) {\n  function e(n, i, a) {\n    for (var r = t.apply(this, arguments) || this, s = 0; s < r.$cells.length; s++) r.$cells[s].$config.hidden = s !== 0;\n    return r.$cell = r.$cells[0], r.$name = \"viewLayout\", r;\n  }\n  return z(e, t), e.prototype.cell = function(n) {\n    var i = t.prototype.cell.call(this, n);\n    return i.$view || this.$fill(null, this), i;\n  }, e.prototype.moveView = function(n) {\n    var i = this.$view;\n    this.$cell && (this.$cell.$config.hidden = !0, i.removeChild(this.$cell.$view)), this.$cell = n, i.appendChild(n.$view);\n  }, e.prototype.setSize = function(n, i) {\n    Pt.prototype.setSize.call(this, n, i);\n  }, e.prototype.setContentSize = function() {\n    var n = this.$lastSize;\n    this.$cell.setSize(n.contentX, n.contentY);\n  }, e.prototype.getSize = function() {\n    var n = t.prototype.getSize.call(this);\n    if (this.$cell) {\n      var i = this.$cell.getSize();\n      if (this.$config.byMaxSize) for (var a = 0; a < this.$cells.length; a++) {\n        var r = this.$cells[a].getSize();\n        for (var s in i) i[s] = Math.max(i[s], r[s]);\n      }\n      for (var o in n) n[o] = n[o] || i[o];\n      n.gravity = Math.max(n.gravity, i.gravity);\n    }\n    return n;\n  }, e;\n}(vn), pa = function(t) {\n  function e(n, i, a) {\n    var r = t.apply(this, arguments) || this;\n    if (i.view) {\n      i.id && (this.$id = rt());\n      var s = q(i);\n      if (delete s.config, delete s.templates, this.$content = this.$factory.createView(i.view, this, s, this), !this.$content) return !1;\n    }\n    return r.$name = \"viewCell\", r;\n  }\n  return z(e, t), e.prototype.destructor = function() {\n    this.clear(), t.prototype.destructor.call(this);\n  }, e.prototype.clear = function() {\n    if (this.$initialized = !1, this.$content) {\n      var n = this.$content.unload || this.$content.destructor;\n      n && n.call(this.$content);\n    }\n    t.prototype.clear.call(this);\n  }, e.prototype.scrollTo = function(n, i) {\n    this.$content && this.$content.scrollTo ? this.$content.scrollTo(n, i) : t.prototype.scrollTo.call(this, n, i);\n  }, e.prototype._setContentSize = function(n, i) {\n    var a = this._getBorderSizes();\n    if (typeof n == \"number\") {\n      var r = n + a.horizontal;\n      this.$config.width = r;\n    }\n    if (typeof i == \"number\") {\n      var s = i + a.vertical;\n      this.$config.height = s;\n    }\n  }, e.prototype.setSize = function(n, i) {\n    if (t.prototype.setSize.call(this, n, i), !this.$preResize && this.$content && !this.$initialized) {\n      this.$initialized = !0;\n      var a = this.$view.childNodes[0], r = this.$view.childNodes[1];\n      r || (r = a), this.$content.init(r);\n    }\n  }, e.prototype.setContentSize = function() {\n    !this.$preResize && this.$content && this.$initialized && this.$content.setSize(this.$lastSize.contentX, this.$lastSize.contentY);\n  }, e.prototype.getContentSize = function() {\n    var n = t.prototype.getContentSize.call(this);\n    if (this.$content && this.$initialized) {\n      var i = this.$content.getSize();\n      n.width = i.contentX === void 0 ? i.width : i.contentX, n.height = i.contentY === void 0 ? i.height : i.contentY;\n    }\n    var a = this._getBorderSizes();\n    return n.width += a.horizontal, n.height += a.vertical, n;\n  }, e;\n}(Pt), ma = function(t) {\n  var e = [\"altKey\", \"shiftKey\", \"metaKey\"];\n  function n(a, r, s, o) {\n    var l = t.apply(this, arguments) || this;\n    this.$config = N(r, { scroll: \"x\" }), l._scrollHorizontalHandler = R(l._scrollHorizontalHandler, l), l._scrollVerticalHandler = R(l._scrollVerticalHandler, l), l._outerScrollVerticalHandler = R(l._outerScrollVerticalHandler, l), l._outerScrollHorizontalHandler = R(l._outerScrollHorizontalHandler, l), l._mouseWheelHandler = R(l._mouseWheelHandler, l), this.$config.hidden = !0;\n    var d = o.config.scroll_size;\n    return o.env.isIE && (d += 1), this._isHorizontal() ? (l.$config.height = d, l.$parent.$config.height = d) : (l.$config.width = d, l.$parent.$config.width = d), this.$config.scrollPosition = 0, l.$name = \"scroller\", l;\n  }\n  function i(a, r) {\n    if (r.push(a), a.$cells) for (var s = 0; s < a.$cells.length; s++) i(a.$cells[s], r);\n  }\n  return z(n, t), n.prototype.init = function(a) {\n    a.innerHTML = this.$toHTML(), this.$view = a.firstChild, this.$view || this.init(), this._isVertical() ? this._initVertical() : this._initHorizontal(), this._initMouseWheel(), this._initLinkedViews();\n  }, n.prototype.$toHTML = function() {\n    return \"<div class='gantt_layout_cell \" + (this._isHorizontal() ? \"gantt_hor_scroll\" : \"gantt_ver_scroll\") + \"'><div style='\" + (this._isHorizontal() ? \"width:2000px\" : \"height:2000px\") + \"'></div></div>\";\n  }, n.prototype._getRootParent = function() {\n    for (var a = this.$parent; a && a.$parent; ) a = a.$parent;\n    if (a) return a;\n  }, n.prototype._eachView = function() {\n    var a = [];\n    return i(this._getRootParent(), a), a;\n  }, n.prototype._getLinkedViews = function() {\n    for (var a = this._eachView(), r = [], s = 0; s < a.length; s++) a[s].$config && (this._isVertical() && a[s].$config.scrollY == this.$id || this._isHorizontal() && a[s].$config.scrollX == this.$id) && r.push(a[s]);\n    return r;\n  }, n.prototype._initHorizontal = function() {\n    this.$scroll_hor = this.$view, this.$domEvents.attach(this.$view, \"scroll\", this._scrollHorizontalHandler);\n  }, n.prototype._initLinkedViews = function() {\n    for (var a = this._getLinkedViews(), r = this._isVertical() ? \"gantt_layout_outer_scroll gantt_layout_outer_scroll_vertical\" : \"gantt_layout_outer_scroll gantt_layout_outer_scroll_horizontal\", s = 0; s < a.length; s++) $t(a[s].$view || a[s].getNode(), r);\n  }, n.prototype._initVertical = function() {\n    this.$scroll_ver = this.$view, this.$domEvents.attach(this.$view, \"scroll\", this._scrollVerticalHandler);\n  }, n.prototype._updateLinkedViews = function() {\n  }, n.prototype._initMouseWheel = function() {\n    pt.isFF ? this.$domEvents.attach(this._getRootParent().$view, \"wheel\", this._mouseWheelHandler, { passive: !1 }) : this.$domEvents.attach(this._getRootParent().$view, \"mousewheel\", this._mouseWheelHandler, { passive: !1 });\n  }, n.prototype.scrollHorizontally = function(a) {\n    if (!this._scrolling) {\n      this._scrolling = !0, this.$scroll_hor.scrollLeft = a, this.$config.codeScrollLeft = a, a = this.$scroll_hor.scrollLeft;\n      for (var r = this._getLinkedViews(), s = 0; s < r.length; s++) r[s].scrollTo && r[s].scrollTo(a, void 0);\n      var o = this.$config.scrollPosition;\n      this.$config.scrollPosition = a, this.callEvent(\"onScroll\", [o, a, this.$config.scroll]), this._scrolling = !1;\n    }\n  }, n.prototype.scrollVertically = function(a) {\n    if (!this._scrolling) {\n      this._scrolling = !0, this.$scroll_ver.scrollTop = a, a = this.$scroll_ver.scrollTop;\n      for (var r = this._getLinkedViews(), s = 0; s < r.length; s++) r[s].scrollTo && r[s].scrollTo(void 0, a);\n      var o = this.$config.scrollPosition;\n      this.$config.scrollPosition = a, this.callEvent(\"onScroll\", [o, a, this.$config.scroll]), this._scrolling = !1;\n    }\n  }, n.prototype._isVertical = function() {\n    return this.$config.scroll == \"y\";\n  }, n.prototype._isHorizontal = function() {\n    return this.$config.scroll == \"x\";\n  }, n.prototype._scrollHorizontalHandler = function(a) {\n    if (!this._isVertical() && !this._scrolling) {\n      if (/* @__PURE__ */ new Date() - (this._wheel_time || 0) < 100) return !0;\n      var r = this.$scroll_hor.scrollLeft;\n      this.scrollHorizontally(r), this._oldLeft = this.$scroll_hor.scrollLeft;\n    }\n  }, n.prototype._outerScrollHorizontalHandler = function(a) {\n    this._isVertical();\n  }, n.prototype.show = function() {\n    this.$parent.show();\n  }, n.prototype.hide = function() {\n    this.$parent.hide();\n  }, n.prototype._getScrollSize = function() {\n    for (var a, r = 0, s = 0, o = this._isHorizontal(), l = this._getLinkedViews(), d = o ? \"scrollWidth\" : \"scrollHeight\", c = o ? \"contentX\" : \"contentY\", u = o ? \"x\" : \"y\", h = this._getScrollOffset(), g = 0; g < l.length; g++) if ((a = l[g]) && a.$content && a.$content.getSize && !a.$config.hidden) {\n      var f, y = a.$content.getSize();\n      if (f = y.hasOwnProperty(d) ? y[d] : y[c], h) y[c] > y[u] && y[c] > r && f > y[u] - h + 2 && (r = f + (o ? 0 : 2), s = y[u]);\n      else {\n        var v = Math.max(y[c] - f, 0);\n        (f += v) > Math.max(y[u] - v, 0) && f > r && (r = f, s = y[u]);\n      }\n    }\n    return { outerScroll: s, innerScroll: r };\n  }, n.prototype.scroll = function(a) {\n    this._isHorizontal() ? this.scrollHorizontally(a) : this.scrollVertically(a);\n  }, n.prototype.getScrollState = function() {\n    return { visible: this.isVisible(), direction: this.$config.scroll, size: this.$config.outerSize, scrollSize: this.$config.scrollSize || 0, position: this.$config.scrollPosition || 0 };\n  }, n.prototype.setSize = function(a, r) {\n    t.prototype.setSize.apply(this, arguments);\n    var s = this._getScrollSize(), o = (this._isVertical() ? r : a) - this._getScrollOffset() + (this._isHorizontal() ? 1 : 0);\n    s.innerScroll && o > s.outerScroll && (s.innerScroll += o - s.outerScroll), this.$config.scrollSize = s.innerScroll, this.$config.width = a, this.$config.height = r, this._setScrollSize(s.innerScroll);\n  }, n.prototype.isVisible = function() {\n    return !(!this.$parent || !this.$parent.$view.parentNode);\n  }, n.prototype.shouldShow = function() {\n    var a = this._getScrollSize();\n    return !(!a.innerScroll && this.$parent && this.$parent.$view.parentNode) && !(!a.innerScroll || this.$parent && this.$parent.$view.parentNode);\n  }, n.prototype.shouldHide = function() {\n    return !(this._getScrollSize().innerScroll || !this.$parent || !this.$parent.$view.parentNode);\n  }, n.prototype.toggleVisibility = function() {\n    this.shouldHide() ? this.hide() : this.shouldShow() && this.show();\n  }, n.prototype._getScaleOffset = function(a) {\n    var r = 0;\n    return !a || a.$config.view != \"timeline\" && a.$config.view != \"grid\" || (r = a.$content.$getConfig().scale_height), r;\n  }, n.prototype._getScrollOffset = function() {\n    var a = 0;\n    if (this._isVertical()) {\n      var r = this.$parent.$parent;\n      a = Math.max(this._getScaleOffset(r.getPrevSibling(this.$parent.$id)), this._getScaleOffset(r.getNextSibling(this.$parent.$id)));\n    } else for (var s = this._getLinkedViews(), o = 0; o < s.length; o++) {\n      var l = s[o].$parent.$cells, d = l[l.length - 1];\n      if (d && d.$config.view == \"scrollbar\" && d.$config.hidden === !1) {\n        a = d.$config.width;\n        break;\n      }\n    }\n    return a || 0;\n  }, n.prototype._setScrollSize = function(a) {\n    var r = this._isHorizontal() ? \"width\" : \"height\", s = this._isHorizontal() ? this.$scroll_hor : this.$scroll_ver, o = this._getScrollOffset(), l = s.firstChild;\n    o ? this._isVertical() ? (this.$config.outerSize = this.$config.height - o + 3, s.style.height = this.$config.outerSize + \"px\", s.style.top = o - 1 + \"px\", $t(s, this.$parent._borders.top), $t(s.parentNode, \"gantt_task_vscroll\")) : (this.$config.outerSize = this.$config.width - o + 1, s.style.width = this.$config.outerSize + \"px\") : (s.style.top = \"auto\", Ut(s, this.$parent._borders.top), Ut(s.parentNode, \"gantt_task_vscroll\"), this.$config.outerSize = this.$config.height), l.style[r] = a + \"px\";\n  }, n.prototype._scrollVerticalHandler = function(a) {\n    if (!this._scrollHorizontalHandler() && !this._scrolling) {\n      var r = this.$scroll_ver.scrollTop;\n      r != this._oldTop && (this.scrollVertically(r), this._oldTop = this.$scroll_ver.scrollTop);\n    }\n  }, n.prototype._outerScrollVerticalHandler = function(a) {\n    this._scrollHorizontalHandler();\n  }, n.prototype._checkWheelTarget = function(a) {\n    for (var r = this._getLinkedViews().concat(this), s = 0; s < r.length; s++)\n      if (G(a, r[s].$view)) return !0;\n    return !1;\n  }, n.prototype._mouseWheelHandler = function(a) {\n    var r = a.target || a.srcElement;\n    if (this._checkWheelTarget(r)) {\n      this._wheel_time = /* @__PURE__ */ new Date();\n      var s = {}, o = { x: 1, y: 1 }, l = this.$gantt.config.wheel_scroll_sensitivity;\n      typeof l == \"number\" && l ? o = { x: l, y: l } : {}.toString.apply(l) == \"[object Object]\" && (o = { x: l.x, y: l.y });\n      var d = pt.isFF, c = d ? a.deltaX : a.wheelDeltaX, u = d ? a.deltaY : a.wheelDelta, h = -20;\n      d && (h = a.deltaMode !== 0 ? -40 : -10);\n      var g = d ? c * h * o.x : 2 * c * o.x, f = d ? u * h * o.y : u * o.y, y = this.$gantt.config.horizontal_scroll_key;\n      if (y !== !1 && e.indexOf(y) >= 0 && (!a[y] || a.deltaX || a.wheelDeltaX || (g = 2 * f, f = 0)), g && Math.abs(g) > Math.abs(f)) {\n        if (this._isVertical()) return;\n        if (s.x || !this.$scroll_hor || !this.$scroll_hor.offsetWidth) return !0;\n        var v = g / -40, b = this._oldLeft, _ = b + 30 * v;\n        if (this.scrollHorizontally(_), this.$scroll_hor.scrollLeft = _, b == this.$scroll_hor.scrollLeft) return !0;\n        this._oldLeft = this.$scroll_hor.scrollLeft;\n      } else {\n        if (this._isHorizontal()) return;\n        if (s.y || !this.$scroll_ver || !this.$scroll_ver.offsetHeight) return !0;\n        v = f / -40, f === void 0 && (v = a.detail);\n        var m = this._oldTop, p = this.$scroll_ver.scrollTop + 30 * v;\n        if (this.scrollVertically(p), this.$scroll_ver.scrollTop = p, m == this.$scroll_ver.scrollTop) return !0;\n        this._oldTop = this.$scroll_ver.scrollTop;\n      }\n      return a.preventDefault && a.preventDefault(), a.cancelBubble = !0, !1;\n    }\n  }, n;\n}(Pt);\nfunction kn(t) {\n  var e = {}, n = {}, i = null, a = -1, r = null, s = /* @__PURE__ */ function(o) {\n    var l = -1, d = -1;\n    return { resetCache: function() {\n      l = -1, d = -1;\n    }, _getRowHeight: function() {\n      return l === -1 && (l = o.$getConfig().row_height), l;\n    }, _refreshState: function() {\n      this.resetCache(), d = !0;\n      var c = o.$config.rowStore;\n      if (c) for (var u = this._getRowHeight(), h = 0; h < c.fullOrder.length; h++) {\n        var g = c.getItem(c.fullOrder[h]);\n        if (g && g.row_height && g.row_height !== u) {\n          d = !1;\n          break;\n        }\n      }\n    }, canUseSimpleCalculation: function() {\n      return d === -1 && this._refreshState(), d;\n    }, getRowTop: function(c) {\n      return o.$config.rowStore ? c * this._getRowHeight() : 0;\n    }, getItemHeight: function(c) {\n      return this._getRowHeight();\n    }, getTotalHeight: function() {\n      return o.$config.rowStore ? o.$config.rowStore.countVisible() * this._getRowHeight() : 0;\n    }, getItemIndexByTopPosition: function(c) {\n      return o.$config.rowStore ? Math.floor(c / this._getRowHeight()) : 0;\n    } };\n  }(t);\n  return { _resetTopPositionHeight: function() {\n    e = {}, n = {}, s.resetCache();\n  }, _resetHeight: function() {\n    var o = this.$config.rowStore, l = this.getCacheStateTotalHeight(o);\n    r ? this.shouldClearHeightCache(r, l) && (r = l, i = null) : r = l, a = -1, s.resetCache();\n  }, getRowTop: function(o) {\n    if (s.canUseSimpleCalculation()) return s.getRowTop(o);\n    var l = this.$config.rowStore;\n    if (!l) return 0;\n    if (n[o] !== void 0) return n[o];\n    for (var d = l.getIndexRange(), c = 0, u = 0, h = 0; h < d.length; h++) n[h] = c, c += this.getItemHeight(d[h].id), h < o && (u = c);\n    return u;\n  }, getItemTop: function(o) {\n    if (this.$config.rowStore) {\n      if (e[o] !== void 0) return e[o];\n      var l = this.$config.rowStore;\n      if (!l) return 0;\n      var d = l.getIndexById(o);\n      if (d === -1 && l.getParent && l.exists(o)) {\n        var c = l.getParent(o);\n        if (l.exists(c)) {\n          var u = l.getItem(c);\n          if (this.$gantt.isSplitTask(u)) return this.getItemTop(c);\n        }\n      }\n      return e[o] = this.getRowTop(d), e[o];\n    }\n    return 0;\n  }, getItemHeight: function(o) {\n    if (s.canUseSimpleCalculation()) return s.getItemHeight(o);\n    if (!i && this.$config.rowStore && this._fillHeightCache(this.$config.rowStore), i[o] !== void 0) return i[o];\n    var l = this.$getConfig().row_height;\n    if (this.$config.rowStore) {\n      var d = this.$config.rowStore;\n      if (!d) return l;\n      var c = d.getItem(o);\n      return i[o] = c && c.row_height || l;\n    }\n    return l;\n  }, _fillHeightCache: function(o) {\n    if (o) {\n      i = {};\n      var l = this.$getConfig().row_height;\n      o.eachItem(function(d) {\n        return i[d.id] = d && d.row_height || l;\n      });\n    }\n  }, getCacheStateTotalHeight: function(o) {\n    var l = this.$getConfig().row_height, d = {}, c = [], u = 0;\n    return o && o.eachItem(function(h) {\n      c.push(h), d[h.id] = h.row_height, u += h.row_height || l;\n    }), { globalHeight: l, items: c, count: c.length, sumHeight: u };\n  }, shouldClearHeightCache: function(o, l) {\n    if (o.count != l.count || o.globalHeight != l.globalHeight || o.sumHeight != l.sumHeight) return !0;\n    for (var d in o.items) {\n      var c = l.items[d];\n      if (c !== void 0 && c != o.items[d]) return !0;\n    }\n    return !1;\n  }, getTotalHeight: function() {\n    if (s.canUseSimpleCalculation()) return s.getTotalHeight();\n    if (a != -1) return a;\n    if (this.$config.rowStore) {\n      var o = this.$config.rowStore;\n      this._fillHeightCache(o);\n      var l = this.getItemHeight.bind(this), d = o.getVisibleItems(), c = 0;\n      return d.forEach(function(u) {\n        c += l(u.id);\n      }), a = c, c;\n    }\n    return 0;\n  }, getItemIndexByTopPosition: function(o) {\n    if (this.$config.rowStore) {\n      if (s.canUseSimpleCalculation()) return s.getItemIndexByTopPosition(o);\n      for (var l = this.$config.rowStore, d = 0; d < l.countVisible(); d++) {\n        var c = this.getRowTop(d), u = this.getRowTop(d + 1);\n        if (!u) {\n          var h = l.getIdByIndex(d);\n          u = c + this.getItemHeight(h);\n        }\n        if (o >= c && o < u) return d;\n      }\n      return l.countVisible() + 2;\n    }\n    return 0;\n  } };\n}\nconst va = function() {\n  return { render: function() {\n  }, destroy: function() {\n  } };\n};\nvar Ft = function(t, e, n, i) {\n  this.$config = N({}, e || {}), this.$scaleHelper = new he(i), this.$gantt = i, this._posFromDateCache = {}, this._timelineDragScroll = null, N(this, kn(this)), st(this);\n};\nFt.prototype = { init: function(t) {\n  t.innerHTML += \"<div class='gantt_task' style='width:inherit;height:inherit;'></div>\", this.$task = t.childNodes[0], this.$task.innerHTML = \"<div class='gantt_task_scale'></div><div class='gantt_data_area'></div>\", this.$task_scale = this.$task.childNodes[0], this.$task_data = this.$task.childNodes[1], this.$task_data.innerHTML = \"<div class='gantt_task_bg'></div><div class='gantt_task_baselines'></div><div class='gantt_links_area'></div><div class='gantt_bars_area'></div><div class='gantt_task_constraints'></div><div class='gantt_task_deadlines'></div>\", this.$task_bg = this.$task_data.childNodes[0], this.$task_baselines = this.$task_data.childNodes[1], this.$task_links = this.$task_data.childNodes[2], this.$task_bars = this.$task_data.childNodes[3], this.$task_constraints = this.$task_data.childNodes[4], this.$task_deadlines = this.$task_data.childNodes[5], this._tasks = { col_width: 0, width: [], full_width: 0, trace_x: [], rendered: {} };\n  var e = this.$getConfig(), n = e[this.$config.bind + \"_attribute\"], i = e[this.$config.bindLinks + \"_attribute\"];\n  !n && this.$config.bind && (n = \"data-\" + this.$config.bind + \"-id\"), !i && this.$config.bindLinks && (i = \"data-\" + this.$config.bindLinks + \"-id\"), this.$config.item_attribute = n || null, this.$config.link_attribute = i || null;\n  var a = this._createLayerConfig();\n  this.$config.layers || (this.$config.layers = a.tasks), this.$config.linkLayers || (this.$config.linkLayers = a.links), this._attachLayers(this.$gantt), this.callEvent(\"onReady\", []), this.$gantt.ext.dragTimeline && (this._timelineDragScroll = this.$gantt.ext.dragTimeline.create(), this._timelineDragScroll.attach(this));\n}, setSize: function(t, e) {\n  var n = this.$getConfig();\n  if (1 * t === t && (this.$config.width = t), 1 * e === e) {\n    this.$config.height = e;\n    var i = Math.max(this.$config.height - n.scale_height);\n    this.$task_data.style.height = i + \"px\";\n  }\n  this.refresh(), this.$task_bg.style.backgroundImage = \"\", n.smart_rendering && this.$config.rowStore ? this.$task_bg.style.height = this.getTotalHeight() + \"px\" : this.$task_bg.style.height = \"\";\n  for (var a = this._tasks, r = this.$task_data.childNodes, s = 0, o = r.length; s < o; s++) {\n    var l = r[s];\n    l.hasAttribute(\"data-layer\") && l.style && (l.style.width = a.full_width + \"px\");\n  }\n}, isVisible: function() {\n  return this.$parent && this.$parent.$config ? !this.$parent.$config.hidden : this.$task.offsetWidth;\n}, getSize: function() {\n  var t = this.$getConfig(), e = this.$config.rowStore ? this.getTotalHeight() : 0, n = this.isVisible() ? this._tasks.full_width : 0;\n  return { x: this.isVisible() ? this.$config.width : 0, y: this.isVisible() ? this.$config.height : 0, contentX: this.isVisible() ? n : 0, contentY: this.isVisible() ? t.scale_height + e : 0, scrollHeight: this.isVisible() ? e : 0, scrollWidth: this.isVisible() ? n : 0 };\n}, scrollTo: function(t, e) {\n  if (this.isVisible()) {\n    var n = !1;\n    this.$config.scrollTop = this.$config.scrollTop || 0, this.$config.scrollLeft = this.$config.scrollLeft || 0, 1 * e === e && (this.$config.scrollTop = e, this.$task_data.scrollTop = this.$config.scrollTop, n = !0), 1 * t === t && (this.$task.scrollLeft = t, this.$config.scrollLeft = this.$task.scrollLeft, this._refreshScales(), n = !0), n && this.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\n  }\n}, _refreshScales: function() {\n  if (this.isVisible() && this.$getConfig().smart_scales) {\n    var t = this.getViewPort(), e = this._scales;\n    this.$task_scale.innerHTML = this._getScaleChunkHtml(e, t.x, t.x_end);\n  }\n}, getViewPort: function() {\n  var t = this.$config.scrollLeft || 0, e = this.$config.scrollTop || 0, n = this.$config.height || 0, i = this.$config.width || 0;\n  return { y: e, y_end: e + n, x: t, x_end: t + i, height: n, width: i };\n}, _createLayerConfig: function() {\n  var t = this, e = function() {\n    return t.isVisible();\n  };\n  this.$gantt;\n  var n = [{ expose: !0, renderer: this.$gantt.$ui.layers.taskBar(), container: this.$task_bars, filter: [e, function(i, a) {\n    return !a.hide_bar;\n  }] }];\n  return n.push({ renderer: this.$gantt.$ui.layers.taskBg(), container: this.$task_bg, filter: [e] }), { tasks: n, links: [{ expose: !0, renderer: this.$gantt.$ui.layers.link(), container: this.$task_links, filter: [e] }] };\n}, _attachLayers: function(t) {\n  this._taskLayers = [], this._linkLayers = [];\n  var e = this, n = this.$gantt.$services.getService(\"layers\");\n  if (this.$config.bind) {\n    this._bindStore();\n    var i = n.getDataRender(this.$config.bind);\n    i || (i = n.createDataRender({ name: this.$config.bind, defaultContainer: function() {\n      return e.$task_data;\n    } })), i.container = function() {\n      return e.$task_data;\n    };\n    for (var a = this.$config.layers, r = 0; a && r < a.length; r++) {\n      typeof (d = a[r]) == \"string\" && (d = this.$gantt.$ui.layers[d]()), (typeof d == \"function\" || d && d.render && d.update) && (d = { renderer: d }), d.view = this;\n      var s = i.addLayer(d);\n      this._taskLayers.push(s), d.expose && (this._taskRenderer = i.getLayer(s));\n    }\n    this._initStaticBackgroundRender();\n  }\n  if (this.$config.bindLinks) {\n    e.$config.linkStore = e.$gantt.getDatastore(e.$config.bindLinks);\n    var o = n.getDataRender(this.$config.bindLinks);\n    o || (o = n.createDataRender({ name: this.$config.bindLinks, defaultContainer: function() {\n      return e.$task_data;\n    } }));\n    var l = this.$config.linkLayers;\n    for (r = 0; l && r < l.length; r++) {\n      var d;\n      typeof d == \"string\" && (d = this.$gantt.$ui.layers[d]()), (d = l[r]).view = this;\n      var c = o.addLayer(d);\n      this._taskLayers.push(c), l[r].expose && (this._linkRenderer = o.getLayer(c));\n    }\n  }\n}, _initStaticBackgroundRender: function() {\n  var t = this, e = va(), n = t.$config.rowStore;\n  n && (this._staticBgHandler = n.attachEvent(\"onStoreUpdated\", function(i, a, r) {\n    if (i === null && t.isVisible()) {\n      var s = t.$getConfig();\n      if (s.static_background || s.timeline_placeholder) {\n        var o = t.$gantt.getDatastore(t.$config.bind), l = t.$task_bg_static;\n        if (l || ((l = document.createElement(\"div\")).className = \"gantt_task_bg\", t.$task_bg_static = l, t.$task_bg.nextSibling ? t.$task_data.insertBefore(l, t.$task_bg.nextSibling) : t.$task_data.appendChild(l)), o) {\n          var d = t.getTotalHeight();\n          s.timeline_placeholder && (d = s.timeline_placeholder.height || t.$task_data.offsetHeight || 99999), e.render(l, s, t.getScale(), d, t.getItemHeight(a ? a.id : null));\n        }\n      } else s.static_background && t.$task_bg_static && t.$task_bg_static.parentNode && t.$task_bg_static.parentNode.removeChild(t.$task_bg_static);\n    }\n  }), this.attachEvent(\"onDestroy\", function() {\n  }), this._initStaticBackgroundRender = function() {\n  });\n}, _clearLayers: function(t) {\n  var e = this.$gantt.$services.getService(\"layers\"), n = e.getDataRender(this.$config.bind), i = e.getDataRender(this.$config.bindLinks);\n  if (this._taskLayers) for (var a = 0; a < this._taskLayers.length; a++) n.removeLayer(this._taskLayers[a]);\n  if (this._linkLayers) for (a = 0; a < this._linkLayers.length; a++) i.removeLayer(this._linkLayers[a]);\n  this._linkLayers = [], this._taskLayers = [];\n}, _render_tasks_scales: function() {\n  var t = this.$getConfig(), e = \"\", n = 0, i = 0, a = this.$gantt.getState();\n  if (this.isVisible()) {\n    var r = this.$scaleHelper, s = this._getScales();\n    i = t.scale_height;\n    var o = this.$config.width;\n    t.autosize != \"x\" && t.autosize != \"xy\" || (o = Math.max(t.autosize_min_width, 0));\n    var l = r.prepareConfigs(s, t.min_column_width, o, i - 1, a.min_date, a.max_date, t.rtl), d = this._tasks = l[l.length - 1];\n    this._scales = l, this._posFromDateCache = {}, e = this._getScaleChunkHtml(l, 0, this.$config.width), n = d.full_width + \"px\", i += \"px\";\n  }\n  this.$task_scale.style.height = i, this.$task_data.style.width = this.$task_scale.style.width = n, this.$task_scale.innerHTML = e;\n}, _getScaleChunkHtml: function(t, e, n) {\n  for (var i = [], a = this.$gantt.templates.scale_row_class, r = 0; r < t.length; r++) {\n    var s = \"gantt_scale_line\", o = a(t[r]);\n    o && (s += \" \" + o), i.push('<div class=\"' + s + '\" style=\"height:' + t[r].height + \"px;position:relative;line-height:\" + t[r].height + 'px\">' + this._prepareScaleHtml(t[r], e, n, r) + \"</div>\");\n  }\n  return i.join(\"\");\n}, _prepareScaleHtml: function(t, e, n, i) {\n  var a = this.$getConfig(), r = this.$gantt.templates, s = [], o = null, l = null, d = t.format || t.template || t.date;\n  typeof d == \"string\" && (d = this.$gantt.date.date_to_str(d));\n  var c = 0, u = t.count;\n  !a.smart_scales || isNaN(e) || isNaN(n) || (c = Dt(t.left, e), u = Dt(t.left, n) + 1), l = t.css || function() {\n  }, !t.css && a.inherit_scale_class && (l = r.scale_cell_class);\n  for (var h = c; h < u && t.trace_x[h]; h++) {\n    o = new Date(t.trace_x[h]);\n    var g = d.call(this, o), f = t.width[h];\n    t.height;\n    var y = t.left[h], v = \"\", b = \"\", _ = \"\";\n    if (f) {\n      v = \"width:\" + f + \"px;\" + (a.smart_scales ? \"position:absolute;left:\" + y + \"px\" : \"\");\n      const p = this.getViewPort(), k = (a.scales[i] || {}).sticky;\n      let $ = \"\";\n      const w = 70;\n      if (k !== !1 && f > w || k === !0) {\n        if (y < p.x && y + f / 2 - w / 2 < p.x) $ = ` style='position:absolute;left: ${p.x - y + 10}px;' `;\n        else if (y + f / 2 + w / 2 > p.x_end && f > w) {\n          let x = p.x_end - y - 10, S = \"-100%\";\n          x < w && (x = w, S = `-${x}px`), $ = ` style='position:absolute;left: ${x}px;transform: translate(${S},0);' `;\n        }\n      }\n      _ = \"gantt_scale_cell\" + (h == t.count - 1 ? \" gantt_last_cell\" : \"\"), (b = l.call(this, o)) && (_ += \" \" + b);\n      var m = `<div class='${_}' ${this.$gantt._waiAria.getTimelineCellAttr(g)} style='${v}'><span ${$}>${g}</span></div>`;\n      s.push(m);\n    }\n  }\n  return s.join(\"\");\n}, dateFromPos: function(t) {\n  var e = this._tasks;\n  if (t < 0 || t > e.full_width || !e.full_width) return null;\n  var n = Dt(this._tasks.left, t), i = this._tasks.left[n], a = e.width[n] || e.col_width, r = 0;\n  a && (r = (t - i) / a, e.rtl && (r = 1 - r));\n  var s = 0;\n  return r && (s = this._getColumnDuration(e, e.trace_x[n])), new Date(e.trace_x[n].valueOf() + Math.round(r * s));\n}, posFromDate: function(t) {\n  if (!this.isVisible() || !t) return 0;\n  var e = String(t.valueOf());\n  if (this._posFromDateCache[e] !== void 0) return this._posFromDateCache[e];\n  var n = this.columnIndexByDate(t);\n  this.$gantt.assert(n >= 0, \"Invalid day index\");\n  var i = Math.floor(n), a = n % 1, r = this._tasks.left[Math.min(i, this._tasks.width.length - 1)];\n  i == this._tasks.width.length && (r += this._tasks.width[this._tasks.width.length - 1]), a && (i < this._tasks.width.length ? r += this._tasks.width[i] * (a % 1) : r += 1);\n  var s = Math.round(r);\n  return this._posFromDateCache[e] = s, Math.round(s);\n}, _getNextVisibleColumn: function(t, e, n) {\n  for (var i = +e[t], a = t; n[i]; ) i = +e[++a];\n  return a;\n}, _getPrevVisibleColumn: function(t, e, n) {\n  for (var i = +e[t], a = t; n[i]; ) i = +e[--a];\n  return a;\n}, _getClosestVisibleColumn: function(t, e, n) {\n  var i = this._getNextVisibleColumn(t, e, n);\n  return e[i] || (i = this._getPrevVisibleColumn(t, e, n)), i;\n}, columnIndexByDate: function(t) {\n  var e = new Date(t).valueOf(), n = this._tasks.trace_x_ascending, i = this._tasks.ignore_x, a = this.$gantt.getState();\n  if (e <= a.min_date) return this._tasks.rtl ? n.length : 0;\n  if (e >= a.max_date) return this._tasks.rtl ? 0 : n.length;\n  var r = Dt(n, e), s = this._getClosestVisibleColumn(r, n, i), o = n[s], l = this._tasks.trace_index_transition;\n  if (!o) return l ? l[0] : 0;\n  var d = (t - n[s]) / this._getColumnDuration(this._tasks, n[s]);\n  return l ? l[s] + (1 - d) : s + d;\n}, getItemPosition: function(t, e, n) {\n  var i, a, r;\n  let s = e || t.start_date || t.$auto_start_date, o = n || t.end_date || t.$auto_end_date;\n  return this._tasks.rtl ? (a = this.posFromDate(s), i = this.posFromDate(o)) : (i = this.posFromDate(s), a = this.posFromDate(o)), r = Math.max(a - i, 0), { left: i, top: this.getItemTop(t.id), height: this.getBarHeight(t.id), width: r, rowHeight: this.getItemHeight(t.id) };\n}, getBarHeight: function(t, e) {\n  var n = this.$getConfig(), i = this.$config.rowStore.getItem(t), a = i.task_height || i.bar_height || n.bar_height || n.task_height, r = this.getItemHeight(t);\n  return a == \"full\" && (a = r - (n.bar_height_padding || 3)), a = Math.min(a, r), e && (a = Math.round(a / Math.sqrt(2))), Math.max(a, 0);\n}, getScale: function() {\n  return this._tasks;\n}, _getScales: function() {\n  var t = this.$getConfig(), e = this.$scaleHelper, n = [e.primaryScale(t)].concat(e.getSubScales(t));\n  return e.sortScales(n), n;\n}, _getColumnDuration: function(t, e) {\n  return this.$gantt.date.add(e, t.step, t.unit) - e;\n}, _bindStore: function() {\n  if (this.$config.bind) {\n    var t = this.$gantt.getDatastore(this.$config.bind);\n    if (this.$config.rowStore = t, t && !t._timelineCacheAttached) {\n      var e = this;\n      t._timelineCacheAttached = t.attachEvent(\"onBeforeFilter\", function() {\n        e._resetTopPositionHeight();\n      });\n    }\n  }\n}, _unbindStore: function() {\n  if (this.$config.bind) {\n    var t = this.$gantt.getDatastore(this.$config.bind);\n    t && t._timelineCacheAttached && (t.detachEvent(t._timelineCacheAttached), t._timelineCacheAttached = !1);\n  }\n}, refresh: function() {\n  this._bindStore(), this.$config.bindLinks && (this.$config.linkStore = this.$gantt.getDatastore(this.$config.bindLinks)), this._resetTopPositionHeight(), this._resetHeight(), this._initStaticBackgroundRender(), this._render_tasks_scales();\n}, destructor: function() {\n  var t = this.$gantt;\n  this._clearLayers(t), this._unbindStore(), this.$task = null, this.$task_scale = null, this.$task_data = null, this.$task_bg = null, this.$task_links = null, this.$task_bars = null, this.$gantt = null, this.$config.rowStore && (this.$config.rowStore.detachEvent(this._staticBgHandler), this.$config.rowStore = null), this.$config.linkStore && (this.$config.linkStore = null), this._timelineDragScroll && (this._timelineDragScroll.destructor(), this._timelineDragScroll = null), this.callEvent(\"onDestroy\", []), this.detachAllEvents();\n} };\nclass ka {\n  constructor(e) {\n    this._scrollOrder = 0;\n    const { gantt: n, grid: i, dnd: a, getCurrentX: r } = e;\n    this.$gantt = n, this.$grid = i, this._dnd = a, this.getCurrentX = r, this._scrollView = this.$gantt.$ui.getView(this.$grid.$config.scrollX), this.attachEvents();\n  }\n  attachEvents() {\n    this.isScrollable() && (this._dnd.attachEvent(\"onDragMove\", (e, n) => {\n      const i = this.$grid.$grid.getBoundingClientRect(), a = i.right, r = i.left, s = this.getCurrentX(n.clientX);\n      return s >= a - 20 && (this.autoscrollRight(), this.autoscrollStart()), s <= r + 20 && (this.autoscrollLeft(), this.autoscrollStart()), s < a - 20 && s > r + 20 && this.autoscrollStop(), !0;\n    }), this._dnd.attachEvent(\"onDragEnd\", () => {\n      this.autoscrollStop();\n    }));\n  }\n  autoscrollStart() {\n    if (this._scrollOrder === 0) return;\n    const e = 10 * this._scrollOrder, n = this._scrollView.getScrollState();\n    this._scrollView.scrollTo(n.position + e), setTimeout(() => {\n      this.autoscrollStart();\n    }, 50);\n  }\n  autoscrollRight() {\n    this._scrollOrder = 1;\n  }\n  autoscrollLeft() {\n    this._scrollOrder = -1;\n  }\n  autoscrollStop() {\n    this._scrollOrder = 0;\n  }\n  getCorrection() {\n    return this.isScrollable() ? this._scrollView.getScrollState().position : 0;\n  }\n  isScrollable() {\n    return !!this.$grid.$config.scrollable;\n  }\n}\nconst Ve = \"data-column-id\";\nclass ya {\n  constructor(e, n) {\n    this._targetMarker = null, this.calculateCurrentPosition = (i) => {\n      const a = this.$grid.$grid.getBoundingClientRect(), r = a.right, s = a.left;\n      let o = i;\n      return o > r && (o = r), o < s && (o = s), o;\n    }, this.$gantt = e, this.$grid = n;\n  }\n  init() {\n    const e = this.$gantt.$services.getService(\"dnd\");\n    this._dnd = new e(this.$grid.$grid_scale, { updates_per_second: 60 }), this._scrollableGrid = new ka({ gantt: this.$gantt, grid: this.$grid, dnd: this._dnd, getCurrentX: this.calculateCurrentPosition }), this.attachEvents();\n  }\n  attachEvents() {\n    this._dnd.attachEvent(\"onBeforeDragStart\", (e, n) => {\n      if (this._draggedCell = this.$gantt.utils.dom.closest(n.target, \".gantt_grid_head_cell\"), !this._draggedCell) return;\n      const i = this.$grid.$getConfig().columns, a = this._draggedCell.getAttribute(Ve);\n      let r, s;\n      return i.map(function(o, l) {\n        o.name === a && (r = o, s = l);\n      }), this.$grid.callEvent(\"onBeforeColumnDragStart\", [{ draggedColumn: r, draggedIndex: s }]) !== !1 && !(!this._draggedCell || !r) && (this._gridConfig = this.$grid.$getConfig(), this._originAutoscroll = this.$gantt.config.autoscroll, this.$gantt.config.autoscroll = !1, !0);\n    }), this._dnd.attachEvent(\"onAfterDragStart\", (e, n) => {\n      this._draggedCell && (this._dnd.config.column = this._draggedCell.getAttribute(Ve), this._dnd.config.marker.innerHTML = this._draggedCell.outerHTML, this._dnd.config.marker.classList.add(\"gantt_column_drag_marker\"), this._dnd.config.marker.style.height = this._gridConfig.scale_height + \"px\", this._dnd.config.marker.style.lineHeight = this._gridConfig.scale_height + \"px\", this._draggedCell.classList.add(\"gantt_grid_head_cell_dragged\"));\n    }), this._dnd.attachEvent(\"onDragMove\", (e, n) => {\n      if (!this._draggedCell) return;\n      this._dragX = n.clientX;\n      const i = this.calculateCurrentPosition(n.clientX), a = this.findColumnsIndexes(), r = a.targetIndex, s = a.draggedIndex, o = this.$grid.$getConfig().columns, l = o[s], d = o[r];\n      return this.$grid.callEvent(\"onColumnDragMove\", [{ draggedColumn: l, targetColumn: d, draggedIndex: s, targetIndex: r }]) === !1 ? (this.cleanTargetMarker(), !1) : (this.setMarkerPosition(i), this.drawTargetMarker(a), !0);\n    }), this._dnd.attachEvent(\"onDragEnd\", () => {\n      this._draggedCell && (this.$gantt.config.autoscroll = this._originAutoscroll, this._draggedCell.classList.remove(\"gantt_grid_head_cell_dragged\"), this.cleanTargetMarker(), this.reorderColumns());\n    });\n  }\n  reorderColumns() {\n    const { targetIndex: e, draggedIndex: n } = this.findColumnsIndexes(), i = this.$grid.$getConfig().columns, a = i[n], r = i[e];\n    this.$grid.callEvent(\"onBeforeColumnReorder\", [{ draggedColumn: a, targetColumn: r, draggedIndex: n, targetIndex: e }]) !== !1 && e !== n && (i.splice(n, 1), i.splice(e, 0, a), this.$gantt.render(), this.$grid.callEvent(\"onAfterColumnReorder\", [{ draggedColumn: a, targetColumn: r, draggedIndex: n, targetIndex: e }]));\n  }\n  findColumnsIndexes() {\n    const e = this._dnd.config.column, n = this.$grid.$getConfig().columns;\n    let i, a, r, s;\n    const o = { startX: 0, endX: 0 };\n    let l, d = 0, c = n.length - 1, u = (f, y) => f <= y, h = (f) => ++f;\n    this.$gantt.config.rtl && (d = n.length - 1, c = 0, u = (f, y) => f >= y, h = (f) => --f);\n    const g = this._dragX - this.$grid.$grid.getBoundingClientRect().left + this._scrollableGrid.getCorrection();\n    for (let f = d; u(f, c) && (i === void 0 || a === void 0); f = h(f)) n[f].hide || (o.startX = o.endX, o.endX += n[f].width, g >= o.startX && (g <= o.endX || !u(h(f), c)) && (i = f, r = o.startX, s = o.endX, l = (g - o.startX) / (o.endX - o.startX)), e === n[f].name && (a = f));\n    return { targetIndex: i, draggedIndex: a, xBefore: r, xAfter: s, columnRelativePos: l };\n  }\n  setMarkerPosition(e, n = 10) {\n    const { marker: i } = this._dnd.config, a = this._dnd._obj.getBoundingClientRect();\n    i.style.top = `${a.y + n}px`, i.style.left = `${e}px`;\n  }\n  drawTargetMarker({ targetIndex: e, draggedIndex: n, xBefore: i, xAfter: a, columnRelativePos: r }) {\n    let s;\n    this._targetMarker || (this._targetMarker = document.createElement(\"div\"), $t(this._targetMarker, \"gantt_grid_target_marker\"), this._targetMarker.style.display = \"none\", this._targetMarker.style.height = `${this._gridConfig.scale_height}px`), this._targetMarker.parentNode || this.$grid.$grid_scale.appendChild(this._targetMarker), s = e > n ? a : e < n ? i : r > 0.5 ? a : i, this._targetMarker.style.left = `${s}px`, this._targetMarker.style.display = \"block\";\n  }\n  cleanTargetMarker() {\n    this._targetMarker && this._targetMarker.parentNode && this.$grid.$grid_scale.removeChild(this._targetMarker), this._targetMarker = null;\n  }\n}\nfunction we(t) {\n  var e = [];\n  return { delegate: function(n, i, a, r) {\n    e.push([n, i, a, r]), t.$services.getService(\"mouseEvents\").delegate(n, i, a, r);\n  }, destructor: function() {\n    for (var n = t.$services.getService(\"mouseEvents\"), i = 0; i < e.length; i++) {\n      var a = e[i];\n      n.detach(a[0], a[1], a[2], a[3]);\n    }\n    e = [];\n  } };\n}\nvar ve = function(t, e, n, i) {\n  this.$config = N({}, e || {}), this.$gantt = i, this.$parent = t, st(this), this.$state = {}, N(this, kn(this));\n};\nve.prototype = { init: function(t) {\n  var e = this.$gantt, n = e._waiAria.gridAttrString(), i = e._waiAria.gridDataAttrString(), a = this.$getConfig(), r = a.reorder_grid_columns || !1;\n  this.$config.reorder_grid_columns !== void 0 && (r = this.$config.reorder_grid_columns), t.innerHTML = \"<div class='gantt_grid' style='height:inherit;width:inherit;' \" + n + \"></div>\", this.$grid = t.childNodes[0], this.$grid.innerHTML = \"<div class='gantt_grid_scale' \" + e._waiAria.gridScaleRowAttrString() + \"></div><div class='gantt_grid_data' \" + i + \"></div>\", this.$grid_scale = this.$grid.childNodes[0], this.$grid_data = this.$grid.childNodes[1];\n  var s = a[this.$config.bind + \"_attribute\"];\n  if (!s && this.$config.bind && (s = \"data-\" + this.$config.bind + \"-id\"), this.$config.item_attribute = s || null, !this.$config.layers) {\n    var o = this._createLayerConfig();\n    this.$config.layers = o;\n  }\n  var l = { init: function() {\n  }, doOnRender: function() {\n  } };\n  this._renderHeaderResizers = l.doOnRender, this._mouseDelegates = we(e);\n  var d = function(c, u) {\n    var h = { row_before_start: c.bind(function(g, f, y) {\n      var v = u.$getConfig(), b = u.$config.rowStore;\n      if (!tt(y, v.task_grid_row_resizer_attribute)) return !1;\n      var _ = this.locate(y, v.task_grid_row_resizer_attribute), m = b.getItem(_);\n      return u.callEvent(\"onBeforeRowResize\", [m]) !== !1 && void 0;\n    }, c), row_after_start: c.bind(function(g, f, y) {\n      var v = u.$getConfig(), b = this.locate(y, v.task_grid_row_resizer_attribute);\n      g.config.marker.innerHTML = \"\", g.config.marker.className += \" gantt_row_grid_resize_area\", g.config.marker.style.width = u.$grid.offsetWidth + \"px\", g.config.drag_id = b;\n    }, c), row_drag_move: c.bind(function(g, f, y) {\n      var v = u.$config.rowStore, b = u.$getConfig(), _ = g.config, m = _.drag_id, p = u.getItemHeight(m), k = u.getItemTop(m) - f.scrollTop, $ = F(u.$grid_data), w = parseInt(_.marker.style.top, 10), x = k + $.y, S = 0, T = b.min_task_grid_row_height;\n      return (S = w - x) < T && (S = T), _.marker.style.left = $.x + \"px\", _.marker.style.top = x - 1 + \"px\", _.marker.style.height = Math.abs(S) + 1 + \"px\", _.marker_height = S, u.callEvent(\"onRowResize\", [m, v.getItem(m), S + p]), !0;\n    }, c), row_drag_end: c.bind(function(g, f, y) {\n      var v = u.$config.rowStore, b = g.config, _ = b.drag_id, m = v.getItem(_), p = u.getItemHeight(_), k = b.marker_height;\n      u.callEvent(\"onBeforeRowResizeEnd\", [_, m, k]) !== !1 && m.row_height != k && (m.row_height = k, c.updateTask(_), u.callEvent(\"onAfterRowResize\", [_, m, p, k]), this.render());\n    }, c) };\n    return { init: function() {\n      var g = c.$services.getService(\"dnd\"), f = u.$getConfig(), y = new g(u.$grid_data, { updates_per_second: 60 });\n      c.defined(f.dnd_sensitivity) && (y.config.sensitivity = f.dnd_sensitivity), y.attachEvent(\"onBeforeDragStart\", function(v, b) {\n        return h.row_before_start(y, v, b);\n      }), y.attachEvent(\"onAfterDragStart\", function(v, b) {\n        return h.row_after_start(y, v, b);\n      }), y.attachEvent(\"onDragMove\", function(v, b) {\n        return h.row_drag_move(y, v, b);\n      }), y.attachEvent(\"onDragEnd\", function(v, b) {\n        return h.row_drag_end(y, v, b);\n      });\n    } };\n  }(e, this);\n  d.init(), this._addLayers(this.$gantt), this._initEvents(), r && (this._columnDND = new ya(e, this), this._columnDND.init()), this.callEvent(\"onReady\", []);\n}, _validateColumnWidth: function(t, e) {\n  var n = t[e];\n  if (n && n != \"*\") {\n    var i = this.$gantt, a = 1 * n;\n    isNaN(a) ? i.assert(!1, \"Wrong \" + e + \" value of column \" + t.name) : t[e] = a;\n  }\n}, setSize: function(t, e) {\n  this.$config.width = this.$state.width = t, this.$config.height = this.$state.height = e;\n  for (var n, i = this.getGridColumns(), a = 0, r = (d = this.$getConfig()).grid_elastic_columns, s = 0, o = i.length; s < o; s++) this._validateColumnWidth(i[s], \"min_width\"), this._validateColumnWidth(i[s], \"max_width\"), this._validateColumnWidth(i[s], \"width\"), a += 1 * i[s].width;\n  if (!isNaN(a) && this.$config.scrollable || (a = n = this._setColumnsWidth(t + 1)), this.$config.scrollable && r && !isNaN(a)) {\n    let u = \"width\";\n    r == \"min_width\" && (u = \"min_width\");\n    let h = 0;\n    i.forEach(function(g) {\n      h += g[u] || d.min_grid_column_width;\n    });\n    var l = Math.max(h, t);\n    a = this._setColumnsWidth(l), n = t;\n  }\n  this.$config.scrollable ? (this.$grid_scale.style.width = a + \"px\", this.$grid_data.style.width = a + \"px\") : (this.$grid_scale.style.width = \"inherit\", this.$grid_data.style.width = \"inherit\"), this.$config.width -= 1;\n  var d = this.$getConfig();\n  n !== t && (n !== void 0 ? (d.grid_width = n, this.$config.width = n - 1) : isNaN(a) || (this._setColumnsWidth(a), d.grid_width = a, this.$config.width = a - 1));\n  var c = Math.max(this.$state.height - d.scale_height, 0);\n  this.$grid_data.style.height = c + \"px\", this.refresh();\n}, getSize: function() {\n  var t = this.$getConfig(), e = this.$config.rowStore ? this.getTotalHeight() : 0, n = this._getGridWidth();\n  return { x: this.$state.width, y: this.$state.height, contentX: this.isVisible() ? n : 0, contentY: this.isVisible() ? t.scale_height + e : 0, scrollHeight: this.isVisible() ? e : 0, scrollWidth: this.isVisible() ? n : 0 };\n}, _bindStore: function() {\n  if (this.$config.bind) {\n    var t = this.$gantt.getDatastore(this.$config.bind);\n    if (this.$config.rowStore = t, t && !t._gridCacheAttached) {\n      var e = this;\n      t._gridCacheAttached = t.attachEvent(\"onBeforeFilter\", function() {\n        e._resetTopPositionHeight();\n      });\n    }\n  }\n}, _unbindStore: function() {\n  if (this.$config.bind) {\n    var t = this.$gantt.getDatastore(this.$config.bind);\n    t && t._gridCacheAttached && (t.detachEvent(t._gridCacheAttached), t._gridCacheAttached = !1);\n  }\n}, refresh: function() {\n  this._bindStore(), this._resetTopPositionHeight(), this._resetHeight(), this._initSmartRenderingPlaceholder(), this._calculateGridWidth(), this._renderGridHeader();\n}, getViewPort: function() {\n  var t = this.$config.scrollLeft || 0, e = this.$config.scrollTop || 0, n = this.$config.height || 0, i = this.$config.width || 0;\n  return { y: e, y_end: e + n, x: t, x_end: t + i, height: n, width: i };\n}, scrollTo: function(t, e) {\n  if (this.isVisible()) {\n    var n = !1;\n    this.$config.scrollTop = this.$config.scrollTop || 0, this.$config.scrollLeft = this.$config.scrollLeft || 0, 1 * t == t && (this.$config.scrollLeft = this.$state.scrollLeft = this.$grid.scrollLeft = t, n = !0), 1 * e == e && (this.$config.scrollTop = this.$state.scrollTop = this.$grid_data.scrollTop = e, n = !0), n && this.callEvent(\"onScroll\", [this.$config.scrollLeft, this.$config.scrollTop]);\n  }\n}, getColumnIndex: function(t, e) {\n  for (var n = this.$getConfig().columns, i = 0, a = 0; a < n.length; a++) if (e && n[a].hide && i++, n[a].name == t) return a - i;\n  return null;\n}, getColumn: function(t) {\n  var e = this.getColumnIndex(t);\n  return e === null ? null : this.$getConfig().columns[e];\n}, getGridColumns: function() {\n  return this.$getConfig().columns.slice();\n}, isVisible: function() {\n  return this.$parent && this.$parent.$config ? !this.$parent.$config.hidden : this.$grid.offsetWidth;\n}, _createLayerConfig: function() {\n  var t = this.$gantt, e = this;\n  return [{ renderer: t.$ui.layers.gridLine(), container: this.$grid_data, filter: [function() {\n    return e.isVisible();\n  }] }, { renderer: t.$ui.layers.gridTaskRowResizer(), container: this.$grid_data, append: !0, filter: [function() {\n    return t.config.resize_rows;\n  }] }];\n}, _addLayers: function(t) {\n  if (this.$config.bind) {\n    this._taskLayers = [];\n    var e = this, n = this.$gantt.$services.getService(\"layers\"), i = n.getDataRender(this.$config.bind);\n    i || (i = n.createDataRender({ name: this.$config.bind, defaultContainer: function() {\n      return e.$grid_data;\n    } }));\n    for (var a = this.$config.layers, r = 0; a && r < a.length; r++) {\n      var s = a[r];\n      s.view = this;\n      var o = i.addLayer(s);\n      this._taskLayers.push(o);\n    }\n    this._bindStore(), this._initSmartRenderingPlaceholder();\n  }\n}, _refreshPlaceholderOnStoreUpdate: function(t) {\n  var e = this.$getConfig(), n = this.$config.rowStore;\n  if (n && t === null && this.isVisible() && e.smart_rendering) {\n    var i;\n    if (this.$config.scrollY) {\n      var a = this.$gantt.$ui.getView(this.$config.scrollY);\n      a && (i = a.getScrollState().scrollSize);\n    }\n    if (i || (i = n ? this.getTotalHeight() : 0), i) {\n      this.$rowsPlaceholder && this.$rowsPlaceholder.parentNode && this.$rowsPlaceholder.parentNode.removeChild(this.$rowsPlaceholder);\n      var r = this.$rowsPlaceholder = document.createElement(\"div\");\n      r.style.visibility = \"hidden\", r.style.height = i + \"px\", r.style.width = \"1px\", this.$grid_data.appendChild(r);\n    }\n  }\n}, _initSmartRenderingPlaceholder: function() {\n  var t = this.$config.rowStore;\n  t && (this._initSmartRenderingPlaceholder = function() {\n  }, this._staticBgHandler = t.attachEvent(\"onStoreUpdated\", R(this._refreshPlaceholderOnStoreUpdate, this)));\n}, _initEvents: function() {\n  var t = this.$gantt;\n  this._mouseDelegates.delegate(\"click\", \"gantt_close\", t.bind(function(e, n, i) {\n    var a = this.$config.rowStore;\n    if (!a) return !0;\n    var r = tt(e, this.$config.item_attribute);\n    return r && a.close(r.getAttribute(this.$config.item_attribute)), !1;\n  }, this), this.$grid), this._mouseDelegates.delegate(\"click\", \"gantt_open\", t.bind(function(e, n, i) {\n    var a = this.$config.rowStore;\n    if (!a) return !0;\n    var r = tt(e, this.$config.item_attribute);\n    return r && a.open(r.getAttribute(this.$config.item_attribute)), !1;\n  }, this), this.$grid);\n}, _clearLayers: function(t) {\n  var e = this.$gantt.$services.getService(\"layers\").getDataRender(this.$config.bind);\n  if (this._taskLayers) for (var n = 0; n < this._taskLayers.length; n++) e.removeLayer(this._taskLayers[n]);\n  this._taskLayers = [];\n}, _getColumnWidth: function(t, e, n) {\n  var i = t.min_width || e.min_grid_column_width, a = Math.max(n, i || 10);\n  return t.max_width && (a = Math.min(a, t.max_width)), a;\n}, _checkGridColumnMinWidthLimits: function(t, e) {\n  for (var n = 0, i = t.length; n < i; n++) {\n    var a = 1 * t[n].width;\n    !t[n].min_width && a < e.min_grid_column_width && (t[n].min_width = a);\n  }\n}, _getGridWidthLimits: function() {\n  for (var t = this.$getConfig(), e = this.getGridColumns(), n = 0, i = 0, a = 0; a < e.length; a++) n += e[a].min_width ? e[a].min_width : t.min_grid_column_width, i !== void 0 && (i = e[a].max_width ? i + e[a].max_width : void 0);\n  return this._checkGridColumnMinWidthLimits(e, t), [n, i];\n}, _setColumnsWidth: function(t, e) {\n  var n = this.$getConfig(), i = this.getGridColumns(), a = 0, r = t;\n  e = window.isNaN(e) ? -1 : e;\n  for (var s = 0, o = i.length; s < o; s++) a += 1 * i[s].width;\n  if (window.isNaN(a))\n    for (this._calculateGridWidth(), a = 0, s = 0, o = i.length; s < o; s++) a += 1 * i[s].width;\n  var l = r - a, d = 0;\n  for (s = 0; s < e + 1; s++) d += i[s].width;\n  for (a -= d, s = e + 1; s < i.length; s++) {\n    var c = i[s], u = Math.round(l * (c.width / a));\n    l < 0 ? c.min_width && c.width + u < c.min_width ? u = c.min_width - c.width : !c.min_width && n.min_grid_column_width && c.width + u < n.min_grid_column_width && (u = n.min_grid_column_width - c.width) : c.max_width && c.width + u > c.max_width && (u = c.max_width - c.width), a -= c.width, c.width += u, l -= u;\n  }\n  for (var h = l > 0 ? 1 : -1; l > 0 && h === 1 || l < 0 && h === -1; ) {\n    var g = l;\n    for (s = e + 1; s < i.length; s++) {\n      var f;\n      if ((f = i[s].width + h) == this._getColumnWidth(i[s], n, f) && (l -= h, i[s].width = f), !l) break;\n    }\n    if (g == l) break;\n  }\n  return l && e > -1 && (f = i[e].width + l) == this._getColumnWidth(i[e], n, f) && (i[e].width = f), this._getColsTotalWidth();\n}, _getColsTotalWidth: function() {\n  for (var t = this.getGridColumns(), e = 0, n = 0; n < t.length; n++) {\n    var i = parseFloat(t[n].width);\n    if (window.isNaN(i)) return !1;\n    e += i;\n  }\n  return e;\n}, _calculateGridWidth: function() {\n  for (var t = this.$getConfig(), e = this.getGridColumns(), n = 0, i = [], a = [], r = 0; r < e.length; r++) {\n    var s = parseFloat(e[r].width);\n    window.isNaN(s) && (s = t.min_grid_column_width || 10, i.push(r)), a[r] = s, n += s;\n  }\n  var o = this._getGridWidth() + 1;\n  if (t.autofit || i.length) {\n    var l = o - n;\n    if (t.autofit && !t.grid_elastic_columns) for (r = 0; r < a.length; r++) {\n      var d = Math.round(l / (a.length - r));\n      a[r] += d, (c = this._getColumnWidth(e[r], t, a[r])) != a[r] && (d = c - a[r], a[r] = c), l -= d;\n    }\n    else if (i.length) for (r = 0; r < i.length; r++) {\n      d = Math.round(l / (i.length - r));\n      var c, u = i[r];\n      a[u] += d, (c = this._getColumnWidth(e[u], t, a[u])) != a[u] && (d = c - a[u], a[u] = c), l -= d;\n    }\n    for (r = 0; r < a.length; r++) e[r].width = a[r];\n  } else {\n    var h = o != n;\n    this.$config.width = n - 1, t.grid_width = n, h && this.$parent._setContentSize(this.$config.width, null);\n  }\n}, _renderGridHeader: function() {\n  var t = this.$gantt, e = this.$getConfig(), n = this.$gantt.locale, i = this.$gantt.templates, a = this.getGridColumns();\n  e.rtl && (a = a.reverse());\n  for (var r = [], s = 0, o = n.labels, l = e.scale_height - 1, d = 0; d < a.length; d++) {\n    var c = d == a.length - 1, u = a[d];\n    u.name || (u.name = t.uid() + \"\");\n    var h = 1 * u.width, g = this._getGridWidth();\n    c && g > s + h && (u.width = h = g - s), s += h;\n    var f = t._sort && u.name == t._sort.name ? `<div data-column-id=\"${u.name}\" class=\"gantt_sort gantt_${t._sort.direction}\"></div>` : \"\", y = [\"gantt_grid_head_cell\", \"gantt_grid_head_\" + u.name, c ? \"gantt_last_cell\" : \"\", i.grid_header_class(u.name, u)].join(\" \"), v = \"width:\" + (h - (c ? 1 : 0)) + \"px;\", b = u.label || o[\"column_\" + u.name] || o[u.name];\n    b = b || \"\";\n    var _ = \"<div class='\" + y + \"' style='\" + v + \"' \" + t._waiAria.gridScaleCellAttrString(u, b) + \" data-column-id='\" + u.name + \"' column_id='\" + u.name + \"' data-column-name='\" + u.name + \"' data-column-index='\" + d + \"'>\" + b + f + \"</div>\";\n    r.push(_);\n  }\n  this.$grid_scale.style.height = e.scale_height + \"px\", this.$grid_scale.style.lineHeight = l + \"px\", this.$grid_scale.innerHTML = r.join(\"\"), this._renderHeaderResizers && this._renderHeaderResizers();\n}, _getGridWidth: function() {\n  return this.$config.width;\n}, destructor: function() {\n  this._clearLayers(this.$gantt), this._mouseDelegates && (this._mouseDelegates.destructor(), this._mouseDelegates = null), this._unbindStore(), this.$grid = null, this.$grid_scale = null, this.$grid_data = null, this.$gantt = null, this.$config.rowStore && (this.$config.rowStore.detachEvent(this._staticBgHandler), this.$config.rowStore = null), this.callEvent(\"onDestroy\", []), this.detachAllEvents();\n} };\nconst ba = { init: function(t, e) {\n  var n = e.$gantt;\n  n.attachEvent(\"onTaskClick\", function(i, a) {\n    if (n._is_icon_open_click(a)) return !0;\n    var r = t.getState(), s = t.locateCell(a.target);\n    return !s || !t.getEditorConfig(s.columnName) || (t.isVisible() && r.id == s.id && r.columnName == s.columnName || t.startEdit(s.id, s.columnName), !1);\n  }), n.attachEvent(\"onEmptyClick\", function() {\n    return t.isVisible() && t.isChanged() ? t.save() : t.hide(), !0;\n  }), n.attachEvent(\"onTaskDblClick\", function(i, a) {\n    var r = t.getState(), s = t.locateCell(a.target);\n    return !s || !t.isVisible() || s.columnName != r.columnName;\n  });\n}, onShow: function(t, e, n) {\n  var i = n.$gantt;\n  i.ext && i.ext.keyboardNavigation && i.ext.keyboardNavigation.attachEvent(\"onKeyDown\", function(a, r) {\n    var s = i.constants.KEY_CODES, o = !1;\n    return r.keyCode === s.SPACE && t.isVisible() && (o = !0), !o;\n  }), e.onkeydown = function(a) {\n    a = a || window.event;\n    var r = i.constants.KEY_CODES;\n    if (!(a.defaultPrevented || a.shiftKey && a.keyCode != r.TAB)) {\n      var s = !0;\n      switch (a.keyCode) {\n        case i.keys.edit_save:\n          t.save();\n          break;\n        case i.keys.edit_cancel:\n          t.hide();\n          break;\n        case r.UP:\n        case r.DOWN:\n          t.isVisible() && (t.hide(), s = !1);\n          break;\n        case r.TAB:\n          a.shiftKey ? t.editPrevCell(!0) : t.editNextCell(!0);\n          break;\n        default:\n          s = !1;\n      }\n      s && a.preventDefault();\n    }\n  };\n}, onHide: function() {\n}, destroy: function() {\n} }, xa = { init: function(t, e) {\n  var n = t, i = e.$gantt, a = null, r = i.ext.keyboardNavigation;\n  r.attachEvent(\"onBeforeFocus\", function(s) {\n    var o = t.locateCell(s);\n    if (clearTimeout(a), o) {\n      var l = o.columnName, d = o.id, c = n.getState();\n      if (n.isVisible() && c.id == d && c.columnName === l) return !1;\n    }\n    return !0;\n  }), r.attachEvent(\"onFocus\", function(s) {\n    var o = t.locateCell(s), l = t.getState();\n    return clearTimeout(a), !o || o.id == l.id && o.columnName == l.columnName || n.isVisible() && n.save(), !0;\n  }), t.attachEvent(\"onHide\", function() {\n    clearTimeout(a);\n  }), r.attachEvent(\"onBlur\", function() {\n    return a = setTimeout(function() {\n      n.save();\n    }), !0;\n  }), i.attachEvent(\"onTaskDblClick\", function(s, o) {\n    var l = t.getState(), d = t.locateCell(o.target);\n    return !d || !t.isVisible() || d.columnName != l.columnName;\n  }), i.attachEvent(\"onTaskClick\", function(s, o) {\n    if (i._is_icon_open_click(o)) return !0;\n    var l = t.getState(), d = t.locateCell(o.target);\n    return !d || !t.getEditorConfig(d.columnName) || (t.isVisible() && l.id == d.id && l.columnName == d.columnName || t.startEdit(d.id, d.columnName), !1);\n  }), i.attachEvent(\"onEmptyClick\", function() {\n    return n.save(), !0;\n  }), r.attachEvent(\"onKeyDown\", function(s, o) {\n    var l = t.locateCell(o.target), d = !!l && t.getEditorConfig(l.columnName), c = t.getState(), u = i.constants.KEY_CODES, h = o.keyCode, g = !1;\n    switch (h) {\n      case u.ENTER:\n        t.isVisible() ? (t.save(), o.preventDefault(), g = !0) : d && !(o.ctrlKey || o.metaKey || o.shiftKey) && (n.startEdit(l.id, l.columnName), o.preventDefault(), g = !0);\n        break;\n      case u.ESC:\n        t.isVisible() && (t.hide(), o.preventDefault(), g = !0);\n        break;\n      case u.UP:\n      case u.DOWN:\n        break;\n      case u.LEFT:\n      case u.RIGHT:\n        (d && t.isVisible() || c.editorType === \"date\") && (g = !0);\n        break;\n      case u.SPACE:\n        t.isVisible() && (g = !0), d && !t.isVisible() && (n.startEdit(l.id, l.columnName), o.preventDefault(), g = !0);\n        break;\n      case u.DELETE:\n        d && !t.isVisible() ? (n.startEdit(l.id, l.columnName), g = !0) : d && t.isVisible() && (g = !0);\n        break;\n      case u.TAB:\n        if (t.isVisible()) {\n          o.shiftKey ? t.editPrevCell(!0) : t.editNextCell(!0);\n          var f = t.getState();\n          f.id && r.focus({ type: \"taskCell\", id: f.id, column: f.columnName }), o.preventDefault(), g = !0;\n        }\n        break;\n      default:\n        if (t.isVisible()) g = !0;\n        else if (h >= 48 && h <= 57 || h > 95 && h < 112 || h >= 64 && h <= 91 || h > 185 && h < 193 || h > 218 && h < 223) {\n          var y = s.modifiers, v = y.alt || y.ctrl || y.meta || y.shift;\n          y.alt || v && r.getCommandHandler(s, \"taskCell\") || d && !t.isVisible() && (n.startEdit(l.id, l.columnName), g = !0);\n        }\n    }\n    return !g;\n  });\n}, onShow: function(t, e, n) {\n}, onHide: function(t, e, n) {\n  const i = n.$gantt;\n  i && i.focus();\n}, destroy: function() {\n} };\nfunction wt(t) {\n  var e = function() {\n  };\n  return e.prototype = { show: function(n, i, a, r) {\n  }, hide: function() {\n  }, set_value: function(n, i, a, r) {\n    this.get_input(r).value = n;\n  }, get_value: function(n, i, a) {\n    return this.get_input(a).value || \"\";\n  }, is_changed: function(n, i, a, r) {\n    var s = this.get_value(i, a, r);\n    return s && n && s.valueOf && n.valueOf ? s.valueOf() != n.valueOf() : s != n;\n  }, is_valid: function(n, i, a, r) {\n    return !0;\n  }, save: function(n, i, a) {\n  }, get_input: function(n) {\n    return n.querySelector(\"input\");\n  }, focus: function(n) {\n    var i = this.get_input(n);\n    i && (i.focus && i.focus(), i.select && i.select());\n  } }, e;\n}\nfunction $a(t) {\n  var e = wt();\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  return z(n, e), N(n.prototype, { show: function(i, a, r, s) {\n    var o = `<div role='cell'><input type='text' name='${a.name}' title='${a.name}'></div>`;\n    s.innerHTML = o;\n  } }, !0), n;\n}\nfunction wa(t) {\n  var e = wt();\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  return z(n, e), N(n.prototype, { show: function(i, a, r, s) {\n    var o = r.min || 0, l = r.max || 100, d = `<div role='cell'><input type='number' min='${o}' max='${l}' name='${a.name}' title='${a.name}'></div>`;\n    s.innerHTML = d, s.oninput = function(c) {\n      +c.target.value < o && (c.target.value = o), +c.target.value > l && (c.target.value = l);\n    };\n  }, get_value: function(i, a, r) {\n    return this.get_input(r).value || \"\";\n  }, is_valid: function(i, a, r, s) {\n    return !isNaN(parseInt(i, 10));\n  } }, !0), n;\n}\nfunction Sa(t) {\n  var e = wt();\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  return z(n, e), N(n.prototype, { show: function(i, a, r, s) {\n    for (var o = `<div role='cell'><select name='${a.name}' title='${a.name}'>`, l = [], d = r.options || [], c = 0; c < d.length; c++) l.push(\"<option value='\" + r.options[c].key + \"'>\" + d[c].label + \"</option>\");\n    o += l.join(\"\") + \"</select></div>\", s.innerHTML = o;\n  }, get_input: function(i) {\n    return i.querySelector(\"select\");\n  } }, !0), n;\n}\nfunction Ta(t) {\n  var e = wt(), n = \"%Y-%m-%d\", i = null, a = null;\n  function r() {\n    return e.apply(this, arguments) || this;\n  }\n  return z(r, e), N(r.prototype, { show: function(s, o, l, d) {\n    i || (i = t.date.date_to_str(n)), a || (a = t.date.str_to_date(n));\n    var c = null, u = null;\n    c = typeof l.min == \"function\" ? l.min(s, o) : l.min, u = typeof l.max == \"function\" ? l.max(s, o) : l.max;\n    var h = `<div style='width:140px' role='cell'><input type='date' ${c ? \" min='\" + i(c) + \"' \" : \"\"} ${u ? \" max='\" + i(u) + \"' \" : \"\"} name='${o.name}' title='${o.name}'></div>`;\n    d.innerHTML = h, d.oninput = function(g) {\n      +t.date.str_to_date(\"%Y-%m-%d\")(g.target.value) < +c && (g.target.value = t.date.date_to_str(\"%Y-%m-%d\")(c)), +t.date.str_to_date(\"%Y-%m-%d\")(g.target.value) > +u && (g.target.value = t.date.date_to_str(\"%Y-%m-%d\")(u));\n    };\n  }, set_value: function(s, o, l, d) {\n    s && s.getFullYear ? this.get_input(d).value = i(s) : this.get_input(d).value = s;\n  }, is_valid: function(s, o, l, d) {\n    return !(!s || isNaN(s.getTime()));\n  }, get_value: function(s, o, l) {\n    var d;\n    try {\n      d = a(this.get_input(l).value || \"\");\n    } catch {\n      d = null;\n    }\n    return d;\n  } }, !0), r;\n}\nfunction Ea(t) {\n  var e = wt();\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  function i(l) {\n    return l.formatter || t.ext.formatters.linkFormatter();\n  }\n  function a(l, d) {\n    for (var c = (l || \"\").split(d.delimiter || \",\"), u = 0; u < c.length; u++) {\n      var h = c[u].trim();\n      h ? c[u] = h : (c.splice(u, 1), u--);\n    }\n    return c.sort(), c;\n  }\n  function r(l, d, c) {\n    for (var u = l.$target, h = [], g = 0; g < u.length; g++) {\n      var f = c.getLink(u[g]);\n      h.push(i(d).format(f));\n    }\n    return h.join((d.delimiter || \",\") + \" \");\n  }\n  function s(l) {\n    return l.source + \"_\" + l.target + \"_\" + l.type + \"_\" + (l.lag || 0);\n  }\n  function o(l, d, c) {\n    var u = function(v, b, _) {\n      var m = [];\n      return [...new Set(b)].forEach(function(p) {\n        var k = i(_).parse(p);\n        k && (k.target = v, k.id = \"predecessor_generated\", t.isLinkAllowed(k) && (k.id = void 0, m.push(k)));\n      }), m;\n    }(l.id, d, c), h = {};\n    l.$target.forEach(function(v) {\n      var b = t.getLink(v);\n      h[s(b)] = b.id;\n    });\n    var g = [];\n    u.forEach(function(v) {\n      var b = s(v);\n      h[b] ? delete h[b] : g.push(v);\n    });\n    var f = [];\n    for (var y in h) f.push(h[y]);\n    return { add: g, remove: f };\n  }\n  return z(n, e), N(n.prototype, { show: function(l, d, c, u) {\n    var h = `<div role='cell'><input type='text' name='${d.name}' title='${d.name}'></div>`;\n    u.innerHTML = h;\n  }, hide: function() {\n  }, set_value: function(l, d, c, u) {\n    this.get_input(u).value = r(l, c.editor, t);\n  }, get_value: function(l, d, c) {\n    return a(this.get_input(c).value || \"\", d.editor);\n  }, save: function(l, d, c) {\n    var u = o(t.getTask(l), this.get_value(l, d, c), d.editor);\n    (u.add.length || u.remove.length) && t.batchUpdate(function() {\n      u.add.forEach(function(h) {\n        t.addLink(h);\n      }), u.remove.forEach(function(h) {\n        t.deleteLink(h);\n      }), t.autoSchedule && t.autoSchedule();\n    });\n  }, is_changed: function(l, d, c, u) {\n    var h = this.get_value(d, c, u), g = a(r(l, c.editor, t), c.editor);\n    return h.join() !== g.join();\n  } }, !0), n;\n}\nfunction Ca(t) {\n  var e = wt();\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  function i(a) {\n    return a.formatter || t.ext.formatters.durationFormatter();\n  }\n  return z(n, e), N(n.prototype, { show: function(a, r, s, o) {\n    var l = `<div role='cell'><input type='text' name='${r.name}' title='${r.name}'></div>`;\n    o.innerHTML = l;\n  }, set_value: function(a, r, s, o) {\n    this.get_input(o).value = i(s.editor).format(a);\n  }, get_value: function(a, r, s) {\n    return i(r.editor).parse(this.get_input(s).value || \"\");\n  } }, !0), n;\n}\nfunction Da(t) {\n  return function(n, i, a) {\n    a == \"keepDates\" ? function(r, s) {\n      s == \"duration\" ? r.end_date = t.calculateEndDate(r) : s != \"end_date\" && s != \"start_date\" || (r.duration = t.calculateDuration(r));\n    }(n, i) : a == \"keepDuration\" ? function(r, s) {\n      s == \"end_date\" ? r.start_date = e(r) : s != \"start_date\" && s != \"duration\" || (r.end_date = t.calculateEndDate(r));\n    }(n, i) : function(r, s) {\n      t.config.schedule_from_end ? s == \"end_date\" || s == \"duration\" ? r.start_date = e(r) : s == \"start_date\" && (r.duration = t.calculateDuration(r)) : s == \"start_date\" || s == \"duration\" ? r.end_date = t.calculateEndDate(r) : s == \"end_date\" && (r.duration = t.calculateDuration(r));\n    }(n, i);\n  };\n  function e(n) {\n    return t.calculateEndDate({ start_date: n.end_date, duration: -n.duration, task: n });\n  }\n}\nfunction Aa(t) {\n  t.config.editor_types = { text: new ($a())(), number: new (wa())(), select: new (Sa())(), date: new (Ta(t))(), predecessor: new (Ea(t))(), duration: new (Ca(t))() };\n}\nfunction Ia(t) {\n  var e = /* @__PURE__ */ function(a) {\n    var r = null;\n    return { setMapping: function(s) {\n      r = s;\n    }, getMapping: function() {\n      return r || (a.config.keyboard_navigation_cells && a.ext.keyboardNavigation ? xa : ba);\n    } };\n  }(t), n = {};\n  st(n);\n  var i = { init: Aa, createEditors: function(a) {\n    function r(u, h) {\n      var g = a.$getConfig(), f = function(b, _) {\n        for (var m = a.$getConfig(), p = a.getItemTop(b), k = a.getItemHeight(b), $ = a.getGridColumns(), w = 0, x = 0, S = 0, T = 0; T < $.length; T++) {\n          if ($[T].name == _) {\n            S = $[T].width;\n            break;\n          }\n          m.rtl ? x += $[T].width : w += $[T].width;\n        }\n        return m.rtl ? { top: p, right: x, height: k, width: S } : { top: p, left: w, height: k, width: S };\n      }(u, h), y = document.createElement(\"div\");\n      y.className = \"gantt_grid_editor_placeholder\", y.setAttribute(a.$config.item_attribute, u), y.setAttribute(a.$config.bind + \"_id\", u), y.setAttribute(\"data-column-name\", h);\n      var v = function(b, _) {\n        for (var m = b.getGridColumns(), p = 0; p < m.length; p++) if (m[p].name == _) return p;\n        return 0;\n      }(a, h);\n      return y.setAttribute(\"data-column-index\", v), t._waiAria.inlineEditorAttr(y), g.rtl ? y.style.cssText = [\"top:\" + f.top + \"px\", \"right:\" + f.right + \"px\", \"width:\" + f.width + \"px\", \"height:\" + f.height + \"px\"].join(\";\") : y.style.cssText = [\"top:\" + f.top + \"px\", \"left:\" + f.left + \"px\", \"width:\" + f.width + \"px\", \"height:\" + f.height + \"px\"].join(\";\"), y;\n    }\n    var s = Da(t), o = [], l = [], d = null, c = { _itemId: null, _columnName: null, _editor: null, _editorType: null, _placeholder: null, locateCell: function(u) {\n      if (!G(u, a.$grid)) return null;\n      var h = tt(u, a.$config.item_attribute), g = tt(u, \"data-column-name\");\n      if (h && g) {\n        var f = g.getAttribute(\"data-column-name\");\n        return { id: h.getAttribute(a.$config.item_attribute), columnName: f };\n      }\n      return null;\n    }, getEditorConfig: function(u) {\n      return a.getColumn(u).editor;\n    }, init: function() {\n      var u = e.getMapping();\n      u.init && u.init(this, a), d = a.$gantt.getDatastore(a.$config.bind);\n      var h = this;\n      o.push(d.attachEvent(\"onIdChange\", function(g, f) {\n        h._itemId == g && (h._itemId = f);\n      })), o.push(d.attachEvent(\"onStoreUpdated\", function() {\n        a.$gantt.getState(\"batchUpdate\").batch_update || h.isVisible() && !d.isVisible(h._itemId) && h.hide();\n      })), l.push(t.attachEvent(\"onDataRender\", function() {\n        h._editor && h._placeholder && !G(h._placeholder, t.$root) && a.$grid_data.appendChild(h._placeholder);\n      })), this.init = function() {\n      };\n    }, getState: function() {\n      return { editor: this._editor, editorType: this._editorType, placeholder: this._placeholder, id: this._itemId, columnName: this._columnName };\n    }, startEdit: function(u, h) {\n      if (this.isVisible() && this.save(), d.exists(u)) {\n        var g = { id: u, columnName: h };\n        t.isReadonly(d.getItem(u)) ? this.callEvent(\"onEditPrevent\", [g]) : this.callEvent(\"onBeforeEditStart\", [g]) !== !1 ? (this.show(g.id, g.columnName), this.setValue(), this.callEvent(\"onEditStart\", [g])) : this.callEvent(\"onEditPrevent\", [g]);\n      }\n    }, isVisible: function() {\n      return !(!this._editor || !G(this._placeholder, t.$root));\n    }, show: function(u, h) {\n      this.isVisible() && this.save();\n      var g = { id: u, columnName: h }, f = a.getColumn(g.columnName), y = this.getEditorConfig(f.name);\n      if (y) {\n        var v = a.$getConfig().editor_types[y.type], b = r(g.id, g.columnName);\n        a.$grid_data.appendChild(b), v.show(g.id, f, y, b), this._editor = v, this._placeholder = b, this._itemId = g.id, this._columnName = g.columnName, this._editorType = y.type;\n        var _ = e.getMapping();\n        _.onShow && _.onShow(this, b, a);\n      }\n    }, setValue: function() {\n      var u = this.getState(), h = u.id, g = u.columnName, f = a.getColumn(g), y = d.getItem(h), v = this.getEditorConfig(g);\n      if (v) {\n        var b = y[v.map_to];\n        v.map_to == \"auto\" && (b = d.getItem(h)), this._editor.set_value(b, h, f, this._placeholder), this.focus();\n      }\n    }, focus: function() {\n      this._editor.focus(this._placeholder);\n    }, getValue: function() {\n      var u = a.getColumn(this._columnName);\n      return this._editor.get_value(this._itemId, u, this._placeholder);\n    }, _getItemValue: function() {\n      var u = this.getEditorConfig(this._columnName);\n      if (u) {\n        var h = t.getTask(this._itemId)[u.map_to];\n        return u.map_to == \"auto\" && (h = d.getItem(this._itemId)), h;\n      }\n    }, isChanged: function() {\n      var u = a.getColumn(this._columnName), h = this._getItemValue();\n      return this._editor.is_changed(h, this._itemId, u, this._placeholder);\n    }, hide: function() {\n      if (this._itemId) {\n        var u = this._itemId, h = this._columnName, g = e.getMapping();\n        g.onHide && g.onHide(this, this._placeholder, a), this._itemId = null, this._columnName = null, this._editorType = null, this._placeholder && (this._editor && this._editor.hide && this._editor.hide(this._placeholder), this._editor = null, this._placeholder.parentNode && this._placeholder.parentNode.removeChild(this._placeholder), this._placeholder = null, this.callEvent(\"onEditEnd\", [{ id: u, columnName: h }]));\n      }\n    }, save: function() {\n      if (this.isVisible() && d.exists(this._itemId) && this.isChanged()) {\n        var u = this._itemId, h = this._columnName;\n        if (d.exists(u)) {\n          var g = d.getItem(u), f = this.getEditorConfig(h), y = { id: u, columnName: h, newValue: this.getValue(), oldValue: this._getItemValue() };\n          if (this.callEvent(\"onBeforeSave\", [y]) !== !1 && (!this._editor.is_valid || this._editor.is_valid(y.newValue, y.id, a.getColumn(h), this._placeholder))) {\n            var v = f.map_to, b = y.newValue;\n            v != \"auto\" ? (g[v] = b, s(g, v, t.config.inline_editors_date_processing), d.updateItem(u)) : this._editor.save(u, a.getColumn(h), this._placeholder), this.callEvent(\"onSave\", [y]);\n          }\n          this.hide();\n        }\n      } else this.hide();\n    }, _findEditableCell: function(u, h) {\n      var g = u, f = a.getGridColumns()[g], y = f ? f.name : null;\n      if (y) {\n        for (; y && !this.getEditorConfig(y); ) y = this._findEditableCell(u + h, h);\n        return y;\n      }\n      return null;\n    }, getNextCell: function(u) {\n      return this._findEditableCell(a.getColumnIndex(this._columnName, !0) + u, u);\n    }, getFirstCell: function() {\n      return this._findEditableCell(0, 1);\n    }, getLastCell: function() {\n      return this._findEditableCell(a.getGridColumns().length - 1, -1);\n    }, editNextCell: function(u) {\n      var h = this.getNextCell(1);\n      if (h) {\n        var g = this.getNextCell(1);\n        g && this.getEditorConfig(g) && this.startEdit(this._itemId, g);\n      } else if (u && this.moveRow(1)) {\n        var f = this.moveRow(1);\n        (h = this.getFirstCell()) && this.getEditorConfig(h) && this.startEdit(f, h);\n      }\n    }, editPrevCell: function(u) {\n      var h = this.getNextCell(-1);\n      if (h) {\n        var g = this.getNextCell(-1);\n        g && this.getEditorConfig(g) && this.startEdit(this._itemId, g);\n      } else if (u && this.moveRow(-1)) {\n        var f = this.moveRow(-1);\n        (h = this.getLastCell()) && this.getEditorConfig(h) && this.startEdit(f, h);\n      }\n    }, moveRow: function(u) {\n      for (var h = u > 0 ? t.getNext : t.getPrev, g = (h = t.bind(h, t))(this._itemId); t.isTaskExists(g) && t.isReadonly(t.getTask(g)); ) g = h(g);\n      return g;\n    }, editNextRow: function(u) {\n      var h = this.getState().id;\n      if (t.isTaskExists(h)) {\n        var g = null;\n        g = u ? this.moveRow(1) : t.getNext(h), t.isTaskExists(g) && this.startEdit(g, this._columnName);\n      }\n    }, editPrevRow: function(u) {\n      var h = this.getState().id;\n      if (t.isTaskExists(h)) {\n        var g = null;\n        g = u ? this.moveRow(-1) : t.getPrev(h), t.isTaskExists(g) && this.startEdit(g, this._columnName);\n      }\n    }, detachStore: function() {\n      o.forEach(function(u) {\n        d.detachEvent(u);\n      }), l.forEach(function(u) {\n        t.detachEvent(u);\n      }), o = [], l = [], d = null, this.hide();\n    }, destructor: function() {\n      this.detachStore(), this.detachAllEvents();\n    } };\n    return N(c, e), N(c, n), c;\n  } };\n  return N(i, e), N(i, n), i;\n}\nfunction ke(t, e, n, i, a) {\n  if (!t.start_date || !t.end_date) return null;\n  var r = n.getItemTop(t.id), s = n.getItemHeight(t.id);\n  if (r > e.y_end || r + s < e.y) return !1;\n  var o = n.posFromDate(t.start_date), l = n.posFromDate(t.end_date), d = Math.min(o, l) - 200, c = Math.max(o, l) + 200;\n  return !(d > e.x_end || c < e.x);\n}\nfunction yn(t) {\n  function e(r, s, o) {\n    if (t._isAllowedUnscheduledTask(r) || !t._isTaskInTimelineLimits(r)) return;\n    var l = s.getItemPosition(r), d = o, c = s.$getTemplates(), u = t.getTaskType(r.type), h = s.getBarHeight(r.id, u == d.types.milestone), g = 0;\n    u == d.types.milestone && (g = (h - l.height) / 2);\n    var f = Math.floor((s.getItemHeight(r.id) - h) / 2);\n    const y = t.config.baselines !== !1 && r.baselines && r.baselines.length, v = t.config.baselines !== !1 && (t.config.baselines.render_mode == \"separateRow\" || t.config.baselines.render_mode == \"individualRow\");\n    if (y && v && r.bar_height !== \"full\" && r.bar_height < r.row_height) if (u === d.types.milestone) {\n      let x = s.getBarHeight(r.id, !0), S = Math.sqrt(2 * x * x);\n      f = Math.floor((S - h) / 2) + 2;\n    } else f = 2;\n    u == d.types.milestone && (l.left -= Math.round(h / 2), l.width = h);\n    var b = document.createElement(\"div\"), _ = Math.round(l.width);\n    s.$config.item_attribute && (b.setAttribute(s.$config.item_attribute, r.id), b.setAttribute(s.$config.bind + \"_id\", r.id)), d.show_progress && u != d.types.milestone && function(x, S, T, E, C) {\n      var D = 1 * x.progress || 0;\n      T = Math.max(T - 2, 0);\n      var A = document.createElement(\"div\"), I = Math.round(T * D);\n      I = Math.min(T, I), A.style.width = I + \"px\", A.className = \"gantt_task_progress\", A.innerHTML = C.progress_text(x.start_date, x.end_date, x), E.rtl && (A.style.position = \"absolute\", A.style.right = \"0px\");\n      var M = document.createElement(\"div\");\n      if (M.className = \"gantt_task_progress_wrapper\", M.appendChild(A), S.appendChild(M), t.config.drag_progress && !t.isReadonly(x)) {\n        var L = document.createElement(\"div\"), P = I;\n        E.rtl && (P = T - I), L.style.left = P + \"px\", L.className = \"gantt_task_progress_drag\", L.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"9\" viewBox=\"0 0 12 9\" fill=\"none\">\n<path d=\"M5.58397 1.52543C5.78189 1.22856 6.21811 1.22856 6.41602 1.52543L10.5475 7.72265C10.769 8.05493 10.5308 8.5 10.1315 8.5L1.86852 8.5C1.46917 8.5 1.23097 8.05493 1.45249 7.72265L5.58397 1.52543Z\" fill=\"var(--dhx-gantt-progress-handle-background)\" stroke=\"var(--dhx-gantt-progress-handle-border)\"/>\n</svg>`, A.appendChild(L), S.appendChild(L);\n      }\n    }(r, b, _, d, c);\n    var m = function(x, S, T) {\n      var E = document.createElement(\"div\");\n      return t.getTaskType(x.type) != t.config.types.milestone ? E.innerHTML = T.task_text(x.start_date, x.end_date, x) : t.getTaskType(x.type) == t.config.types.milestone && S && (E.style.height = E.style.width = S + \"px\"), E.className = \"gantt_task_content\", E;\n    }(r, _, c);\n    b.appendChild(m);\n    var p = function(x, S, T, E) {\n      var C = E.$getConfig(), D = [x];\n      S && D.push(S);\n      var A = t.getState(), I = t.getTask(T);\n      if (t.getTaskType(I.type) == C.types.milestone ? D.push(\"gantt_milestone\") : t.getTaskType(I.type) == C.types.project && D.push(\"gantt_project\"), D.push(\"gantt_bar_\" + t.getTaskType(I.type)), t.isSummaryTask(I) && D.push(\"gantt_dependent_task\"), t.isSplitTask(I) && (C.open_split_tasks && !I.$open || !C.open_split_tasks) && D.push(\"gantt_split_parent\"), C.select_task && t.isSelectedTask(T) && D.push(\"gantt_selected\"), T == A.drag_id && (D.push(\"gantt_drag_\" + A.drag_mode), A.touch_drag && D.push(\"gantt_touch_\" + A.drag_mode)), A.link_source_id == T && (D.push(\"gantt_link_source\"), A.link_from_start ? D.push(\"gantt_link_from_start\") : D.push(\"gantt_link_from_end\")), A.link_target_id == T && D.push(\"gantt_link_target\"), C.highlight_critical_path && t.isCriticalTask && t.isCriticalTask(I) && D.push(\"gantt_critical_task\"), A.link_landing_area && A.link_target_id && A.link_source_id && A.link_target_id != A.link_source_id && (A.link_target_id == T || A.link_source_id == T)) {\n        var M = A.link_source_id, L = A.link_from_start, P = A.link_to_start, H = \"\";\n        H = t.isLinkAllowed(M, T, L, P) ? P ? \"link_start_allow\" : \"link_finish_allow\" : P ? \"link_start_deny\" : \"link_finish_deny\", D.push(H);\n      }\n      return D.join(\" \");\n    }(\"gantt_task_line\", c.task_class(r.start_date, r.end_date, r), r.id, s);\n    (r.color || r.progressColor || r.textColor) && (p += \" gantt_task_inline_color\"), l.width < 20 && (p += \" gantt_thin_task\"), b.className = p;\n    var k = [\"left:\" + l.left + \"px\", \"top:\" + (f + l.top) + \"px\", \"height:\" + h + \"px\", \"line-height:\" + Math.max(h < 30 ? h - 2 : h, 0) + \"px\", \"width:\" + _ + \"px\"];\n    b.style.cssText = k.join(\";\"), r.color && b.style.setProperty(\"--dhx-gantt-task-background\", r.color), r.textColor && b.style.setProperty(\"--dhx-gantt-task-color\", r.textColor), r.progressColor && b.style.setProperty(\"--dhx-gantt-task-progress-color\", r.progressColor);\n    var $ = function(x, S, T, E) {\n      var C = \"gantt_left \" + i(!S.rtl, x), D = null;\n      return E && (D = { type: \"marginRight\", value: E }), n(x, T.leftside_text, C, D);\n    }(r, d, c, g);\n    $ && b.appendChild($), $ = function(x, S, T, E) {\n      var C = \"gantt_right \" + i(!!S.rtl, x), D = null;\n      return E && (D = { type: \"marginLeft\", value: E }), n(x, T.rightside_text, C, D);\n    }(r, d, c, g), $ && b.appendChild($), t._waiAria.setTaskBarAttr(r, b);\n    var w = t.getState();\n    return t.isReadonly(r) || (d.drag_resize && !t.isSummaryTask(r) && u != d.types.milestone && a(b, \"gantt_task_drag\", r, function(x) {\n      var S = document.createElement(\"div\");\n      return S.className = x, S;\n    }, d), d.drag_links && d.show_links && a(b, \"gantt_link_control\", r, function(x) {\n      var S = document.createElement(\"div\");\n      S.className = x, S.style.cssText = [\"height:\" + h + \"px\", \"line-height:\" + h + \"px\"].join(\";\");\n      var T = document.createElement(\"div\");\n      T.className = \"gantt_link_point\";\n      var E = !1;\n      return w.link_source_id && d.touch && (E = !0), T.style.display = E ? \"block\" : \"\", S.appendChild(T), S;\n    }, d, g)), b;\n  }\n  function n(r, s, o, l) {\n    if (!s) return null;\n    var d = s(r.start_date, r.end_date, r);\n    if (!d) return null;\n    var c = document.createElement(\"div\");\n    return c.className = \"gantt_side_content \" + o, c.innerHTML = d, l && (c.style[l.type] = Math.abs(l.value) + \"px\"), c;\n  }\n  function i(r, s) {\n    var o = r ? { $source: [t.config.links.start_to_start], $target: [t.config.links.start_to_start, t.config.links.finish_to_start] } : { $source: [t.config.links.finish_to_start, t.config.links.finish_to_finish], $target: [t.config.links.finish_to_finish] };\n    for (var l in o) for (var d = s[l], c = 0; c < d.length; c++) for (var u = t.getLink(d[c]), h = 0; h < o[l].length; h++) if (u.type == o[l][h]) return \"gantt_link_crossing\";\n    return \"\";\n  }\n  function a(r, s, o, l, d, c) {\n    var u, h = t.getState();\n    +o.start_date >= +h.min_date && ((u = l([s, d.rtl ? \"task_right\" : \"task_left\", \"task_start_date\"].join(\" \"))).setAttribute(\"data-bind-property\", \"start_date\"), c && (u.style.marginLeft = c + \"px\"), r.appendChild(u)), +o.end_date <= +h.max_date && ((u = l([s, d.rtl ? \"task_left\" : \"task_right\", \"task_end_date\"].join(\" \"))).setAttribute(\"data-bind-property\", \"end_date\"), c && (u.style.marginRight = c + \"px\"), r.appendChild(u));\n  }\n  return function(r, s, o) {\n    var l = (o = s.$getConfig()).type_renderers[t.getTaskType(r.type)], d = e;\n    return l ? l.call(t, r, function(c) {\n      return d.call(t, c, s, o);\n    }, s) : d.call(t, r, s, o);\n  };\n}\nfunction Ue(t) {\n  return { render: yn(t), update: null, isInViewPort: ke, getVisibleRange: gt };\n}\nfunction Et() {\n  return console.error(\"You are trying to use a Pro feature that is not available in the GPL version.\"), { render: function() {\n  }, isInViewPort: function() {\n  }, getVisibleRange: function() {\n  } };\n}\nfunction qe(t, e, n) {\n  return { top: e.getItemTop(t.id), height: e.getItemHeight(t.id), left: 0, right: 1 / 0 };\n}\nfunction zt(t, e) {\n  var n = 0, i = t.left.length - 1;\n  if (e) for (var a = 0; a < t.left.length; a++) {\n    var r = t.left[a];\n    if (r < e.x && (n = a), r > e.x_end) {\n      i = a;\n      break;\n    }\n  }\n  return { start: n, end: i };\n}\nfunction ie(t, e, n, i) {\n  var a = e.width[t];\n  if (a <= 0) return !1;\n  if (!i.config.smart_rendering || Mt(i)) return !0;\n  var r = e.left[t] - a, s = e.left[t] + a;\n  return r <= n.x_end && s >= n.x;\n}\nfunction Ma(t, e) {\n  var n = e.config.timeline_placeholder;\n  if (t = t || [], n && t.filter((l) => l.id === \"timeline_placeholder_task\").length === 0) {\n    var i = e.getState(), a = null, r = i.min_date, s = i.max_date;\n    t.length && (a = t[t.length - 1].id);\n    var o = { start_date: r, end_date: s, row_height: n.height || 0, id: \"timeline_placeholder_task\", unscheduled: !0, lastTaskId: a, calendar_id: n.calendar || \"global\", $source: [], $target: [] };\n    t.push(o);\n  }\n}\nfunction Na(t) {\n  var e = { current_pos: null, dirs: { left: \"left\", right: \"right\", up: \"up\", down: \"down\" }, path: [], clear: function() {\n    this.current_pos = null, this.path = [];\n  }, point: function(a) {\n    this.current_pos = t.copy(a);\n  }, get_lines: function(a) {\n    this.clear(), this.point(a[0]);\n    for (var r = 1; r < a.length; r++) this.line_to(a[r]);\n    return this.get_path();\n  }, line_to: function(a) {\n    var r = t.copy(a), s = this.current_pos, o = this._get_line(s, r);\n    this.path.push(o), this.current_pos = r;\n  }, get_path: function() {\n    return this.path;\n  }, get_wrapper_sizes: function(a, r, s) {\n    var o, l = r.$getConfig().link_wrapper_width, d = a.y - l / 2;\n    switch (a.direction) {\n      case this.dirs.left:\n        o = { top: d, height: l, lineHeight: l, left: a.x - a.size - l / 2, width: a.size + l };\n        break;\n      case this.dirs.right:\n        o = { top: d, lineHeight: l, height: l, left: a.x - l / 2, width: a.size + l };\n        break;\n      case this.dirs.up:\n        o = { top: d - a.size, lineHeight: a.size + l, height: a.size + l, left: a.x - l / 2, width: l };\n        break;\n      case this.dirs.down:\n        o = { top: d, lineHeight: a.size + l, height: a.size + l, left: a.x - l / 2, width: l };\n    }\n    return o;\n  }, get_line_sizes: function(a, r) {\n    var s, o = r.$getConfig(), l = o.link_line_width, d = o.link_wrapper_width, c = a.size + l;\n    switch (a.direction) {\n      case this.dirs.left:\n      case this.dirs.right:\n        s = { height: l, width: c, marginTop: (d - l) / 2, marginLeft: (d - l) / 2 };\n        break;\n      case this.dirs.up:\n      case this.dirs.down:\n        s = { height: c, width: l, marginTop: (d - l) / 2, marginLeft: (d - l) / 2 };\n    }\n    return s;\n  }, render_line: function(a, r, s, o) {\n    var l = this.get_wrapper_sizes(a, s, o), d = document.createElement(\"div\");\n    d.style.cssText = [\"top:\" + l.top + \"px\", \"left:\" + l.left + \"px\", \"height:\" + l.height + \"px\", \"width:\" + l.width + \"px\"].join(\";\"), d.className = \"gantt_line_wrapper\";\n    var c = this.get_line_sizes(a, s), u = document.createElement(\"div\");\n    return u.style.cssText = [\"height:\" + c.height + \"px\", \"width:\" + c.width + \"px\", \"margin-top:\" + c.marginTop + \"px\", \"margin-left:\" + c.marginLeft + \"px\"].join(\";\"), u.className = \"gantt_link_line_\" + a.direction, d.appendChild(u), d;\n  }, render_corner: function(a, r) {\n    const s = a.radius, o = r.$getConfig(), l = o.link_line_width || 2, d = document.createElement(\"div\");\n    let c, u;\n    return d.classList.add(\"gantt_link_corner\"), d.classList.add(`gantt_link_corner_${a.direction.from}_${a.direction.to}`), d.style.width = `${s}px`, d.style.height = `${s}px`, a.direction.from === \"right\" && a.direction.to === \"down\" ? (c = \"Right\", u = \"Top\", d.style.left = a.x - o.link_line_width / 2 + \"px\", d.style.top = `${a.y}px`) : a.direction.from === \"down\" && a.direction.to === \"right\" ? (c = \"Left\", u = \"Bottom\", d.style.left = a.x - o.link_line_width / 2 + \"px\", d.style.top = `${a.y}px`) : a.direction.from === \"right\" && a.direction.to === \"up\" ? (c = \"Right\", u = \"Bottom\", d.style.left = a.x - o.link_line_width / 2 + \"px\", d.style.top = a.y - s + \"px\") : a.direction.from === \"up\" && a.direction.to === \"right\" ? (c = \"Left\", u = \"Top\", d.style.left = a.x - o.link_line_width / 2 + \"px\", d.style.top = a.y - s + \"px\") : a.direction.from === \"left\" && a.direction.to === \"down\" ? (c = \"Left\", u = \"Top\", d.style.left = a.x - s - o.link_line_width / 2 + \"px\", d.style.top = `${a.y}px`) : a.direction.from === \"down\" && a.direction.to === \"left\" ? (c = \"Right\", u = \"Bottom\", d.style.left = a.x - s - o.link_line_width / 2 + \"px\", d.style.top = `${a.y}px`) : a.direction.from === \"left\" && a.direction.to === \"up\" ? (c = \"Left\", u = \"Bottom\", d.style.left = a.x - s - o.link_line_width / 2 + \"px\", d.style.top = a.y - s + \"px\") : a.direction.from === \"up\" && a.direction.to === \"left\" && (c = \"Right\", u = \"Top\", d.style.left = a.x - s - o.link_line_width / 2 + \"px\", d.style.top = a.y - s + \"px\"), d.style[`border${u}Width`] = `${l}px`, d.style[`border${c}Width`] = `${l}px`, d.style[`border${c}Style`] = \"solid\", d.style[`border${u}Style`] = \"solid\", d.style[`border${u}${c}Radius`] = `${s}px`, d;\n  }, render_arrow(a, r) {\n    var s = document.createElement(\"div\"), o = a.y, l = a.x, d = r.link_arrow_size;\n    s.style.setProperty(\"--dhx-gantt-icon-size\", `${d}px`);\n    var c = \"gantt_link_arrow gantt_link_arrow_\" + a.direction;\n    return s.style.top = o + \"px\", s.style.left = l + \"px\", s.className = c, s;\n  }, _get_line: function(a, r) {\n    var s = this.get_direction(a, r), o = { x: a.x, y: a.y, direction: this.get_direction(a, r) };\n    return s == this.dirs.left || s == this.dirs.right ? o.size = Math.abs(a.x - r.x) : o.size = Math.abs(a.y - r.y), o;\n  }, get_direction: function(a, r) {\n    return r.x < a.x ? this.dirs.left : r.x > a.x ? this.dirs.right : r.y > a.y ? this.dirs.down : this.dirs.up;\n  } }, n = { path: [], clear: function() {\n    this.path = [];\n  }, current: function() {\n    return this.path[this.path.length - 1];\n  }, point: function(a) {\n    return a ? (this.path.push(t.copy(a)), a) : this.current();\n  }, point_to: function(a, r, s) {\n    s = s ? { x: s.x, y: s.y } : t.copy(this.point());\n    var o = e.dirs;\n    switch (a) {\n      case o.left:\n        s.x -= r;\n        break;\n      case o.right:\n        s.x += r;\n        break;\n      case o.up:\n        s.y -= r;\n        break;\n      case o.down:\n        s.y += r;\n    }\n    return this.point(s);\n  }, get_points: function(a, r, s, o) {\n    var l = this.get_endpoint(a, r, s, o), d = t.config, c = l.e_y - l.y, u = l.e_x - l.x, h = e.dirs, g = r.getItemHeight(a.source);\n    this.clear(), this.point({ x: l.x, y: l.y });\n    var f = 2 * d.link_arrow_size, y = this.get_line_type(a, r.$getConfig()), v = l.e_x > l.x;\n    if (y.from_start && y.to_start) this.point_to(h.left, f), v ? (this.point_to(h.down, c), this.point_to(h.right, u)) : (this.point_to(h.right, u), this.point_to(h.down, c)), this.point_to(h.right, f);\n    else if (!y.from_start && y.to_start) if (c !== 0 && (v = l.e_x > l.x + 2 * f), this.point_to(h.right, f), v) u -= f, this.point_to(h.down, c), this.point_to(h.right, u);\n    else {\n      u -= 2 * f;\n      var b = c > 0 ? 1 : -1;\n      this.point_to(h.down, b * (g / 2)), this.point_to(h.right, u), this.point_to(h.down, b * (Math.abs(c) - g / 2)), this.point_to(h.right, f);\n    }\n    else y.from_start || y.to_start ? y.from_start && !y.to_start && (c !== 0 && (v = l.e_x > l.x - 2 * f), this.point_to(h.left, f), v ? (u += 2 * f, b = c > 0 ? 1 : -1, this.point_to(h.down, b * (g / 2)), this.point_to(h.right, u), this.point_to(h.down, b * (Math.abs(c) - g / 2)), this.point_to(h.left, f)) : (u += f, this.point_to(h.down, c), this.point_to(h.right, u))) : (this.point_to(h.right, f), v ? (this.point_to(h.right, u), this.point_to(h.down, c)) : (this.point_to(h.down, c), this.point_to(h.right, u)), this.point_to(h.left, f));\n    return this.path;\n  }, get_line_type: function(a, r) {\n    var s = r.links, o = !1, l = !1;\n    return a.type == s.start_to_start ? o = l = !0 : a.type == s.finish_to_finish ? o = l = !1 : a.type == s.finish_to_start ? (o = !1, l = !0) : a.type == s.start_to_finish ? (o = !0, l = !1) : t.assert(!1, \"Invalid link type\"), r.rtl && (o = !o, l = !l), { from_start: o, to_start: l };\n  }, get_endpoint: function(a, r, s, o) {\n    var l = r.$getConfig(), d = this.get_line_type(a, l), c = d.from_start, u = d.to_start, h = i(s, r, l), g = i(o, r, l);\n    return { x: c ? h.left : h.left + h.width, e_x: u ? g.left : g.left + g.width, y: h.top + h.rowHeight / 2 - 1, e_y: g.top + g.rowHeight / 2 - 1 };\n  } };\n  function i(a, r, s) {\n    var o = r.getItemPosition(a);\n    let l = fi(t, r, a), d = l.maxHeight, c = l.splitChild;\n    const u = t.config.baselines !== !1 && (t.config.baselines.render_mode == \"separateRow\" || t.config.baselines.render_mode == \"individualRow\") && a.baselines && a.baselines.length;\n    let h;\n    l.shrinkHeight && (o.rowHeight = d);\n    let g = t.getTaskType(a.type) == s.types.milestone;\n    if (g) {\n      let f = r.getBarHeight(a.id, !0);\n      h = Math.sqrt(2 * f * f), l.shrinkHeight && d < f && (f = d, h = d), o.left -= h / 2, o.width = h;\n    }\n    if (c) if (d >= o.height) {\n      const f = gi(t, a.parent);\n      u || f ? g ? (o.rowHeight = o.height + 4, o.left += (o.width - o.rowHeight + 4) / 2, o.width = o.rowHeight - 3) : o.rowHeight = o.height + 6 : g && (o.left += (h - o.height) / 2);\n    } else o.rowHeight = d + 2, g && (o.left += (o.width - o.rowHeight + 4) / 2, o.width = o.rowHeight - 3);\n    else u && (o.rowHeight = o.height + 4);\n    return o;\n  }\n  return { render: function(a, r, s) {\n    var o = t.getTask(a.source);\n    if (o.hide_bar) return;\n    var l = t.getTask(a.target);\n    if (l.hide_bar) return;\n    var d = n.get_endpoint(a, r, o, l), c = d.e_y - d.y;\n    if (!(d.e_x - d.x) && !c) return null;\n    var u = n.get_points(a, r, o, l);\n    const h = function(v, b) {\n      const _ = b.link_radius || 4, m = b.link_arrow_size || 6, p = [];\n      for (let $ = 0; $ < v.length; $++) {\n        const w = v[$], x = v[$ + 1];\n        if (!x || b.link_radius <= 1) p.push({ type: \"line\", data: w });\n        else if (w.direction !== x.direction) {\n          if (w.size < _ || x.size < _) {\n            p.push({ type: \"line\", data: w });\n            continue;\n          }\n          w.size -= _, p.push({ type: \"line\", data: w });\n          let S = w.x, T = w.y - b.link_line_width / 2;\n          switch (w.direction) {\n            case \"right\":\n              S += w.size;\n              break;\n            case \"left\":\n              S -= w.size;\n              break;\n            case \"down\":\n              T += w.size;\n              break;\n            case \"up\":\n              T -= w.size;\n          }\n          const E = { x: S, y: T, direction: { from: w.direction, to: x.direction }, radius: _ };\n          switch (p.push({ type: \"corner\", data: E }), x.direction) {\n            case \"right\":\n              x.x += _, x.size -= _;\n              break;\n            case \"left\":\n              x.x -= _, x.size -= _;\n              break;\n            case \"down\":\n              x.y += _, x.size -= _;\n              break;\n            case \"up\":\n              x.y -= _, x.size -= _;\n          }\n        } else p.push({ type: \"line\", data: w });\n      }\n      const k = v[v.length - 1];\n      if (k.direction === \"right\" || k.direction === \"left\") {\n        k.size -= 3 * m / 4;\n        let $ = k.direction === \"right\" ? k.x + k.size : k.x - k.size - m / 2, w = k.y - b.link_line_width / 2 - m / 2 + 1;\n        k.direction === \"left\" ? (w -= 1, $ -= 2) : $ -= 1;\n        const x = { x: $, y: w, size: m, direction: k.direction };\n        p.push({ type: \"line\", data: k }), p.push({ type: \"arrow\", data: x });\n      } else p.push({ type: \"line\", data: k });\n      return p;\n    }(e.get_lines(u, r).filter((v) => v.size > 0), s), g = function(v, b, _, m) {\n      const p = document.createElement(\"div\");\n      return v.forEach((k) => {\n        let $;\n        k.type === \"line\" ? $ = e.render_line(k.data, null, b, _.source) : k.type === \"corner\" ? $ = e.render_corner(k.data, b) : k.type === \"arrow\" && ($ = e.render_arrow(k.data, m)), p.appendChild($);\n      }), p;\n    }(h, r, a, s);\n    var f = \"gantt_task_link\";\n    a.color && (f += \" gantt_link_inline_color\");\n    var y = t.templates.link_class ? t.templates.link_class(a) : \"\";\n    return y && (f += \" \" + y), s.highlight_critical_path && t.isCriticalLink && t.isCriticalLink(a) && (f += \" gantt_critical_link\"), g.className = f, r.$config.link_attribute && (g.setAttribute(r.$config.link_attribute, a.id), g.setAttribute(\"link_id\", a.id)), a.color && g.style.setProperty(\"--dhx-gantt-link-background\", a.color), t._waiAria.linkAttr(a, g), g;\n  }, update: null, isInViewPort: mn, getVisibleRange: pn() };\n}\nfunction La(t, e, n, i, a) {\n  if (a.$ui.getView(\"grid\") && (a.config.keyboard_navigation && a.getSelectedId() || a.ext.inlineEditors && a.ext.inlineEditors.getState().id)) return !0;\n  var r = n.getItemTop(t.id), s = n.getItemHeight(t.id);\n  return !(r > e.y_end || r + s < e.y);\n}\nfunction Pa(t) {\n  let e = {};\n  return t.$data.tasksStore.attachEvent(\"onStoreUpdated\", function() {\n    e = {};\n  }), function(n, i, a, r) {\n    const s = n.id + \"_\" + i + \"_\" + a.unit + \"_\" + a.step;\n    let o;\n    return o = e[s] ? e[s] : e[s] = function(l, d, c, u) {\n      let h, g = !1, f = {};\n      t.config.process_resource_assignments && d === t.config.resource_property ? (h = l.$role == \"task\" ? t.getResourceAssignments(l.$resource_id, l.$task_id) : t.getResourceAssignments(l.id), g = !0) : h = l.$role == \"task\" ? [] : t.getTaskBy(d, l.id), f = function(x, S, T) {\n        const E = S.unit, C = S.step, D = {}, A = {};\n        for (let I = 0; I < x.length; I++) {\n          const M = x[I];\n          let L = M;\n          if (T && (L = t.getTask(M.task_id)), L.unscheduled) continue;\n          let P = M.start_date || L.start_date, H = M.end_date || L.end_date;\n          T && (M.start_date && (P = new Date(Math.max(M.start_date.valueOf(), L.start_date.valueOf()))), M.end_date && (H = new Date(Math.min(M.end_date.valueOf(), L.end_date.valueOf()))), M.mode && M.mode == \"fixedDates\" && (P = M.start_date, H = M.end_date));\n          let V = Dt(S.trace_x, P.valueOf()), ut = new Date(S.trace_x[V] || t.date[E + \"_start\"](new Date(P))), O = new Date(Math.min(P.valueOf(), ut.valueOf())), Z = t.config.work_time ? t.getTaskCalendar(L) : t;\n          for (A[Z.id] = {}; O < H; ) {\n            const Y = A[Z.id], B = O.valueOf();\n            O = t.date.add(O, C, E), Y[B] !== !1 && (D[B] || (D[B] = { tasks: [], assignments: [] }), D[B].tasks.push(L), T && D[B].assignments.push(M));\n          }\n        }\n        return D;\n      }(h, c, g);\n      const y = c.unit, v = c.step, b = [];\n      let _, m, p, k, $;\n      const w = u.$getConfig();\n      for (let x = 0; x < c.trace_x.length; x++) _ = new Date(c.trace_x[x]), m = t.date.add(_, v, y), $ = f[_.valueOf()] || {}, p = $.tasks || [], k = $.assignments || [], p.length || w.resource_render_empty_cells ? b.push({ start_date: _, end_date: m, tasks: p, assignments: k }) : b.push(null);\n      return b;\n    }(n, i, a, r), o;\n  };\n}\nconst Ra = { init: function(t, e) {\n  var n = t.$services.getService(\"dnd\");\n  if (e.$config.bind && t.getDatastore(e.$config.bind)) {\n    var i = new n(e.$grid_data, { updates_per_second: 60 });\n    t.defined(e.$getConfig().dnd_sensitivity) && (i.config.sensitivity = e.$getConfig().dnd_sensitivity), i.attachEvent(\"onBeforeDragStart\", t.bind(function(o, l) {\n      var d = a(l);\n      if (!d || (t.hideQuickInfo && t.hideQuickInfo(), lt(l.target, \".gantt_grid_editor_placeholder\"))) return !1;\n      var c = d.getAttribute(e.$config.item_attribute);\n      if (s(c)) return !1;\n      var u = r().getItem(c);\n      return !t.isReadonly(u) && (i.config.initial_open_state = u.$open, !!t.callEvent(\"onRowDragStart\", [c, l.target || l.srcElement, l]) && void 0);\n    }, t)), i.attachEvent(\"onAfterDragStart\", t.bind(function(o, l) {\n      var d = a(l);\n      i.config.marker.innerHTML = d.outerHTML;\n      var c = i.config.marker.firstChild;\n      c && (c.style.position = \"static\"), i.config.id = d.getAttribute(e.$config.item_attribute);\n      var u = r(), h = u.getItem(i.config.id);\n      i.config.index = u.getBranchIndex(i.config.id), i.config.parent = h.parent, h.$open = !1, h.$transparent = !0, this.refreshData();\n    }, t)), i.lastTaskOfLevel = function(o) {\n      for (var l = null, d = r().getItems(), c = 0, u = d.length; c < u; c++) d[c].$level == o && (l = d[c]);\n      return l ? l.id : null;\n    }, i._getGridPos = t.bind(function(o) {\n      var l = F(e.$grid_data), d = l.x + e.$grid.scrollLeft, c = o.pos.y - 10, u = e.getItemHeight(i.config.id);\n      c < l.y && (c = l.y);\n      var h = e.getTotalHeight();\n      c > l.y + h - u && (c = l.y + h - u);\n      const g = l.y + l.height;\n      return c > g - u && (c = g - u), l.x = d, l.y = c, l;\n    }, t), i._getTargetY = t.bind(function(o) {\n      var l = F(e.$grid_data), d = e.$state.scrollTop || 0, c = t.$grid_data.getBoundingClientRect().height + d, u = o.pageY - l.y + d;\n      return u > c ? u = c : u < d && (u = d), u;\n    }, t), i._getTaskByY = t.bind(function(o, l) {\n      var d = r();\n      o = o || 0;\n      var c = e.getItemIndexByTopPosition(o);\n      return (c = l < c ? c - 1 : c) > d.countVisible() - 1 ? null : d.getIdByIndex(c);\n    }, t), i.attachEvent(\"onDragMove\", t.bind(function(o, l) {\n      var d = t.$grid_data.getBoundingClientRect(), c = d.height + d.y + (e.$state.scrollTop || 0) + window.scrollY, u = i.config, h = i._getGridPos(l);\n      t._waiAria.reorderMarkerAttr(u.marker);\n      var g = e.$getConfig(), f = r();\n      h.y < c ? u.marker.style.top = h.y + \"px\" : u.marker.style.top = c + \"px\", u.marker.style.left = h.x + 10 + \"px\";\n      const y = F(t.$root);\n      h.width > y.width && (u.marker.style.width = y.width - 10 - 2 + \"px\", u.marker.style.overflow = \"hidden\");\n      var v = f.getItem(i.config.id), b = i._getTargetY(l), _ = i._getTaskByY(b, f.getIndexById(v.id));\n      function m(D, A) {\n        return !f.isChildOf(p.id, A.id) && (D.$level == A.$level || g.order_branch_free);\n      }\n      if (f.exists(_) || (_ = i.lastTaskOfLevel(g.order_branch_free ? v.$level : 0)) == i.config.id && (_ = null), f.exists(_)) {\n        var p = f.getItem(_), k = e.getItemTop(p.id), $ = e.getItemHeight(p.id);\n        if (k + $ / 2 < b) {\n          var w = f.getIndexById(p.id), x = f.getNext(p.id), S = f.getItem(x);\n          if (s(x)) {\n            var T = f.getPrev(S.id);\n            S = f.getItem(T);\n          }\n          if (S) {\n            if (S.id == v.id) return g.order_branch_free && f.isChildOf(v.id, p.id) && f.getChildren(p.id).length == 1 ? void f.move(v.id, f.getBranchIndex(p.id) + 1, f.getParent(p.id)) : void 0;\n            p = S;\n          } else if (x = f.getIdByIndex(w), S = f.getItem(x), s(x) && (T = f.getPrev(S.id), S = f.getItem(T)), m(S, v) && S.id != v.id) return void f.move(v.id, -1, f.getParent(S.id));\n        } else if (g.order_branch_free && p.id != v.id && m(p, v) && !s(p.id)) {\n          if (!f.hasChild(p.id)) return p.$open = !0, void f.move(v.id, -1, p.id);\n          if (f.getIndexById(p.id) || $ / 3 < b) return;\n        }\n        w = f.getIndexById(p.id), T = f.getIdByIndex(w - 1);\n        for (var E = f.getItem(T), C = 1; (!E || E.id == p.id) && w - C >= 0; ) T = f.getIdByIndex(w - C), E = f.getItem(T), C++;\n        if (v.id == p.id || s(p.id)) return;\n        m(p, v) && v.id != p.id ? f.move(v.id, 0, 0, p.id) : p.$level != v.$level - 1 || f.getChildren(p.id).length ? E && m(E, v) && v.id != E.id && f.move(v.id, -1, f.getParent(E.id)) : f.move(v.id, 0, p.id);\n      }\n      return !0;\n    }, t)), i.attachEvent(\"onDragEnd\", t.bind(function() {\n      var o = r(), l = o.getItem(i.config.id);\n      l.$transparent = !1, l.$open = i.config.initial_open_state, this.callEvent(\"onBeforeRowDragEnd\", [i.config.id, i.config.parent, i.config.index]) === !1 ? (o.move(i.config.id, i.config.index, i.config.parent), l.$drop_target = null) : this.callEvent(\"onRowDragEnd\", [i.config.id, l.$drop_target]), t.render(), this.refreshData();\n    }, t));\n  }\n  function a(o) {\n    return tt(o, e.$config.item_attribute);\n  }\n  function r() {\n    return t.getDatastore(e.$config.bind);\n  }\n  function s(o) {\n    return Lt(o, t, r());\n  }\n} }, J = { createDropTargetObject: function(t) {\n  var e = { targetParent: null, targetIndex: 0, targetId: null, child: !1, nextSibling: !1, prevSibling: !1 };\n  return t && N(e, t, !0), e;\n}, nextSiblingTarget: function(t, e, n) {\n  var i = this.createDropTargetObject();\n  return i.targetId = e, i.nextSibling = !0, i.targetParent = n.getParent(i.targetId), i.targetIndex = n.getBranchIndex(i.targetId), (n.getParent(t) != i.targetParent || i.targetIndex < n.getBranchIndex(t)) && (i.targetIndex += 1), i;\n}, prevSiblingTarget: function(t, e, n) {\n  var i = this.createDropTargetObject();\n  return i.targetId = e, i.prevSibling = !0, i.targetParent = n.getParent(i.targetId), i.targetIndex = n.getBranchIndex(i.targetId), n.getParent(t) == i.targetParent && i.targetIndex > n.getBranchIndex(t) && (i.targetIndex -= 1), i;\n}, firstChildTarget: function(t, e, n) {\n  var i = this.createDropTargetObject();\n  return i.targetId = e, i.targetParent = i.targetId, i.targetIndex = 0, i.child = !0, i;\n}, lastChildTarget: function(t, e, n) {\n  var i = n.getChildren(e), a = this.createDropTargetObject();\n  return a.targetId = i[i.length - 1], a.targetParent = e, a.targetIndex = i.length, a.nextSibling = !0, a;\n} };\nfunction bn(t, e, n, i, a) {\n  for (var r = e; i.exists(r); ) {\n    var s = i.calculateItemLevel(i.getItem(r));\n    if ((s === n || s === n - 1) && i.getBranchIndex(r) > -1) break;\n    r = a ? i.getPrev(r) : i.getNext(r);\n  }\n  return i.exists(r) ? i.calculateItemLevel(i.getItem(r)) === n ? a ? J.nextSiblingTarget(t, r, i) : J.prevSiblingTarget(t, r, i) : J.firstChildTarget(t, r, i) : null;\n}\nfunction ae(t, e, n, i) {\n  return bn(t, e, n, i, !0);\n}\nfunction Ge(t, e, n, i) {\n  return bn(t, e, n, i, !1);\n}\nfunction Ye(t, e, n, i, a, r) {\n  var s;\n  if (e !== a.$getRootId()) {\n    var o = a.getItem(e), l = a.calculateItemLevel(o);\n    if (l === r) {\n      var d = a.getPrevSibling(e);\n      n < 0.5 && !d ? s = J.prevSiblingTarget(t, e, a) : (n < 0.5 && (e = d), s = J.nextSiblingTarget(t, e, a));\n    } else if (l > r) a.eachParent(function(f) {\n      a.calculateItemLevel(f) === r && (e = f.id);\n    }, o), s = ae(t, e, r, a);\n    else {\n      var c = ae(t, e, r, a), u = Ge(t, e, r, a);\n      s = n < 0.5 ? c : u;\n    }\n  } else {\n    var h = a.$getRootId(), g = a.getChildren(h);\n    s = J.createDropTargetObject(), s = g.length && i >= 0 ? ae(t, function(f) {\n      for (var y = f.getNext(); f.exists(y); ) {\n        var v = f.getNext(y);\n        if (!f.exists(v)) return y;\n        y = v;\n      }\n      return null;\n    }(a), r, a) : Ge(t, h, r, a);\n  }\n  return s;\n}\nfunction Je(t, e) {\n  var n = F(e.$grid_data);\n  return t.x += n.x + e.$grid.scrollLeft, t.y += n.y - e.$grid_data.scrollTop, t;\n}\nfunction re(t, e, n = 0) {\n  const i = F(t.$root);\n  return e > i.width && (e = i.width - n - 2), e;\n}\nconst Ke = { removeLineHighlight: function(t) {\n  t.markerLine && t.markerLine.parentNode && t.markerLine.parentNode.removeChild(t.markerLine), t.markerLine = null;\n}, highlightPosition: function(t, e, n) {\n  var i = function(r, s) {\n    var o = F(s.$grid_data), l = at(r, s.$grid_data), d = o.x + s.$grid.scrollLeft, c = l.y - 10, u = s.getItemHeight(r.targetId);\n    c < o.y && (c = o.y);\n    var h = s.getTotalHeight();\n    return c > o.y + h - u && (c = o.y + h - u), o.x = d, o.y = c, o.width = re(s.$gantt, o.width, 9), o;\n  }(t, n);\n  e.marker.style.left = i.x + 9 + \"px\", e.marker.style.width = i.width + \"px\", e.marker.style.overflow = \"hidden\";\n  var a = e.markerLine;\n  a || ((a = document.createElement(\"div\")).className = \"gantt_drag_marker gantt_grid_dnd_marker\", a.innerHTML = \"<div class='gantt_grid_dnd_marker_line'></div>\", a.style.pointerEvents = \"none\"), t.child ? function(r, s, o) {\n    var l = r.targetParent, d = Je({ x: 0, y: o.getItemTop(l) }, o), c = o.$grid_data.getBoundingClientRect().bottom + window.scrollY;\n    let u = re(o.$gantt, o.$grid_data.offsetWidth);\n    s.innerHTML = \"<div class='gantt_grid_dnd_marker_folder'></div>\", s.style.width = u + \"px\", s.style.top = d.y + \"px\", s.style.left = d.x + \"px\", s.style.height = o.getItemHeight(l) + \"px\", d.y > c && (s.style.top = c + \"px\");\n  }(t, a, n) : function(r, s, o) {\n    var l = function(u, h) {\n      var g = h.$config.rowStore, f = { x: 0, y: 0 }, y = h.$grid_data.querySelector(\".gantt_tree_indent\"), v = 15, b = 0;\n      y && (v = y.offsetWidth);\n      var _ = 40;\n      if (u.targetId !== g.$getRootId()) {\n        var m = h.getItemTop(u.targetId), p = h.getItemHeight(u.targetId);\n        if (b = g.exists(u.targetId) ? g.calculateItemLevel(g.getItem(u.targetId)) : 0, u.prevSibling) f.y = m;\n        else if (u.nextSibling) {\n          var k = 0;\n          g.eachItem(function($) {\n            g.getIndexById($.id) !== -1 && k++;\n          }, u.targetId), f.y = m + p + k * p;\n        } else f.y = m + p, b += 1;\n      }\n      return f.x = _ + b * v, f.width = re(h.$gantt, Math.max(h.$grid_data.offsetWidth - f.x, 0), f.x), Je(f, h);\n    }(r, o), d = o.$grid_data.getBoundingClientRect().bottom + window.scrollY;\n    s.innerHTML = \"<div class='gantt_grid_dnd_marker_line'></div>\", s.style.left = l.x + \"px\", s.style.height = \"4px\";\n    var c = l.y - 2;\n    s.style.top = c + \"px\", s.style.width = l.width + \"px\", c > d && (s.style.top = d + \"px\");\n  }(t, a, n), e.markerLine || (document.body.appendChild(a), e.markerLine = a);\n} }, Ha = { init: function(t, e) {\n  var n = t.$services.getService(\"dnd\");\n  if (e.$config.bind && t.getDatastore(e.$config.bind)) {\n    var i = new n(e.$grid_data, { updates_per_second: 60 });\n    t.defined(e.$getConfig().dnd_sensitivity) && (i.config.sensitivity = e.$getConfig().dnd_sensitivity), i.attachEvent(\"onBeforeDragStart\", t.bind(function(o, l) {\n      var d = a(l);\n      if (!d || (t.hideQuickInfo && t.hideQuickInfo(), lt(l.target, \".gantt_grid_editor_placeholder\"))) return !1;\n      var c = d.getAttribute(e.$config.item_attribute), u = e.$config.rowStore.getItem(c);\n      return !t.isReadonly(u) && !r(c) && (i.config.initial_open_state = u.$open, !!t.callEvent(\"onRowDragStart\", [c, l.target || l.srcElement, l]) && void 0);\n    }, t)), i.attachEvent(\"onAfterDragStart\", t.bind(function(o, l) {\n      var d = a(l);\n      i.config.marker.innerHTML = d.outerHTML;\n      var c = i.config.marker.firstChild;\n      c && (i.config.marker.style.opacity = 0.4, c.style.position = \"static\", c.style.pointerEvents = \"none\"), i.config.id = d.getAttribute(e.$config.item_attribute);\n      var u = e.$config.rowStore, h = u.getItem(i.config.id);\n      i.config.level = u.calculateItemLevel(h), i.config.drop_target = J.createDropTargetObject({ targetParent: u.getParent(h.id), targetIndex: u.getBranchIndex(h.id), targetId: h.id, nextSibling: !0 }), h.$open = !1, h.$transparent = !0, this.refreshData();\n    }, t)), i.attachEvent(\"onDragMove\", t.bind(function(o, l) {\n      var d = s(l);\n      return d && t.callEvent(\"onBeforeRowDragMove\", [i.config.id, d.targetParent, d.targetIndex]) !== !1 || (d = J.createDropTargetObject(i.config.drop_target)), Ke.highlightPosition(d, i.config, e), i.config.drop_target = d, t._waiAria.reorderMarkerAttr(i.config.marker), this.callEvent(\"onRowDragMove\", [i.config.id, d.targetParent, d.targetIndex]), !0;\n    }, t)), i.attachEvent(\"onDragEnd\", t.bind(function() {\n      var o = e.$config.rowStore, l = o.getItem(i.config.id);\n      Ke.removeLineHighlight(i.config), l.$transparent = !1, l.$open = i.config.initial_open_state;\n      var d = i.config.drop_target;\n      this.callEvent(\"onBeforeRowDragEnd\", [i.config.id, d.targetParent, d.targetIndex]) === !1 ? l.$drop_target = null : (o.move(i.config.id, d.targetIndex, d.targetParent), t.render(), this.callEvent(\"onRowDragEnd\", [i.config.id, d.targetParent, d.targetIndex])), o.refresh(l.id);\n    }, t));\n  }\n  function a(o) {\n    return tt(o, e.$config.item_attribute);\n  }\n  function r(o) {\n    return Lt(o, t, t.getDatastore(e.$config.bind));\n  }\n  function s(o) {\n    var l, d = function(f) {\n      var y = at(f, e.$grid_data).y, v = e.$config.rowStore;\n      document.doctype || (y += window.scrollY), y = y || 0;\n      var b = e.$state.scrollTop || 0, _ = t.$grid_data.getBoundingClientRect().height + b + window.scrollY, m = b, p = e.getItemIndexByTopPosition(e.$state.scrollTop);\n      if (v.exists(p) || (p = v.countVisible() - 1), p < 0) return v.$getRootId();\n      var k = v.getIdByIndex(p), $ = e.$state.scrollTop / e.getItemHeight(k), w = $ - Math.floor($);\n      w > 0.1 && w < 0.9 && (_ -= e.getItemHeight(k) * w, m += e.getItemHeight(k) * (1 - w));\n      const x = F(e.$grid_data), S = x.y + x.height, T = i.config.marker.offsetHeight;\n      y + T + window.scrollY >= _ && (i.config.marker.style.top = S - T + \"px\"), y >= _ ? y = _ : y <= m && (y = m, i.config.marker.style.top = x.y + \"px\");\n      var E = e.getItemIndexByTopPosition(y);\n      if (E > v.countVisible() - 1 || E < 0) return v.$getRootId();\n      var C = v.getIdByIndex(E);\n      return r(C) ? v.getPrevSibling(C) : v.getIdByIndex(E);\n    }(o), c = null, u = e.$config.rowStore, h = !e.$getConfig().order_branch_free, g = at(o, e.$grid_data).y;\n    return document.doctype || (g += window.scrollY), d !== u.$getRootId() && (c = (g - e.getItemTop(d)) / e.getItemHeight(d)), h ? (l = Ye(i.config.id, d, c, g, u, i.config.level)) && l.targetParent && r(l.targetParent) && (d = u.getPrevSibling(l.targetParent), l = Ye(i.config.id, d, c, g, u, i.config.level)) : l = function(f, y, v, b, _) {\n      var m;\n      if (y !== _.$getRootId()) m = v < 0.25 ? J.prevSiblingTarget(f, y, _) : !(v > 0.6) || _.hasChild(y) && _.getItem(y).$open ? J.firstChildTarget(f, y, _) : J.nextSiblingTarget(f, y, _);\n      else {\n        var p = _.$getRootId();\n        m = _.hasChild(p) && b >= 0 ? J.lastChildTarget(f, p, _) : J.firstChildTarget(f, p, _);\n      }\n      return m;\n    }(i.config.id, d, c, g, u), l;\n  }\n} };\nvar Oa = function(t) {\n  return { onCreated: function(e) {\n    e.$config = N(e.$config, { bind: \"task\" }), e.$config.id == \"grid\" && (this.extendGantt(e), t.ext.inlineEditors = t.ext._inlineEditors.createEditors(e), t.ext.inlineEditors.init()), this._mouseDelegates = we(t);\n  }, onInitialized: function(e) {\n    var n = e.$getConfig();\n    n.order_branch && (n.order_branch == \"marker\" ? Ha.init(e.$gantt, e) : Ra.init(e.$gantt, e)), this.initEvents(e, t), e.$config.id == \"grid\" && this.extendDom(e);\n  }, onDestroyed: function(e) {\n    e.$config.id == \"grid\" && t.ext.inlineEditors.detachStore(), this.clearEvents(e, t);\n  }, initEvents: function(e, n) {\n    this._mouseDelegates.delegate(\"click\", \"gantt_row\", n.bind(function(i, a, r) {\n      var s = e.$getConfig();\n      if (a !== null) {\n        var o = this.getTask(a);\n        s.scroll_on_click && !n._is_icon_open_click(i) && this.showDate(o.start_date), n.callEvent(\"onTaskRowClick\", [a, r]);\n      }\n    }, n), e.$grid), this._mouseDelegates.delegate(\"click\", \"gantt_grid_head_cell\", n.bind(function(i, a, r) {\n      var s = r.getAttribute(\"data-column-id\");\n      if (n.callEvent(\"onGridHeaderClick\", [s, i])) {\n        var o = e.$getConfig();\n        if (s != \"add\") {\n          if (o.sort && s) {\n            for (var l, d = s, c = 0; c < o.columns.length; c++) if (o.columns[c].name == s) {\n              l = o.columns[c];\n              break;\n            }\n            if (l && l.sort !== void 0 && l.sort !== !0 && !(d = l.sort)) return;\n            var u = this._sort && this._sort.direction && this._sort.name == s ? this._sort.direction : \"desc\";\n            u = u == \"desc\" ? \"asc\" : \"desc\", this._sort = { name: s, direction: u }, this.sort(d, u == \"desc\");\n          }\n        } else n.$services.getService(\"mouseEvents\").callHandler(\"click\", \"gantt_add\", e.$grid, [i, o.root_id]);\n      }\n    }, n), e.$grid), this._mouseDelegates.delegate(\"click\", \"gantt_add\", n.bind(function(i, a, r) {\n      if (!e.$getConfig().readonly) return this.createTask({}, a || n.config.root_id), !1;\n    }, n), e.$grid);\n  }, clearEvents: function(e, n) {\n    this._mouseDelegates.destructor(), this._mouseDelegates = null;\n  }, extendDom: function(e) {\n    t.$grid = e.$grid, t.$grid_scale = e.$grid_scale, t.$grid_data = e.$grid_data;\n  }, extendGantt: function(e) {\n    t.getGridColumns = t.bind(e.getGridColumns, e), e.attachEvent(\"onColumnResizeStart\", function() {\n      return t.callEvent(\"onColumnResizeStart\", arguments);\n    }), e.attachEvent(\"onColumnResize\", function() {\n      return t.callEvent(\"onColumnResize\", arguments);\n    }), e.attachEvent(\"onColumnResizeEnd\", function() {\n      return t.callEvent(\"onColumnResizeEnd\", arguments);\n    }), e.attachEvent(\"onColumnResizeComplete\", function(n, i) {\n      t.config.grid_width = i;\n    }), e.attachEvent(\"onBeforeRowResize\", function() {\n      return t.callEvent(\"onBeforeRowResize\", arguments);\n    }), e.attachEvent(\"onRowResize\", function() {\n      return t.callEvent(\"onRowResize\", arguments);\n    }), e.attachEvent(\"onBeforeRowResizeEnd\", function() {\n      return t.callEvent(\"onBeforeRowResizeEnd\", arguments);\n    }), e.attachEvent(\"onAfterRowResize\", function() {\n      return t.callEvent(\"onAfterRowResize\", arguments);\n    });\n  } };\n};\nconst Ba = { createTaskDND: function() {\n  var t;\n  return { extend: function(e) {\n    e.roundTaskDates = function(n) {\n      t.round_task_dates(n);\n    };\n  }, init: function(e, n) {\n    return t = function(i, a) {\n      var r = a.$services;\n      return { drag: null, dragMultiple: {}, _events: { before_start: {}, before_finish: {}, after_finish: {} }, _handlers: {}, init: function() {\n        this._domEvents = a._createDomEventScope(), this.clear_drag_state();\n        var s = a.config.drag_mode;\n        this.set_actions(), r.getService(\"state\").registerProvider(\"tasksDnd\", R(function() {\n          return { drag_id: this.drag ? this.drag.id : void 0, drag_mode: this.drag ? this.drag.mode : void 0, drag_from_start: this.drag ? this.drag.left : void 0 };\n        }, this));\n        var o = { before_start: \"onBeforeTaskDrag\", before_finish: \"onBeforeTaskChanged\", after_finish: \"onAfterTaskDrag\" };\n        for (var l in this._events) for (var d in s) this._events[l][d] = o[l];\n        this._handlers[s.move] = this._move, this._handlers[s.resize] = this._resize, this._handlers[s.progress] = this._resize_progress;\n      }, set_actions: function() {\n        var s = i.$task_data;\n        this._domEvents.attach(s, \"mousemove\", a.bind(function(o) {\n          this.on_mouse_move(o);\n        }, this)), this._domEvents.attach(s, \"mousedown\", a.bind(function(o) {\n          this.on_mouse_down(o);\n        }, this)), this._domEvents.attach(document.body, \"mouseup\", a.bind(function(o) {\n          this.on_mouse_up(o);\n        }, this));\n      }, clear_drag_state: function() {\n        this.drag = { id: null, mode: null, pos: null, start_x: null, start_y: null, obj: null, left: null }, this.dragMultiple = {};\n      }, _resize: function(s, o, l) {\n        var d = i.$getConfig(), c = this._drag_task_coords(s, l);\n        l.left ? (s.start_date = a.dateFromPos(c.start + o), s.start_date || (s.start_date = new Date(a.getState().min_date))) : (s.end_date = a.dateFromPos(c.end + o), s.end_date || (s.end_date = new Date(a.getState().max_date)));\n        var u = this._calculateMinDuration(d.min_duration, d.duration_unit);\n        s.end_date - s.start_date < d.min_duration && (l.left ? s.start_date = a.calculateEndDate(s.end_date, -u, d.duration_unit, s) : s.end_date = a.calculateEndDate(s.start_date, u, d.duration_unit, s)), a._init_task_timing(s);\n      }, _calculateMinDuration: function(s, o) {\n        return Math.ceil(s / { minute: 6e4, hour: 36e5, day: 864e5, week: 6048e5, month: 24192e5, year: 31356e6 }[o]);\n      }, _resize_progress: function(s, o, l) {\n        var d = this._drag_task_coords(s, l), c = i.$getConfig().rtl ? d.start - l.pos.x : l.pos.x - d.start, u = Math.max(0, c);\n        s.progress = Math.min(1, u / Math.abs(d.end - d.start));\n      }, _find_max_shift: function(s, o) {\n        var l;\n        for (var d in s) {\n          var c = s[d], u = a.getTask(c.id), h = this._drag_task_coords(u, c), g = a.posFromDate(new Date(a.getState().min_date)), f = a.posFromDate(new Date(a.getState().max_date));\n          if (h.end + o > f) {\n            var y = f - h.end;\n            (y < l || l === void 0) && (l = y);\n          } else if (h.start + o < g) {\n            var v = g - h.start;\n            (v > l || l === void 0) && (l = v);\n          }\n        }\n        return l;\n      }, _move: function(s, o, l, d) {\n        var c = this._drag_task_coords(s, l), u = null, h = null;\n        d ? (u = new Date(+l.obj.start_date + d), h = new Date(+l.obj.end_date + d)) : (u = a.dateFromPos(c.start + o), h = a.dateFromPos(c.end + o)), u ? h ? (s.start_date = u, s.end_date = h) : (s.end_date = new Date(a.getState().max_date), s.start_date = a.dateFromPos(a.posFromDate(s.end_date) - (c.end - c.start))) : (s.start_date = new Date(a.getState().min_date), s.end_date = a.dateFromPos(a.posFromDate(s.start_date) + (c.end - c.start)));\n      }, _drag_task_coords: function(s, o) {\n        return { start: o.obj_s_x = o.obj_s_x || a.posFromDate(s.start_date), end: o.obj_e_x = o.obj_e_x || a.posFromDate(s.end_date) };\n      }, _mouse_position_change: function(s, o) {\n        var l = s.x - o.x, d = s.y - o.y;\n        return Math.sqrt(l * l + d * d);\n      }, _is_number: function(s) {\n        return !isNaN(parseFloat(s)) && isFinite(s);\n      }, on_mouse_move: function(s) {\n        if (this.drag.start_drag) {\n          var o = at(s, a.$task_data), l = this.drag.start_drag.start_x, d = this.drag.start_drag.start_y;\n          (Date.now() - this.drag.timestamp > 50 || this._is_number(l) && this._is_number(d) && this._mouse_position_change({ x: l, y: d }, o) > 20) && this._start_dnd(s);\n        }\n        if (this.drag.mode) {\n          if (!dn(this, 40)) return;\n          this._update_on_move(s);\n        }\n      }, _update_item_on_move: function(s, o, l, d, c, u) {\n        var h = a.getTask(o), g = a.mixin({}, h), f = a.mixin({}, h);\n        this._handlers[l].apply(this, [f, s, d, u]), a.mixin(h, f, !0), a.callEvent(\"onTaskDrag\", [h.id, l, f, g, c]), a.mixin(h, f, !0), a.refreshTask(o);\n      }, _update_on_move: function(s) {\n        var o = this.drag, l = i.$getConfig();\n        if (o.mode) {\n          var d = at(s, i.$task_data);\n          if (o.pos && o.pos.x == d.x) return;\n          o.pos = d;\n          var c = a.dateFromPos(d.x);\n          if (!c || isNaN(c.getTime())) return;\n          var u = d.x - o.start_x, h = a.getTask(o.id);\n          if (this._handlers[o.mode]) {\n            if (o.mode === l.drag_mode.move) {\n              var g = {};\n              this._isMultiselect() && a.getSelectedTasks().indexOf(o.id) >= 0 && (g = this.dragMultiple);\n              var f = !1;\n              if (a.isSummaryTask(h) && a.config.drag_project) {\n                var y = {};\n                y[o.id] = q(o), f = !0, g = N(y, this.dragMultiple);\n              }\n              var v = this._find_max_shift(g, u);\n              for (var b in v !== void 0 && (u = v), this._update_item_on_move(u, o.id, o.mode, o, s), g) {\n                var _ = g[b];\n                if (f && _.id != o.id && (a._bulk_dnd = !0), v === void 0 && (f || Object.keys(g).length > 1)) var m = c - a.dateFromPos(o.start_x);\n                this._update_item_on_move(u, _.id, _.mode, _, s, m);\n              }\n              a._bulk_dnd = !1;\n            } else this._update_item_on_move(u, o.id, o.mode, o, s);\n            a._update_parents(o.id);\n          }\n        }\n      }, on_mouse_down: function(s, o) {\n        if (s.button != 2 || s.button === void 0) {\n          var l = i.$getConfig(), d = a.locate(s), c = null;\n          if (a.isTaskExists(d) && (c = a.getTask(d)), !a.isReadonly(c) && !this.drag.mode) {\n            this.clear_drag_state();\n            var u = K(o = o || s.target || s.srcElement), h = this._get_drag_mode(u, o);\n            if (!u || !h) return o.parentNode ? this.on_mouse_down(s, o.parentNode) : void 0;\n            if (h) if (h.mode && h.mode != l.drag_mode.ignore && l[\"drag_\" + h.mode]) {\n              if (d = a.locate(o), c = a.copy(a.getTask(d) || {}), a.isReadonly(c)) return this.clear_drag_state(), !1;\n              if (a.isSummaryTask(c) && c.auto_scheduling !== !1 && !l.drag_project && h.mode != l.drag_mode.progress) return void this.clear_drag_state();\n              h.id = d;\n              var g = at(s, a.$task_data);\n              h.start_x = g.x, h.start_y = g.y, h.obj = c, this.drag.start_drag = h, this.drag.timestamp = Date.now();\n            } else this.clear_drag_state();\n            else if (a.checkEvent(\"onMouseDown\") && a.callEvent(\"onMouseDown\", [u.split(\" \")[0]]) && o.parentNode) return this.on_mouse_down(s, o.parentNode);\n          }\n        }\n      }, _fix_dnd_scale_time: function(s, o) {\n        var l = i.$getConfig(), d = a.getScale().unit, c = a.getScale().step;\n        function u(h) {\n          if (a.config.correct_work_time) {\n            var g = i.$getConfig();\n            a.isWorkTime(h.start_date, void 0, h) || (h.start_date = a.calculateEndDate({ start_date: h.start_date, duration: -1, unit: g.duration_unit, task: h }));\n          }\n        }\n        l.round_dnd_dates || (d = \"minute\", c = l.time_step), o.mode == l.drag_mode.resize ? o.left ? (s.start_date = a.roundDate({ date: s.start_date, unit: d, step: c }), u(s)) : (s.end_date = a.roundDate({ date: s.end_date, unit: d, step: c }), function(h) {\n          if (a.config.correct_work_time) {\n            var g = i.$getConfig();\n            a.isWorkTime(new Date(h.end_date - 1), void 0, h) || (h.end_date = a.calculateEndDate({ start_date: h.end_date, duration: 1, unit: g.duration_unit, task: h }));\n          }\n        }(s)) : o.mode == l.drag_mode.move && (s.start_date = a.roundDate({ date: s.start_date, unit: d, step: c }), u(s), s.end_date = a.calculateEndDate(s));\n      }, _fix_working_times: function(s, o) {\n        var l = i.$getConfig();\n        (o = o || { mode: l.drag_mode.move }).mode == l.drag_mode.resize ? o.left ? s.start_date = a.getClosestWorkTime({ date: s.start_date, dir: \"future\", task: s }) : s.end_date = a.getClosestWorkTime({ date: s.end_date, dir: \"past\", task: s }) : o.mode == l.drag_mode.move && a.correctTaskWorkTime(s);\n      }, _finalize_mouse_up: function(s, o, l, d) {\n        var c = a.getTask(s);\n        if (o.work_time && o.correct_work_time && this._fix_working_times(c, l), this._fix_dnd_scale_time(c, l), this._fireEvent(\"before_finish\", l.mode, [s, l.mode, a.copy(l.obj), d])) {\n          var u = s;\n          a._init_task_timing(c), this.clear_drag_state(), a.updateTask(c.id), this._fireEvent(\"after_finish\", l.mode, [u, l.mode, d]);\n        } else this.clear_drag_state(), s == l.id && (l.obj._dhx_changed = !1, a.mixin(c, l.obj, !0)), a.refreshTask(c.id);\n      }, on_mouse_up: function(s) {\n        var o = this.drag;\n        if (o.mode && o.id) {\n          var l = i.$getConfig(), d = a.getTask(o.id), c = this.dragMultiple, u = !1, h = 0;\n          o.mode === l.drag_mode.move && (a.isSummaryTask(d) && l.drag_project || this._isMultiselect()) && (u = !0, h = Object.keys(c).length);\n          var g = function() {\n            if (u) for (var f in c) c[f].id != o.id && this._finalize_mouse_up(c[f].id, l, c[f], s);\n            this._finalize_mouse_up(o.id, l, o, s);\n          };\n          u && h > 10 ? a.batchUpdate((function() {\n            g.call(this);\n          }).bind(this)) : g.call(this);\n        }\n        this.clear_drag_state();\n      }, _get_drag_mode: function(s, o) {\n        var l = i.$getConfig().drag_mode, d = { mode: null, left: null };\n        switch ((s || \"\").split(\" \")[0]) {\n          case \"gantt_task_line\":\n          case \"gantt_task_content\":\n            d.mode = l.move;\n            break;\n          case \"gantt_task_drag\":\n            d.mode = l.resize;\n            var c = o.getAttribute(\"data-bind-property\");\n            d.left = c == \"start_date\";\n            break;\n          case \"gantt_task_progress_drag\":\n            d.mode = l.progress;\n            break;\n          case \"gantt_link_control\":\n          case \"gantt_link_point\":\n            d.mode = l.ignore;\n            break;\n          default:\n            d = null;\n        }\n        return d;\n      }, _start_dnd: function(s) {\n        var o = this.drag = this.drag.start_drag;\n        delete o.start_drag;\n        var l = i.$getConfig(), d = o.id;\n        if (l[\"drag_\" + o.mode] && a.callEvent(\"onBeforeDrag\", [d, o.mode, s]) && this._fireEvent(\"before_start\", o.mode, [d, o.mode, s])) {\n          delete o.start_drag;\n          var c = a.getTask(d);\n          if (a.isReadonly(c)) return void this.clear_drag_state();\n          if (this._isMultiselect()) {\n            var u = a.getSelectedTasks();\n            u.indexOf(o.id) >= 0 && vt(u, a.bind(function(h) {\n              var g = a.getTask(h);\n              a.isSummaryTask(g) && a.config.drag_project && o.mode == l.drag_mode.move && this._addSubtasksToDragMultiple(g.id), this.dragMultiple[h] = a.mixin({ id: g.id, obj: a.copy(g) }, this.drag);\n            }, this));\n          }\n          a.isSummaryTask(c) && a.config.drag_project && o.mode == l.drag_mode.move && this._addSubtasksToDragMultiple(c.id), a.callEvent(\"onTaskDragStart\", []);\n        } else this.clear_drag_state();\n      }, _fireEvent: function(s, o, l) {\n        a.assert(this._events[s], \"Invalid stage:{\" + s + \"}\");\n        var d = this._events[s][o];\n        return a.assert(d, \"Unknown after drop mode:{\" + o + \"}\"), a.assert(l, \"Invalid event arguments\"), !a.checkEvent(d) || a.callEvent(d, l);\n      }, round_task_dates: function(s) {\n        var o = this.drag, l = i.$getConfig();\n        o || (o = { mode: l.drag_mode.move }), this._fix_dnd_scale_time(s, o);\n      }, destructor: function() {\n        this._domEvents.detachAll();\n      }, _isMultiselect: function() {\n        return a.config.drag_multiple && !!(a.getSelectedTasks && a.getSelectedTasks().length > 0);\n      }, _addSubtasksToDragMultiple: function(s) {\n        a.eachTask(function(o) {\n          this.dragMultiple[o.id] = a.mixin({ id: o.id, obj: a.copy(o) }, this.drag);\n        }, s, this);\n      } };\n    }(e, n), e._tasks_dnd = t, t.init(n);\n  }, destructor: function() {\n    t && (t.destructor(), t = null);\n  } };\n} };\nvar za = function(t, e) {\n  var n, i, a, r, s;\n  function o() {\n    return { link_source_id: r, link_target_id: i, link_from_start: s, link_to_start: a, link_landing_area: n };\n  }\n  var l = e.$services, d = l.getService(\"state\"), c = l.getService(\"dnd\");\n  d.registerProvider(\"linksDnD\", o);\n  var u = \"gantt_link_point\", h = \"gantt_link_control\", g = new c(t.$task_bars, { sensitivity: 0, updates_per_second: 60, mousemoveContainer: e.$root, selector: \".\" + u, preventDefault: !0 });\n  function f(m, p) {\n    var k, $ = g.getPosition(m), w = function(A) {\n      var I = 0, M = 0;\n      return A && (I = A.offsetWidth || 0, M = A.offsetHeight || 0), { width: I, height: M };\n    }(p), x = { right: (k = e.$root).offsetWidth, bottom: k.offsetHeight }, S = e.config.tooltip_offset_x || 10, T = e.config.tooltip_offset_y || 10, E = e.config.scroll_size || 18, C = e.$container.getBoundingClientRect().y + window.scrollY, D = { y: $.y + T, x: $.x + S, bottom: $.y + w.height + T + E, right: $.x + w.width + S + E };\n    return D.bottom > x.bottom + C && (D.y = x.bottom + C - w.height - T), D.right > x.right && (D.x = x.right - w.width - S), D;\n  }\n  function y(m) {\n    var p = o();\n    p.link_source_id && p.link_target_id && e.isLinkAllowed(p.link_source_id, p.link_target_id, p.link_from_start, p.link_to_start);\n    var k = \"<div class='\" + e.templates.drag_link_class(p.link_source_id, p.link_from_start, p.link_target_id, p.link_to_start) + \"'>\" + e.templates.drag_link(p.link_source_id, p.link_from_start, p.link_target_id, p.link_to_start) + \"</div>\";\n    m.innerHTML = k;\n  }\n  function v() {\n    r = s = i = null, a = !0;\n  }\n  function b(m, p, k, $) {\n    var w = function() {\n      return g._direction && g._direction.parentNode || (g._direction = document.createElement(\"div\"), t.$task_links.appendChild(g._direction)), g._direction;\n    }(), x = o(), S = [\"gantt_link_direction\"];\n    e.templates.link_direction_class && S.push(e.templates.link_direction_class(x.link_source_id, x.link_from_start, x.link_target_id, x.link_to_start));\n    var T = Math.sqrt(Math.pow(k - m, 2) + Math.pow($ - p, 2));\n    if (T = Math.max(0, T - 3)) {\n      w.className = S.join(\" \");\n      var E = ($ - p) / (k - m), C = Math.atan(E);\n      _(m, k, p, $) == 2 ? C += Math.PI : _(m, k, p, $) == 3 && (C -= Math.PI);\n      var D = Math.sin(C), A = Math.cos(C), I = Math.round(p), M = Math.round(m), L = [\"-webkit-transform: rotate(\" + C + \"rad)\", \"-moz-transform: rotate(\" + C + \"rad)\", \"-ms-transform: rotate(\" + C + \"rad)\", \"-o-transform: rotate(\" + C + \"rad)\", \"transform: rotate(\" + C + \"rad)\", \"width:\" + Math.round(T) + \"px\"];\n      if (window.navigator.userAgent.indexOf(\"MSIE 8.0\") != -1) {\n        L.push('-ms-filter: \"' + function(V, ut) {\n          return \"progid:DXImageTransform.Microsoft.Matrix(M11 = \" + ut + \",M12 = -\" + V + \",M21 = \" + V + \",M22 = \" + ut + \",SizingMethod = 'auto expand')\";\n        }(D, A) + '\"');\n        var P = Math.abs(Math.round(m - k)), H = Math.abs(Math.round($ - p));\n        switch (_(m, k, p, $)) {\n          case 1:\n            I -= H;\n            break;\n          case 2:\n            M -= P, I -= H;\n            break;\n          case 3:\n            M -= P;\n        }\n      }\n      L.push(\"top:\" + I + \"px\"), L.push(\"left:\" + M + \"px\"), w.style.cssText = L.join(\";\");\n    }\n  }\n  function _(m, p, k, $) {\n    return p >= m ? $ <= k ? 1 : 4 : $ <= k ? 2 : 3;\n  }\n  g.attachEvent(\"onBeforeDragStart\", e.bind(function(m, p) {\n    var k = p.target || p.srcElement;\n    if (v(), e.getState(\"tasksDnd\").drag_id) return !1;\n    if (ft(k, u)) {\n      ft(k, \"task_start_date\") && (s = !0);\n      var $ = e.locate(p);\n      r = $;\n      var w = e.getTask($);\n      return e.isReadonly(w) ? (v(), !1) : (this._dir_start = { x: g.config.original_element_sizes.x + g.config.original_element_sizes.width / 2, y: g.config.original_element_sizes.y + g.config.original_element_sizes.height / 2 }, !0);\n    }\n    return !1;\n  }, this)), g.attachEvent(\"onAfterDragStart\", e.bind(function(m, p) {\n    e.config.touch && e.refreshData(), y(g.config.marker);\n  }, this)), g.attachEvent(\"onDragMove\", e.bind(function(m, p) {\n    var k = g.config, $ = f(p, k.marker);\n    (function(A, I) {\n      A.style.left = I.x + \"px\", A.style.top = I.y + \"px\";\n    })(k.marker, $);\n    var w = !!ft(p, h), x = i, S = n, T = a, E = e.locate(p), C = !0;\n    if (G(kt(p), e.$root) || (w = !1, E = null), w && (C = !ft(p, \"task_end_date\"), w = !!E), i = E, n = w, a = C, w) {\n      const A = ft(p, h).querySelector(`.${u}`);\n      if (A) {\n        const I = en(A, t.$task_bg);\n        this._dir_end = { x: I.x + A.offsetWidth / 2, y: I.y + A.offsetHeight / 2 };\n      }\n    } else this._dir_end = at(p, t.$task_data), e.env.isEdge && (this._dir_end.y += window.scrollY);\n    var D = !(S == w && x == E && T == C);\n    return D && (x && e.refreshTask(x, !1), E && e.refreshTask(E, !1)), D && y(k.marker), b(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y), !0;\n  }, this)), g.attachEvent(\"onDragEnd\", e.bind(function() {\n    var m = o();\n    if (m.link_source_id && m.link_target_id && m.link_source_id != m.link_target_id) {\n      var p = e._get_link_type(m.link_from_start, m.link_to_start), k = { source: m.link_source_id, target: m.link_target_id, type: p };\n      k.type && e.isLinkAllowed(k) && e.callEvent(\"onLinkCreated\", [k]) && e.addLink(k);\n    }\n    v(), e.config.touch ? e.refreshData() : (m.link_source_id && e.refreshTask(m.link_source_id, !1), m.link_target_id && e.refreshTask(m.link_target_id, !1)), g._direction && (g._direction.parentNode && g._direction.parentNode.removeChild(g._direction), g._direction = null);\n  }, this)), e.attachEvent(\"onGanttRender\", e.bind(function() {\n    g._direction && b(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y);\n  }, this));\n};\nconst Wa = function() {\n  return { init: za };\n};\nvar ja = function(t) {\n  var e = t.$services;\n  return { onCreated: function(n) {\n    var i = n.$config;\n    i.bind = W(i.bind) ? i.bind : \"task\", i.bindLinks = W(i.bindLinks) ? i.bindLinks : \"link\", n._linksDnD = Wa(), n._tasksDnD = Ba.createTaskDND(), n._tasksDnD.extend(n), this._mouseDelegates = we(t);\n  }, onInitialized: function(n) {\n    this._attachDomEvents(t), this._attachStateProvider(t, n), n._tasksDnD.init(n, t), n._linksDnD.init(n, t), n.$config.id == \"timeline\" && this.extendDom(n);\n  }, onDestroyed: function(n) {\n    this._clearDomEvents(t), this._clearStateProvider(t), n._tasksDnD && n._tasksDnD.destructor();\n  }, extendDom: function(n) {\n    t.$task = n.$task, t.$task_scale = n.$task_scale, t.$task_data = n.$task_data, t.$task_bg = n.$task_bg, t.$task_links = n.$task_links, t.$task_bars = n.$task_bars;\n  }, _clearDomEvents: function() {\n    this._mouseDelegates.destructor(), this._mouseDelegates = null;\n  }, _attachDomEvents: function(n) {\n    function i(a, r) {\n      if (a && this.callEvent(\"onLinkDblClick\", [a, r])) {\n        var s = this.getLink(a);\n        if (this.isReadonly(s)) return;\n        var o = this.locale.labels.link + \" \" + this.templates.link_description(this.getLink(a)) + \" \" + this.locale.labels.confirm_link_deleting;\n        window.setTimeout(function() {\n          n._simple_confirm(o, \"\", function() {\n            n.deleteLink(a);\n          });\n        }, this.config.touch ? 300 : 1);\n      }\n    }\n    this._mouseDelegates.delegate(\"click\", \"gantt_task_link\", n.bind(function(a, r) {\n      var s = this.locate(a, this.config.link_attribute);\n      s && this.callEvent(\"onLinkClick\", [s, a]);\n    }, n), this.$task), this._mouseDelegates.delegate(\"click\", \"gantt_scale_cell\", n.bind(function(a, r) {\n      var s = at(a, n.$task_data), o = n.dateFromPos(s.x), l = Math.floor(n.columnIndexByDate(o)), d = n.getScale().trace_x[l];\n      n.callEvent(\"onScaleClick\", [a, d]);\n    }, n), this.$task), this._mouseDelegates.delegate(\"doubleclick\", \"gantt_task_link\", n.bind(function(a, r, s) {\n      r = this.locate(a, n.config.link_attribute), i.call(this, r, a);\n    }, n), this.$task), this._mouseDelegates.delegate(\"doubleclick\", \"gantt_link_point\", n.bind(function(a, r, s) {\n      r = this.locate(a);\n      var o = this.getTask(r), l = null;\n      return s.parentNode && K(s.parentNode) && (l = K(s.parentNode).indexOf(\"_left\") > -1 ? o.$target[0] : o.$source[0]), l && i.call(this, l, a), !1;\n    }, n), this.$task);\n  }, _attachStateProvider: function(n, i) {\n    var a = i;\n    e.getService(\"state\").registerProvider(\"tasksTimeline\", function() {\n      return { scale_unit: a._tasks ? a._tasks.unit : void 0, scale_step: a._tasks ? a._tasks.step : void 0 };\n    });\n  }, _clearStateProvider: function() {\n    e.getService(\"state\").unregisterProvider(\"tasksTimeline\");\n  } };\n}, Fa = function(t) {\n  return { getVerticalScrollbar: function() {\n    return t.$ui.getView(\"scrollVer\");\n  }, getHorizontalScrollbar: function() {\n    return t.$ui.getView(\"scrollHor\");\n  }, _legacyGridResizerClass: function(e) {\n    for (var n = e.getCellsByType(\"resizer\"), i = 0; i < n.length; i++) {\n      var a = n[i], r = !1, s = a.$parent.getPrevSibling(a.$id);\n      if (s && s.$config && s.$config.id === \"grid\") r = !0;\n      else {\n        var o = a.$parent.getNextSibling(a.$id);\n        o && o.$config && o.$config.id === \"grid\" && (r = !0);\n      }\n      r && (a.$config.css = (a.$config.css ? a.$config.css + \" \" : \"\") + \"gantt_grid_resize_wrap\");\n    }\n  }, onCreated: function(e) {\n    var n = !0;\n    this._legacyGridResizerClass(e), e.attachEvent(\"onBeforeResize\", function() {\n      var i = t.$ui.getView(\"timeline\");\n      i && (i.$config.hidden = i.$parent.$config.hidden = !t.config.show_chart);\n      var a = t.$ui.getView(\"grid\");\n      if (a) {\n        var r = a._getColsTotalWidth(), s = !t.config.show_grid || !t.config.grid_width || r === 0;\n        if (n && !s && r !== !1 && (t.config.grid_width = r), a.$config.hidden = a.$parent.$config.hidden = s, !a.$config.hidden) {\n          var o = a._getGridWidthLimits();\n          if (o[0] && t.config.grid_width < o[0] && (t.config.grid_width = o[0]), o[1] && t.config.grid_width > o[1] && (t.config.grid_width = o[1]), i && t.config.show_chart) {\n            if (a.$config.width = t.config.grid_width - 1, !a.$config.scrollable && a.$config.scrollY && t.$root.offsetWidth) {\n              var l = a.$gantt.$layout.$container.offsetWidth, d = t.$ui.getView(a.$config.scrollY).$config.width, c = l - (a.$config.width + d) - 4;\n              c < 0 && (a.$config.width += c, t.config.grid_width += c);\n            }\n            if (n) a.$parent.$config.width = t.config.grid_width, a.$parent.$config.group && t.$layout._syncCellSizes(a.$parent.$config.group, { value: a.$parent.$config.width, isGravity: !1 });\n            else if (i && !G(i.$task, e.$view)) {\n              if (!a.$config.original_grid_width) {\n                var u = t.skins[t.skin];\n                u && u.config && u.config.grid_width ? a.$config.original_grid_width = u.config.grid_width : a.$config.original_grid_width = 0;\n              }\n              t.config.grid_width = a.$config.original_grid_width, a.$parent.$config.width = t.config.grid_width;\n            } else a.$parent._setContentSize(a.$config.width, null), t.$layout._syncCellSizes(a.$parent.$config.group, { value: t.config.grid_width, isGravity: !1 });\n          } else i && G(i.$task, e.$view) && (a.$config.original_grid_width = t.config.grid_width), n || (a.$parent.$config.width = 0);\n        }\n        n = !1;\n      }\n    }), this._initScrollStateEvents(e);\n  }, _initScrollStateEvents: function(e) {\n    t._getVerticalScrollbar = this.getVerticalScrollbar, t._getHorizontalScrollbar = this.getHorizontalScrollbar;\n    var n = this.getVerticalScrollbar(), i = this.getHorizontalScrollbar();\n    n && n.attachEvent(\"onScroll\", function(a, r, s) {\n      var o = t.getScrollState();\n      t.callEvent(\"onGanttScroll\", [o.x, a, o.x, r]);\n    }), i && i.attachEvent(\"onScroll\", function(a, r, s) {\n      var o = t.getScrollState();\n      t.callEvent(\"onGanttScroll\", [a, o.y, r, o.y]);\n      var l = t.$ui.getView(\"grid\");\n      l && l.$grid_data && !l.$config.scrollable && (l.$grid_data.style.left = l.$grid.scrollLeft + \"px\", l.$grid_data.scrollLeft = l.$grid.scrollLeft);\n    }), e.attachEvent(\"onResize\", function() {\n      n && !t.$scroll_ver && (t.$scroll_ver = n.$scroll_ver), i && !t.$scroll_hor && (t.$scroll_hor = i.$scroll_hor);\n    });\n  }, _findGridResizer: function(e, n) {\n    for (var i, a = e.getCellsByType(\"resizer\"), r = !0, s = 0; s < a.length; s++) {\n      var o = a[s];\n      o._getSiblings();\n      var l = o._behind, d = o._front;\n      if (l && l.$content === n || l.isChild && l.isChild(n)) {\n        i = o, r = !0;\n        break;\n      }\n      if (d && d.$content === n || d.isChild && d.isChild(n)) {\n        i = o, r = !1;\n        break;\n      }\n    }\n    return { resizer: i, gridFirst: r };\n  }, onInitialized: function(e) {\n    var n = t.$ui.getView(\"grid\"), i = this._findGridResizer(e, n);\n    if (i.resizer) {\n      var a, r = i.gridFirst, s = i.resizer;\n      if (s.$config.mode !== \"x\") return;\n      s.attachEvent(\"onResizeStart\", function(o, l) {\n        var d = t.$ui.getView(\"grid\"), c = d ? d.$parent : null;\n        if (c) {\n          var u = d._getGridWidthLimits();\n          d.$config.scrollable || (c.$config.minWidth = u[0]), c.$config.maxWidth = u[1];\n        }\n        return a = r ? o : l, t.callEvent(\"onGridResizeStart\", [a]);\n      }), s.attachEvent(\"onResize\", function(o, l) {\n        var d = r ? o : l;\n        return t.callEvent(\"onGridResize\", [a, d]);\n      }), s.attachEvent(\"onResizeEnd\", function(o, l, d, c) {\n        var u = r ? o : l, h = r ? d : c, g = t.$ui.getView(\"grid\"), f = g ? g.$parent : null;\n        f && (f.$config.minWidth = void 0);\n        var y = t.callEvent(\"onGridResizeEnd\", [u, h]);\n        return y && h !== 0 && (t.config.grid_width = h), y;\n      });\n    }\n  }, onDestroyed: function(e) {\n  } };\n};\nconst Va = { init: function(t) {\n  function e(r, s) {\n    var o = s(t);\n    o.onCreated && o.onCreated(r), r.attachEvent(\"onReady\", function() {\n      o.onInitialized && o.onInitialized(r);\n    }), r.attachEvent(\"onDestroy\", function() {\n      o.onDestroyed && o.onDestroyed(r);\n    });\n  }\n  var n = ca(t);\n  n.registerView(\"cell\", Pt), n.registerView(\"resizer\", null), n.registerView(\"scrollbar\", ma), n.registerView(\"layout\", vn, function(r) {\n    (r.$config ? r.$config.id : null) === \"main\" && e(r, Fa);\n  }), n.registerView(\"viewcell\", pa), n.registerView(\"multiview\", fa), n.registerView(\"timeline\", Ft, function(r) {\n    (r.$config ? r.$config.id : null) !== \"timeline\" && r.$config.bind != \"task\" || e(r, ja);\n  }), n.registerView(\"grid\", ve, function(r) {\n    (r.$config ? r.$config.id : null) !== \"grid\" && r.$config.bind != \"task\" || e(r, Oa);\n  }), n.registerView(\"resourceGrid\", ve), n.registerView(\"resourceTimeline\", Ft), n.registerView(\"resourceHistogram\", Ft);\n  var i = function(r) {\n    var s = _a(r);\n    return { getDataRender: function(o) {\n      return r.$services.getService(\"layer:\" + o) || null;\n    }, createDataRender: function(o) {\n      var l = o.name, d = o.defaultContainer, c = o.defaultContainerSibling, u = s.createGroup(d, c, function(h, g) {\n        if (!u.filters) return !0;\n        for (var f = 0; f < u.filters.length; f++) if (u.filters[f](h, g) === !1) return !1;\n      }, ga);\n      return r.$services.setService(\"layer:\" + l, function() {\n        return u;\n      }), r.attachEvent(\"onGanttReady\", function() {\n        u.addLayer();\n      }), u;\n    }, init: function() {\n      var o = this.createDataRender({ name: \"task\", defaultContainer: function() {\n        return r.$task_data ? r.$task_data : r.$ui.getView(\"timeline\") ? r.$ui.getView(\"timeline\").$task_data : void 0;\n      }, defaultContainerSibling: function() {\n        return r.$task_links ? r.$task_links : r.$ui.getView(\"timeline\") ? r.$ui.getView(\"timeline\").$task_links : void 0;\n      }, filter: function(d) {\n      } }, r), l = this.createDataRender({ name: \"link\", defaultContainer: function() {\n        return r.$task_data ? r.$task_data : r.$ui.getView(\"timeline\") ? r.$ui.getView(\"timeline\").$task_data : void 0;\n      } }, r);\n      return { addTaskLayer: function(d) {\n        const c = gt;\n        return typeof d == \"function\" ? d = { renderer: { render: d, getVisibleRange: c } } : d.renderer && !d.renderer.getVisibleRange && (d.renderer.getVisibleRange = c), d.view = \"timeline\", o.addLayer(d);\n      }, _getTaskLayers: function() {\n        return o.getLayers();\n      }, removeTaskLayer: function(d) {\n        o.removeLayer(d);\n      }, _clearTaskLayers: function() {\n        o.clear();\n      }, addLinkLayer: function(d) {\n        const c = pn();\n        return typeof d == \"function\" ? d = { renderer: { render: d, getVisibleRange: c } } : d.renderer && !d.renderer.getVisibleRange && (d.renderer.getVisibleRange = c), d.view = \"timeline\", d && d.renderer && (d.renderer.getRectangle || d.renderer.isInViewPort || (d.renderer.isInViewPort = mn)), l.addLayer(d);\n      }, _getLinkLayers: function() {\n        return l.getLayers();\n      }, removeLinkLayer: function(d) {\n        l.removeLayer(d);\n      }, _clearLinkLayers: function() {\n        l.clear();\n      } };\n    } };\n  }(t), a = Ia(t);\n  return t.ext.inlineEditors = a, t.ext._inlineEditors = a, a.init(t), { factory: n, mouseEvents: ha.init(t), layersApi: i.init(), render: { gridLine: function() {\n    return /* @__PURE__ */ function(r) {\n      return { render: function(s, o, l, d) {\n        for (var c = o.getGridColumns(), u = o.$getTemplates(), h = o.$config.rowStore, g = [], f = 0; f < c.length; f++) {\n          var y, v, b, _ = f == c.length - 1, m = c[f];\n          m.name == \"add\" ? (v = \"<div \" + (S = r._waiAria.gridAddButtonAttrString(m)) + \" class='gantt_add'></div>\", b = \"\") : (X(v = m.template ? m.template(s) : s[m.name]) && (v = u.date_grid(v, s, m.name)), v == null && (v = \"\"), b = v, v = \"<div class='gantt_tree_content'>\" + v + \"</div>\");\n          var p = \"gantt_cell\" + (_ ? \" gantt_last_cell\" : \"\"), k = [];\n          if (m.tree) {\n            p += \" gantt_cell_tree\";\n            for (var $ = 0; $ < s.$level; $++) k.push(u.grid_indent(s));\n            !h.hasChild(s.id) || r.isSplitTask(s) && !r.config.open_split_tasks ? (k.push(u.grid_blank(s)), k.push(u.grid_file(s))) : (k.push(u.grid_open(s)), k.push(u.grid_folder(s)));\n          }\n          var w = \"width:\" + (m.width - (_ ? 1 : 0)) + \"px;\";\n          if (this.defined(m.align)) {\n            var x = { right: \"flex-end\", left: \"flex-start\", center: \"center\" }[m.align];\n            w += \"text-align:\" + m.align + \";justify-content:\" + x + \";\";\n          }\n          var S = r._waiAria.gridCellAttrString(m, b, s);\n          k.push(v), y = \"<div class='\" + p + \"' data-column-index='\" + f + \"' data-column-name='\" + m.name + \"' style='\" + w + \"' \" + S + \">\" + k.join(\"\") + \"</div>\", g.push(y);\n        }\n        switch (p = \"\", h.$config.name) {\n          case \"task\":\n            p = r.getGlobalTaskIndex(s.id) % 2 == 0 ? \"\" : \" odd\";\n            break;\n          case \"resource\":\n            p = h.visibleOrder.indexOf(s.id) % 2 == 0 ? \"\" : \" odd\";\n        }\n        if (p += s.$transparent ? \" gantt_transparent\" : \"\", p += s.$dataprocessor_class ? \" \" + s.$dataprocessor_class : \"\", u.grid_row_class) {\n          var T = u.grid_row_class.call(r, s.start_date, s.end_date, s);\n          T && (p += \" \" + T);\n        }\n        h.isSelected(s.id) && (p += \" gantt_selected\");\n        var E = document.createElement(\"div\");\n        E.className = \"gantt_row\" + p + \" gantt_row_\" + r.getTaskType(s.type);\n        var C = o.getItemHeight(s.id);\n        return E.style.height = C + \"px\", E.style.lineHeight = C + \"px\", l.smart_rendering && (E.style.position = \"absolute\", E.style.left = \"0px\", E.style.top = o.getItemTop(s.id) + \"px\"), o.$config.item_attribute && (E.setAttribute(o.$config.item_attribute, s.id), E.setAttribute(o.$config.bind + \"_id\", s.id)), r._waiAria.taskRowAttr(s, E), E.innerHTML = g.join(\"\"), E;\n      }, update: null, getRectangle: Gt, isInViewPort: La, getVisibleRange: gt, onrender: function(s, o, l) {\n        for (var d = l.getGridColumns(), c = 0; c < d.length; c++) {\n          var u = d[c];\n          if (u.onrender) {\n            var h = o.querySelector(\"[data-column-name=\" + u.name + \"]\");\n            if (h) {\n              var g = u.onrender(s, h);\n              if (g && typeof g == \"string\") h.innerHTML = g;\n              else if (g && typeof g == \"object\" && r.config.external_render) {\n                var f = r.config.external_render;\n                f.isElement(g) && f.renderElement(g, h);\n              }\n            }\n          }\n        }\n      } };\n    }(t);\n  }, taskBg: function() {\n    return /* @__PURE__ */ function(r) {\n      var s = {}, o = {};\n      function l(g, f) {\n        return !(!s[g.id][f] || !s[g.id][f].parentNode);\n      }\n      function d(g, f) {\n        s[g] && s[g][f] && s[g][f].parentNode && s[g][f].parentNode.removeChild(s[g][f]);\n      }\n      function c(g) {\n        var f, y = g.$getTemplates();\n        return y.task_cell_class !== void 0 ? (f = y.task_cell_class, (console.warn || console.log)(\"gantt.templates.task_cell_class template is deprecated and will be removed soon. Please use gantt.templates.timeline_cell_class instead.\")) : f = y.timeline_cell_class, f;\n      }\n      function u(g) {\n        return g.$getTemplates().timeline_cell_content;\n      }\n      function h(g, f, y, v, b, _, m, p) {\n        var k = g.width[f], $ = \"\";\n        if (ie(f, g, v, r)) {\n          var w = _(y, g.trace_x[f]), x = \"\";\n          if (m && (x = m(y, g.trace_x[f])), p.static_background) {\n            var S = !(!w && !x);\n            if (!p.static_background_cells || !S) return null;\n          }\n          if (s[y.id][f]) return o[y.id][f] = f, s[y.id][f];\n          var T = document.createElement(\"div\");\n          return T.style.width = k + \"px\", $ = \"gantt_task_cell\" + (f == b - 1 ? \" gantt_last_cell\" : \"\"), w && ($ += \" \" + w), T.className = $, x && (T.innerHTML = x), T.style.position = \"absolute\", T.style.left = g.left[f] + \"px\", s[y.id][f] = T, o[y.id][f] = f, T;\n        }\n        return null;\n      }\n      return { render: function(g, f, y, v) {\n        var b = f.$getTemplates(), _ = f.getScale(), m = _.count;\n        if (y.static_background && !y.static_background_cells) return null;\n        var p, k = document.createElement(\"div\"), $ = c(f), w = u(f);\n        if (p = v && y.smart_rendering && !Mt(r) ? zt(_, v.x) : { start: 0, end: m - 1 }, y.show_task_cells) {\n          s[g.id] = {}, o[g.id] = {};\n          for (var x = p.start; x <= p.end; x++) {\n            var S = h(_, x, g, v, m, $, w, y);\n            S && k.appendChild(S);\n          }\n        }\n        const T = f.$config.rowStore, E = T.getIndexById(g.id) % 2 != 0;\n        var C = b.task_row_class(g.start_date, g.end_date, g), D = \"gantt_task_row\" + (E ? \" odd\" : \"\") + (C ? \" \" + C : \"\");\n        if (T.isSelected(g.id) && (D += \" gantt_selected\"), k.className = D, y.smart_rendering ? (k.style.position = \"absolute\", k.style.top = f.getItemTop(g.id) + \"px\", k.style.width = \"100%\") : k.style.position = \"relative\", k.style.height = f.getItemHeight(g.id) + \"px\", g.id == \"timeline_placeholder_task\") {\n          var A = 0;\n          g.lastTaskId && (A = f.getItemTop(g.lastTaskId) + f.getItemHeight(g.lastTaskId));\n          var I = (g.row_height || f.$task_data.offsetHeight) - A;\n          I < 0 && (I = 0), y.smart_rendering && (k.style.top = A + \"px\"), k.style.height = I + \"px\";\n        }\n        return f.$config.item_attribute && (k.setAttribute(f.$config.item_attribute, g.id), k.setAttribute(f.$config.bind + \"_id\", g.id)), k;\n      }, update: function(g, f, y, v, b) {\n        var _ = y.getScale(), m = _.count, p = c(y), k = u(y);\n        if (v.show_task_cells) {\n          s[g.id] || (s[g.id] = {}), o[g.id] || (o[g.id] = {});\n          var $ = zt(_, b);\n          for (var w in o[g.id]) {\n            var x = o[g.id][w];\n            (Number(x) < $.start || Number(x) > $.end) && d(g.id, x);\n          }\n          o[g.id] = {};\n          for (var S = $.start; S <= $.end; S++) {\n            var T = h(_, S, g, b, m, p, k, v);\n            !T && l(g, S) ? d(g.id, S) : T && !T.parentNode && f.appendChild(T);\n          }\n        }\n      }, getRectangle: qe, getVisibleRange: gt, prepareData: Ma };\n    }(t);\n  }, taskBar: function() {\n    return Ue(t);\n  }, timedProjectBar: function() {\n    return Ue(t);\n  }, taskRollupBar: function() {\n    return function(r) {\n      const s = yn(r), o = {};\n      function l(u, h, g, f, y) {\n        let v = !0;\n        return f.smart_rendering && (v = ke(u, h, g)), v;\n      }\n      function d(u, h, g, f) {\n        const y = r.copy(r.getTask(h.id));\n        if (y.$rendered_at = u.id, r.callEvent(\"onBeforeRollupTaskDisplay\", [y.id, y, u.id]) === !1) return;\n        const v = s(y, g);\n        if (!v) return;\n        const b = g.getBarHeight(u.id, h.type == r.config.types.milestone), _ = Math.floor((g.getItemHeight(u.id) - b) / 2);\n        return v.style.top = f.top + _ + \"px\", v.classList.add(\"gantt_rollup_child\"), v.setAttribute(\"data-rollup-parent-id\", u.id), v;\n      }\n      function c(u, h) {\n        return u + \"_\" + h;\n      }\n      return { render: function(u, h, g, f) {\n        if (u.rollup !== !1 && u.$rollup && u.$rollup.length) {\n          const y = document.createElement(\"div\"), v = r.getTaskPosition(u);\n          return f && (f.y = 0, f.y_end = r.$task_bg.scrollHeight), u.$rollup.forEach(function(b) {\n            if (!r.isTaskExists(b)) return;\n            const _ = r.getTask(b);\n            if (!l(_, f, h, g)) return;\n            const m = d(u, _, h, v);\n            m ? (o[c(_.id, u.id)] = m, y.appendChild(m)) : o[c(_.id, u.id)] = !1;\n          }), y;\n        }\n        return !1;\n      }, update: function(u, h, g, f, y) {\n        const v = document.createElement(\"div\"), b = r.getTaskPosition(u);\n        y.y = 0, y.y_end = r.$task_bg.scrollHeight, u.$rollup.forEach(function(_) {\n          const m = r.getTask(_), p = c(m.id, u.id);\n          let k = l(m, y, g, f);\n          if (k !== !!o[p]) if (k) {\n            const $ = d(u, m, g, b);\n            o[p] = $ || !1;\n          } else o[p] = !1;\n          o[p] && v.appendChild(o[p]), h.innerHTML = \"\", h.appendChild(v);\n        });\n      }, isInViewPort: ke, getVisibleRange: gt };\n    }(t);\n  }, taskSplitBar: function() {\n    return Et();\n  }, taskConstraints: function() {\n    return Et();\n  }, taskDeadline: function() {\n    return Et();\n  }, taskBaselines: function() {\n    return Et();\n  }, link: function() {\n    return Na(t);\n  }, resourceRow: function() {\n    return function(r) {\n      var s = Pa(r), o = {};\n      function l(c, u, h, g, f) {\n        var y = h.resource_cell_class(u.start_date, u.end_date, c, u.tasks, u.assignments), v = h.resource_cell_value(u.start_date, u.end_date, c, u.tasks, u.assignments), b = f.getItemHeight(c.id) - 1;\n        if (y || v) {\n          var _ = f.getItemPosition(c, u.start_date, u.end_date), m = document.createElement(\"div\");\n          return m.setAttribute(f.$config.item_attribute, c.id), m.className = [\"gantt_resource_marker\", y].join(\" \"), m.style.cssText = [\"left:\" + _.left + \"px\", \"width:\" + _.width + \"px\", \"height:\" + b + \"px\", \"line-height:\" + b + \"px\", \"top:\" + _.top + \"px\"].join(\";\"), v && (m.innerHTML = v), m;\n        }\n        return null;\n      }\n      function d(c, u) {\n        o[c] && o[c][u] && o[c][u].parentNode && o[c][u].parentNode.removeChild(o[c][u]);\n      }\n      return { render: function(c, u, h, g) {\n        var f = u.$getTemplates(), y = u.getScale(), v = s(c, h.resource_property, u.getScale(), u), b = !!g, _ = [];\n        o[c.id] = {};\n        for (var m = zt(y, g), p = m.start; p <= m.end; p++) {\n          var k = v[p];\n          if (k && (!b || ie(p, y, g, r))) {\n            var $ = l(c, k, f, 0, u);\n            $ && (_.push($), o[c.id][p] = $);\n          }\n        }\n        var w = null;\n        if (_.length) {\n          w = document.createElement(\"div\");\n          for (var x = 0; x < _.length; x++) w.appendChild(_[x]);\n        }\n        return w;\n      }, update: function(c, u, h, g, f) {\n        var y = h.$getTemplates(), v = h.getScale(), b = s(c, g.resource_property, h.getScale(), h), _ = zt(v, f), m = {};\n        if (o && o[c.id]) for (var p in o[c.id]) m[p] = p;\n        for (var k = _.start; k <= _.end; k++) {\n          var $ = b[k];\n          if (m[k] = !1, $) if (ie(k, v, f, r)) if (o[c.id] && o[c.id][k]) o[c.id] && o[c.id][k] && !o[c.id][k].parentNode && u.appendChild(o[c.id][k]);\n          else {\n            var w = l(c, $, y, 0, h);\n            w && (u.appendChild(w), o[c.id][k] = w);\n          }\n          else d(c.id, k);\n        }\n        for (var p in m) m[p] !== !1 && d(c.id, p);\n      }, getRectangle: qe, getVisibleRange: gt };\n    }(t);\n  }, resourceHistogram: function() {\n    return Et();\n  }, gridTaskRowResizer: function() {\n    return /* @__PURE__ */ function(r) {\n      return { render: function(s, o, l) {\n        var d = o.$getConfig(), c = document.createElement(\"div\");\n        return c.className = \"gantt_task_grid_row_resize_wrap\", c.style.top = o.getItemTop(s.id) + o.getItemHeight(s.id) + \"px\", c.innerHTML = \"<div class='gantt_task_grid_row_resize' role='cell'></div>\", c.setAttribute(d.task_grid_row_resizer_attribute, s.id), r._waiAria.rowResizerAttr(c), c;\n      }, update: null, getRectangle: Gt, getVisibleRange: gt };\n    }(t);\n  } }, layersService: { getDataRender: function(r) {\n    return i.getDataRender(r, t);\n  }, createDataRender: function(r) {\n    return i.createDataRender(r, t);\n  } } };\n} };\nfunction se(t, e) {\n  const n = getComputedStyle(e.$root).getPropertyValue(\"--dhx-gantt-theme\");\n  let i, a = !!n;\n  if (a) i = n;\n  else {\n    var r = e.skin;\n    if (i = r, !r || t) for (var s = document.getElementsByTagName(\"link\"), o = 0; o < s.length; o++) {\n      var l = s[o].href.match(\"dhtmlxgantt_([a-z_]+).css\");\n      if (l && (e.skins[l[1]] || !r)) {\n        i = l[1];\n        break;\n      }\n    }\n  }\n  e._theme_info = { theme: i, cssVarTheme: a }, e.skin = i || \"terrace\";\n  var d = e.skins[e.skin] || e.skins.terrace;\n  (function(h, g, f) {\n    for (var y in g) (h[y] === void 0 || f) && (h[y] = g[y]);\n  })(e.config, d.config, t), a || (e.config.link_radius = 1);\n  var c = e.getGridColumns();\n  for (c[1] && !e.defined(c[1].width) && (c[1].width = d._second_column_width), c[2] && !e.defined(c[2].width) && (c[2].width = d._third_column_width), o = 0; o < c.length; o++) {\n    var u = c[o];\n    u.name == \"add\" && (u.width || (u.width = 44), e.defined(u.min_width) && e.defined(u.max_width) || (u.min_width = u.min_width || u.width, u.max_width = u.max_width || u.width), u.min_width && (u.min_width = +u.min_width), u.max_width && (u.max_width = +u.max_width), u.width && (u.width = +u.width, u.width = u.min_width && u.min_width > u.width ? u.min_width : u.width, u.width = u.max_width && u.max_width < u.width ? u.max_width : u.width));\n  }\n  d.config.task_height && (e.config.task_height = d.config.task_height || \"full\"), d.config.bar_height && (e.config.bar_height = d.config.bar_height || \"full\"), d._lightbox_template && (e._lightbox_template = d._lightbox_template), d._redefine_lightbox_buttons && (e.config.buttons_right = d._redefine_lightbox_buttons.buttons_right, e.config.buttons_left = d._redefine_lightbox_buttons.buttons_left), e.resetLightbox();\n}\nfunction Ua(t) {\n  var e = 50, n = 30, i = 10, a = 50, r = null, s = !1, o = null, l = { started: !1 }, d = {};\n  function c(b) {\n    return b && G(b, t.$root) && b.offsetHeight;\n  }\n  function u() {\n    var b = !!document.querySelector(\".gantt_drag_marker\"), _ = !!document.querySelector(\".gantt_drag_marker.gantt_grid_resize_area\") || !!document.querySelector(\".gantt_drag_marker.gantt_row_grid_resize_area\"), m = !!document.querySelector(\".gantt_link_direction\"), p = t.getState(), k = p.autoscroll;\n    return s = b && !_ && !m, !(!p.drag_mode && !b || _) || k;\n  }\n  function h(b) {\n    if (o && (clearTimeout(o), o = null), b) {\n      var _ = t.config.autoscroll_speed;\n      _ && _ < 10 && (_ = 10), o = setTimeout(function() {\n        r = setInterval(y, _ || a);\n      }, t.config.autoscroll_delay || i);\n    }\n  }\n  function g(b) {\n    b ? (h(!0), l.started || (l.x = d.x, l.y = d.y, l.started = !0)) : (r && (clearInterval(r), r = null), h(!1), l.started = !1);\n  }\n  function f(b) {\n    var _ = u();\n    if (!r && !o || _ || g(!1), !t.config.autoscroll || !_) return !1;\n    d = { x: b.clientX, y: b.clientY }, b.type == \"touchmove\" && (d.x = b.targetTouches[0].clientX, d.y = b.targetTouches[0].clientY), !r && _ && g(!0);\n  }\n  function y() {\n    if (!u()) return g(!1), !1;\n    var b = c(t.$task) ? t.$task : c(t.$grid) ? t.$grid : t.$root;\n    if (b) {\n      var _ = !1;\n      [\".gantt_drag_marker.gantt_grid_resize_area\", \".gantt_drag_marker .gantt_row.gantt_row_task\", \".gantt_drag_marker.gantt_grid_dnd_marker\"].forEach(function(M) {\n        _ = _ || !!document.querySelector(M);\n      }), _ && (b = t.$grid);\n      var m = F(b), p = d.x - m.x, k = d.y - m.y + window.scrollY, $ = s ? 0 : v(p, m.width, l.x - m.x), w = v(k, m.height, l.y - m.y + window.scrollY), x = t.getScrollState(), S = x.y, T = x.inner_height, E = x.height, C = x.x, D = x.inner_width, A = x.width;\n      (w && !T || w < 0 && !S || w > 0 && S + T >= E + 2) && (w = 0), ($ && !D || $ < 0 && !C || $ > 0 && C + D >= A) && ($ = 0);\n      var I = t.config.autoscroll_step;\n      I && I < 2 && (I = 2), w *= I || n, (($ *= I || n) || w) && function(M, L) {\n        var P = t.getScrollState(), H = null, V = null;\n        M && (H = P.x + M, H = Math.min(P.width, H), H = Math.max(0, H)), L && (V = P.y + L, V = Math.min(P.height, V), V = Math.max(0, V)), t.scrollTo(H, V);\n      }($, w);\n    }\n  }\n  function v(b, _, m) {\n    return b - e < 0 && b < m ? -1 : b > _ - e && b > m ? 1 : 0;\n  }\n  t.attachEvent(\"onGanttReady\", function() {\n    if (!j(t)) {\n      var b = mt(t.$root) || document.body;\n      t.eventRemove(b, \"mousemove\", f), t.event(b, \"mousemove\", f), t.eventRemove(b, \"touchmove\", f), t.event(b, \"touchmove\", f), t.eventRemove(b, \"pointermove\", f), t.event(b, \"pointermove\", f);\n    }\n  }), t.attachEvent(\"onDestroy\", function() {\n    g(!1);\n  });\n}\nvar oe, le;\nwindow.jQuery && (oe = window.jQuery, le = [], oe.fn.dhx_gantt = function(t) {\n  if (typeof (t = t || {}) != \"string\") {\n    var e = [];\n    return this.each(function() {\n      if (this && this.getAttribute) if (this.gantt || window.gantt.$root == this) e.push(typeof this.gantt == \"object\" ? this.gantt : window.gantt);\n      else {\n        var n = window.gantt.$container && window.Gantt ? window.Gantt.getGanttInstance() : window.gantt;\n        for (var i in t) i != \"data\" && (n.config[i] = t[i]);\n        n.init(this), t.data && n.parse(t.data), e.push(n);\n      }\n    }), e.length === 1 ? e[0] : e;\n  }\n  if (le[t]) return le[t].apply(this, []);\n  oe.error(\"Method \" + t + \" does not exist on jQuery.dhx_gantt\");\n});\nconst qa = null;\nwindow.dhtmlx && (window.dhtmlx.attaches || (window.dhtmlx.attaches = {}), window.dhtmlx.attaches.attachGantt = function(t, e, n) {\n  var i = document.createElement(\"DIV\");\n  n = n || window.gantt, i.id = \"gantt_\" + n.uid(), i.style.width = \"100%\", i.style.height = \"100%\", i.cmp = \"grid\", document.body.appendChild(i), this.attachObject(i.id), this.dataType = \"gantt\", this.dataObj = n;\n  var a = this.vs[this.av];\n  return a.grid = n, n.init(i.id, t, e), i.firstChild.style.border = \"none\", a.gridId = i.id, a.gridObj = i, this.vs[this._viewRestore()].grid;\n}), window.dhtmlXCellObject !== void 0 && (window.dhtmlXCellObject.prototype.attachGantt = function(t, e, n) {\n  n = n || window.gantt;\n  var i = document.createElement(\"DIV\");\n  return i.id = \"gantt_\" + n.uid(), i.style.width = \"100%\", i.style.height = \"100%\", i.cmp = \"grid\", document.body.appendChild(i), this.attachObject(i.id), this.dataType = \"gantt\", this.dataObj = n, n.init(i.id, t, e), i.firstChild.style.border = \"none\", i = null, this.callEvent(\"_onContentAttach\", []), this.dataObj;\n});\nconst Ga = null, Ya = [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\"], Ja = [[{ unit: \"month\", date: \"%M\", step: 1 }, { unit: \"day\", date: \"%d\", step: 1 }], [{ unit: \"day\", date: \"%d %M\", step: 1 }], [{ unit: \"day\", date: \"%d %M\", step: 1 }, { unit: \"hour\", date: \"%H:00\", step: 8 }], [{ unit: \"day\", date: \"%d %M\", step: 1 }, { unit: \"hour\", date: \"%H:00\", step: 1 }]];\nclass Ka {\n  constructor(e) {\n    this.zoomIn = () => {\n      const n = this.getCurrentLevel() - 1;\n      n < 0 || this.setLevel(n);\n    }, this.zoomOut = () => {\n      const n = this.getCurrentLevel() + 1;\n      n > this._levels.length - 1 || this.setLevel(n);\n    }, this.getCurrentLevel = () => this._activeLevelIndex, this.getLevels = () => this._levels, this.setLevel = (n) => {\n      const i = this._getZoomIndexByName(n);\n      i === -1 && this.$gantt.assert(i !== -1, \"Invalid zoom level for gantt.ext.zoom.setLevel. \" + n + \" is not an expected value.\"), this._setLevel(i, 0);\n    }, this._getZoomIndexByName = (n) => {\n      let i = -1;\n      if (typeof n == \"string\") {\n        if (!isNaN(Number(n)) && this._levels[Number(n)]) i = Number(n);\n        else for (let a = 0; a < this._levels.length; a++) if (this._levels[a].name === n) {\n          i = a;\n          break;\n        }\n      } else i = n;\n      return i;\n    }, this._getVisibleDate = () => {\n      if (!this.$gantt.$task) return null;\n      const n = this.$gantt.getScrollState().x, i = this.$gantt.$task.offsetWidth;\n      this._visibleDate = this.$gantt.dateFromPos(n + i / 2);\n    }, this._setLevel = (n, i) => {\n      this._activeLevelIndex = n;\n      const a = this.$gantt, r = a.copy(this._levels[this._activeLevelIndex]), s = a.copy(r);\n      if (delete s.name, a.mixin(a.config, s, !0), [\"resourceTimeline\", \"resourceHistogram\"].forEach(function(o) {\n        const l = a.$ui.getView(o);\n        if (l) {\n          const d = l.$getConfig();\n          d.fixed_scales || a.mixin(d, s, !0);\n        }\n      }), a.$root && a.$task) {\n        if (i) {\n          const o = this.$gantt.dateFromPos(i + this.$gantt.getScrollState().x);\n          this.$gantt.render();\n          const l = this.$gantt.posFromDate(o);\n          this.$gantt.scrollTo(l - i);\n        } else {\n          const o = this.$gantt.$task.offsetWidth;\n          this._visibleDate || this._getVisibleDate();\n          const l = this._visibleDate;\n          this.$gantt.render();\n          const d = this.$gantt.posFromDate(l);\n          this.$gantt.scrollTo(d - o / 2);\n        }\n        this.callEvent(\"onAfterZoom\", [this._activeLevelIndex, r]);\n      }\n    }, this._attachWheelEvent = (n) => {\n      const i = pt.isFF ? \"wheel\" : \"mousewheel\";\n      let a;\n      a = typeof n.element == \"function\" ? n.element() : n.element, a && this._domEvents.attach(a, i, this.$gantt.bind(function(r) {\n        if (this._useKey && (Ya.indexOf(this._useKey) < 0 || !r[this._useKey]))\n          return !1;\n        if (typeof this._handler == \"function\") return this._handler.apply(this, [r]), !0;\n      }, this), { passive: !1 });\n    }, this._defaultHandler = (n) => {\n      const i = this.$gantt.$task.getBoundingClientRect().x, a = n.clientX - i;\n      let r = !1;\n      (this.$gantt.env.isFF ? -40 * n.deltaY : n.wheelDelta) > 0 && (r = !0), n.preventDefault(), n.stopPropagation(), this._setScaleSettings(r, a);\n    }, this._setScaleDates = () => {\n      this._initialStartDate && this._initialEndDate && (this.$gantt.config.start_date = this._initialStartDate, this.$gantt.config.end_date = this._initialEndDate);\n    }, this.$gantt = e, this._domEvents = this.$gantt._createDomEventScope();\n  }\n  init(e) {\n    this.$gantt.env.isNode || (this._initialStartDate = e.startDate, this._initialEndDate = e.endDate, this._activeLevelIndex = e.activeLevelIndex ? e.activeLevelIndex : 0, this._levels = this._mapScales(e.levels || Ja), this._handler = e.handler || this._defaultHandler, this._minColumnWidth = e.minColumnWidth || 60, this._maxColumnWidth = e.maxColumnWidth || 240, this._widthStep = e.widthStep || 3 / 8 * e.minColumnWidth, this._useKey = e.useKey, this._initialized || (st(this), this.$gantt.attachEvent(\"onGanttScroll\", () => {\n      this._getVisibleDate();\n    })), this._domEvents.detachAll(), e.trigger === \"wheel\" && (this.$gantt.$root ? this._attachWheelEvent(e) : this.$gantt.attachEvent(\"onGanttReady\", () => {\n      this._attachWheelEvent(e);\n    })), this._initialized = !0, this.setLevel(this._activeLevelIndex));\n  }\n  _mapScales(e) {\n    return e.map((n) => Array.isArray(n) ? { scales: n } : n);\n  }\n  _setScaleSettings(e, n) {\n    e ? this._stepUp(n) : this._stepDown(n);\n  }\n  _stepUp(e) {\n    if (this._activeLevelIndex >= this._levels.length - 1) return;\n    let n = this._activeLevelIndex;\n    if (this._setScaleDates(), this._widthStep) {\n      let i = this.$gantt.config.min_column_width + this._widthStep;\n      i > this._maxColumnWidth && (i = this._minColumnWidth, n++), this.$gantt.config.min_column_width = i;\n    } else n++;\n    this._setLevel(n, e);\n  }\n  _stepDown(e) {\n    if (this._activeLevelIndex < 1) return;\n    let n = this._activeLevelIndex;\n    if (this._setScaleDates(), this._widthStep) {\n      let i = this.$gantt.config.min_column_width - this._widthStep;\n      i < this._minColumnWidth && (i = this._maxColumnWidth, n--), this.$gantt.config.min_column_width = i;\n    } else n--;\n    this._setLevel(n, e);\n  }\n}\nfunction Xa(t) {\n  function e() {\n    if (t.config.touch != \"force\" && (t.config.touch = t.config.touch && (navigator.userAgent.indexOf(\"Mobile\") != -1 || navigator.userAgent.indexOf(\"iPad\") != -1 || navigator.userAgent.indexOf(\"Android\") != -1 || navigator.userAgent.indexOf(\"Touch\") != -1) || navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1), t.config.touch) {\n      var r = !0;\n      try {\n        document.createEvent(\"TouchEvent\");\n      } catch {\n        r = !1;\n      }\n      r ? t._touch_events([\"touchmove\", \"touchstart\", \"touchend\"], function(s) {\n        return s.touches && s.touches.length > 1 ? null : s.touches[0] ? { target: s.target, pageX: s.touches[0].pageX, pageY: s.touches[0].pageY, clientX: s.touches[0].clientX, clientY: s.touches[0].clientY } : s;\n      }, function() {\n        return !1;\n      }) : window.navigator.pointerEnabled ? t._touch_events([\"pointermove\", \"pointerdown\", \"pointerup\"], function(s) {\n        return s.pointerType == \"mouse\" ? null : s;\n      }, function(s) {\n        return !s || s.pointerType == \"mouse\";\n      }) : window.navigator.msPointerEnabled && t._touch_events([\"MSPointerMove\", \"MSPointerDown\", \"MSPointerUp\"], function(s) {\n        return s.pointerType == s.MSPOINTER_TYPE_MOUSE ? null : s;\n      }, function(s) {\n        return !s || s.pointerType == s.MSPOINTER_TYPE_MOUSE;\n      });\n    }\n  }\n  function n(r) {\n    var s = r.$config.scrollX ? t.$ui.getView(r.$config.scrollX) : null, o = r.$config.scrollY ? t.$ui.getView(r.$config.scrollY) : null, l = { x: null, y: null };\n    return s && s.getScrollState().visible && (l.x = s.$view.scrollLeft), o && o.getScrollState().visible && (l.y = o.$view.scrollTop), l;\n  }\n  function i() {\n    var r;\n    return t.$ui.getView(\"timeline\") && (r = t.$ui.getView(\"timeline\")._tasks_dnd), r;\n  }\n  t.config.touch_drag = 75, t.config.touch = !0, t.config.touch_feedback = !0, t.config.touch_feedback_duration = 1, t._prevent_touch_scroll = !1, t._touch_feedback = function() {\n    t.config.touch_feedback && navigator.vibrate && navigator.vibrate(t.config.touch_feedback_duration);\n  }, t.attachEvent(\"onGanttReady\", function() {\n    t.$container && e();\n  }), t.attachEvent(\"onGanttLayoutReady\", function() {\n    t.$container && t.attachEvent(\"onGanttRender\", e, { once: !0 });\n  });\n  var a = [];\n  t._touch_events = function(r, s, o) {\n    var l, d = 0, c = !1, u = !1, h = null, g = null, f = null, y = [], v = null;\n    let b = {};\n    for (var _ = 0; _ < a.length; _++) t.eventRemove(a[_][0], a[_][1], a[_][2]);\n    (a = []).push([t.$container, r[0], function(p) {\n      var k = i();\n      if (!o(p) && c) {\n        g && clearTimeout(g);\n        var $ = s(p);\n        if (k && (k.drag.id || k.drag.start_drag)) return k.on_mouse_move($), p.preventDefault && p.preventDefault(), p.cancelBubble = !0, !1;\n        if (!t._prevent_touch_scroll) {\n          if ($ && h) {\n            var w = h.pageX - $.pageX, x = h.pageY - $.pageY;\n            if (!u && (Math.abs(w) > 5 || Math.abs(x) > 5) && (u = !0, d = 0, l = v ? n(v) : t.getScrollState()), u) {\n              var S, T = l.x + w, E = l.y + x;\n              if (v ? (function(C, D, A) {\n                var I = C.$config.scrollX ? t.$ui.getView(C.$config.scrollX) : null, M = C.$config.scrollY ? t.$ui.getView(C.$config.scrollY) : null;\n                I && I.scrollTo(D, null), M && M.scrollTo(null, A);\n              }(v, T, E), S = n(v)) : (t.scrollTo(T, E), S = t.getScrollState()), l.x != S.x && x > 2 * w || l.y != S.y && w > 2 * x) return m(p);\n            }\n          }\n          return m(p);\n        }\n        return !0;\n      }\n    }]);\n    try {\n      document.addEventListener(\"touchmove\", function(p) {\n        t._touch_drag && m(p);\n      }, { passive: !1 });\n    } catch {\n      console.warn(\"Cannot prevent touch event for the page drag\");\n    }\n    for (a.push([this.$container, \"contextmenu\", function(p) {\n      if (c) return m(p);\n    }]), a.push([this.$container, r[1], function(p) {\n      if (b = p.touches.length, document && document.body && document.body.classList.add(\"gantt_touch_active\"), !o(p)) if (p.touches && p.touches.length > 1) c = !1;\n      else {\n        h = s(p), v = function($) {\n          for (var w = t.$layout.getCellsByType(\"viewCell\"), x = 0; x < w.length; x++) {\n            var S = w[x].$view.getBoundingClientRect();\n            if ($.clientX >= S.left && $.clientX <= S.right && $.clientY <= S.bottom && $.clientY >= S.top) return w[x];\n          }\n        }(h), t._locate_css(h, \"gantt_hor_scroll\") || t._locate_css(h, \"gantt_ver_scroll\") || (c = !0);\n        var k = i();\n        g = setTimeout(function() {\n          var $ = t.locate(h);\n          k && $ && !t._locate_css(h, \"gantt_link_control\") && !t._locate_css(h, \"gantt_grid_data\") && (k.on_mouse_down(h), k.drag && k.drag.start_drag && (function(w) {\n            const x = t._getTaskLayers();\n            let S = t.getTask(w);\n            if (S) {\n              let T = t.isTaskVisible(w);\n              if (T) {\n                f = w;\n                for (let E = 0; E < x.length; E++) if (S = x[E].rendered[w], S && S.getAttribute(t.config.task_attribute) && S.getAttribute(t.config.task_attribute) == w) {\n                  const C = S.cloneNode(!0);\n                  y.push(S), x[E].rendered[w] = C, S.style.display = \"none\", C.className += \" gantt_drag_move \", S.parentNode.appendChild(C);\n                }\n              } else if (S.$split_subtask) {\n                let E = S.$rendered_parent;\n                if (T = t.isTaskVisible(E), !T) return;\n                f = w;\n                for (let C = 0; C < x.length; C++) {\n                  const D = x[C].rendered[E];\n                  let A;\n                  if (D && D.childNodes && (A = D.querySelector(`[${t.config.task_attribute}=\"${S.id}\"]`)), A) {\n                    const I = A.cloneNode(!0);\n                    A.parentNode.appendChild(I), t.$task_bars.appendChild(A), A.style.display = \"none\", y.push(A), A = null;\n                  }\n                }\n              }\n            }\n          }($), k._start_dnd(h), t._touch_drag = !0, t.refreshTask($), t._touch_feedback())), g = null;\n        }, t.config.touch_drag);\n      }\n    }]), a.push([this.$container, r[2], function(p) {\n      if (document && document.body && document.body.classList.remove(\"gantt_touch_active\"), !o(p)) {\n        g && clearTimeout(g), t._touch_drag = !1, c = !1;\n        var k = s(p), $ = i();\n        if ($ && $.on_mouse_up(k), f && t.isTaskExists(f) && (t.refreshTask(f), y.length && (y.forEach(function(x) {\n          x.parentNode && x.parentNode.removeChild(x);\n        }), t._touch_feedback())), c = u = !1, y = [], f = null, h && d) {\n          var w = /* @__PURE__ */ new Date();\n          w - d < 500 && b <= 1 ? (t.$services.getService(\"mouseEvents\").onDoubleClick(h), m(p)) : d = w;\n        } else d = /* @__PURE__ */ new Date();\n      }\n    }]), _ = 0; _ < a.length; _++) t.event(a[_][0], a[_][1], a[_][2]);\n    function m(p) {\n      return p && p.preventDefault && p.cancelable && p.preventDefault(), p.cancelBubble = !0, !1;\n    }\n  };\n}\nfunction Wt() {\n  console.log(\"Method is not implemented.\");\n}\nfunction It() {\n}\nfunction ct(t) {\n  return It;\n}\nIt.prototype.render = Wt, It.prototype.set_value = Wt, It.prototype.get_value = Wt, It.prototype.focus = Wt;\nvar xn = { getHtmlSelect: function(t, e, n) {\n  var i = \"\", a = this;\n  return vt(t = t || [], function(r) {\n    var s = [{ key: \"value\", value: r.key }];\n    n == r.key && (s[s.length] = { key: \"selected\", value: \"selected\" }), r.attributes && (s = s.concat(r.attributes)), i += a.getHtmlOption({ innerHTML: r.label }, s);\n  }), Ct(\"select\", { innerHTML: i }, e);\n}, getHtmlOption: function(t, e) {\n  return Ct(\"option\", t, e);\n}, getHtmlButton: function(t, e) {\n  return Ct(\"button\", t, e);\n}, getHtmlDiv: function(t, e) {\n  return Ct(\"div\", t, e);\n}, getHtmlLabel: function(t, e) {\n  return Ct(\"label\", t, e);\n}, getHtmlInput: function(t) {\n  return \"<input\" + $n(t || []) + \">\";\n} };\nfunction Ct(t, e, n) {\n  return e = e || [], \"<\" + t + $n(n || []) + \">\" + (e.innerHTML || \"\") + \"</\" + t + \">\";\n}\nfunction $n(t) {\n  var e = \"\";\n  return vt(t, function(n) {\n    e += \" \" + n.key + \"='\" + n.value + \"'\";\n  }), e;\n}\nfunction Vt(t) {\n  const e = ct();\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  return z(n, e), n.prototype.render = function(i) {\n    const a = i.height ? `height:${i.height}px;` : \"\";\n    let r = `<div class='gantt_cal_ltext gantt_section_${i.name}' ${a ? `style='${a}'` : \"\"}>`;\n    return r += xn.getHtmlSelect(i.options, [{ key: \"style\", value: \"width:100%;\" }, { key: \"title\", value: i.name }]), r += \"</div>\", r;\n  }, n.prototype.set_value = function(i, a, r, s) {\n    var o = i.firstChild;\n    !o._dhx_onchange && s.onchange && (o.onchange = s.onchange, o._dhx_onchange = !0), a === void 0 && (a = (o.options[0] || {}).value), o.value = a || \"\";\n  }, n.prototype.get_value = function(i) {\n    return i.firstChild.value;\n  }, n.prototype.focus = function(i) {\n    var a = i.firstChild;\n    t._focus(a, !0);\n  }, n;\n}\nfunction Za(t) {\n  var e = Vt(t);\n  function n() {\n    return e.apply(this, arguments) || this;\n  }\n  function i(a, r) {\n    var s = [], o = [];\n    r && (s = t.getTaskByTime(), a.allow_root && s.unshift({ id: t.config.root_id, text: a.root_label || \"\" }), s = function(u, h, g) {\n      var f = h.filter || function() {\n        return !0;\n      };\n      u = u.slice(0);\n      for (var y = 0; y < u.length; y++) {\n        var v = u[y];\n        (v.id == g || t.isChildOf(v.id, g) || f(v.id, v) === !1) && (u.splice(y, 1), y--);\n      }\n      return u;\n    }(s, a, r), a.sort && s.sort(a.sort));\n    for (var l = a.template || t.templates.task_text, d = 0; d < s.length; d++) {\n      var c = l.apply(t, [s[d].start_date, s[d].end_date, s[d]]);\n      c === void 0 && (c = \"\"), o.push({ key: s[d].id, label: c });\n    }\n    return a.options = o, a.map_to = a.map_to || \"parent\", t.form_blocks.select.render.apply(this, arguments);\n  }\n  return z(n, e), n.prototype.render = function(a) {\n    return i(a, !1);\n  }, n.prototype.set_value = function(a, r, s, o) {\n    r === 0 && (r = \"0\");\n    var l = document.createElement(\"div\");\n    l.innerHTML = i(o, s.id);\n    var d = l.removeChild(l.firstChild);\n    return a.onselect = null, a.parentNode.replaceChild(d, a), t.form_blocks.select.set_value.apply(t, [d, r, s, o]);\n  }, n;\n}\nfunction Qa(t) {\n  var e = function() {\n    const _ = ct();\n    function m() {\n      return _.apply(this, arguments) || this;\n    }\n    return z(m, _), m.prototype.render = function(p) {\n      let k = p.height ? `${p.height}px` : \"\";\n      return `<div class='gantt_cal_ltext gantt_cal_template gantt_section_${p.name}' ${k ? `style='height:${k};'` : \"\"}></div>`;\n    }, m.prototype.set_value = function(p, k) {\n      p.innerHTML = k || \"\";\n    }, m.prototype.get_value = function(p) {\n      return p.innerHTML || \"\";\n    }, m.prototype.focus = function() {\n    }, m;\n  }(), n = function(_) {\n    const m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    return z(p, m), p.prototype.render = function(k) {\n      const $ = (k.height || \"130\") + \"px\", w = k.placeholder ? `placeholder='${k.placeholder}'` : \"\";\n      return `<div class='gantt_cal_ltext gantt_section_${k.name}' style='height:${$};' ${w}><textarea></textarea></div>`;\n    }, p.prototype.set_value = function(k, $) {\n      _.form_blocks.textarea._get_input(k).value = $ || \"\";\n    }, p.prototype.get_value = function(k) {\n      return _.form_blocks.textarea._get_input(k).value;\n    }, p.prototype.focus = function(k) {\n      var $ = _.form_blocks.textarea._get_input(k);\n      _._focus($, !0);\n    }, p.prototype._get_input = function(k) {\n      return k.querySelector(\"textarea\");\n    }, p;\n  }(t), i = function(_) {\n    const m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    return z(p, m), p.prototype.render = function(k) {\n      var $ = _.form_blocks.getTimePicker.call(this, k);\n      let w = \"gantt_section_time\";\n      k.name !== \"time\" && (w += \" gantt_section_\" + k.name);\n      var x = \"<div style='padding-top:0px;font-size:inherit;text-align:center;' class='\" + w + \"'>\";\n      return x += $, k.single_date ? ($ = _.form_blocks.getTimePicker.call(this, k, !0), x += \"<span></span>\") : x += \"<span class='gantt_section_time_spacer'> &nbsp;&ndash;&nbsp; </span>\", (x += $) + \"</div>\";\n    }, p.prototype.set_value = function(k, $, w, x) {\n      var S = x, T = k.getElementsByTagName(\"select\"), E = x._time_format_order;\n      if (S.auto_end_date) for (var C = function() {\n        I = new Date(T[E[2]].value, T[E[1]].value, T[E[0]].value, 0, 0), M = _.calculateEndDate({ start_date: I, duration: 1, task: w }), _.form_blocks._fill_lightbox_select(T, E.size, M, E, S);\n      }, D = 0; D < 4; D++) T[D].onchange = C;\n      var A = _._resolve_default_mapping(x);\n      typeof A == \"string\" && (A = { start_date: A });\n      var I = w[A.start_date] || /* @__PURE__ */ new Date(), M = w[A.end_date] || _.calculateEndDate({ start_date: I, duration: 1, task: w });\n      _.form_blocks._fill_lightbox_select(T, 0, I, E, S), _.form_blocks._fill_lightbox_select(T, E.size, M, E, S);\n    }, p.prototype.get_value = function(k, $, w) {\n      var x, S = k.getElementsByTagName(\"select\"), T = w._time_format_order;\n      return x = _.form_blocks.getTimePickerValue(S, w), typeof _._resolve_default_mapping(w) == \"string\" ? x : { start_date: x, end_date: function(E, C, D) {\n        var A = _.form_blocks.getTimePickerValue(E, w, C.size);\n        return A <= D && (w.autofix_end !== !1 || w.single_date) ? _.date.add(D, _._get_timepicker_step(), \"minute\") : A;\n      }(S, T, x) };\n    }, p.prototype.focus = function(k) {\n      _._focus(k.getElementsByTagName(\"select\")[0]);\n    }, p;\n  }(t), a = Vt(t), r = function(_) {\n    var m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    return z(p, m), p.prototype.render = function(k) {\n      const $ = k.height ? `height:${k.height}px;` : \"\";\n      let w = `<div class='gantt_cal_ltext gantt_cal_lcheckbox gantt_section_${k.name}' ${$ ? `style='${$}'` : \"\"}>`;\n      if (k.options && k.options.length) for (var x = 0; x < k.options.length; x++) w += \"<label><input type='checkbox' value='\" + k.options[x].key + \"' name='\" + k.name + \"'>\" + k.options[x].label + \"</label>\";\n      else k.single_value = !0, w += \"<label><input type='checkbox' name='\" + k.name + \"'></label>\";\n      return w += \"</div>\", w;\n    }, p.prototype.set_value = function(k, $, w, x) {\n      var S = Array.prototype.slice.call(k.querySelectorAll(\"input[type=checkbox]\"));\n      !k._dhx_onchange && x.onchange && (k.onchange = x.onchange, k._dhx_onchange = !0), x.single_value ? S[0].checked = !!$ : vt(S, function(T) {\n        T.checked = !!$ && $.indexOf(T.value) >= 0;\n      });\n    }, p.prototype.get_value = function(k, $, w) {\n      return w.single_value ? k.querySelector(\"input[type=checkbox]\").checked : function(x, S) {\n        if (x.map) return x.map(S);\n        for (var T = x.slice(), E = [], C = 0; C < T.length; C++) E.push(S(T[C], C));\n        return E;\n      }(Array.prototype.slice.call(k.querySelectorAll(\"input[type=checkbox]:checked\")), function(x) {\n        return x.value;\n      });\n    }, p.prototype.focus = function(k) {\n      _._focus(k.querySelector(\"input[type=checkbox]\"));\n    }, p;\n  }(t), s = function(_) {\n    const m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    return z(p, m), p.prototype.render = function(k) {\n      const $ = k.height ? `${k.height}px` : \"\";\n      let w = `<div class='gantt_cal_ltext gantt_cal_lradio gantt_section_${k.name}' ${$ ? `style='height:${$};'` : \"\"}>`;\n      if (k.options && k.options.length) for (var x = 0; x < k.options.length; x++) w += \"<label><input type='radio' value='\" + k.options[x].key + \"' name='\" + k.name + \"'>\" + k.options[x].label + \"</label>\";\n      return w += \"</div>\", w;\n    }, p.prototype.set_value = function(k, $, w, x) {\n      var S;\n      x.options && x.options.length && (S = k.querySelector(\"input[type=radio][value='\" + $ + \"']\") || k.querySelector(\"input[type=radio][value='\" + x.default_value + \"']\")) && (!k._dhx_onchange && x.onchange && (k.onchange = x.onchange, k._dhx_onchange = !0), S.checked = !0);\n    }, p.prototype.get_value = function(k, $) {\n      var w = k.querySelector(\"input[type=radio]:checked\");\n      return w ? w.value : \"\";\n    }, p.prototype.focus = function(k) {\n      _._focus(k.querySelector(\"input[type=radio]\"));\n    }, p;\n  }(t), o = function(_) {\n    var m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    function k(x) {\n      return x.formatter || new Nt();\n    }\n    function $(x, S) {\n      var T = x.getElementsByTagName(\"select\"), E = S._time_format_order, C = 0, D = 0;\n      if (_.defined(E[3])) {\n        var A = T[E[3]], I = parseInt(A.value, 10);\n        isNaN(I) && A.hasAttribute(\"data-value\") && (I = parseInt(A.getAttribute(\"data-value\"), 10)), C = Math.floor(I / 60), D = I % 60;\n      }\n      return new Date(T[E[2]].value, T[E[1]].value, T[E[0]].value, C, D);\n    }\n    function w(x, S) {\n      var T = x.getElementsByTagName(\"input\")[1];\n      return (T = k(S).parse(T.value)) && !window.isNaN(T) || (T = 1), T < 0 && (T *= -1), T;\n    }\n    return z(p, m), p.prototype.render = function(x) {\n      var S = \"<div class='gantt_time_selects'>\" + _.form_blocks.getTimePicker.call(this, x) + \"</div>\", T = \" \" + _.locale.labels[_.config.duration_unit + \"s\"] + \" \", E = x.single_date ? \" style='display:none'\" : \"\", C = x.readonly ? \" disabled='disabled'\" : \"\", D = _._waiAria.lightboxDurationInputAttrString(x), A = \"gantt_duration_value\";\n      x.formatter && (T = \"\", A += \" gantt_duration_value_formatted\");\n      var I = \"<div class='gantt_duration' \" + E + \"><div class='gantt_duration_inputs'><input type='button' class='gantt_duration_dec' value='−'\" + C + \"><input type='text' value='5days' class='\" + A + \"'\" + C + \" \" + D + \"><input type='button' class='gantt_duration_inc' value='+'\" + C + \"></div><div class='gantt_duration_end_date'>\" + T + \"<span></span></div></div></div>\";\n      let M = \"gantt_section_time gantt_section_duration\";\n      return x.name !== \"time\" && (M += \" gantt_section_\" + x.name), \"<div style='padding-top:0px;font-size:inherit;' class='\" + M + \"'>\" + S + \" \" + I + \"</div>\";\n    }, p.prototype.set_value = function(x, S, T, E) {\n      var C, D, A, I, M = x.getElementsByTagName(\"select\"), L = x.getElementsByTagName(\"input\"), P = L[1], H = [L[0], L[2]], V = x.getElementsByTagName(\"span\")[0], ut = E._time_format_order;\n      function O() {\n        var Y = $.call(_, x, E), B = w.call(_, x, E), ht = _.calculateEndDate({ start_date: Y, duration: B, task: T }), St = _.templates.task_end_date || _.templates.task_date;\n        V.innerHTML = St(ht);\n      }\n      function Z(Y) {\n        var B = P.value;\n        B = k(E).parse(B), window.isNaN(B) && (B = 0), (B += Y) < 1 && (B = 1), P.value = k(E).format(B), O();\n      }\n      H[0].onclick = _.bind(function() {\n        Z(-1 * _.config.duration_step);\n      }, this), H[1].onclick = _.bind(function() {\n        Z(1 * _.config.duration_step);\n      }, this), M[0].onchange = O, M[1].onchange = O, M[2].onchange = O, M[3] && (M[3].onchange = O), P.onkeydown = _.bind(function(Y) {\n        var B;\n        return (B = (Y = Y || window.event).charCode || Y.keyCode || Y.which) == _.constants.KEY_CODES.DOWN ? (Z(-1 * _.config.duration_step), !1) : B == _.constants.KEY_CODES.UP ? (Z(1 * _.config.duration_step), !1) : void window.setTimeout(O, 1);\n      }, this), P.onchange = _.bind(O, this), typeof (C = _._resolve_default_mapping(E)) == \"string\" && (C = { start_date: C }), D = T[C.start_date] || /* @__PURE__ */ new Date(), A = T[C.end_date] || _.calculateEndDate({ start_date: D, duration: 1, task: T }), I = Math.round(T[C.duration]) || _.calculateDuration({ start_date: D, end_date: A, task: T }), I = k(E).format(I), _.form_blocks._fill_lightbox_select(M, 0, D, ut, E), P.value = I, O();\n    }, p.prototype.get_value = function(x, S, T) {\n      var E = $(x, T), C = w(x, T), D = _.calculateEndDate({ start_date: E, duration: C, task: S });\n      return typeof _._resolve_default_mapping(T) == \"string\" ? E : { start_date: E, end_date: D, duration: C };\n    }, p.prototype.focus = function(x) {\n      _._focus(x.getElementsByTagName(\"select\")[0]);\n    }, p;\n  }(t), l = Za(t), d = Vt(t), c = function(_) {\n    var m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    function k(w) {\n      return !w || w === _.config.constraint_types.ASAP || w === _.config.constraint_types.ALAP;\n    }\n    function $(w, x) {\n      for (var S = k(x), T = 0; T < w.length; T++) w[T].disabled = S;\n    }\n    return z(p, m), p.prototype.render = function(w) {\n      const x = w.height ? `height:${w.height}px;` : \"\";\n      let S = `<div class='gantt_cal_ltext gantt_section_${w.name}' ${x ? `style='${x}'` : \"\"}>`;\n      var T = [];\n      for (var E in _.config.constraint_types) T.push({ key: _.config.constraint_types[E], label: _.locale.labels[_.config.constraint_types[E]] });\n      return w.options = w.options || T, S += \"<span data-constraint-type-select>\" + xn.getHtmlSelect(w.options, [{ key: \"data-type\", value: \"constraint-type\" }]) + \"</span>\", S += \"<label data-constraint-time-select>\" + (_.locale.labels.constraint_date || \"Constraint date\") + \": \" + _.form_blocks.getTimePicker.call(this, w) + \"</label>\", S += \"</div>\", S;\n    }, p.prototype.set_value = function(w, x, S, T) {\n      var E = w.querySelector(\"[data-constraint-type-select] select\"), C = w.querySelectorAll(\"[data-constraint-time-select] select\"), D = T._time_format_order, A = _._resolve_default_mapping(T);\n      E._eventsInitialized || (E.addEventListener(\"change\", function(L) {\n        $(C, L.target.value);\n      }), E._eventsInitialized = !0);\n      var I = S[A.constraint_date] || /* @__PURE__ */ new Date();\n      _.form_blocks._fill_lightbox_select(C, 0, I, D, T);\n      var M = S[A.constraint_type] || _.getConstraintType(S);\n      E.value = M, $(C, M);\n    }, p.prototype.get_value = function(w, x, S) {\n      var T = w.querySelector(\"[data-constraint-type-select] select\"), E = w.querySelectorAll(\"[data-constraint-time-select] select\"), C = T.value, D = null;\n      return k(C) || (D = _.form_blocks.getTimePickerValue(E, S)), { constraint_type: C, constraint_date: D };\n    }, p.prototype.focus = function(w) {\n      _._focus(w.querySelector(\"select\"));\n    }, p;\n  }(t), u = function(_) {\n    const m = Vt(_);\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    return z(p, m), p.prototype.render = function(k) {\n      var $ = _.config.types, w = _.locale.labels, x = [], S = k.filter || function(C, D) {\n        return !$.placeholder || D !== $.placeholder;\n      };\n      for (var T in $) !S(T, $[T]) == 0 && x.push({ key: $[T], label: w[\"type_\" + T] });\n      k.options = x;\n      var E = k.onchange;\n      return k.onchange = function() {\n        _._lightbox_current_type = this.value, _.changeLightboxType(this.value), typeof E == \"function\" && E.apply(this, arguments);\n      }, m.prototype.render.apply(this, arguments);\n    }, p;\n  }(t), h = function(_) {\n    var m = ct();\n    function p() {\n      return m.apply(this, arguments) || this;\n    }\n    function k(S) {\n      return S.formatter || new Nt();\n    }\n    function $(S, T, E, C) {\n      const D = \"<div class='gantt_time_selects'>\" + _.form_blocks.getTimePicker.call(_, C) + \"</div>\";\n      let A = \" \" + _.locale.labels[_.config.duration_unit + \"s\"] + \" \";\n      const I = C.single_date ? \" style='display:none'\" : \"\", M = C.readonly ? \" disabled='disabled'\" : \"\", L = _._waiAria.lightboxDurationInputAttrString(C), P = _.locale.labels.baselines_remove_button;\n      let H = \"gantt_duration_value\";\n      C.formatter && (A = \"\", H += \" gantt_duration_value_formatted\");\n      const V = \"<div class='gantt_duration' \" + I + \"><div class='gantt_duration_inputs'><input type='button' class='gantt_duration_dec' value='−'\" + M + \"><input type='text' value='5days' class='\" + H + \"'\" + M + \" \" + L + \"><input type='button' class='gantt_duration_inc' value='+'\" + M + \"></div><div class='gantt_duration_end_date'>\" + A + \"<span></span></div></div></div>\", ut = `<div><div class='baseline_delete_button gantt_custom_button'>${P}</div></div>`, O = document.createElement(\"div\");\n      O.className = \"gantt_section_time gantt_section_duration\", O.setAttribute(\"data-baseline-id\", T.id), O.innerHTML = D + V + ut + \"<br>\", S.appendChild(O);\n      var Z, Y, B, ht = O.getElementsByTagName(\"select\"), St = O.getElementsByTagName(\"input\"), Tt = St[1], Se = [St[0], St[2]], wn = O.getElementsByTagName(\"span\")[0], Sn = C._time_format_order;\n      function _t() {\n        var dt = w.call(_, O, C), U = x.call(_, O, C), Tn = _.calculateEndDate({ start_date: dt, duration: U, task: E }), En = _.templates.task_end_date || _.templates.task_date;\n        wn.innerHTML = En(Tn);\n      }\n      function Rt(dt) {\n        var U = Tt.value;\n        U = k(C).parse(U), window.isNaN(U) && (U = 0), (U += dt) < 1 && (U = 1), Tt.value = k(C).format(U), _t();\n      }\n      O.querySelector(\".baseline_delete_button\").onclick = function(dt) {\n        const U = O.parentNode;\n        O.innerHTML = \"\", O.remove(), U.innerHTML === \"\" && (U.innerHTML = _.locale.labels.baselines_section_placeholder);\n      }, Se[0].onclick = _.bind(function() {\n        Rt(-1 * _.config.duration_step);\n      }, _), Se[1].onclick = _.bind(function() {\n        Rt(1 * _.config.duration_step);\n      }, _), ht[0].onchange = _t, ht[1].onchange = _t, ht[2].onchange = _t, ht[3] && (ht[3].onchange = _t), Tt.onkeydown = _.bind(function(dt) {\n        var U;\n        return (U = (dt = dt || window.event).charCode || dt.keyCode || dt.which) == _.constants.KEY_CODES.DOWN ? (Rt(-1 * _.config.duration_step), !1) : U == _.constants.KEY_CODES.UP ? (Rt(1 * _.config.duration_step), !1) : void window.setTimeout(_t, 1);\n      }, _), Tt.onchange = _.bind(_t, _), _._resolve_default_mapping(C), Z = T.start_date || /* @__PURE__ */ new Date(), Y = T.end_date || _.calculateEndDate({ start_date: Z, duration: 1, task: E }), B = _.calculateDuration({ start_date: Z, end_date: Y, task: E }), B = k(C).format(B), _.form_blocks._fill_lightbox_select(ht, 0, Z, Sn, C), Tt.value = B, _t();\n    }\n    function w(S, T) {\n      var E = S.getElementsByTagName(\"select\"), C = T._time_format_order, D = 0, A = 0;\n      if (_.defined(C[3])) {\n        var I = E[C[3]], M = parseInt(I.value, 10);\n        isNaN(M) && I.hasAttribute(\"data-value\") && (M = parseInt(I.getAttribute(\"data-value\"), 10)), D = Math.floor(M / 60), A = M % 60;\n      }\n      return new Date(E[C[2]].value, E[C[1]].value, E[C[0]].value, D, A);\n    }\n    function x(S, T) {\n      var E = S.getElementsByTagName(\"input\")[1];\n      return (E = k(T).parse(E.value)) && !window.isNaN(E) || (E = 1), E < 0 && (E *= -1), E;\n    }\n    return z(p, m), p.prototype.render = function(S) {\n      return `<div style='height: ${S.height || 100}px; padding-top:0px; font-size:inherit;' class='gantt_section_baselines'></div>`;\n    }, p.prototype.set_value = function(S, T, E, C) {\n      E.baselines ? (S.innerHTML = \"\", E.baselines.forEach((D) => {\n        $(S, D, E, C);\n      })) : S.innerHTML = _.locale.labels.baselines_section_placeholder;\n    }, p.prototype.get_value = function(S, T, E) {\n      const C = [];\n      return S.querySelectorAll(\"[data-baseline-id]\").forEach((D) => {\n        const A = D.dataset.baselineId;\n        let I, M = _.getDatastore(\"baselines\").getItem(A);\n        I = M ? _.copy(M) : { id: _.uid(), task_id: T.id, text: \"Baseline 1\" }, I.start_date = w(D, E), I.duration = x(D, E), I.end_date = _.calculateEndDate({ start_date: I.start_date, duration: I.duration, task: T }), C.push(I);\n      }), C;\n    }, p.prototype.button_click = function(S, T, E, C) {\n      if (_.callEvent(\"onSectionButton\", [_._lightbox_id, E]) !== !1 && (T.closest(\".gantt_custom_button.gantt_remove_baselines\") && (C.innerHTML = _.locale.labels.baselines_section_placeholder), T.closest(\".gantt_custom_button.gantt_add_baselines\"))) {\n        C.innerHTML == _.locale.labels.baselines_section_placeholder && (C.innerHTML = \"\");\n        const D = _.getTask(_._lightbox_id);\n        $(C, { id: _.uid(), task_id: D.id, text: \"Baseline 1\", start_date: D.start_date, end_date: D.end_date }, D, _._get_typed_lightbox_config()[S]);\n      }\n    }, p.prototype.focus = function(S) {\n      _._focus(S.getElementsByTagName(\"select\")[0]);\n    }, p;\n  }(t);\n  t._lightbox_methods = {}, t._lightbox_template = \"<div class='gantt_cal_ltitle'><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='gantt_title'></span></div><div class='gantt_cal_larea'></div>\", t._lightbox_template = `<div class='gantt_cal_ltitle'><div class=\"dhx_cal_ltitle_descr\"><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='dhx_title'></span>\n</div>\n<div class=\"gantt_cal_ltitle_controls\">\n\t<a class=\"gantt_cal_ltitle_close_btn dhx_gantt_icon dhx_gantt_icon_close\"></a>\n\n</div></div><div class='gantt_cal_larea'></div>`, t._lightbox_root = t.$root, t.$services.getService(\"state\").registerProvider(\"lightbox\", function() {\n    return { lightbox: t._lightbox_id };\n  }), t.showLightbox = function(_) {\n    var m = this.getTask(_);\n    if (this.callEvent(\"onBeforeLightbox\", [_])) {\n      var p = this.getLightbox(this.getTaskType(m.type));\n      this.showCover(p), this._fill_lightbox(_, p), this._setLbPosition(p), this._waiAria.lightboxVisibleAttr(p), this.callEvent(\"onLightbox\", [_]);\n    } else t.isTaskExists(_) && t.getTask(_).$new && this.$data.tasksStore._updateOrder();\n  }, t._get_timepicker_step = function() {\n    if (this.config.round_dnd_dates) {\n      var _;\n      if (function(p) {\n        var k = p.$ui.getView(\"timeline\");\n        return !(!k || !k.isVisible());\n      }(this)) {\n        var m = t.getScale();\n        _ = jt(m.unit) * m.step / 60;\n      }\n      return (!_ || _ >= 1440) && (_ = this.config.time_step), _;\n    }\n    return this.config.time_step;\n  }, t.getLabel = function(_, m) {\n    for (var p = this._get_typed_lightbox_config(), k = 0; k < p.length; k++) if (p[k].map_to == _) {\n      for (var $ = p[k].options, w = 0; w < $.length; w++) if ($[w].key == m) return $[w].label;\n    }\n    return \"\";\n  }, t.updateCollection = function(_, m) {\n    m = m.slice(0);\n    var p = t.serverList(_);\n    if (!p) return !1;\n    p.splice(0, p.length), p.push.apply(p, m || []), t.resetLightbox();\n  }, t.getLightboxType = function() {\n    return this.getTaskType(this._lightbox_type);\n  }, t.getLightbox = function(_) {\n    var m, p, k, $, w, x = \"\";\n    if (function() {\n      const T = t.config.csp === !0, E = !!window.Sfdc || !!window.$A || window.Aura || \"$shadowResolver$\" in document.body;\n      t._lightbox_root = T || E ? t.$root : document.body;\n    }(), _ === void 0 && (_ = this.getLightboxType()), !this._lightbox || this.getLightboxType() != this.getTaskType(_)) {\n      this._lightbox_type = this.getTaskType(_), m = document.createElement(\"div\"), x = \"gantt_cal_light\", p = this._is_lightbox_timepicker(), t.config.wide_form && (x += \" gantt_cal_light_wide\"), p && (x += \" gantt_cal_light_full\"), m.className = x, m.style.visibility = \"hidden\", k = this._lightbox_template, k += \"<div class='gantt_cal_lcontrols'>\", k += y(this.config.buttons_left), k += \"<div class='gantt_cal_lcontrols_push_right'></div>\", k += y(this.config.buttons_right), k += \"</div>\", m.innerHTML = k, t._waiAria.lightboxAttr(m), t.config.drag_lightbox && (m.firstChild.onmousedown = t._ready_to_dnd, m.firstChild.ontouchstart = function(T) {\n        t._ready_to_dnd(T.touches[0]);\n      }, m.firstChild.onselectstart = function() {\n        return !1;\n      }, m.firstChild.style.cursor = \"pointer\", t._init_dnd_events()), this._lightbox && this.resetLightbox(), g(), this._cover.insertBefore(m, this._cover.firstChild), this._lightbox = m, $ = this._get_typed_lightbox_config(_), k = this._render_sections($);\n      var S = (w = m.querySelector(\"div.gantt_cal_larea\")).style.overflow;\n      w.style.overflow = \"hidden\", w.innerHTML = k, function(T) {\n        var E, C, D, A, I, M;\n        for (M = 0; M < T.length; M++) E = T[M], D = t._lightbox_root.querySelector(\"#\" + E.id), E.id && D && (C = D.querySelector(\"label\"), (A = D.nextSibling) && (I = A.querySelector(\"input, select, textarea\")) && (I.id = I.id || \"input_\" + t.uid(), E.inputId = I.id, C.setAttribute(\"for\", E.inputId)));\n      }($), w.style.overflow = S, this._init_lightbox_events(this), m.style.display = \"none\", m.style.visibility = \"visible\";\n    }\n    return this._lightbox;\n  }, t._render_sections = function(_) {\n    for (var m = \"\", p = 0; p < _.length; p++) {\n      var k = this.form_blocks[_[p].type];\n      if (k) {\n        _[p].id = \"area_\" + this.uid();\n        var $ = _[p].hidden ? \" style='display:none'\" : \"\", w = \"\";\n        _[p].button && (w = \"<div class='gantt_custom_button' data-index='\" + p + \"'><div class='gantt_custom_button_\" + _[p].button + \"'></div><div class='gantt_custom_button_label'>\" + this.locale.labels[\"button_\" + _[p].button] + \"</div></div>\"), _[p].type == \"baselines\" && (w = \"<div class='gantt_custom_button gantt_remove_baselines' data-index='\" + p + \"'><div class='gantt_custom_button_delete_baselines'></div><div class='gantt_custom_button_label'>\" + this.locale.labels.baselines_remove_all_button + \"</div></div><div class='gantt_custom_button gantt_add_baselines' data-index='\" + p + \"'><div class='gantt_custom_button_add_baseline'></div><div class='gantt_custom_button_label'>\" + this.locale.labels.baselines_add_button + \"</div></div>\"), this.config.wide_form && (m += \"<div class='gantt_wrap_section' \" + $ + \">\"), m += \"<div id='\" + _[p].id + \"' class='gantt_cal_lsection'><label>\" + w + this.locale.labels[\"section_\" + _[p].name] + \"</label></div>\" + k.render.call(this, _[p]), m += \"</div>\";\n      }\n    }\n    return m;\n  }, t._center_lightbox = function(_) {\n    t._setLbPosition(_);\n  }, t._setLbPosition = function(_) {\n    if (!_) return;\n    const m = t._lightbox_root || t.$root;\n    _.style.top = Math.max(m.offsetHeight / 2 - _.offsetHeight / 2, 0) + \"px\", _.style.left = Math.max(m.offsetWidth / 2 - _.offsetWidth / 2, 0) + \"px\";\n  }, t.showCover = function(_) {\n    _ && (_.style.display = \"block\", this._setLbPosition(_)), g(), this._cover.style.display = \"\";\n  };\n  const g = function() {\n    t._cover || (t._cover = document.createElement(\"div\"), t._cover.className = \"gantt_cal_cover\", t._cover.style.display = \"none\", t.event(t._cover, \"mousemove\", t._move_while_dnd), t.event(t._cover, \"mouseup\", t._finish_dnd), (t._lightbox_root || t.$root).appendChild(t._cover));\n  };\n  function f(_) {\n    for (var m in this.config.types) if (this.config.types[m] == _) return m;\n    return \"task\";\n  }\n  function y(_, m) {\n    var p, k, $ = \"\";\n    for (k = 0; k < _.length; k++) p = t.config._migrate_buttons[_[k]] ? t.config._migrate_buttons[_[k]] : _[k], $ += \"<div \" + t._waiAria.lightboxButtonAttrString(p) + \" class='gantt_btn_set gantt_left_btn_set \" + p + \"_set'><div dhx_button='1' data-dhx-button='1' class='\" + p + \"'></div><div>\" + t.locale.labels[p] + \"</div></div>\";\n    return $;\n  }\n  function v(_) {\n    var m, p;\n    return _.time_format ? _.time_format : (p = [\"%d\", \"%m\", \"%Y\"], jt((m = t.getScale()) ? m.unit : t.config.duration_unit) < jt(\"day\") && p.push(\"%H:%i\"), p);\n  }\n  function b(_, m, p) {\n    var k, $, w, x, S, T, E = \"\";\n    switch (p.timeFormat[m]) {\n      case \"%Y\":\n        for (_._time_format_order[2] = m, _._time_format_order.size++, _.year_range && (isNaN(_.year_range) ? _.year_range.push && (w = _.year_range[0], x = _.year_range[1]) : k = _.year_range), k = k || 10, $ = $ || Math.floor(k / 2), w = w || p.date.getFullYear() - $, x = x || t.getState().max_date.getFullYear() + $, S = w; S < x; S++) E += \"<option value='\" + S + \"'>\" + S + \"</option>\";\n        break;\n      case \"%m\":\n        for (_._time_format_order[1] = m, _._time_format_order.size++, S = 0; S < 12; S++) E += \"<option value='\" + S + \"'>\" + t.locale.date.month_full[S] + \"</option>\";\n        break;\n      case \"%d\":\n        for (_._time_format_order[0] = m, _._time_format_order.size++, S = 1; S < 32; S++) E += \"<option value='\" + S + \"'>\" + S + \"</option>\";\n        break;\n      case \"%H:%i\":\n        for (_._time_format_order[3] = m, _._time_format_order.size++, S = p.first, T = p.date.getDate(), _._time_values = []; S < p.last; ) E += \"<option value='\" + S + \"'>\" + t.templates.time_picker(p.date) + \"</option>\", _._time_values.push(S), p.date.setTime(p.date.valueOf() + 60 * t._get_timepicker_step() * 1e3), S = 24 * (p.date.getDate() != T ? 1 : 0) * 60 + 60 * p.date.getHours() + p.date.getMinutes();\n    }\n    return E;\n  }\n  t._init_lightbox_events = function() {\n    t.lightbox_events = {}, t.lightbox_events.gantt_save_btn = function() {\n      t._save_lightbox();\n    }, t.lightbox_events.gantt_delete_btn = function() {\n      t._lightbox_current_type = null, t.callEvent(\"onLightboxDelete\", [t._lightbox_id]) && (t.isTaskExists(t._lightbox_id) ? t.$click.buttons.delete(t._lightbox_id) : t.hideLightbox());\n    }, t.lightbox_events.gantt_cancel_btn = function() {\n      t._cancel_lightbox();\n    }, t.lightbox_events.default = function(_, m) {\n      if (m.getAttribute(\"data-dhx-button\")) t.callEvent(\"onLightboxButton\", [m.className, m, _]);\n      else {\n        var p, k, $ = K(m);\n        if ($.indexOf(\"gantt_custom_button\") != -1) if ($.indexOf(\"gantt_custom_button_\") != -1) for (p = m.parentNode.getAttribute(\"data-index\"), k = m; k && K(k).indexOf(\"gantt_cal_lsection\") == -1; ) k = k.parentNode;\n        else p = m.getAttribute(\"data-index\"), k = m.closest(\".gantt_cal_lsection\"), m = m.firstChild;\n        var w = t._get_typed_lightbox_config();\n        p && (p *= 1, t.form_blocks[w[1 * p].type].button_click(p, m, k, k.nextSibling));\n      }\n    }, this.event(t.getLightbox(), \"click\", function(_) {\n      _.target.closest(\".gantt_cal_ltitle_close_btn\") && t._cancel_lightbox();\n      var m = kt(_), p = K(m);\n      return p || (p = K(m = m.previousSibling)), m && p && p.indexOf(\"gantt_btn_set\") === 0 && (p = K(m = m.firstChild)), !(!m || !p) && (t.defined(t.lightbox_events[m.className]) ? t.lightbox_events[m.className] : t.lightbox_events.default)(_, m);\n    }), t.getLightbox().onkeydown = function(_) {\n      var m = _ || window.event, p = _.target || _.srcElement, k = K(p).indexOf(\"gantt_btn_set\") > -1;\n      switch ((_ || m).keyCode) {\n        case t.constants.KEY_CODES.SPACE:\n          if ((_ || m).shiftKey) return;\n          k && p.click && p.click();\n          break;\n        case t.keys.edit_save:\n          if ((_ || m).shiftKey) return;\n          k && p.click ? p.click() : t._save_lightbox();\n          break;\n        case t.keys.edit_cancel:\n          t._cancel_lightbox();\n      }\n    };\n  }, t._cancel_lightbox = function() {\n    var _ = this.getLightboxValues();\n    t._lightbox_current_type = null, this.callEvent(\"onLightboxCancel\", [this._lightbox_id, _.$new]), t.isTaskExists(_.id) && _.$new && (this.silent(function() {\n      t.$data.tasksStore.removeItem(_.id), t._update_flags(_.id, null);\n    }), this.refreshData()), this.hideLightbox();\n  }, t._save_lightbox = function() {\n    var _ = this.getLightboxValues();\n    t._lightbox_current_type = null, this.callEvent(\"onLightboxSave\", [this._lightbox_id, _, !!_.$new]) && (t.$data.tasksStore._skipTaskRecalculation = \"lightbox\", _.$new ? (delete _.$new, this.addTask(_, _.parent, this.getTaskIndex(_.id))) : this.isTaskExists(_.id) && (this.mixin(this.getTask(_.id), _, !0), this.refreshTask(_.id), this.updateTask(_.id)), t.$data.tasksStore._skipTaskRecalculation = !1, this.refreshData(), this.hideLightbox());\n  }, t._resolve_default_mapping = function(_) {\n    var m = _.map_to;\n    return { time: !0, time_optional: !0, duration: !0, duration_optional: !0 }[_.type] ? _.map_to == \"auto\" ? m = { start_date: \"start_date\", end_date: \"end_date\", duration: \"duration\" } : typeof _.map_to == \"string\" && (m = { start_date: _.map_to }) : _.type === \"constraint\" && (_.map_to && typeof _.map_to != \"string\" || (m = { constraint_type: \"constraint_type\", constraint_date: \"constraint_date\" })), m;\n  }, t.getLightboxValues = function() {\n    var _ = {};\n    t.isTaskExists(this._lightbox_id) && (_ = this.mixin({}, this.getTask(this._lightbox_id)));\n    for (var m = this._get_typed_lightbox_config(), p = 0; p < m.length; p++) {\n      var k = t._lightbox_root.querySelector(\"#\" + m[p].id);\n      k = k && k.nextSibling;\n      var $ = this.form_blocks[m[p].type];\n      if ($) {\n        var w = $.get_value.call(this, k, _, m[p]), x = t._resolve_default_mapping(m[p]);\n        if (typeof x == \"string\" && x != \"auto\") _[x] = w;\n        else if (typeof x == \"object\") for (var S in x) x[S] && (_[x[S]] = w[S]);\n      }\n    }\n    return t._lightbox_current_type && (_.type = t._lightbox_current_type), _;\n  }, t.hideLightbox = function() {\n    var _ = this.getLightbox();\n    _ && (_.style.display = \"none\"), this._waiAria.lightboxHiddenAttr(_), this._lightbox_id = null, this.hideCover(_), this.resetLightbox(), this.callEvent(\"onAfterLightbox\", []);\n  }, t.hideCover = function(_) {\n    _ && (_.style.display = \"none\"), this._cover && this._cover.parentNode.removeChild(this._cover), this._cover = null;\n  }, t.resetLightbox = function() {\n    t._lightbox && !t._custom_lightbox && t._lightbox.remove(), t._lightbox = null;\n  }, t._set_lightbox_values = function(_, m) {\n    var p = _, k = m.getElementsByTagName(\"span\"), $ = [];\n    t.templates.lightbox_header ? ($.push(\"\"), $.push(t.templates.lightbox_header(p.start_date, p.end_date, p)), k[1].innerHTML = \"\", k[2].innerHTML = t.templates.lightbox_header(p.start_date, p.end_date, p)) : ($.push(this.templates.task_time(p.start_date, p.end_date, p)), $.push(String(this.templates.task_text(p.start_date, p.end_date, p) || \"\").substr(0, 70)), k[1].innerHTML = this.templates.task_time(p.start_date, p.end_date, p), k[2].innerHTML = String(this.templates.task_text(p.start_date, p.end_date, p) || \"\").substr(0, 70)), k[1].innerHTML = $[0], k[2].innerHTML = $[1], t._waiAria.lightboxHeader(m, $.join(\" \"));\n    for (var w = this._get_typed_lightbox_config(this.getLightboxType()), x = 0; x < w.length; x++) {\n      var S = w[x];\n      if (this.form_blocks[S.type]) {\n        var T = t._lightbox_root.querySelector(\"#\" + S.id).nextSibling, E = this.form_blocks[S.type], C = t._resolve_default_mapping(w[x]), D = this.defined(p[C]) ? p[C] : S.default_value;\n        E.set_value.call(t, T, D, p, S), S.focus && E.focus.call(t, T);\n      }\n    }\n    t.isTaskExists(_.id) && (t._lightbox_id = _.id);\n  }, t._fill_lightbox = function(_, m) {\n    var p = this.getTask(_);\n    this._set_lightbox_values(p, m);\n  }, t.getLightboxSection = function(_) {\n    for (var m = this._get_typed_lightbox_config(), p = 0; p < m.length && m[p].name != _; p++) ;\n    var k = m[p];\n    if (!k) return null;\n    this._lightbox || this.getLightbox();\n    var $ = t._lightbox_root.querySelector(\"#\" + k.id), w = $.nextSibling, x = { section: k, header: $, node: w, getValue: function(T) {\n      return t.form_blocks[k.type].get_value.call(t, w, T || {}, k);\n    }, setValue: function(T, E) {\n      return t.form_blocks[k.type].set_value.call(t, w, T, E || {}, k);\n    } }, S = this._lightbox_methods[\"get_\" + k.type + \"_control\"];\n    return S ? S(x) : x;\n  }, t._lightbox_methods.get_template_control = function(_) {\n    return _.control = _.node, _;\n  }, t._lightbox_methods.get_select_control = function(_) {\n    return _.control = _.node.getElementsByTagName(\"select\")[0], _;\n  }, t._lightbox_methods.get_textarea_control = function(_) {\n    return _.control = _.node.getElementsByTagName(\"textarea\")[0], _;\n  }, t._lightbox_methods.get_time_control = function(_) {\n    return _.control = _.node.getElementsByTagName(\"select\"), _;\n  }, t._init_dnd_events = function() {\n    var _ = t._lightbox_root;\n    this.event(_, \"mousemove\", t._move_while_dnd), this.event(_, \"mouseup\", t._finish_dnd), this.event(_, \"touchmove\", function(m) {\n      t._move_while_dnd(m.touches[0]);\n    }), this.event(_, \"touchend\", function(m) {\n      t._finish_dnd(m.touches[0]);\n    });\n  }, t._move_while_dnd = function(_) {\n    if (t._dnd_start_lb) {\n      document.gantt_unselectable || (t._lightbox_root.className += \" gantt_unselectable\", document.gantt_unselectable = !0);\n      var m = t.getLightbox(), p = [_.pageX, _.pageY];\n      m.style.top = t._lb_start[1] + p[1] - t._dnd_start_lb[1] + \"px\", m.style.left = t._lb_start[0] + p[0] - t._dnd_start_lb[0] + \"px\";\n    }\n  }, t._ready_to_dnd = function(_) {\n    var m = t.getLightbox();\n    t._lb_start = [m.offsetLeft, m.offsetTop], t._dnd_start_lb = [_.pageX, _.pageY];\n  }, t._finish_dnd = function() {\n    t._lb_start && (t._lb_start = t._dnd_start_lb = !1, t._lightbox_root.className = t._lightbox_root.className.replace(\" gantt_unselectable\", \"\"), document.gantt_unselectable = !1);\n  }, t._focus = function(_, m) {\n    if (_ && _.focus && !t.config.touch) try {\n      m && _.select && _.select(), _.focus();\n    } catch {\n    }\n  }, t.form_blocks = { getTimePicker: function(_, m) {\n    var p, k, $, w = \"\", x = this.config, S = { first: 0, last: 1440, date: this.date.date_part(new Date(t._min_date.valueOf())), timeFormat: v(_) };\n    for (_._time_format_order = { size: 0 }, t.config.limit_time_select && (S.first = 60 * x.first_hour, S.last = 60 * x.last_hour + 1, S.date.setHours(x.first_hour)), p = 0; p < S.timeFormat.length; p++) p > 0 && (w += \" \"), (k = b(_, p, S)) && ($ = t._waiAria.lightboxSelectAttrString(S.timeFormat[p]), w += \"<select \" + (_.readonly ? \"disabled='disabled'\" : \"\") + (m ? \" style='display:none' \" : \"\") + $ + \">\" + k + \"</select>\");\n    return w;\n  }, getTimePickerValue: function(_, m, p) {\n    var k, $ = m._time_format_order, w = 0, x = 0, S = p || 0;\n    return t.defined($[3]) && (k = parseInt(_[$[3] + S].value, 10), w = Math.floor(k / 60), x = k % 60), new Date(_[$[2] + S].value, _[$[1] + S].value, _[$[0] + S].value, w, x);\n  }, _fill_lightbox_select: function(_, m, p, k) {\n    if (_[m + k[0]].value = p.getDate(), _[m + k[1]].value = p.getMonth(), _[m + k[2]].value = p.getFullYear(), t.defined(k[3])) {\n      var $ = 60 * p.getHours() + p.getMinutes();\n      $ = Math.round($ / t._get_timepicker_step()) * t._get_timepicker_step();\n      var w = _[m + k[3]];\n      w.value = $, w.setAttribute(\"data-value\", $);\n    }\n  }, template: new e(), textarea: new n(), select: new a(), time: new i(), duration: new o(), parent: new l(), radio: new s(), checkbox: new r(), resources: new d(), constraint: new c(), baselines: new h(), typeselect: new u() }, t._is_lightbox_timepicker = function() {\n    for (var _ = this._get_typed_lightbox_config(), m = 0; m < _.length; m++) if (_[m].name == \"time\" && _[m].type == \"time\") return !0;\n    return !1;\n  }, t._simple_confirm = function(_, m, p, k) {\n    if (!_) return p();\n    var $ = { text: _ };\n    m && ($.title = m), k && ($.ok = k), p && ($.callback = function(w) {\n      w && p();\n    }), t.confirm($);\n  }, t._get_typed_lightbox_config = function(_) {\n    _ === void 0 && (_ = this.getLightboxType());\n    var m = f.call(this, _);\n    return t.config.lightbox[m + \"_sections\"] ? t.config.lightbox[m + \"_sections\"] : t.config.lightbox.sections;\n  }, t._silent_redraw_lightbox = function(_) {\n    var m = this.getLightboxType();\n    if (this.getState().lightbox) {\n      var p = this.getState().lightbox, k = this.getLightboxValues(), $ = this.copy(this.getTask(p));\n      this.resetLightbox();\n      var w = this.mixin($, k, !0), x = this.getLightbox(_ || void 0);\n      this._set_lightbox_values(w, x), this.showCover(x);\n    } else this.resetLightbox(), this.getLightbox(_ || void 0);\n    this.callEvent(\"onLightboxChange\", [m, this.getLightboxType()]);\n  };\n}\nfunction tr(t) {\n  if (!pt.isNode) {\n    t.utils = { arrayFind: Ln, dom: rn };\n    var e = $e();\n    t.event = e.attach, t.eventRemove = e.detach, t._eventRemoveAll = e.detachAll, t._createDomEventScope = e.extend, N(t, la(t));\n    var n = Va.init(t);\n    t.$ui = n.factory, t.$ui.layers = n.render, t.$mouseEvents = n.mouseEvents, t.$services.setService(\"mouseEvents\", function() {\n      return t.$mouseEvents;\n    }), t.mixin(t, n.layersApi), function(i) {\n      delete i.addTaskLayer, delete i.addLinkLayer;\n    }(t), t.$services.setService(\"layers\", function() {\n      return n.layersService;\n    }), t.mixin(t, /* @__PURE__ */ function() {\n      function i(u) {\n        return u.$ui.getView(\"timeline\");\n      }\n      function a(u) {\n        return u.$ui.getView(\"grid\");\n      }\n      function r(u) {\n        var h = i(u);\n        if (h && !h.$config.hidden) return h;\n        var g = a(u);\n        return g && !g.$config.hidden ? g : null;\n      }\n      function s(u) {\n        var h = null, g = !1;\n        return [\".gantt_drag_marker.gantt_grid_resize_area\", \".gantt_drag_marker .gantt_row.gantt_row_task\", \".gantt_drag_marker.gantt_grid_dnd_marker\"].forEach(function(f) {\n          g = g || !!document.querySelector(f);\n        }), (h = g ? a(u) : r(u)) ? l(u, h, \"scrollY\") : null;\n      }\n      function o(u) {\n        var h = r(u);\n        return h && h.id != \"grid\" ? l(u, h, \"scrollX\") : null;\n      }\n      function l(u, h, g) {\n        var f = h.$config[g];\n        return u.$ui.getView(f);\n      }\n      var d = \"DEFAULT_VALUE\";\n      function c(u, h, g, f) {\n        var y = u(this);\n        return y && y.isVisible() ? y[h].apply(y, g) : f ? f() : d;\n      }\n      return { getColumnIndex: function(u) {\n        var h = c.call(this, a, \"getColumnIndex\", [u]);\n        return h === d ? 0 : h;\n      }, dateFromPos: function(u) {\n        var h = c.call(this, i, \"dateFromPos\", Array.prototype.slice.call(arguments));\n        return h === d ? this.getState().min_date : h;\n      }, posFromDate: function(u) {\n        var h = c.call(this, i, \"posFromDate\", [u]);\n        return h === d ? 0 : h;\n      }, getRowTop: function(u) {\n        var h = this, g = c.call(h, i, \"getRowTop\", [u], function() {\n          return c.call(h, a, \"getRowTop\", [u]);\n        });\n        return g === d ? 0 : g;\n      }, getTaskTop: function(u) {\n        var h = this, g = c.call(h, i, \"getItemTop\", [u], function() {\n          return c.call(h, a, \"getItemTop\", [u]);\n        });\n        return g === d ? 0 : g;\n      }, getTaskPosition: function(u, h, g) {\n        var f = c.call(this, i, \"getItemPosition\", [u, h, g]);\n        return f === d ? { left: 0, top: this.getTaskTop(u.id), height: this.getTaskBarHeight(u.id), width: 0 } : f;\n      }, getTaskBarHeight: function(u, h) {\n        var g = this, f = c.call(g, i, \"getBarHeight\", [u, h], function() {\n          return c.call(g, a, \"getItemHeight\", [u]);\n        });\n        return f === d ? 0 : f;\n      }, getTaskHeight: function(u) {\n        var h = this, g = c.call(h, i, \"getItemHeight\", [u], function() {\n          return c.call(h, a, \"getItemHeight\", [u]);\n        });\n        return g === d ? 0 : g;\n      }, columnIndexByDate: function(u) {\n        var h = c.call(this, i, \"columnIndexByDate\", [u]);\n        return h === d ? 0 : h;\n      }, roundTaskDates: function() {\n        c.call(this, i, \"roundTaskDates\", []);\n      }, getScale: function() {\n        var u = c.call(this, i, \"getScale\", []);\n        return u === d ? null : u;\n      }, getTaskNode: function(u) {\n        var h = i(this);\n        if (h && h.isVisible()) {\n          var g = h._taskRenderer.rendered[u];\n          if (!g) {\n            var f = h.$config.item_attribute;\n            g = h.$task_bars.querySelector(\"[\" + f + \"='\" + u + \"']\");\n          }\n          return g || null;\n        }\n        return null;\n      }, getLinkNode: function(u) {\n        var h = i(this);\n        return h.isVisible() ? h._linkRenderer.rendered[u] : null;\n      }, scrollTo: function(u, h) {\n        var g = s(this), f = o(this), y = { position: 0 }, v = { position: 0 };\n        g && (v = g.getScrollState()), f && (y = f.getScrollState());\n        var b = f && 1 * u == u, _ = g && 1 * h == h;\n        if (b && _) for (var m = g._getLinkedViews(), p = f._getLinkedViews(), k = [], $ = 0; $ < m.length; $++) for (var w = 0; w < p.length; w++) m[$].$config.id && p[w].$config.id && m[$].$config.id === p[w].$config.id && k.push(m[$].$config.id);\n        b && (k && k.forEach((function(T) {\n          this.$ui.getView(T).$config.$skipSmartRenderOnScroll = !0;\n        }).bind(this)), f.scroll(u), k && k.forEach((function(T) {\n          this.$ui.getView(T).$config.$skipSmartRenderOnScroll = !1;\n        }).bind(this))), _ && g.scroll(h);\n        var x = { position: 0 }, S = { position: 0 };\n        g && (x = g.getScrollState()), f && (S = f.getScrollState()), this.callEvent(\"onGanttScroll\", [y.position, v.position, S.position, x.position]);\n      }, showDate: function(u) {\n        var h = this.posFromDate(u), g = Math.max(h - this.config.task_scroll_offset, 0);\n        this.scrollTo(g);\n      }, showTask: function(u) {\n        var h = this.getTaskPosition(this.getTask(u)), g = h.left;\n        this.config.rtl && (g = h.left + h.width);\n        var f, y = Math.max(g - this.config.task_scroll_offset, 0), v = this._scroll_state().y;\n        f = v ? h.top - (v - this.getTaskBarHeight(u)) / 2 : h.top, this.scrollTo(y, f);\n        var b = a(this), _ = i(this);\n        b && _ && b.$config.scrollY != _.$config.scrollY && l(this, b, \"scrollY\").scrollTo(null, f);\n      }, _scroll_state: function() {\n        var u = { x: !1, y: !1, x_pos: 0, y_pos: 0, scroll_size: this.config.scroll_size + 1, x_inner: 0, y_inner: 0 }, h = s(this), g = o(this);\n        if (g) {\n          var f = g.getScrollState();\n          f.visible && (u.x = f.size, u.x_inner = f.scrollSize), u.x_pos = f.position || 0;\n        }\n        if (h) {\n          var y = h.getScrollState();\n          y.visible && (u.y = y.size, u.y_inner = y.scrollSize), u.y_pos = y.position || 0;\n        }\n        return u;\n      }, getScrollState: function() {\n        var u = this._scroll_state();\n        return { x: u.x_pos, y: u.y_pos, inner_width: u.x, inner_height: u.y, width: u.x_inner, height: u.y_inner };\n      }, getLayoutView: function(u) {\n        return this.$ui.getView(u);\n      }, scrollLayoutCell: function(u, h, g) {\n        const f = this.$ui.getView(u);\n        if (!f) return !1;\n        if (h !== null) {\n          const y = this.$ui.getView(f.$config.scrollX);\n          y && y.scrollTo(h, null);\n        }\n        if (g !== null) {\n          const y = this.$ui.getView(f.$config.scrollY);\n          y && y.scrollTo(null, g);\n        }\n      } };\n    }()), function(i) {\n      i.resetSkin || (i.resetSkin = function() {\n        this.skin = \"\", se(!0, this);\n      }, i.skins = {}, i.attachEvent(\"onGanttLayoutReady\", function() {\n        se(!1, this), r();\n      })), i._addThemeClass = function() {\n        document.documentElement.setAttribute(\"data-gantt-theme\", i.skin);\n      }, i.setSkin = function(s) {\n        this.skin = s, i._addThemeClass(), r(), i.$root && (se(!0, i), this.render());\n      };\n      let a = null;\n      function r() {\n        const s = i.$root;\n        a && clearInterval(a), s && (a = setInterval(() => {\n          const o = getComputedStyle(s).getPropertyValue(\"--dhx-gantt-theme\");\n          o && o !== i.skin && i.setSkin(o);\n        }, 100));\n      }\n      i.attachEvent(\"onDestroy\", function() {\n        clearInterval(a);\n      });\n    }(t), function(i) {\n      i.skins.skyblue = { config: { grid_width: 370, row_height: 27, bar_height_padding: 4, scale_height: 27, link_line_width: 1, link_arrow_size: 8, link_radius: 2, lightbox_additional_height: 75 }, _second_column_width: 95, _third_column_width: 80 };\n    }(t), function(i) {\n      i.skins.dark = { config: { grid_width: 390, row_height: 36, scale_height: 36, link_line_width: 2, link_arrow_size: 12, bar_height_padding: 9, lightbox_additional_height: 75 }, _second_column_width: 100, _third_column_width: 70 };\n    }(t), function(i) {\n      i.skins.meadow = { config: { grid_width: 380, row_height: 27, scale_height: 30, link_line_width: 2, link_arrow_size: 10, bar_height_padding: 4, lightbox_additional_height: 72 }, _second_column_width: 95, _third_column_width: 80 };\n    }(t), function(i) {\n      i.skins.terrace = { config: { grid_width: 390, row_height: 36, scale_height: 36, link_line_width: 2, link_arrow_size: 12, bar_height_padding: 9, lightbox_additional_height: 75 }, _second_column_width: 100, _third_column_width: 70 };\n    }(t), function(i) {\n      i.skins.broadway = { config: { grid_width: 390, row_height: 35, scale_height: 35, link_line_width: 1, link_arrow_size: 9, bar_height_padding: 4, lightbox_additional_height: 86 }, _second_column_width: 100, _third_column_width: 80, _lightbox_template: \"<div class='gantt_cal_ltitle'><span class='gantt_mark'>&nbsp;</span><span class='gantt_time'></span><span class='gantt_title'></span><div class='gantt_cancel_btn'></div></div><div class='gantt_cal_larea'></div>\", _config_buttons_left: {}, _config_buttons_right: { gantt_delete_btn: \"icon_delete\", gantt_save_btn: \"icon_save\" } };\n    }(t), function(i) {\n      i.skins.material = { config: { grid_width: 411, row_height: 34, scale_height: 36, link_line_width: 2, link_arrow_size: 12, bar_height_padding: 9, lightbox_additional_height: 80 }, _second_column_width: 110, _third_column_width: 75, _redefine_lightbox_buttons: { buttons_left: [\"dhx_delete_btn\"], buttons_right: [\"dhx_cancel_btn\", \"dhx_save_btn\"] } }, i.attachEvent(\"onAfterTaskDrag\", function(a) {\n        var r = i.getTaskNode(a);\n        r && (r.className += \" gantt_drag_animation\", setTimeout(function() {\n          var s = r.className.indexOf(\" gantt_drag_animation\");\n          s > -1 && (r.className = r.className.slice(0, s));\n        }, 200));\n      });\n    }(t), function(i) {\n      i.skins.contrast_black = { config: { grid_width: 390, row_height: 35, scale_height: 35, link_line_width: 2, link_arrow_size: 12, lightbox_additional_height: 75 }, _second_column_width: 100, _third_column_width: 80 };\n    }(t), function(i) {\n      i.skins.contrast_white = { config: { grid_width: 390, row_height: 35, scale_height: 35, link_line_width: 2, link_arrow_size: 12, lightbox_additional_height: 75 }, _second_column_width: 100, _third_column_width: 80 };\n    }(t), function(i) {\n      i.ext || (i.ext = {});\n      for (var a = [Ua, qa, Ga], r = 0; r < a.length; r++) a[r] && a[r](i);\n      i.ext.zoom = new Ka(i);\n    }(t), Xa(t), Qa(t), function(i) {\n      i._extend_to_optional = function(a) {\n        var r = a, s = { render: r.render, focus: r.focus, set_value: function(o, l, d, c) {\n          var u = i._resolve_default_mapping(c);\n          if (!d[u.start_date] || u.start_date == \"start_date\" && this._isAllowedUnscheduledTask(d)) {\n            s.disable(o, c);\n            var h = {};\n            for (var g in u) h[u[g]] = d[g];\n            return r.set_value.call(i, o, l, h, c);\n          }\n          return s.enable(o, c), r.set_value.call(i, o, l, d, c);\n        }, get_value: function(o, l, d) {\n          return d.disabled ? { start_date: null } : r.get_value.call(i, o, l, d);\n        }, update_block: function(o, l) {\n          if (i.callEvent(\"onSectionToggle\", [i._lightbox_id, l]), o.style.display = l.disabled ? \"none\" : \"\", l.button) {\n            var d = o.previousSibling.querySelector(\".gantt_custom_button_label\"), c = i.locale.labels, u = l.disabled ? c[l.name + \"_enable_button\"] : c[l.name + \"_disable_button\"];\n            d.innerHTML = u;\n          }\n        }, disable: function(o, l) {\n          l.disabled = !0, s.update_block(o, l);\n        }, enable: function(o, l) {\n          l.disabled = !1, s.update_block(o, l);\n        }, button_click: function(o, l, d, c) {\n          if (i.callEvent(\"onSectionButton\", [i._lightbox_id, d]) !== !1) {\n            var u = i._get_typed_lightbox_config()[o];\n            u.disabled ? s.enable(c, u) : s.disable(c, u);\n          }\n        } };\n        return s;\n      }, i.form_blocks.duration_optional = i._extend_to_optional(i.form_blocks.duration), i.form_blocks.time_optional = i._extend_to_optional(i.form_blocks.time);\n    }(t), function(i) {\n      var a = new RegExp(`<(?:.|\n)*?>`, \"gm\"), r = new RegExp(\" +\", \"gm\");\n      function s(c) {\n        return (c + \"\").replace(a, \" \").replace(r, \" \");\n      }\n      var o = new RegExp(\"'\", \"gm\");\n      function l(c) {\n        return (c + \"\").replace(o, \"&#39;\");\n      }\n      for (var d in i._waiAria = { getAttributeString: function(c) {\n        var u = [\" \"];\n        for (var h in c) {\n          var g = l(s(c[h]));\n          u.push(h + \"='\" + g + \"'\");\n        }\n        return u.push(\" \"), u.join(\" \");\n      }, getTimelineCellAttr: function(c) {\n        return i._waiAria.getAttributeString({ \"aria-label\": c });\n      }, _taskCommonAttr: function(c, u) {\n        c.start_date && c.end_date && (u.setAttribute(\"aria-label\", s(i.templates.tooltip_text(c.start_date, c.end_date, c))), c.$dataprocessor_class && u.setAttribute(\"aria-busy\", !0));\n      }, setTaskBarAttr: function(c, u) {\n        this._taskCommonAttr(c, u), u.setAttribute(\"role\", \"img\"), !i.isReadonly(c) && i.config.drag_move && (c.id != i.getState(\"tasksDnd\").drag_id ? u.setAttribute(\"aria-grabbed\", !1) : u.setAttribute(\"aria-grabbed\", !0));\n      }, taskRowAttr: function(c, u) {\n        this._taskCommonAttr(c, u), !i.isReadonly(c) && i.config.order_branch && u.setAttribute(\"aria-grabbed\", !1), u.setAttribute(\"role\", \"row\"), u.setAttribute(\"aria-selected\", i.isSelectedTask(c.id) ? \"true\" : \"false\"), u.setAttribute(\"aria-level\", c.$level + 1 || 1), i.hasChild(c.id) && u.setAttribute(\"aria-expanded\", c.$open ? \"true\" : \"false\");\n      }, linkAttr: function(c, u) {\n        var h = i.config.links, g = c.type == h.finish_to_start || c.type == h.start_to_start, f = c.type == h.start_to_start || c.type == h.start_to_finish, y = i.locale.labels.link + \" \" + i.templates.drag_link(c.source, f, c.target, g);\n        u.setAttribute(\"role\", \"img\"), u.setAttribute(\"aria-label\", s(y)), i.isReadonly(c) && u.setAttribute(\"aria-readonly\", !0);\n      }, gridSeparatorAttr: function(c) {\n        c.setAttribute(\"role\", \"columnheader\");\n      }, rowResizerAttr: function(c) {\n        c.setAttribute(\"role\", \"row\");\n      }, lightboxHiddenAttr: function(c) {\n        c.setAttribute(\"aria-hidden\", \"true\");\n      }, lightboxVisibleAttr: function(c) {\n        c.setAttribute(\"aria-hidden\", \"false\");\n      }, lightboxAttr: function(c) {\n        c.setAttribute(\"role\", \"dialog\"), c.setAttribute(\"aria-hidden\", \"true\"), c.firstChild.setAttribute(\"role\", \"heading\"), c.firstChild.setAttribute(\"aria-level\", \"1\");\n      }, lightboxButtonAttrString: function(c) {\n        return this.getAttributeString({ role: \"button\", \"aria-label\": i.locale.labels[c], tabindex: \"0\" });\n      }, lightboxHeader: function(c, u) {\n        c.setAttribute(\"aria-label\", u);\n      }, lightboxSelectAttrString: function(c) {\n        var u = \"\";\n        switch (c) {\n          case \"%Y\":\n            u = i.locale.labels.years;\n            break;\n          case \"%m\":\n            u = i.locale.labels.months;\n            break;\n          case \"%d\":\n            u = i.locale.labels.days;\n            break;\n          case \"%H:%i\":\n            u = i.locale.labels.hours + i.locale.labels.minutes;\n        }\n        return i._waiAria.getAttributeString({ \"aria-label\": u });\n      }, lightboxDurationInputAttrString: function(c) {\n        return this.getAttributeString({ \"aria-label\": i.locale.labels.column_duration, \"aria-valuemin\": \"0\", role: \"spinbutton\" });\n      }, inlineEditorAttr: function(c) {\n        c.setAttribute(\"role\", \"row\");\n      }, gridAttrString: function() {\n        return [\" role='treegrid'\", i.config.multiselect ? \"aria-multiselectable='true'\" : \"aria-multiselectable='false'\", \" \"].join(\" \");\n      }, gridScaleRowAttrString: function() {\n        return \"role='row'\";\n      }, gridScaleCellAttrString: function(c, u) {\n        var h = \"\";\n        if (c.name == \"add\") h = this.getAttributeString({ role: \"columnheader\", \"aria-label\": i.locale.labels.new_task });\n        else {\n          var g = { role: \"columnheader\", \"aria-label\": u };\n          i._sort && i._sort.name == c.name && (i._sort.direction == \"asc\" ? g[\"aria-sort\"] = \"ascending\" : g[\"aria-sort\"] = \"descending\"), h = this.getAttributeString(g);\n        }\n        return h;\n      }, gridDataAttrString: function() {\n        return \"role='rowgroup'\";\n      }, reorderMarkerAttr: function(c) {\n        c.setAttribute(\"role\", \"grid\"), c.firstChild.removeAttribute(\"aria-level\"), c.firstChild.setAttribute(\"aria-grabbed\", \"true\");\n      }, gridCellAttrString: function(c, u, h) {\n        var g = { role: \"gridcell\", \"aria-label\": u };\n        return c.editor && !i.isReadonly(h) || (g[\"aria-readonly\"] = !0), this.getAttributeString(g);\n      }, gridAddButtonAttrString: function(c) {\n        return this.getAttributeString({ role: \"button\", \"aria-label\": i.locale.labels.new_task });\n      }, messageButtonAttrString: function(c) {\n        return \"tabindex='0' role='button' aria-label='\" + c + \"'\";\n      }, messageInfoAttr: function(c) {\n        c.setAttribute(\"role\", \"alert\");\n      }, messageModalAttr: function(c, u) {\n        c.setAttribute(\"role\", \"dialog\"), u && c.setAttribute(\"aria-labelledby\", u);\n      }, quickInfoAttr: function(c) {\n        c.setAttribute(\"role\", \"dialog\");\n      }, quickInfoHeaderAttrString: function() {\n        return \" role='heading' aria-level='1' \";\n      }, quickInfoHeader: function(c, u) {\n        c.setAttribute(\"aria-label\", u);\n      }, quickInfoButtonAttrString: function(c) {\n        return i._waiAria.getAttributeString({ role: \"button\", \"aria-label\": c, tabindex: \"0\" });\n      }, tooltipAttr: function(c) {\n        c.setAttribute(\"role\", \"tooltip\");\n      }, tooltipVisibleAttr: function(c) {\n        c.setAttribute(\"aria-hidden\", \"false\");\n      }, tooltipHiddenAttr: function(c) {\n        c.setAttribute(\"aria-hidden\", \"true\");\n      } }, i._waiAria) i._waiAria[d] = /* @__PURE__ */ function(c) {\n        return function() {\n          return i.config.wai_aria_attributes ? c.apply(this, arguments) : \"\";\n        };\n      }(i._waiAria[d]);\n    }(t), t.locate = function(i) {\n      var a = kt(i);\n      if (lt(a, \".gantt_task_row\")) return null;\n      var r = arguments[1] || this.config.task_attribute, s = tt(a, r);\n      return s ? s.getAttribute(r) : null;\n    }, t._locate_css = function(i, a, r) {\n      return ft(i, a, r);\n    }, t._locateHTML = function(i, a) {\n      return tt(i, a || this.config.task_attribute);\n    };\n  }\n  t.attachEvent(\"onParse\", function() {\n    j(t) || t.attachEvent(\"onGanttRender\", function() {\n      if (t.config.initial_scroll) {\n        var i = t.getTaskByIndex(0), a = i ? i.id : t.config.root_id;\n        t.isTaskExists(a) && t.$task && t.utils.dom.isChildOf(t.$task, t.$container) && t.showTask(a);\n      }\n    }, { once: !0 });\n  }), t.attachEvent(\"onBeforeGanttReady\", function() {\n    this.config.scroll_size || (this.config.scroll_size = Xe() || 15), j(t) || (this._eventRemoveAll(), this.$mouseEvents.reset(), this.resetLightbox());\n  }), t.attachEvent(\"onGanttReady\", function() {\n    !j(t) && t.config.rtl && t.$layout.getCellsByType(\"viewCell\").forEach(function(i) {\n      var a = i.$config.scrollX;\n      if (a) {\n        var r = t.$ui.getView(a);\n        r && r.scrollTo(r.$config.scrollSize, 0);\n      }\n    });\n  }), t.attachEvent(\"onGanttReady\", function() {\n    if (!j(t)) {\n      var i = t.plugins(), a = { auto_scheduling: t.autoSchedule, click_drag: t.ext.clickDrag, critical_path: t.isCriticalTask, drag_timeline: t.ext.dragTimeline, export_api: t.exportToPDF, fullscreen: t.ext.fullscreen, grouping: t.groupBy, keyboard_navigation: t.ext.keyboardNavigation, marker: t.addMarker, multiselect: t.eachSelectedTask, overlay: t.ext.overlay, quick_info: t.templates.quick_info_content, tooltip: t.ext.tooltips, undo: t.undo };\n      for (let r in a) a[r] && !i[r] && console.warn(`You connected the '${r}' extension via an obsolete file. \nTo fix it, you need to remove the obsolete file and connect the extension via the plugins method: https://docs.dhtmlx.com/gantt/api__gantt_plugins.html`);\n    }\n  });\n}\nconst er = ot.gantt = function(t) {\n  var e = oa(t);\n  return e.env.isNode || (tr(e), function(n) {\n    n.load = function(i, a, r) {\n      this._load_url = i, this.assert(arguments.length, \"Invalid load arguments\");\n      var s = \"json\", o = null;\n      return arguments.length >= 3 ? (s = a, o = r) : typeof arguments[1] == \"string\" ? s = arguments[1] : typeof arguments[1] == \"function\" && (o = arguments[1]), this._load_type = s, this.callEvent(\"onLoadStart\", [i, s]), this.ajax.get(i, n.bind(function(l) {\n        this.on_load(l, s), this.callEvent(\"onLoadEnd\", [i, s]), typeof o == \"function\" && o.call(this);\n      }, this));\n    };\n  }(e)), e;\n}(Vn);\nexport {\n  er as default,\n  er as gantt\n};\n//# sourceMappingURL=dhtmlxgantt.es.js.map\n"],"sourceRoot":""}