{"version":3,"sources":["webpack:///webpack/bootstrap 4c8282ad6cebb6e052ef","webpack:///external \"girder_lib\"","webpack:///delegated ./node_modules/pug-runtime/index.js from dll-reference girder_lib","webpack:///delegated ./node_modules/underscore/modules/index-all.js from dll-reference girder_lib","webpack:///./~/@girder/jobs/JobStatus.js","webpack:///delegated ./src/views/View.js from dll-reference girder_lib","webpack:///./~/@girder/jobs/models/JobModel.js","webpack:///delegated ./src/events.js from dll-reference girder_lib","webpack:///./~/@girder/jobs/collections/JobCollection.js","webpack:///./~/@girder/jobs/views/CheckBoxMenu.js","webpack:///./~/@girder/jobs/views/JobDetailsWidget.js","webpack:///./~/@girder/jobs/views/JobListWidget.js","webpack:///delegated ./src/auth.js from dll-reference girder_lib","webpack:///delegated ./src/misc.js from dll-reference girder_lib","webpack:///delegated ./src/utilities/PluginUtils.js from dll-reference girder_lib","webpack:///delegated ./node_modules/jquery/dist/jquery.js from dll-reference girder_lib","webpack:///delegated ./src/rest.js from dll-reference girder_lib","webpack:///delegated ./src/utilities/EventStream.js from dll-reference girder_lib","webpack:///delegated ./src/router.js from dll-reference girder_lib","webpack:///./~/@girder/jobs/main.js","webpack:///./~/@girder/jobs/~/vega-lib/build/vega.js","webpack:///./src/pluginUtils.js","webpack:///./~/@girder/jobs/collections/index.js","webpack:///./~/@girder/jobs/index.js","webpack:///./~/@girder/jobs/models/index.js","webpack:///./~/@girder/jobs/routes.js","webpack:///./~/@girder/jobs/views/AdminView.js","webpack:///./~/@girder/jobs/views/HeaderUserView.js","webpack:///./~/@girder/jobs/views/JobGraphWidget.js","webpack:///./~/@girder/jobs/views/index.js","webpack:///./~/@girder/jobs/views/timeChartConfig.js","webpack:///./~/@girder/jobs/views/timingHistoryChartConfig.js","webpack:///./~/@girder/jobs/templates/adminViewMenuItem.pug","webpack:///./~/@girder/jobs/templates/headerUserViewMenu.pug","webpack:///./~/@girder/jobs/templates/jobCheckBoxContent.pug","webpack:///./~/@girder/jobs/templates/jobCheckBoxMenu.pug","webpack:///./~/@girder/jobs/templates/jobDetailsWidget.pug","webpack:///./~/@girder/jobs/templates/jobList.pug","webpack:///./~/@girder/jobs/templates/jobListWidget.pug","webpack:///./~/@girder/jobs/templates/jobsGraphWidget.pug","webpack:///./~/@girder/jobs/stylesheets/jobDetailsWidget.styl","webpack:///./~/@girder/jobs/stylesheets/jobListWidget.styl","webpack:///delegated ./src/views/body/AdminView.js from dll-reference girder_lib","webpack:///delegated ./src/views/layout/HeaderUserView.js from dll-reference girder_lib","webpack:///delegated ./node_modules/moment/moment.js from dll-reference girder_lib","webpack:///delegated ./src/views/widgets/TimelineWidget.js from dll-reference girder_lib","webpack:///delegated ./src/collections/Collection.js from dll-reference girder_lib","webpack:///delegated ./node_modules/node-libs-browser/node_modules/buffer/index.js from dll-reference girder_lib","webpack:///delegated ./src/models/AccessControlledModel.js from dll-reference girder_lib","webpack:///delegated ./src/views/widgets/PaginateWidget.js from dll-reference girder_lib","webpack:///delegated ./src/constants.js from dll-reference girder_lib","webpack:///canvas (ignored)","webpack:///canvas-prebuilt (ignored)","webpack:///fs (ignored)"],"names":["JobStatus","_map","text","status","icon","color","textColor","isCancelable","_","constant","finished","classAffix","toLowerCase","replace","registerStatus","each","info","name","value","statusInfo","has","getAll","values","INACTIVE","QUEUED","RUNNING","SUCCESS","ERROR","CANCELED","JobModel","AccessControlledModel","extend","resourceName","calculateSegmentation","segments","timestamps","get","length","startTime","push","start","end","time","elapsed","_calculateElapsed","concat","map","slice","stamp","i","Date","JobCollection","Collection","model","CheckBoxMenu","View","events","e","stopPropagation","items","target","id","checked","trigger","newCheckedState","_allItemsChecked","keys","forEach","key","initialize","params","on","_renderContent","render","$el","html","title","setItems","every","_anyItemsChecked","some","$","checkAllChecked","JobDetailsWidget","event","_cancelJob","settings","job","listenTo","eventStream","data","_id","set","container","overwrite","log","append","escape","fetch","done","renderImmediate","statusText","formatDate","DATE_SECOND","_renderTimelineWidget","tooltip","points","toISOString","endTime","TimelineWidget","el","parentView","startLabel","endLabel","jobId","url","method","error","type","timeout","fail","err","JobListWidget","cid","currentTarget","attr","collection","pageLimit","parseInt","val","closest","is","jobCheckedStates","_renderData","_cancelJobs","router","navigate","currentUser","showAllJobs","allJobsMode","columns","columnEnum","COLUMN_ALL","userId","filter","showGraphs","showPageSizeSelector","showFilters","typeFilter","statusFilter","timingFilter","reduce","obj","jobHighlightStates","jobGraphWidget","pageSizes","sortField","sortDir","SORT_DESC","_onDataChange","_fetchWithFilter","currentView","view","showHeader","showPaging","linkToJob","triggerJobClick","paginateWidget","PaginateWidget","_statusChange","_jobCreated","timingFilterWidget","typeFilterWidget","arr","statusFilterWidget","statusTextToStatusCode","result","typesFilter","types","statuses","pageSize","setElement","remove","JobGraphWidget","isEmpty","hide","show","jobs","toArray","anyJobChecked","find","allJobChecked","trySetHighlightRecord","isObject","setTimeout","JSON","stringify","Object","jobModel","results","registerPluginNamespace","pluginName","symbols","window","girder","plugins","collections","models","views","route","once","AdminView","call","HeaderUserView","prepend","href","yScale","update","off","prototype","openDetailView","item","itemName","open","datum","config","timingHistoryChartConfig","width","Math","min","size","numberOfJobs","floor","vegaData","_prepareDataForChart","widthForEachJob","axes","encode","labels","opacity","height","minval","apply","d","undefined","scales","allStatus","domain","range","pluck","runtime","VegaView","renderer","hover","run","addEventListener","positiveTimings","clone","timeChartConfig","splice","format","Inactive","Queued","allRecords","at","currentStatus","updated","records","segment","record","unshift","autosize","transform","expr","groupby","fields","ops","as","field","scale","orient","angle","align","offset","signals","pos","marks","from","enter","x","y","strokeWidth","stroke","dx","fillOpacity","shape","fill","cursor","signal","fontWeight","legends","fontSize","source","clamp","dy","band","y2","pug","require","template","locals","pug_html","pug_mixins","pug_interp","pug_debug_filename","pug_debug_line","pug_debug_sources","rethrow","module","exports","locals_for_with","$$obj","$$l","style","classes","join","COLUMN_ACTION_CHECKBOX","COLUMN_STATUS_ICON","COLUMN_TITLE","COLUMN_UPDATED","COLUMN_TYPE","COLUMN_STATUS","pug_index0"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;ACIA;;;AAJA;;AAEA;;AAGA;;AACA;;AAEA;;IAAYiE,I;;;;;;;AAEZ,0CAAwB,MAAxB,EAAgCA,IAAhC,E;;;;;;ACVA;AACA,CAAC,KAA4D;AAC7D;AACA,0CAA0C;AAC1C,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,qCAAqC,UAAU,EAAE;;AAEjD,gCAAgC,UAAU,EAAE;;AAE5C,+BAA+B,UAAU,EAAE;;AAE3C,kCAAkC,aAAa,EAAE;;AAEjD,iCAAiC,cAAc,EAAE;;AAEjD;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,2BAA2B;AACjD;;AAEA;AACA,sBAAsB,2BAA2B;AACjD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,sBAAsB;AACtB;;AAEA;;AAEA,WAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;;AAEA;AACA;AACA,yDAAyD,YAAY,EAAE;AACvE,KAAK;AACL;AACA;AACA;AACA,GAAG,IAAI;;AAEP;AACA;;AAEA;AACA,yCAAyC,UAAU;AACnD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,kCAAkC,EAAE;AAC3E;AACA;;AAEA;AACA,kBAAkB,WAAW;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB;;AAE/B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA;;AAEA,QAAQ,OAAO;AACf;AACA;;AAEA,QAAQ,OAAO;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,kBAAkB,KAAK;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,EAAE;AACb,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,EAAE;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA,+CAA+C;AAC/C;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA,8BAA8B;AAC9B;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA,KAAK;AACL;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA,KAAK;AACL;AACA,eAAe;AACf;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,oCAAoC,sBAAsB;AAC1D,qBAAqB,qBAAqB;AAC1C;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,6BAA6B,KAAK;AAClC;AACA;;AAEA;AACA,iBAAiB,oBAAoB,KAAK;AAC1C;AACA;AACA;AACA,8BAA8B,KAAK;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,iBAAiB,oBAAoB,KAAK;AAC1C;AACA;AACA;AACA;AACA,8BAA8B,KAAK;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,uCAAuC,EAAE;AAChF;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA,GAAG;AACH,aAAa,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,wBAAwB;AACnC;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,EAAE;AACb,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iCAAiC;AACpD,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA,eAAe,KAAK;AACpB,KAAK;AACL;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,OAAO,eAAe;AACtB,4DAA4D,eAAe;AAC3E,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;;AAEA,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,KAAK;;AAEf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,KAAK;AACxC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA,iDAAiD,eAAe,EAAE;AAClE,iDAAiD,gBAAgB,EAAE;AACnE,iCAAiC,eAAe,EAAE;AAClD;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB,WAAW,0BAA0B;AACrC,WAAW,oBAAoB;AAC/B;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA,iCAAiC,KAAK;AACtC;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,yEAAyE,8CAA8C;AACvH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,+DAA+D,qBAAqB,EAAE;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAiD,aAAa,kCAAkC,EAAE,EAAE;AACpG,wDAAwD,8BAA8B,EAAE;AACxF;;AAEA;AACA,6BAA6B,iDAAiD,EAAE;AAChF,0BAA0B,2CAA2C,EAAE;AACvE,8BAA8B,uDAAuD,EAAE;AACvF,sBAAsB,cAAc,aAAa,EAAE;AACnD,+BAA+B,mCAAmC,aAAa,EAAE;AACjF,iCAAiC,oBAAoB,aAAa,EAAE;AACpE,yBAAyB,YAAY,aAAa;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0DAA0D,gBAAgB,EAAE;;AAE5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,YAAY;;AAEZ;AACA,8CAA8C,IAAI,OAAO;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA,kFAAkF,OAAO;AACzF;AACA,+CAA+C,OAAO;AACtD,GAAG;AACH;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;;AAEA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C,kCAAkC;;AAEhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,oEAAoE,mCAAmC,EAAE;AACzG;AACA;AACA;AACA;AACA;AACA,oFAAoF,qBAAqB,EAAE;AAC3G;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY,yCAAyC;AACrF;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,YAAY,yCAAyC;AACrF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA,mCAAmC,eAAe;AAClD,sBAAsB,WAAW,wBAAwB,WAAW;AACpE;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,WAAW;AAC7B;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,gDAAgD,kBAAkB;;AAElE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;;AAEA;AACA,WAAW,UAAc,mBAAmB,mBAAO,CAAC,EAAI;AACxD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,4BAA4B,KAAK;AACjC;AACA,aAAa,gBAAgB;AAC7B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG,IAAI;AACP;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,mEAAmE,+BAA+B,EAAE;AAC7G;AACA;;AAEA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA,uCAAuC;AACvC,wBAAwB;AACxB,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D,OAAO;AAClE;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,OAAO;AAC3C,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA,qDAAqD;AACrD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC,uDAAuD;AACvD,gEAAgE;AAChE,oDAAoD;AACpD,6DAA6D;AAC7D,oDAAoD;AACpD,6DAA6D;AAC7D;AACA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA,uBAAuB;AACvB,0BAA0B;AAC1B,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,mEAAmE,gCAAgC,EAAE;AACrG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kCAAkC,EAAE;AACjE;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,wDAAwD,EAAE;;AAEtF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8DAA8D,OAAO;AACrE,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,cAAc;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gEAAgE;AAChE,0CAA0C;AAC1C,+DAA+D;AAC/D,4CAA4C;AAC5C;AACA;;AAEA;;AAEA;AACA,yBAAyB,uBAAuB;AAChD,yBAAyB,0EAA0E,EAAE;;AAErG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mDAAmD;AACnD,SAAS;AACT,mDAAmD;AACnD;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8BAA8B;AAC3D,6BAA6B,0CAA0C,EAAE;AACzE;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,KAAK;AACL;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,KAAK;AACL;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,KAAK;AACL;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;;AAEA,YAAY;AACZ;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2BAA2B;;AAE3B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH,2CAA2C,KAAK;AAChD;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,mBAAmB;AACnC;AACA,sBAAsB,iCAAiC,EAAE;AACzD,uBAAuB,wCAAwC,EAAE;AACjE;AACA,uBAAuB,+CAA+C,EAAE;AACxE;AACA;;AAEA,cAAc;;AAEd;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,WAAW,qBAAqB;AAChC;AACA,WAAW,mCAAmC;AAC9C;AACA;AACA;AACA,WAAW,8BAA8B;AACzC;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,WAAW,QAAQ;AACnB;AACA,WAAW,QAAQ;AACnB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;;AAErB;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,yBAAyB,YAAY;AACrC;AACA;AACA;AACA,oDAAoD,eAAe;AACnE,yCAAyC,eAAe;AACxD;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,WAAW;AACrC;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,YAAY,MAAM;AAClB;AACA;AACA;AACA,6CAA6C;AAC7C,8BAA8B,gBAAgB,EAAE;AAChD;AACA;;AAEA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,mBAAmB;AAC9B;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,yBAAyB,EAAE;AACvD;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,aAAa,EAAE;AACvD;AACA;;AAEA;AACA;AACA,kCAAkC,qBAAqB,EAAE;AACzD,sBAAsB,mCAAmC;AACzD;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,WAAW,mBAAmB;AAC9B,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,KAAK;AACjC;AACA;;AAEA;AACA,uCAAuC;AACvC,+BAA+B,aAAa;AAC5C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB,EAAE;AAC7D;AACA;AACA,qCAAqC,sBAAsB,EAAE;AAC7D;AACA;AACA,qCAAqC,sBAAsB,EAAE;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,KAAK;AACf;AACA;AACA,GAAG;AACH,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,uBAAuB,EAAE;AAC7D;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,uBAAuB,UAAU;;AAElE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,2DAA2D,iBAAiB,EAAE;AAC9E;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gEAAgE;AAChE;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS,6BAA6B,EAAE,cAAc,eAAe;AACrE;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC,EAAE;AAC9D,4BAA4B,gCAAgC,EAAE;AAC9D;;AAEA;AACA;;AAEA;AACA,OAAO,cAAc,EAAE,cAAc,eAAe;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,uCAAuC,UAAU;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,gBAAgB,EAAE;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA,WAAW,QAAQ;AACnB;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,wCAAwC,0BAA0B,EAAE;AACpE;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB;AACtB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,cAAc,wBAAwB;AACtC,kCAAkC,eAAe;AACjD,OAAO,eAAe;AACtB,4DAA4D,eAAe;AAC3E,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,wBAAwB;AACtC,gDAAgD,gBAAgB;AAChE,WAAW,MAAM;AACjB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,UAAU,KAAK;AACf;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iDAAiD,WAAW;AAC5D;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB;AACA,GAAG;AACH;AACA;AACA,yBAAyB;AACzB,iCAAiC,6BAA6B;AAC9D,iCAAiC,sDAAsD;AACvF;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wBAAwB;AACxB,2CAA2C;AAC3C,2CAA2C;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,8BAA8B;AAC9B,6CAA6C;AAC7C,iDAAiD;AACjD;AACA;AACA,GAAG;AACH;AACA;AACA,8BAA8B;AAC9B,6CAA6C;AAC7C,iDAAiD;AACjD;AACA;AACA,GAAG;AACH;AACA;AACA,2BAA2B;AAC3B,+DAA+D;AAC/D,6CAA6C;AAC7C;AACA;AACA,GAAG;AACH;AACA;AACA,2BAA2B;AAC3B,+DAA+D;AAC/D,6CAA6C;AAC7C;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,+BAA+B;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,iDAAiD;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,gBAAgB,kBAAkB;AACrE,8BAA8B,aAAa;AAC3C,yBAAyB,eAAe,SAAS,kBAAkB,cAAc;AACjF,yBAAyB,eAAe,SAAS,kBAAkB,cAAc;AACjF,kCAAkC;;AAElC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,+CAA+C;AAC/C,GAAG;AACH,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,cAAc,EAAE;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,+BAA+B,yBAAyB;AACxD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,cAAc;;AAEvD;AACA,2BAA2B,KAAK;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,KAAK;AAC7B,kBAAkB,KAAK;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4CAA4C;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;;AAEf;AACA;AACA,aAAa,KAAK,OAAO,0CAA0C;AACnE,aAAa,KAAK,OAAO,aAAa;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,kBAAkB,cAAc,OAAO;AACvC;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA,WAAW,KAAK;AAChB;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC,WAAW,2BAA2B;AACtC,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;;AAEA,kBAAkB;AAClB,kBAAkB;AAClB,iBAAiB;AACjB,iBAAiB;AACjB,oBAAoB;AACpB,sBAAsB;;AAEtB,kBAAkB;AAClB,oBAAoB;;AAEpB,sBAAsB;AACtB,0BAA0B;AAC1B,sBAAsB;AACtB,oBAAoB;;AAEpB,sBAAsB;AACtB,uBAAuB;AACvB;;AAEA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,KAAK,oDAAoD;AACzD,KAAK,4EAA4E;AACjF,KAAK,iEAAiE;AACtE,KAAK,8DAA8D;AACnE,KAAK,qDAAqD;AAC1D,KAAK,uDAAuD;AAC5D,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2CAA2C,aAAa,EAAE;AAC1D,GAAG;AACH;AACA,wCAAwC,aAAa,EAAE;AACvD,wCAAwC,aAAa,EAAE;AACvD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC,WAAW,EAAE;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;;AAEA,WAAW,KAAK;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH,YAAY;AACZ;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,KAAK;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;;AAEZ,0BAA0B,KAAK;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA,2BAA2B,KAAK;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,KAAK;AAC9B;AACA,mBAAmB;AACnB;;AAEA,yBAAyB,KAAK;AAC9B;AACA;AACA,mBAAmB;AACnB;;AAEA,8BAA8B;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,sDAAsD,UAAU;AAChE,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,qDAAqD;AAC1D,KAAK,qCAAqC;AAC1C,KAAK,qDAAqD;AAC1D,KAAK,kDAAkD;AACvD,KAAK,uEAAuE;AAC5E,KAAK,mFAAmF;AACxF,KAAK,mCAAmC;AACxC,KAAK,mDAAmD;AACxD,KAAK,oDAAoD;AACzD,KAAK,qDAAqD;AAC1D,KAAK,mCAAmC;AACxC,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA,sBAAsB,aAAa,EAAE;AACrC,yBAAyB,sBAAsB,EAAE;AACjD,sBAAsB,oBAAoB,EAAE;AAC5C;AACA;AACA,wCAAwC,sBAAsB,EAAE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,sBAAsB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,eAAe;AAC9B;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,KAAK,qDAAqD;AAC1D,KAAK,4FAA4F;AACjG,KAAK,6DAA6D;AAClE,KAAK,uDAAuD;AAC5D,KAAK;AACL;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C,4CAA4C;AAC5C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,KAAK;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,kCAAkC,EAAE;AACrE,iCAAiC,gBAAgB,EAAE;;AAEnD;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,iCAAiC;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,yBAAyB;AACpC;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,KAAK,mCAAmC;AACxC,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,yBAAyB,EAAE;AACpE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA,OAAO,iDAAiD;AACxD,OAAO;AACP;AACA,GAAG;AACH;AACA,YAAY,sBAAsB;AAClC;AACA,OAAO,gDAAgD;AACvD,OAAO;AACP;AACA,GAAG;AACH;AACA,YAAY,kBAAkB;AAC9B;AACA,OAAO,qDAAqD;AAC5D,OAAO,iCAAiC;AACxC,OAAO;AACP;AACA;AACA;;AAEA;AACA,UAAU,sBAAsB;AAChC;AACA,KAAK;AACL,+BAA+B;AAC/B,KAAK;AACL;AACA;;AAEA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,KAAK,iEAAiE;AACtE,KAAK,oDAAoD;AACzD,KAAK;AACL,gCAAgC;AAChC,KAAK;AACL,+CAA+C;AAC/C,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,+CAA+C;AACpE;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qCAAqC;AAChD;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA,yBAAyB;AACzB,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA,6BAA6B,KAAK;AAClC;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uDAAuD,iBAAiB,EAAE;AAC1E;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,KAAK,qEAAqE;AAC1E,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,yCAAyC,aAAa,EAAE;AACxD,+CAA+C,8BAA8B,EAAE;AAC/E;;AAEA,UAAU,UAAU;AACpB;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,KAAK,qEAAqE;AAC1E,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,mDAAmD;AACxD,KAAK,mDAAmD;AACxD,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,6BAA6B;AACxC;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B,WAAW,2BAA2B;AACtC;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA,KAAK,qDAAqD;AAC1D,KAAK,mDAAmD;AACxD,KAAK,mCAAmC;AACxC,KAAK,oDAAoD;AACzD,KAAK;AACL,2DAA2D;AAC3D,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,uBAAuB,UAAU;AACjC,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,KAAK;AACjC;AACA;AACA;;AAEA;AACA,aAAa,KAAK;AAClB;AACA;;AAEA,WAAW;AACX,+BAA+B,KAAK;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB,aAAa,EAAE;AACxC;AACA;AACA,eAAe;AACf,eAAe;AACf;;AAEA,iCAAiC,iBAAiB,EAAE;;AAEpD,0BAA0B,KAAK;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,oDAAoD;AACzD,KAAK,iEAAiE;AACtE,KAAK,4EAA4E;AACjF,KAAK,8DAA8D;AACnE,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,aAAa,EAAE;AAC1D,GAAG;AACH;AACA,wCAAwC,aAAa,EAAE;AACvD,wCAAwC,aAAa,EAAE;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,KAAK;AAC9B;AACA,mBAAmB;AACnB;;AAEA,yBAAyB,KAAK;AAC9B;AACA,mBAAmB;AACnB;;AAEA,8BAA8B;AAC9B;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,IAAI;AACf,WAAW,0BAA0B;AACrC,WAAW,cAAc;AACzB,WAAW,EAAE;AACb;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK;AACL,SAAS,kDAAkD;AAC3D,SAAS;AACT,SAAS;AACT,KAAK,mDAAmD;AACxD,KAAK,qEAAqE;AAC1E,KAAK,gDAAgD;AACrD,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,KAAK;AACnC;AACA,gCAAgC,KAAK;AACrC,sBAAsB,KAAK;AAC3B;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,kCAAkC,iCAAiC,EAAE;AACrE;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,KAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,yCAAyC,uBAAuB,EAAE;AAClE;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uDAAuD;AACvD;;AAEA;AACA;AACA;AACA;AACA,WAAW,2BAA2B;AACtC;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,KAAK,oDAAoD;AACzD,KAAK,qDAAqD;AAC1D,KAAK,qDAAqD;AAC1D,KAAK,8EAA8E;AACnF,KAAK,kDAAkD;AACvD,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,WAAW,EAAE;AAChD,oCAAoC,wCAAwC,EAAE;AAC9E,oCAAoC,eAAe,EAAE;AACrD;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA,iBAAiB,yCAAyC,EAAE;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qCAAqC;AAChD;AACA,WAAW,gCAAgC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B;;AAE3B;AACA;AACA,gDAAgD,WAAW,EAAE;AAC7D,GAAG;;AAEH;AACA;AACA,gDAAgD,mBAAmB,EAAE;AACrE,GAAG;;AAEH;AACA;AACA,gDAAgD,WAAW,EAAE;AAC7D,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,0BAA0B;AACrC;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mCAAmC;AAClD;AACA,KAAK,mDAAmD;AACxD,KAAK,8DAA8D;AACnE;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,kCAAkC;AAC5D;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,mCAAmC;AACnC;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAI;;AAEX;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC,+BAA+B,EAAE;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,mCAAmC,KAAK;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,yBAAyB,EAAE;AACjE;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA,KAAK,sDAAsD;AAC3D,KAAK,qDAAqD;AAC1D,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA,GAAG;AACH,wCAAwC,2BAA2B,EAAE;AACrE;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B,WAAW,sBAAsB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,oBAAoB;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA,wBAAwB,UAAU,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,wBAAwB,WAAW,EAAE;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,wBAAwB,UAAU,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iCAAiC;AAC1D;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,yBAAyB,+BAA+B;AACxD;AACA,GAAG;AACH;AACA;AACA,yBAAyB,mCAAmC;AAC5D;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,cAAc;AACd;AACA;AACA;;AAEA;AACA,kDAAkD,eAAe,EAAE;AACnE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,oCAAoC,UAAU,EAAE;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ;AACxB;AACA;AACA,WAAW,KAAK;AAChB;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,KAAK;AACnC,yCAAyC,KAAK;AAC9C;;AAEA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,sBAAsB;AACjC,WAAW,2BAA2B;AACtC,WAAW,cAAc;AACzB,WAAW,2BAA2B;AACtC;AACA,WAAW,SAAS;AACpB,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,oCAAoC;AACzC,KAAK,oDAAoD;AACzD,KAAK,mGAAmG;AACxG,KAAK,kEAAkE;AACvE,KAAK,iEAAiE;AACtE,KAAK,8DAA8D;AACnE,KAAK,oGAAoG;AACzG,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,8BAA8B;;AAEnD;AACA;AACA;AACA,2CAA2C,iBAAiB,EAAE;AAC9D,GAAG;AACH,wCAAwC,oBAAoB,EAAE;AAC9D,wCAAwC,iBAAiB,EAAE;AAC3D;;AAEA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6BAA6B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,eAAe,mBAAO,CAAC,EAAQ;AAC/B;AACA,CAAC;AACD;AACA;AACA,iBAAiB,mBAAO,CAAC,EAAiB;AAC1C,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0CAA0C,eAAe;AACzD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA,iCAAiC;;AAEjC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc;AACd,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,kCAAkC,YAAY,EAAE;AAChD;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,0CAA0C;AAC1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,8CAA8C;AAC9C,uDAAuD;AACvD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,8BAA8B,oFAAoF;AAClH,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;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,GAAG;AACH;AACA;AACA;AACA,8BAA8B,4BAA4B;AAC1D,8BAA8B,4BAA4B;AAC1D,8BAA8B,4BAA4B,4FAA4F;AACtJ,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B,oFAAoF,0EAA0E;AAC5L,8BAA8B;AAC9B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uDAAuD;AACvD,gDAAgD;AAChD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B,4BAA4B;AAC1D,8BAA8B;AAC9B,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;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,GAAG;AACH;AACA;AACA;AACA,8BAA8B,4BAA4B;AAC1D,8BAA8B,kDAAkD;AAChF,8BAA8B,4BAA4B;AAC1D,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B,kGAAkG;AAChI,8BAA8B;AAC9B,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uDAAuD;AACvD,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,8BAA8B;AAC9B,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;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,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,4BAA4B;AAC1D,8BAA8B,kDAAkD;AAChF,8BAA8B,4BAA4B;AAC1D,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B,kGAAkG;AAChI,8BAA8B;AAC9B,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uDAAuD;AACvD,8DAA8D;AAC9D;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,iDAAiD;AACjD;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,8BAA8B,0DAA0D;AACxF,gEAAgE;AAChE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,4BAA4B,EAAE;AACxD,yBAAyB,2BAA2B,EAAE;AACtD,0BAA0B,4BAA4B,EAAE;AACxD,iDAAiD,mDAAmD;AACpG;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,WAAW;AACxB;AACA,aAAa,OAAO;AACpB;AACA,iBAAiB,QAAQ;AACzB;AACA,aAAa,WAAW;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,KAAK;AACnC,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,mCAAmC,KAAK;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,gCAAgC,OAAO;AACvC;AACA;;AAEA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB,UAAU;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,oBAAoB;AACzC,qBAAqB,oBAAoB;AACzC,qBAAqB,wBAAwB;AAC7C,qBAAqB,uBAAuB;AAC5C,qBAAqB,yBAAyB;AAC9C,qBAAqB,0CAA0C;AAC/D,qBAAqB,2CAA2C;AAChE,qBAAqB,6BAA6B;AAClD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,8BAA8B;AACnD,qBAAqB,8BAA8B;AACnD,qBAAqB,+BAA+B;AACpD,qBAAqB,kCAAkC;AACvD,qBAAqB,2CAA2C;AAChE,uBAAuB,0CAA0C;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,sBAAsB,kBAAkB;;AAExC;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB,oBAAoB;;AAEpB;AACA,iBAAiB;AACjB,aAAa,SAAS,QAAQ;AAC9B;;AAEA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,KAAK;AACL;AACA,eAAe,aAAa;AAC5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,2BAA2B,KAAK;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;;AAEA,2BAA2B,KAAK;AAChC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;;AAEA;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B,aAAa;;AAExC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2DAA2D,UAAU;;AAErE;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,KAAK;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,0DAA0D;;AAE1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D;AAC1D,yCAAyC;;AAEzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA6B,KAAK;AAClC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,KAAK;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,uBAAuB,mBAAmB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB;AACA,WAAW,OAAO;AAClB;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB;AACA,WAAW,OAAO;AAClB;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,SAAS;AACrB;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,kBAAkB;;AAE1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA,mCAAmC,UAAU,EAAE;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,gCAAgC;AAChC,gCAAgC;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,OAAO;;AAEP;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,KAAK;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2BAA2B,KAAK;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sCAAsC,iBAAiB,EAAE;AACzD;AACA,8BAA8B;;AAE9B,oBAAoB;AACpB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,8BAA8B;AACtC;AACA;AACA;AACA,KAAK;AACL;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qCAAqC,KAAK;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA,iCAAiC,UAAU;;AAE3C;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B;;AAEA;AACA,gCAAgC;AAChC;;AAEA,qCAAqC,KAAK;AAC1C;AACA;AACA;;AAEA;AACA;AACA,yBAAyB;AACzB;AACA,KAAK;AACL;AACA,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;;AAEA;AACA;;AAEA;AACA,+BAA+B;AAC/B,8BAA8B;AAC9B,8BAA8B;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,yBAAyB,QAAQ;AACjC;AACA;;AAEA,yBAAyB,QAAQ;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,2CAA2C,kBAAkB,EAAE;AAC/D;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,yCAAyC,+BAA+B,EAAE;AAC1E;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,uBAAuB,EAAE;;AAElE;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,sBAAsB;AACjC;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD,KAAK;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,kBAAkB,EAAE;;AAErD;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,yCAAyC,kBAAkB,EAAE;;AAE7D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,+BAA+B,KAAK;AACpC;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,SAAS;AACpB;AACA;AACA,WAAW,SAAS;AACpB;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB,yBAAyB,KAAK;AAC9B;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA,GAAG;AACH,uBAAuB,SAAS;AAChC;AACA;AACA,uBAAuB,KAAK;AAC5B;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA,GAAG;AACH,aAAa,SAAS;AACtB,eAAe,KAAK;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB,0CAA0C,KAAK;AAC/C;AACA;AACA,qBAAqB,KAAK;AAC1B;AACA;AACA;AACA,GAAG;AACH,uBAAuB,SAAS;AAChC;AACA;AACA,2BAA2B,KAAK;AAChC;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA,GAAG;AACH,aAAa,SAAS;AACtB,gCAAgC,KAAK;AACrC;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,SAAS;AACpB,kBAAkB,KAAK;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;;AAEA;AACA,sBAAsB,mCAAmC;AACzD,sBAAsB,kCAAkC;;AAExD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B,KAAK;AAClC;AACA;AACA;;AAEA;AACA,sCAAsC,KAAK;AAC3C;AACA;;AAEA;AACA;AACA,aAAa,mCAAmC;;AAEhD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,KAAK;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;;AAEZ,+BAA+B,KAAK;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kCAAkC,wBAAwB,EAAE;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,EAAE;AAC5B,0BAA0B,EAAE;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,QAAQ;AACrB,QAAQ,QAAQ;;AAEhB;AACA,eAAe,QAAQ;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,2BAA2B;AAC3B;AACA;AACA,wCAAwC;AACxC,2BAA2B;AAC3B;AACA,KAAK,OAAO;AACZ;AACA,cAAc,+BAA+B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,mCAAmC,GAAG,mCAAmC;AACvF,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,gCAAgC;AAChE,cAAc,0EAA0E;AACxF,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,cAAc,yEAAyE;AACvF,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,mCAAmC,GAAG,mCAAmC;AACvF,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;;;AAIA;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;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,uCAAuC;AAC/D;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,uCAAuC;AAC/D;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA,iDAAiD,OAAO;AACxD;AACA,4BAA4B;AAC5B,qCAAqC,QAAQ;AAC7C;AACA,kCAAkC;AAClC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,6BAA6B,EAAE;AACtD,oBAAoB,kCAAkC,EAAE;AACxD,oBAAoB,eAAe,EAAE;AACrC,oBAAoB,mCAAmC,EAAE;AACzD,uBAAuB,2BAA2B,EAAE;AACpD,uBAAuB,qBAAqB,EAAE;AAC9C,uBAAuB,yBAAyB,EAAE;AAClD,oBAAoB,kCAAkC,EAAE;AACxD,uBAAuB,kCAAkC,EAAE;AAC3D;AACA;AACA,oBAAoB,iDAAiD,EAAE;AACvE,oBAAoB,mCAAmC;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,sDAAsD;;AAEtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sEAAsE;AACtE,sEAAsE;AACtE,qIAAqI;AACrI,qEAAqE;AACrE;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,4BAA4B;AACjD;AACA;;AAEA;AACA;AACA,qBAAqB,+CAA+C;AACpE,qBAAqB,4CAA4C;AACjE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,2BAA2B,EAAE;AAC3E;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,OAAO;AAC9B,gCAAgC,UAAU;AAC1C;AACA;AACA;AACA;AACA;AACA,OAAO,YAAY,OAAO;AAC1B,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,kCAAkC,EAAE;AAC9D,yBAAyB,iCAAiC;AAC1D,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,qCAAqC;AAC5D;AACA;;AAEA;AACA;AACA,wBAAwB,uCAAuC;AAC/D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oCAAoC,aAAa,EAAE;AACnD;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yBAAyB,EAAE;AACzE;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,WAAW,EAAE;AACjD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,sBAAsB,EAAE;AAC9D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,uCAAuC;AAC7D;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;;AAEA;AACA;AACA,sBAAsB,qBAAqB;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,wCAAwC,EAAE;AAChE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,YAAY,EAAE;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,2CAA2C,iBAAiB,EAAE;AAC9D;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,WAAW,OAAO;AAClB;AACA,YAAY,mBAAmB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,+CAA+C,OAAO,OAAO;;AAE7D;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA,yCAAyC;AACzC;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,EAAE;AACb;AACA,WAAW,SAAS;AACpB;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,yBAAyB;AACpC,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,2BAA2B;AACzD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB,WAAW,kCAAkC;AAC7C,WAAW,kCAAkC;AAC7C,WAAW,kCAAkC;AAC7C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mDAAmD,oBAAoB,EAAE;AACzE;AACA,wBAAwB;AACxB,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,YAAY,EAAE;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,EAAE;AACb;AACA,WAAW,SAAS;AACpB;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,qBAAqB,mBAAmB;AACxC,qBAAqB,mBAAmB;AACxC,qBAAqB,mBAAmB;AACxC,qBAAqB,mBAAmB;;AAExC;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,4DAA4D;AACjE,KAAK,4DAA4D;AACjE,KAAK,4DAA4D;AACjE,KAAK,4DAA4D;AACjE,KAAK;AACL,sDAAsD;AACtD,KAAK;AACL,oEAAoE;AACpE,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,mCAAmC;AACxC,KAAK,uDAAuD;AAC5D,KAAK,qEAAqE;AAC1E,KAAK,sDAAsD;AAC3D,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,sBAAsB;AACjC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B,WAAW,2BAA2B;AACtC,WAAW,gCAAgC;AAC3C,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,mCAAmC;AACxC,KAAK,oDAAoD;AACzD,KAAK,oCAAoC;AACzC,KAAK,iGAAiG;AACtG,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4CAA4C,KAAK;AACjD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,aAAa,EAAE;AACxC;;AAEA;AACA;AACA;AACA,GAAG;AACH,eAAe,qBAAqB,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,KAAK;AACxC;AACA,8BAA8B,KAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,+DAA+D;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,+DAA+D;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP,iEAAiE;AACjE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,WAAW,mCAAmC,GAAG,mCAAmC;AACpF,WAAW,mCAAmC,GAAG,mCAAmC;AACpF,WAAW,mCAAmC,GAAG,mCAAmC;AACpF,WAAW,mCAAmC,GAAG,mCAAmC;AACpF,WAAW,mCAAmC,GAAG,mCAAmC;AACpF,WAAW,mCAAmC,GAAG,mCAAmC;;AAEpF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA,WAAW,yBAAyB;AACpC,WAAW,yBAAyB;AACpC,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA,KAAK,iFAAiF;AACtF,KAAK,oDAAoD;AACzD,KAAK,+BAA+B;AACpC,KAAK,+BAA+B;AACpC,KAAK,uCAAuC;AAC5C,KAAK,wCAAwC;AAC7C,KAAK,oCAAoC;AACzC,KAAK,sCAAsC;AAC3C,KAAK,sDAAsD;AAC3D,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK,gEAAgE;AACrE,KAAK,qCAAqC;AAC1C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,mCAAmC;AAC1E;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,2EAA2E,QAAQ;AACnF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,yBAAyB,iCAAiC;AAC1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,qCAAqC,QAAQ;AAC7C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,aAAa,EAAE;AAC7B;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,6CAA6C;AACpD,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;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;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,mCAAmC;AACnC,4BAA4B;AAC5B,gCAAgC;AAChC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,OAAO;AAChD,kHAAkH,OAAO;AACzH;AACA,yBAAyB,yEAAyE;AAClG,gBAAgB,0EAA0E;AAC1F;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B,eAAe,EAAE,EAAE;AACpE;;AAEA;AACA;AACA,sBAAsB,2BAA2B,eAAe,EAAE,EAAE;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,yEAAyE,kCAAkC,EAAE;AAC7G,yEAAyE,kCAAkC,EAAE;AAC7G;;AAEA;AACA,8CAA8C,SAAS,8CAA8C,EAAE;AACvG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;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,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;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,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yBAAyB,yBAAyB,EAAE;AACpD,sBAAsB,sBAAsB,EAAE;AAC9C,yBAAyB,yBAAyB,EAAE;AACpD,uBAAuB,uBAAuB,EAAE;AAChD,4BAA4B,4BAA4B,EAAE;AAC1D,0BAA0B,0BAA0B;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB,sCAAsC,EAAE;AAC/F,8BAA8B,qBAAqB,sCAAsC;AACzF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,gBAAgB,EAAE;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B,YAAY,wCAAwC,EAAE;AACjF,wBAAwB,YAAY,qCAAqC,EAAE;AAC3E,2BAA2B,YAAY,wCAAwC,EAAE;AACjF,yBAAyB,YAAY,sCAAsC,EAAE;AAC7E,8BAA8B,YAAY,2CAA2C,EAAE;AACvF,4BAA4B,YAAY,yCAAyC;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB,gBAAgB;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,0DAA0D;AAC1E,UAAU,wDAAwD;AAClE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,4BAA4B;AACvC;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,6CAA6C;AAClD,KAAK,mCAAmC;AACxC,KAAK,wDAAwD;AAC7D,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,4BAA4B;AACvC;AACA,WAAW,2BAA2B;AACtC;AACA,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,+DAA+D;AACpE,KAAK,kFAAkF;AACvF,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,4BAA4B;AACvC;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,6CAA6C;AAClD,KAAK,uDAAuD;AAC5D,KAAK,wDAAwD;AAC7D,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,eAAe,EAAE;;AAEhD;AACA;;AAEA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA,KAAK;AACL,kBAAkB,6CAA6C,EAAE;AACjE,KAAK;AACL,kBAAkB,6CAA6C,EAAE;AACjE,KAAK;AACL,kBAAkB,6CAA6C,EAAE;AACjE,KAAK,+DAA+D;AACpE,KAAK,0FAA0F;AAC/F,KAAK,yFAAyF;AAC9F,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;;AAEA,iDAAiD,OAAO;AACxD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;;AAExC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD;AACnD,oDAAoD;AACpD,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;;AAEA;AACA,kDAAkD;;AAElD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0FAA0F;;AAE1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD;AACnD,oDAAoD;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,OAAO;AACzC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B,+CAA+C;AAC/C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,YAAY,gDAAgD;AAC5D;AACA,mBAAmB,OAAO;AAC1B;AACA,sCAAsC,qDAAqD;AAC3F;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,gBAAgB;AACnC;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,qCAAqC,gBAAgB;AACrD,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,OAAO;AAC3C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;AACA;;AAEA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qIAAqI,mBAAmB;;AAExJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;;AAEA;AACA;;AAEA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,cAAc;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,wDAAwD;AAC7D,KAAK,yDAAyD;AAC9D,KAAK,yDAAyD;AAC9D,KAAK,kDAAkD;AACvD,KAAK,yDAAyD;AAC9D,KAAK,wDAAwD;AAC7D,KAAK,4DAA4D;AACjE,KAAK;AACL;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA,aAAa,8CAA8C;AAC3D,aAAa;AACb;AACA,SAAS;AACT;AACA,kBAAkB,mBAAmB;AACrC;AACA,aAAa,mDAAmD;AAChE,aAAa,uDAAuD;AACpE,aAAa;AACb;AACA,SAAS;AACT;AACA,kBAAkB,iBAAiB;AACnC;AACA,aAAa,uDAAuD;AACpE,aAAa,oDAAoD;AACjE,aAAa,wDAAwD;AACrE,aAAa;AACb;AACA,SAAS;AACT;AACA,kBAAkB,gBAAgB;AAClC;AACA,aAAa,kCAAkC;AAC/C,aAAa,gCAAgC;AAC7C,aAAa,oEAAoE;AACjF,aAAa,qDAAqD;AAClE,aAAa;AACb;AACA,SAAS;AACT;AACA,kBAAkB,aAAa;AAC/B;AACA,aAAa,uDAAuD;AACpE,aAAa;AACb;AACA,SAAS;AACT;AACA,kBAAkB,aAAa;AAC/B;AACA,aAAa,uDAAuD;AACpE,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,cAAc;AACpC,KAAK;AACL;AACA,gDAAgD;AAChD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sDAAsD,KAAK;AAC3D;AACA;AACA;AACA;AACA,uDAAuD,KAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB,oBAAoB;AACzC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mDAAmD,gBAAgB,EAAE;AACrE;;AAEA;AACA;;AAEA,iCAAiC,KAAK;AACtC;AACA;AACA;;AAEA,uBAAuB,KAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,KAAK;AACnC,gCAAgC;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iCAAiC,gBAAgB,EAAE;AACnD;;;;AAIA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,kBAAkB;AAC/B,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,OAAO;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,wCAAwC;;AAE3D;AACA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,oCAAoC,KAAK,EAAE;AAC/E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gBAAgB;AAChB,aAAa;AACb,aAAa;AACb,aAAa;AACb,aAAa;AACb,gBAAgB;AAChB,aAAa;AACb;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB,OAAO;AAC9D;AACA;;AAEA;AACA,qBAAqB,8DAA8D;AACnF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,OAAO;AACpC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,2BAA2B;AACvC,YAAY,oBAAoB;AAChC;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA,KAAK,iDAAiD;AACtD,KAAK,iCAAiC;AACtC,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,8BAA8B,UAAU,UAAU,EAAE;AACpD;AACA,mCAAmC,aAAa;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,4BAA4B,6BAA6B,EAAE;;AAE3D;AACA;;AAEA;AACA,mCAAmC,KAAK;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,KAAK;AACvC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA,KAAK,mCAAmC;AACxC,KAAK,oCAAoC;AACzC,KAAK,oDAAoD;AACzD,KAAK,qDAAqD;AAC1D,KAAK,+DAA+D;AACpE,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA,KAAK,mCAAmC;AACxC,KAAK,oCAAoC;AACzC,KAAK,oDAAoD;AACzD,KAAK,uDAAuD;AAC5D,KAAK,+DAA+D;AACpE,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,oBAAoB;AAChC,YAAY,oBAAoB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,mBAAmB;AAClC;AACA,KAAK,mDAAmD;AACxD,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,8BAA8B,EAAE;AAC9D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA,KAAK,mCAAmC;AACxC,KAAK,oCAAoC;AACzC,KAAK,qFAAqF;AAC1F,KAAK,+DAA+D;AACpE,KAAK,mEAAmE;AACxE,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,oBAAoB;AAChC;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA,eAAe,iDAAiD;AAChE;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,0CAA0C,qBAAqB;AAC/D;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,KAAK;AAC/C;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA,KAAK,mCAAmC;AACxC,KAAK,oCAAoC;AACzC,KAAK;AACL,oFAAoF;AACpF,KAAK,oDAAoD;AACzD,KAAK,yDAAyD;AAC9D,KAAK,yDAAyD;AAC9D,KAAK,uDAAuD;AAC5D,KAAK,yDAAyD;AAC9D,KAAK,0DAA0D;AAC/D,KAAK,wDAAwD;AAC7D,KAAK,kEAAkE;AACvE,KAAK,uDAAuD;AAC5D,KAAK,+DAA+D;AACpE,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;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;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,gBAAgB,QAAQ;;AAEjD;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;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;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,0CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iCAAiC,4BAA4B,EAAE;AAC/D,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2CAA2C;AAC3C,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6DAA6D;;AAE7D;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,iBAAiB,OAAO;AACpC,KAAK;AACL;AACA,YAAY,eAAe,OAAO;AAClC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oDAAoD,0CAA0C,EAAE;AAChG;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,iDAAiD;AACtD,KAAK,iDAAiD;AACtD,KAAK,+DAA+D;AACpE,KAAK;AACL;AACA,kBAAkB,6CAA6C,EAAE;AACjE,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uBAAuB,wBAAwB,EAAE;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B,GAAG,6BAA6B;AACrF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,UAAU;AAC7D;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA,KAAK,+DAA+D;AACpE,KAAK,0EAA0E;AAC/E,KAAK,2EAA2E;AAChF,KAAK,4EAA4E;AACjF,KAAK,oEAAoE;AACzE,KAAK,sFAAsF;AAC3F,KAAK,iEAAiE;AACtE,KAAK,kCAAkC;AACvC,KAAK,+EAA+E;AACpF,KAAK,oDAAoD;AACzD,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4BAA4B;AACxD;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;AACA,CAAC;;AAED,oBAAoB,0BAA0B;;AAE9C,qBAAqB,2BAA2B;;AAEhD,qBAAqB,2BAA2B;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sBAAsB,aAAa,EAAE;;AAErC;AACA;AACA,KAAK;;AAEL;AACA,qDAAqD,KAAK;AAC1D;AACA;AACA;AACA;AACA,KAAK;;AAEL,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA,KAAK;;AAEL,sBAAsB,oBAAoB,EAAE;;AAE5C,sBAAsB,aAAa,EAAE;;AAErC,sBAAsB,aAAa,EAAE;;AAErC,wBAAwB,mBAAmB,EAAE;;AAE7C;AACA;AACA,KAAK;;AAEL,2BAA2B,gBAAgB,EAAE;;AAE7C,6BAA6B,iBAAiB,EAAE;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB,gBAAgB,MAAM;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,6BAA6B,MAAM;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,uBAAuB;;AAEpC;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB,KAAK;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAc,EAAE;AACzC,yBAAyB,aAAa;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,SAAS;AACjB;AACA;AACA;;AAEA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,2BAA2B;AACtC,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK,qEAAqE;AAC1E,KAAK;AACL,kBAAkB,6CAA6C;AAC/D;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,wCAAwC,iCAAiC,EAAE;;AAE3E;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,QAAQ,KAAK;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,KAAK;AACtC,oBAAoB;AACpB;AACA,KAAK,gCAAgC;AACrC;AACA,KAAK,yCAAyC;AAC9C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA,QAAQ,KAAK;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,4BAA4B,KAAK;AACjC;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,iCAAiC,OAAO,QAAQ;AAChD;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB,KAAK;AAC1B;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,GAAG;AACH,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,GAAG;AACH,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK;AACL,uEAAuE;AACvE,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,KAAK;;AAEL,GAAG,OAAO;AACV;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,mDAAmD,uBAAuB,EAAE;AAC5E;;;;AAIA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,+CAA+C,0BAA0B;AACzE;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG,GAAG,eAAe;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,GAAG;AAC/B,iCAAiC,OAAO,OAAO;AAC/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,2BAA2B,oBAAoB,EAAE;AACjD,2BAA2B,oBAAoB;AAC/C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC,KAAK;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;;AAEjD;AACA,KAAK,mBAAmB;AACxB;AACA;;AAEA;;AAEA;AACA;AACA,sCAAsC;AACtC,oCAAoC;AACpC,mCAAmC;AACnC,qCAAqC;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA,8BAA8B,oBAAoB;AAClD;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA,8BAA8B,gCAAgC;AAC9D;;AAEA;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;;AAErD;AACA,gBAAgB;AAChB;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,oBAAoB;;AAErD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA,0CAA0C,aAAa;;AAEvD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,mCAAmC;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,yBAAyB;;AAElE;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,+BAA+B,WAAW;AAC1C;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,8BAA8B,0BAA0B,EAAE;AAC1D;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,8BAA8B,uBAAuB,EAAE;AACvD;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,2CAA2C,KAAK;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,KAAK;AACL,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe;AACf,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,mBAAmB;AACnB;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,GAAG;AAC7D;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA,qBAAqB;AACrB,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,KAAK;AACL,mBAAmB;AACnB,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA,WAAW;;AAEX,kBAAkB;AAClB;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB,KAAK;AACL;AACA;;AAEA;;AAEA,iBAAiB;AACjB;AACA;AACA;;AAEA,WAAW;;AAEX;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,8BAA8B;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2DAA2D;AAC3D,2DAA2D;AAC3D;AACA;AACA;AACA;AACA,kBAAkB;AAClB,iBAAiB;AACjB;;AAEA;AACA;AACA,wBAAwB,wCAAwC;;AAEhE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,6BAA6B,eAAe,EAAE;AAC9C;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA,iBAAiB,0CAA0C;AAC3D,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB,cAAc,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,KAAK;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mBAAmB,eAAe;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,KAAK;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,WAAW,gCAAgC;AAC3C;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,IAAI,gCAAgC,qDAAqD;AACzF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mEAAmE,KAAK;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,6CAA6C;AAC3D;AACA,KAAK,IAAI;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,cAAc;AACd,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kCAAkC,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sCAAsC,SAAS,4BAA4B,EAAE;AAC7E,cAAc;;AAEd;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;;AAGH;AACA;;AAEA;AACA,gBAAgB;AAChB,iBAAiB;AACjB;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,yBAAyB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,+BAA+B,EAAE;AAC1E,qCAAqC,8BAA8B;AACnE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oCAAoC,EAAE;AACrE;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;;AAEA;AACA,iBAAiB,8BAA8B,IAAI;AACnD;;AAEA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA,aAAa;AACb;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,mCAAmC,YAAY;AAC/C;AACA;;AAEA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;;AAEA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB;AAChB,gBAAgB;AAChB;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA,sCAAsC,cAAc;AACpD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB;;AAEA;AACA,cAAc;AACd;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,+BAA+B,EAAE;AAC1D;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA,kBAAkB;AAClB,GAAG;AACH;AACA;AACA;AACA,+CAA+C;AAC/C,UAAU;AACV;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,2BAA2B,cAAc;;AAEzC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,sCAAsC,eAAe;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,sCAAsC,iBAAiB;AACvD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,sBAAsB,SAAS,qBAAqB;AACpD;AACA,KAAK;AACL,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA,eAAe,iBAAiB;AAChC,YAAY,iBAAiB;AAC7B,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yCAAyC,uCAAuC,EAAE;AAClF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,gCAAgC;AAChC,KAAK;AACL,qCAAqC;AACrC;AACA;;AAEA;AACA,qCAAqC;AACrC;;AAEA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,iCAAiC;AACjC,KAAK;AACL,sCAAsC;AACtC;AACA;;AAEA;AACA,sCAAsC;AACtC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;;AAEA;AACA,0CAA0C,WAAW;AACrD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kDAAkD;AAClD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,iBAAiB;AACjB,yCAAyC;AACzC;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA,iEAAiE;AACjE;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,kBAAkB;;AAEvC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;;AAEH,oBAAoB,UAAU;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,2CAA2C;AACtD,cAAc;AACd;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC;;AAEhC;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,eAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,cAAc,SAAS;AACvB;AACA,iBAAiB;;AAEjB;AACA,QAAQ,QAAQ,kBAAkB;AAClC,QAAQ,QAAQ,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,mCAAmC,qBAAqB,IAAI;AAC5D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,oDAAoD,eAAe;AACnE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,gCAAgC,KAAK;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA,gCAAgC,sCAAsC,EAAE;AACxE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA,wCAAwC,aAAa,OAAO;AAC5D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+CAA+C;AAC/C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,uBAAuB;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,KAAK;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C,SAAS;AACT;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gCAAgC,KAAK;AACrC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,mBAAmB;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,mBAAmB;AACpD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,+BAA+B,EAAE;AAC3D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,oCAAoC,eAAe;;AAEnD;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,kEAAkE,eAAe;AACjF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,6BAA6B,6CAA6C;AAC1E;;AAEA;AACA;AACA;AACA,iBAAiB,uBAAuB,WAAW,uBAAuB;;AAE1E;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA,iBAAiB,8BAA8B,iBAAiB;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,gBAAgB;AAC/C,6BAA6B,mBAAmB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,UAAU,QAAQ,kBAAkB;AACpC,UAAU,QAAQ,kBAAkB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,WAAW;;AAEtC;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC;AACzD,iBAAiB;;AAEjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA,cAAc,SAAS;AACvB,qCAAqC,kBAAkB;AACvD;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,SAAS;;AAET,oBAAoB;AACpB,oBAAoB,QAAQ;AAC5B,OAAO,QAAQ;;AAEf;AACA;AACA;AACA,oBAAoB;AACpB,uBAAuB;AACvB,GAAG;AACH;AACA;AACA,oBAAoB;AACpB,uBAAuB;AACvB;AACA,kBAAkB;AAClB,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,2CAA2C;AAC7E,GAAG;AACH;AACA,kCAAkC,yCAAyC;AAC3E,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,sBAAsB;AACtB;;AAEA;AACA,yBAAyB,KAAK;AAC9B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA,sBAAsB;AACtB,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB;AAChB,8BAA8B;AAC9B,GAAG;AACH,gBAAgB;AAChB,8BAA8B;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gDAAgD;AACvE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;;AAEA;AACA,cAAc,SAAS;AACvB,mCAAmC,qBAAqB,IAAI;AAC5D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB,uBAAuB;AACvB,GAAG;AACH;AACA,oBAAoB;AACpB,uBAAuB;AACvB;;AAEA;AACA;;AAEA;AACA;AACA,6BAA6B,YAAY;;AAEzC;AACA;AACA,6BAA6B,YAAY;;AAEzC;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,qBAAqB,iDAAiD;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,YAAY,KAAK,SAAS,MAAM,SAAS,EAAE;AAC3C,aAAa,SAAS,gBAAgB,WAAW,iBAAiB;AAClE,GAAG;;AAEH;AACA,iEAAiE,kBAAkB;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,+BAA+B;AACzD,2BAA2B,eAAe;AAC1C,0BAA0B,eAAe;;AAEzC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB,EAAE;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,YAAY;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0CAA0C,cAAc;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAW;AACX,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,2BAA2B;AACrD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,KAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,aAAa;AAC1C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA,sDAAsD;AACtD;AACA,SAAS;AACT;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC;AACpC,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,qBAAqB;AAC/B,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;AACA,KAAK;AACL,WAAW,uBAAuB;AAClC,WAAW,qBAAqB;AAChC,WAAW,gBAAgB;AAC3B,YAAY,uBAAuB;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;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;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;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;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,iCAAiC,EAAE;AAClE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG,qCAAqC;AACxC,GAAG,gCAAgC;AACnC,GAAG,uCAAuC;AAC1C,GAAG,oCAAoC;AACvC,GAAG,mCAAmC;AACtC,GAAG,oCAAoC;AACvC,GAAG,oCAAoC;AACvC,GAAG,oCAAoC;AACvC,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,cAAc;;AAEd;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA,GAAG;;AAEH,wBAAwB;AACxB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qDAAqD;AACrD,gDAAgD,iBAAiB,EAAE;AACnE;AACA;AACA,GAAG;AACH;AACA,kDAAkD,MAAM,EAAE;AAC1D;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;;AAEA;AACA,iDAAiD,OAAO;;AAExD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC;AACxC,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,eAAe,EAAE;AACzD,GAAG;AACH;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,mCAAmC;AAC9C;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,sBAAsB,EAAE;AAC5D,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"plugin.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dsa/static/built/\";\n\n \t__webpack_require__(18);\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 50);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4c8282ad6cebb6e052ef","module.exports = girder_lib;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"girder_lib\"\n// module id = 0\n// module chunks = 0","module.exports = (__webpack_require__(0))(0);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./node_modules/pug-runtime/index.js from dll-reference girder_lib\n// module id = 1\n// module chunks = 0","module.exports = (__webpack_require__(0))(3);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./node_modules/underscore/modules/index-all.js from dll-reference girder_lib\n// module id = 2\n// module chunks = 0","import _ from 'underscore';\n\n// The same job status enum as the server.\nvar JobStatus = {\n _map: {},\n\n text: function (status) {\n var text = status;\n if (status in this._map) {\n text = this._map[status].text;\n }\n\n return '' + text;\n },\n\n icon: function (status) {\n var icon;\n if (status in this._map) {\n icon = this._map[status].icon;\n }\n\n return icon;\n },\n\n color: function (status) {\n return this._map[status].color;\n },\n\n textColor: function (status) {\n return this._map[status].textColor;\n },\n\n isCancelable: _.constant(false),\n\n finished: function (status) {\n return this._map[status].finished;\n },\n\n /**\n * Convert this status text into a value appropriate for an HTML class name.\n */\n classAffix: function (status) {\n return this.text(status).toLowerCase().replace(/ /g, '-');\n },\n\n /**\n * Add new job statuses. The argument should be an object mapping the enum\n * symbol name to an information object for that status. The info object\n * must include a \"value\" field (its integer value), a \"text\" field, which\n * is how the status should be rendered as text, and an \"icon\" field for\n * what classes to apply to the icon for this status.\n */\n registerStatus: function (status) {\n _.each(status, function (info, name) {\n this[name] = info.value;\n\n const statusInfo = {\n text: info.text,\n icon: info.icon,\n color: info.color,\n textColor: 'white',\n finished: _.has(info, 'finished') ? info.finished : false\n };\n\n if (_.has(info, 'textColor')) {\n statusInfo.textColor = info.textColor;\n }\n\n this._map[info.value] = statusInfo;\n }, this);\n },\n\n getAll: function () {\n return _.values(this._map);\n }\n};\n\nJobStatus.registerStatus({\n INACTIVE: {\n value: 0,\n text: 'Inactive',\n icon: 'icon-pause',\n color: '#ccc',\n textColor: '#555',\n finished: false\n },\n QUEUED: {\n value: 1,\n text: 'Queued',\n icon: 'icon-ellipsis',\n color: '#dbc345',\n finished: false\n },\n RUNNING: {\n value: 2,\n text: 'Running',\n icon: 'icon-spin3 animate-spin',\n color: '#6666d5',\n finished: false\n },\n SUCCESS: {\n value: 3,\n text: 'Success',\n icon: 'icon-ok',\n color: '#53b653',\n finished: true\n },\n ERROR: {\n value: 4,\n text: 'Error',\n icon: 'icon-cancel',\n color: '#d44',\n finished: true\n },\n CANCELED: {\n value: 5,\n text: 'Canceled',\n icon: 'icon-cancel',\n color: '#545',\n finished: true\n }\n});\n\nexport default JobStatus;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/JobStatus.js","module.exports = (__webpack_require__(0))(1);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/views/View.js from dll-reference girder_lib\n// module id = 4\n// module chunks = 0","import _ from 'underscore';\n\nimport AccessControlledModel from '@girder/core/models/AccessControlledModel';\n\nimport JobStatus from '../JobStatus';\n\nvar JobModel = AccessControlledModel.extend({\n resourceName: 'job',\n\n /**\n * Based on the timestamps fields of the job to\n * calculate how long did each status take. Basically, elapsed of status n\n * equals n+1.time - n.time\n */\n calculateSegmentation: function () {\n var segments = [];\n\n const timestamps = this.get('timestamps');\n\n if (timestamps && timestamps.length) {\n const startTime = this.get('created');\n segments.push({\n start: startTime,\n end: timestamps[0].time,\n status: 'Inactive',\n elapsed: this._calculateElapsed(startTime, timestamps[0].time)\n });\n\n segments = segments.concat(_.map(timestamps.slice(0, -1), (stamp, i) => {\n return {\n start: stamp.time,\n end: timestamps[i + 1].time,\n status: JobStatus.text(stamp.status),\n elapsed: this._calculateElapsed(stamp.time, timestamps[i + 1].time)\n };\n }));\n }\n\n return segments;\n },\n\n _calculateElapsed: function (start, end) {\n return new Date(end) - new Date(start);\n }\n});\n\nexport default JobModel;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/models/JobModel.js","module.exports = (__webpack_require__(0))(5);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/events.js from dll-reference girder_lib\n// module id = 6\n// module chunks = 0","import Collection from '@girder/core/collections/Collection';\n\nimport JobModel from '../models/JobModel';\n\nvar JobCollection = Collection.extend({\n resourceName: 'job',\n model: JobModel\n});\n\nexport default JobCollection;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/collections/JobCollection.js","import _ from 'underscore';\n\nimport View from '@girder/core/views/View';\n\nimport JobCheckBoxMenuTemplate from '../templates/jobCheckBoxMenu.pug';\nimport JobCheckBoxContentTemplate from '../templates/jobCheckBoxContent.pug';\n\nvar CheckBoxMenu = View.extend({\n events: {\n 'click input.g-job-filter-checkbox': function (e) {\n e.stopPropagation();\n this.items[e.target.id] = e.target.checked;\n this.trigger('g:triggerCheckBoxMenuChanged', this.items);\n },\n // When a label wraps an input and the label is clicked,\n // there will be two events being triggered,\n // stop the first one from bubbling up to prevent unexpected behavior\n 'click label': function (e) {\n e.stopPropagation();\n },\n 'click .dropdown-menu': function (e) {\n e.stopPropagation();\n },\n 'click .g-job-checkall input': function (e) {\n e.stopPropagation();\n // If any are unchecked, set all to checked; if all are checked, set all to unchecked\n var newCheckedState = !this._allItemsChecked();\n _.keys(this.items).forEach((key) => {\n this.items[key] = newCheckedState;\n });\n this.trigger('g:triggerCheckBoxMenuChanged', this.items);\n }\n },\n\n initialize: function (params) {\n this.params = params;\n this.items = this.params.items;\n this.on('g:triggerCheckBoxMenuChanged', this._renderContent, this);\n },\n\n render: function () {\n this.$el.html(JobCheckBoxMenuTemplate({\n title: this.params.title\n }));\n this._renderContent();\n return this;\n },\n\n setItems: function (items) {\n this.items = items;\n this._renderContent();\n },\n\n _allItemsChecked: function () {\n return _.every(this.items);\n },\n\n _anyItemsChecked: function () {\n return _.some(this.items);\n },\n\n _renderContent: function () {\n this.$('.dropdown-menu').html(JobCheckBoxContentTemplate({\n items: this.items,\n checkAllChecked: this._allItemsChecked()\n }));\n }\n});\n\nexport default CheckBoxMenu;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/CheckBoxMenu.js","import _ from 'underscore';\n\nimport { restRequest } from '@girder/core/rest';\nimport TimelineWidget from '@girder/core/views/widgets/TimelineWidget';\nimport View from '@girder/core/views/View';\nimport eventStream from '@girder/core/utilities/EventStream';\nimport { formatDate, DATE_SECOND } from '@girder/core/misc';\nimport events from '@girder/core/events';\n\nimport JobDetailsWidgetTemplate from '../templates/jobDetailsWidget.pug';\nimport JobStatus from '../JobStatus';\n\nimport '../stylesheets/jobDetailsWidget.styl';\n\nvar JobDetailsWidget = View.extend({\n events: {\n 'click .g-job-cancel': function (event) {\n this._cancelJob();\n }\n },\n initialize: function (settings) {\n this.job = settings.job;\n\n this.listenTo(eventStream, 'g:event.job_status', function (event) {\n var info = event.data;\n if (info._id === this.job.id) {\n this.job.set(info);\n this.render();\n }\n });\n\n this.listenTo(eventStream, 'g:event.job_log', function (event) {\n var info = event.data;\n if (info._id === this.job.id) {\n var container = this.$('.g-job-log-container');\n if (info.overwrite) {\n this.job.set({ log: [info.text] });\n container.text(info.text);\n } else {\n this.job.get('log').push(info.text);\n container.append(_.escape(info.text));\n }\n }\n });\n\n this.listenTo(eventStream, 'g:eventStream.start', function (event) {\n const status = this.job.get('status');\n if (!JobStatus.finished(status)) {\n this.job.fetch().done(() => { this.render(); });\n }\n });\n\n if (settings.renderImmediate) {\n this.render();\n }\n },\n\n render: function () {\n var status = this.job.get('status');\n this.$el.html(JobDetailsWidgetTemplate({\n job: this.job,\n statusText: JobStatus.text(status),\n textColor: JobStatus.textColor(status),\n color: JobStatus.color(status),\n JobStatus: JobStatus,\n formatDate: formatDate,\n DATE_SECOND: DATE_SECOND,\n _: _\n }));\n\n this._renderTimelineWidget();\n\n return this;\n },\n\n _renderTimelineWidget: function () {\n var timestamps = this.job.get('timestamps');\n\n if (!timestamps || !timestamps.length) {\n return;\n }\n\n var startTime = this.job.get('created');\n var segments = [{\n start: startTime,\n end: timestamps[0].time,\n color: JobStatus.color(JobStatus.INACTIVE),\n tooltip: 'Inactive: %r s'\n }];\n\n segments = segments.concat(_.map(timestamps.slice(0, -1), function (stamp, i) {\n var statusText = JobStatus.text(stamp.status);\n return {\n start: stamp.time,\n end: timestamps[i + 1].time,\n tooltip: statusText + ': %r s',\n color: JobStatus.color(stamp.status)\n };\n }, this));\n\n var points = [{\n time: startTime,\n color: JobStatus.color(JobStatus.INACTIVE),\n tooltip: 'Created at ' + new Date(startTime).toISOString()\n }];\n\n points = points.concat(_.map(timestamps, function (stamp) {\n var statusText = JobStatus.text(stamp.status);\n return {\n time: stamp.time,\n tooltip: 'Moved to ' + statusText + ' at ' +\n new Date(stamp.time).toISOString(),\n color: JobStatus.color(stamp.status)\n };\n }, this));\n\n var endTime = timestamps[timestamps.length - 1].time;\n var elapsed = (new Date(endTime) - new Date(startTime)) / 1000;\n\n new TimelineWidget({\n el: this.$('.g-job-timeline-container'),\n parentView: this,\n points: points,\n segments: segments,\n startTime: startTime,\n endTime: endTime,\n startLabel: '0 s',\n endLabel: elapsed + ' s'\n }).render();\n },\n\n _cancelJob: function () {\n const jobId = this.job.id;\n restRequest({\n url: `job/${jobId}/cancel`,\n method: 'PUT',\n error: null\n }).done(() => {\n events.trigger('g:alert', {\n icon: 'ok',\n text: 'Job successfully canceled.',\n type: 'success',\n timeout: 4000\n });\n }).fail((err) => {\n events.trigger('g:alert', {\n icon: 'cancel',\n text: err,\n type: 'danger',\n timeout: 4000\n });\n });\n }\n});\n\nexport default JobDetailsWidget;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/JobDetailsWidget.js","import $ from 'jquery';\nimport _ from 'underscore';\n\nimport PaginateWidget from '@girder/core/views/widgets/PaginateWidget';\nimport View from '@girder/core/views/View';\nimport router from '@girder/core/router';\nimport events from '@girder/core/events';\nimport { restRequest } from '@girder/core/rest';\nimport { defineFlags, formatDate, DATE_SECOND, _whenAll } from '@girder/core/misc';\nimport eventStream from '@girder/core/utilities/EventStream';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { SORT_DESC } from '@girder/core/constants';\n\nimport JobCollection from '../collections/JobCollection';\nimport JobStatus from '../JobStatus';\nimport JobListWidgetTemplate from '../templates/jobListWidget.pug';\nimport '../stylesheets/jobListWidget.styl';\nimport JobListTemplate from '../templates/jobList.pug';\n\nimport CheckBoxMenu from './CheckBoxMenu';\nimport JobGraphWidget from './JobGraphWidget';\n\nvar JobListWidget = View.extend({\n events: {\n 'click .g-job-trigger-link': function (e) {\n var cid = $(e.currentTarget).attr('cid');\n this.trigger('g:jobClicked', this.collection.get(cid));\n },\n 'change select.g-page-size': function (e) {\n this.collection.pageLimit = parseInt($(e.currentTarget).val());\n this.collection.fetch({}, true);\n },\n 'change input.g-job-checkbox': function (e) {\n var jobId = $(e.currentTarget).closest('tr').attr('g-job-id');\n if ($(e.currentTarget).is(':checked')) {\n this.jobCheckedStates[jobId] = true;\n } else {\n delete this.jobCheckedStates[jobId];\n }\n this._renderData();\n },\n 'click input.g-job-checkbox-all': function (e) {\n e.stopPropagation();\n },\n 'change input.g-job-checkbox-all': function (e) {\n if ($(e.currentTarget).is(':checked')) {\n this.collection.forEach((job) => { this.jobCheckedStates[job.id] = true; });\n } else {\n this.jobCheckedStates = {};\n }\n this._renderData();\n },\n 'click .check-menu-dropdown a.g-jobs-list-cancel': function (e) {\n this._cancelJobs();\n },\n 'click .g-job-worker-task-info': function (event) {\n router.navigate('#plugins/worker/task/status', { trigger: true });\n }\n },\n\n initialize: function (settings) {\n var currentUser = getCurrentUser();\n this.showAllJobs = !!settings.allJobsMode;\n this.columns = settings.columns || this.columnEnum.COLUMN_ALL;\n this.userId = (settings.filter && !settings.allJobsMode) ? (settings.filter.userId ? settings.filter.userId : currentUser.id) : null;\n this.showGraphs = settings.showGraphs;\n this.showPageSizeSelector = settings.showPageSizeSelector;\n this.showFilters = settings.showFilters;\n this.typeFilter = null;\n this.statusFilter = null;\n this.timingFilter = JobStatus.getAll().reduce((obj, status) => {\n obj[status.text] = true;\n return obj;\n }, {});\n this.jobCheckedStates = {};\n this.jobHighlightStates = {};\n\n this.jobGraphWidget = null;\n\n this.pageSizes = [25, 50, 100, 250, 500, 1000];\n\n this.collection = new JobCollection();\n if (this.showAllJobs) {\n this.collection.resourceName = 'job/all';\n }\n this.collection.sortField = settings.sortField || 'created';\n this.collection.sortDir = settings.sortDir || SORT_DESC;\n this.collection.pageLimit = settings.pageLimit || this.collection.pageLimit;\n\n this.listenTo(this.collection, 'update reset', this._onDataChange);\n\n this._fetchWithFilter();\n\n this.currentView = settings.view ? settings.view : 'list';\n\n this.showHeader = _.has(settings, 'showHeader') ? settings.showHeader : true;\n this.showPaging = _.has(settings, 'showPaging') ? settings.showPaging : true;\n this.linkToJob = _.has(settings, 'linkToJob') ? settings.linkToJob : true;\n this.triggerJobClick = _.has(settings, 'triggerJobClick') ? settings.triggerJobClick : false;\n\n this.paginateWidget = new PaginateWidget({\n collection: this.collection,\n parentView: this\n });\n\n this.listenTo(eventStream, 'g:event.job_status', this._statusChange);\n this.listenTo(eventStream, 'g:event.job_created', this._jobCreated);\n this.listenTo(eventStream, 'g:eventStream.start', this._fetchWithFilter);\n\n this.timingFilterWidget = new CheckBoxMenu({\n title: 'Phases',\n items: {},\n parentView: this\n });\n\n this.typeFilterWidget = new CheckBoxMenu({\n title: 'Type',\n items: {},\n parentView: this\n });\n\n this.listenTo(this.typeFilterWidget, 'g:triggerCheckBoxMenuChanged', function (e) {\n this.typeFilter = _.keys(e).reduce((arr, key) => {\n if (e[key]) {\n arr.push(key);\n }\n return arr;\n }, []);\n this._fetchWithFilter();\n });\n\n this.statusFilterWidget = new CheckBoxMenu({\n title: 'Status',\n items: {},\n parentView: this\n });\n\n const statusTextToStatusCode = {};\n this.listenTo(this.statusFilterWidget, 'g:triggerCheckBoxMenuChanged', function (e) {\n this.statusFilter = _.keys(e).reduce((arr, key) => {\n if (e[key]) {\n arr.push(parseInt(statusTextToStatusCode[key]));\n }\n return arr;\n }, []);\n this._fetchWithFilter();\n });\n\n restRequest({\n url: this.showAllJobs ? 'job/typeandstatus/all' : 'job/typeandstatus',\n method: 'GET'\n }).done((result) => {\n var typesFilter = result.types.reduce((obj, type) => {\n obj[type] = true;\n return obj;\n }, {});\n this.typeFilterWidget.setItems(typesFilter);\n\n var statusFilter = result.statuses.map((status) => {\n const statusText = JobStatus.text(status);\n statusTextToStatusCode[statusText] = status;\n return statusText;\n }).reduce((obj, statusText) => {\n obj[statusText] = true;\n return obj;\n }, {});\n this.statusFilterWidget.setItems(statusFilter);\n });\n\n this.render();\n },\n\n columnEnum: defineFlags([\n 'COLUMN_ACTION_CHECKBOX',\n 'COLUMN_STATUS_ICON',\n 'COLUMN_TITLE',\n 'COLUMN_UPDATED',\n 'COLUMN_OWNER',\n 'COLUMN_TYPE',\n 'COLUMN_STATUS'\n ], 'COLUMN_ALL'),\n\n render: function () {\n this.$el.html(JobListWidgetTemplate({\n currentView: this.currentView,\n pageSize: this.collection.pageLimit,\n pageSizes: this.pageSizes,\n showFilters: this.showFilters,\n showGraphs: this.showGraphs,\n showPageSizeSelector: this.showPageSizeSelector\n }));\n\n this.typeFilterWidget.setElement(this.$('.g-job-filter-container .type')).render();\n this.statusFilterWidget.setElement(this.$('.g-job-filter-container .status')).render();\n\n this.$('a[data-toggle=\"tab\"]').on('shown.bs.tab', (e) => {\n this.currentView = $(e.currentTarget).attr('name');\n if (this.userId) {\n router.navigate(`jobs/user/${this.userId}/${this.currentView}`);\n } else {\n router.navigate(`jobs/${this.currentView}`);\n }\n this.render();\n });\n\n if (this.currentView === 'timing-history' || this.currentView === 'time') {\n if (this.jobGraphWidget) {\n this.jobGraphWidget.remove();\n }\n this.jobGraphWidget = new JobGraphWidget({\n parentView: this,\n el: this.$('.g-main-content'),\n collection: this.collection,\n view: this.currentView,\n timingFilter: this.timingFilter,\n timingFilterWidget: this.timingFilterWidget\n }).render();\n }\n\n this._renderData();\n\n return this;\n },\n\n _onDataChange: function () {\n this.jobCheckedStates = {};\n this._renderData();\n },\n\n _renderData: function () {\n if (!this.$('.g-main-content').length) {\n // Do nothing until render has been called\n return;\n }\n\n if (this.collection.isEmpty()) {\n this.$('.g-main-content,.g-job-pagination').hide();\n this.$('.g-no-job-record').show();\n return;\n } else {\n this.$('.g-main-content,.g-job-pagination').show();\n this.$('.g-no-job-record').hide();\n }\n\n if (this.currentView === 'list') {\n this.$('.g-main-content').html(JobListTemplate({\n jobs: this.collection.toArray(),\n showHeader: this.showHeader,\n columns: this.columns,\n columnEnum: this.columnEnum,\n linkToJob: this.linkToJob,\n triggerJobClick: this.triggerJobClick,\n JobStatus: JobStatus,\n formatDate: formatDate,\n DATE_SECOND: DATE_SECOND,\n jobCheckedStates: this.jobCheckedStates,\n jobHighlightStates: this.jobHighlightStates,\n anyJobChecked: _.find(this.jobCheckedStates, (status) => status === true),\n allJobChecked: this.collection.every((job) => this.jobCheckedStates[job.id])\n }));\n }\n\n if (this.showPaging) {\n this.paginateWidget.setElement(this.$('.g-job-pagination')).render();\n }\n },\n\n _statusChange: function (event) {\n const job = this.collection.get(event.data._id);\n if (!job) {\n return;\n }\n job.set(event.data);\n this._renderData();\n this.trySetHighlightRecord(event.data._id);\n },\n\n _jobCreated: function (event) {\n this._fetchWithFilter()\n .done(() => {\n this.trySetHighlightRecord(event.data._id);\n });\n },\n\n trySetHighlightRecord: function (jobId) {\n const job = this.collection.get(jobId);\n if (_.isObject(job) && job.id === jobId) {\n this.jobHighlightStates[jobId] = true;\n this._renderData();\n setTimeout(() => {\n delete this.jobHighlightStates[jobId];\n this._renderData();\n }, 1000);\n }\n },\n\n _fetchWithFilter() {\n var filter = {};\n if (this.userId) {\n filter.userId = this.userId;\n }\n if (this.typeFilter) {\n filter.types = JSON.stringify(this.typeFilter);\n }\n if (this.statusFilter) {\n filter.statuses = JSON.stringify(this.statusFilter);\n }\n this.collection.params = filter;\n\n return this.collection.fetch({}, true);\n },\n\n _cancelJobs: function () {\n _whenAll(\n Object.keys(this.jobCheckedStates)\n .filter((jobId) => {\n var jobModel = this.collection.find((job) => job.id === jobId);\n return JobStatus.isCancelable(jobModel);\n })\n .map((jobId) => restRequest({\n url: `job/${jobId}/cancel`,\n method: 'PUT',\n error: null\n }))\n ).done((results) => {\n if (!results.length) {\n return;\n }\n events.trigger('g:alert', {\n icon: 'ok',\n text: `Cancel ${results.length === 1 ? 'request' : 'requests'} sent for ${results.length} ${results.length === 1 ? 'job' : 'jobs'}`,\n type: 'info',\n timeout: 4000\n });\n });\n }\n});\n\nexport default JobListWidget;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/JobListWidget.js","module.exports = (__webpack_require__(0))(10);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/auth.js from dll-reference girder_lib\n// module id = 11\n// module chunks = 0","module.exports = (__webpack_require__(0))(11);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/misc.js from dll-reference girder_lib\n// module id = 12\n// module chunks = 0","module.exports = (__webpack_require__(0))(123);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/utilities/PluginUtils.js from dll-reference girder_lib\n// module id = 13\n// module chunks = 0","module.exports = (__webpack_require__(0))(2);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./node_modules/jquery/dist/jquery.js from dll-reference girder_lib\n// module id = 14\n// module chunks = 0","module.exports = (__webpack_require__(0))(4);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/rest.js from dll-reference girder_lib\n// module id = 15\n// module chunks = 0","module.exports = (__webpack_require__(0))(52);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/utilities/EventStream.js from dll-reference girder_lib\n// module id = 16\n// module chunks = 0","module.exports = (__webpack_require__(0))(9);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/router.js from dll-reference girder_lib\n// module id = 17\n// module chunks = 0","import { registerPluginNamespace } from '@girder/core/pluginUtils';\n\nimport './routes';\n\n// Extends and overrides API\nimport './views/HeaderUserView';\nimport './views/AdminView';\n\nimport * as jobs from './index';\n\nregisterPluginNamespace('jobs', jobs);\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/main.js","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.vega = global.vega || {})));\n}(this, (function (exports) { 'use strict';\n\nvar accessor = function(fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n};\n\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\n\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nvar error$1 = function(message) {\n throw Error(message);\n};\n\nvar splitAccessPath = function(p) {\n var path = [],\n q = null,\n b = 0,\n n = p.length,\n s = '',\n i, j, c;\n\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i=j=0; j i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error$1('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error$1('Access path missing closing bracket: ' + p);\n if (q) error$1('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n};\n\nvar isArray = Array.isArray;\n\nvar isObject = function(_) {\n return _ === Object(_);\n};\n\nvar isString = function(_) {\n return typeof _ === 'string';\n};\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']'\n : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n : x;\n}\n\nvar field = function(field, name) {\n var path = splitAccessPath(field),\n code = 'return _[' + path.map($).join('][') + '];';\n\n return accessor(\n Function('_', code),\n [(field = path.length===1 ? path[0] : field)],\n name || field\n );\n};\n\nvar empty = [];\n\nvar id = field('id');\n\nvar identity = accessor(function(_) { return _; }, empty, 'identity');\n\nvar zero = accessor(function() { return 0; }, empty, 'zero');\n\nvar one = accessor(function() { return 1; }, empty, 'one');\n\nvar truthy = accessor(function() { return true; }, empty, 'true');\n\nvar falsy = accessor(function() { return false; }, empty, 'false');\n\nfunction log(method, level, input) {\n var args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nvar None = 0;\nvar Error$1 = 1;\nvar Warn = 2;\nvar Info = 3;\nvar Debug = 4;\n\nvar logger = function(_) {\n var level = _ || None;\n return {\n level: function(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error: function() {\n if (level >= Error$1) log('error', 'ERROR', arguments);\n return this;\n },\n warn: function() {\n if (level >= Warn) log('warn', 'WARN', arguments);\n return this;\n },\n info: function() {\n if (level >= Info) log('log', 'INFO', arguments);\n return this;\n },\n debug: function() {\n if (level >= Debug) log('log', 'DEBUG', arguments);\n return this;\n }\n }\n};\n\nvar peek = function(array) {\n return array[array.length - 1];\n};\n\nvar toNumber = function(_) {\n return _ == null || _ === '' ? null : +_;\n};\n\nfunction exp(sign) {\n return function(x) { return sign * Math.exp(x); };\n}\n\nfunction log$1(sign) {\n return function(x) { return Math.log(sign * x); };\n}\n\nfunction pow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction pan(domain, delta, lift, ground) {\n var d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n\n return [\n ground(d0 - dd),\n ground(d1 - dd)\n ];\n}\n\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\n\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log$1(sign), exp(sign));\n}\n\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1/exponent));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n var d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n\n return [\n ground(da + (d0 - da) * scale),\n ground(da + (d1 - da) * scale)\n ];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\n\nfunction zoomLog(domain, anchor, scale) {\n var sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log$1(sign), exp(sign));\n}\n\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent));\n}\n\nvar array = function(_) {\n return _ != null ? (isArray(_) ? _ : [_]) : [];\n};\n\nvar isFunction = function(_) {\n return typeof _ === 'function';\n};\n\nvar compare = function(fields, orders) {\n var idx = [],\n cmp = (fields = array(fields)).map(function(f, i) {\n if (f == null) {\n return null;\n } else {\n idx.push(i);\n return isFunction(f) ? f\n : splitAccessPath(f).map($).join('][');\n }\n }),\n n = idx.length - 1,\n ord = array(orders),\n code = 'var u,v;return ',\n i, j, f, u, v, d, t, lt, gt;\n\n if (n < 0) return null;\n\n for (j=0; j<=n; ++j) {\n i = idx[j];\n f = cmp[i];\n\n if (isFunction(f)) {\n d = 'f' + i;\n u = '(u=this.' + d + '(a))';\n v = '(v=this.' + d + '(b))';\n (t = t || {})[d] = f;\n } else {\n u = '(u=a['+f+'])';\n v = '(v=b['+f+'])';\n }\n\n d = '((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))';\n\n if (ord[i] !== 'descending') {\n gt = 1;\n lt = -1;\n } else {\n gt = -1;\n lt = 1;\n }\n\n code += '(' + u+'<'+v+'||u==null)&&v!=null?' + lt\n + ':(u>v||v==null)&&u!=null?' + gt\n + ':'+d+'!==u&&v===v?' + lt\n + ':v!==v&&u===u?' + gt\n + (i < n ? ':' : ':0');\n }\n\n f = Function('a', 'b', code + ';');\n if (t) f = f.bind(t);\n\n fields = fields.reduce(function(map, field) {\n if (isFunction(field)) {\n (accessorFields(field) || []).forEach(function(_) { map[_] = 1; });\n } else if (field != null) {\n map[field + ''] = 1;\n }\n return map;\n }, {});\n\n return accessor(f, Object.keys(fields));\n};\n\nvar constant = function(_) {\n return isFunction(_) ? _ : function() { return _; };\n};\n\nvar debounce = function(delay, handler) {\n var tid, evt;\n\n function callback() {\n handler(evt);\n tid = evt = null;\n }\n\n return function(e) {\n evt = e;\n if (tid) clearTimeout(tid);\n tid = setTimeout(callback, delay);\n };\n};\n\nvar extend = function(_) {\n for (var x, k, i=1, len=arguments.length; i= b) {\n a = c = b;\n break;\n }\n }\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n};\n\nvar NULL = {};\n\nvar fastmap = function(input) {\n var obj = {},\n map,\n test;\n\n function has(key) {\n return obj.hasOwnProperty(key) && obj[key] !== NULL;\n }\n\n map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has,\n get: function(key) {\n return has(key) ? obj[key] : undefined;\n },\n set: function(key, value) {\n if (!has(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete: function(key) {\n if (has(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear: function() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test: function(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean: function() {\n var next = {},\n size = 0,\n key, value;\n for (key in obj) {\n value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = (obj = next);\n }\n };\n\n if (input) Object.keys(input).forEach(function(key) {\n map.set(key, input[key]);\n });\n\n return map;\n};\n\nvar inherits = function(child, parent) {\n var proto = (child.prototype = Object.create(parent.prototype));\n proto.constructor = child;\n return proto;\n};\n\nvar isBoolean = function(_) {\n return typeof _ === 'boolean';\n};\n\nvar isDate = function(_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n};\n\nvar isNumber = function(_) {\n return typeof _ === 'number';\n};\n\nvar isRegExp = function(_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n};\n\nvar key = function(fields, flat) {\n if (fields) {\n fields = flat\n ? array(fields).map(function(f) { return f.replace(/\\\\(.)/g, '$1'); })\n : array(fields);\n }\n\n var fn = !(fields && fields.length)\n ? function() { return ''; }\n : Function('_', 'return \\'\\'+' +\n fields.map(function(f) {\n return '_[' + (flat\n ? $(f)\n : splitAccessPath(f).map($).join('][')\n ) + ']';\n }).join('+\\'|\\'+') + ';');\n\n return accessor(fn, fields, 'key');\n};\n\nvar merge = function(compare, array0, array1, output) {\n var n0 = array0.length,\n n1 = array1.length;\n\n if (!n1) return array0;\n if (!n0) return array1;\n\n var merged = output || new array0.constructor(n0 + n1),\n i0 = 0, i1 = 0, i = 0;\n\n for (; i0 0\n ? array1[i1++]\n : array0[i0++];\n }\n\n for (; i0= 0) s += str;\n return s;\n};\n\nvar pad = function(str, length, padchar, align) {\n var c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n\n return n <= 0 ? s\n : align === 'left' ? repeat(c, n) + s\n : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2))\n : s + repeat(c, n);\n};\n\nvar toBoolean = function(_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n};\n\nfunction defaultParser(_) {\n return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n}\n\nvar toDate = function(_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n};\n\nvar toString = function(_) {\n return _ == null || _ === '' ? null : _ + '';\n};\n\nvar toSet = function(_) {\n for (var s={}, i=0, n=_.length; i= 0) {\n list.splice(idx, 1);\n }\n }\n return list;\n };\n\n return list;\n}\n\nvar TUPLE_ID_KEY = Symbol('vega_id');\nvar TUPLE_ID = 1;\n\n/**\n * Resets the internal tuple id counter to one.\n */\n\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nfunction ingest(datum) {\n var t = (datum === Object(datum)) ? datum : {data: datum};\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nfunction derive(t) {\n return rederive(t, ingest({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nfunction rederive(t, d) {\n for (var k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\n\nfunction changeset() {\n var add = [], // insert tuples\n rem = [], // remove tuples\n mod = [], // modify tuples\n remp = [], // remove by predicate\n modp = [], // modify by predicate\n reflow = false;\n\n return {\n constructor: changeset,\n insert: function(t) {\n var d = array(t), i = 0, n = d.length;\n for (; i= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n};\n\n/**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\nprototype$2.modified = function(name, index) {\n var mod = this[CACHE], k;\n if (!arguments.length) {\n for (k in mod) { if (mod[k]) return true; }\n return false;\n } else if (isArray(name)) {\n for (k=0; k= 0)\n ? (index + 1 < mod[name] || !!mod[index + ':' + name])\n : !!mod[name];\n};\n\n/**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\nprototype$2.clear = function() {\n this[CACHE] = {};\n return this;\n};\n\nvar OP_ID = 0;\nvar PULSE = 'pulse';\nvar NO_PARAMS = new Parameters();\n\n// Boolean Flags\nvar SKIP = 1;\nvar MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\n\nvar prototype$1 = Operator.prototype;\n\n/**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\nprototype$1.targets = function() {\n return this._targets || (this._targets = UniqueList(id));\n};\n\n/**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\nprototype$1.set = function(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n};\n\nfunction flag(bit) {\n return function(state) {\n var f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? (f | bit) : (f & ~bit);\n return this;\n };\n}\n\n/**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\nprototype$1.skip = flag(SKIP);\n\n/**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\nprototype$1.modified = flag(MODIFIED);\n\n/**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @return {Operator[]} - An array of upstream dependencies.\n */\nprototype$1.parameters = function(params, react) {\n react = react !== false;\n var self = this,\n argval = (self._argval = self._argval || new Parameters()),\n argops = (self._argops = self._argops || []),\n deps = [],\n name, value, n, i;\n\n function add(name, index, value) {\n if (value instanceof Operator) {\n if (value !== self) {\n if (react) value.targets().add(self);\n deps.push(value);\n }\n argops.push({op:value, name:name, index:index});\n } else {\n argval.set(name, index, value);\n }\n }\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(function(op) {\n if (!(op instanceof Operator)) {\n error$1('Pulse parameters must be operator instances.');\n } else if (op !== self) {\n op.targets().add(self);\n deps.push(op);\n }\n });\n self.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i=0; i} - The source operators that should propagate\n * to the target operator.\n */\nvar connect = function(target, sources) {\n var targetRank = target.rank, i, n;\n\n for (i=0, n=sources.length; i pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n};\n\nprototype$3.debounce = function(delay) {\n var s = stream();\n\n this.targets().add(stream(null, null,\n debounce(delay, function(e) {\n var df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })\n ));\n\n return s;\n};\n\nprototype$3.between = function(a, b) {\n var active = false;\n a.targets().add(stream(null, null, function() { active = true; }));\n b.targets().add(stream(null, null, function() { active = false; }));\n return this.filter(function() { return active; });\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nvar events = function(source, type, filter, apply) {\n var df = this,\n s = stream(filter, apply),\n send = function(e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n },\n sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n for (var i=0, n=sources.length; i= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map$$1, depth) {\n if (++depth > keys.length) return map$$1;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map$$1.entries();\n else array = [], map$$1.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n};\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map$$1, key, value) {\n map$$1.set(key, value);\n}\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nvar noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set$2(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nvar request$1 = function(url, callback) {\n var request,\n event = dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n mimeType,\n headers = map(),\n xhr = new XMLHttpRequest,\n user = null,\n password = null,\n response,\n responseType,\n timeout = 0;\n\n // If IE does not support CORS, use XDomainRequest.\n if (typeof XDomainRequest !== \"undefined\"\n && !(\"withCredentials\" in xhr)\n && /^(http(s)?:)?\\/\\//.test(url)) xhr = new XDomainRequest;\n\n \"onload\" in xhr\n ? xhr.onload = xhr.onerror = xhr.ontimeout = respond\n : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };\n\n function respond(o) {\n var status = xhr.status, result;\n if (!status && hasResponse(xhr)\n || status >= 200 && status < 300\n || status === 304) {\n if (response) {\n try {\n result = response.call(request, xhr);\n } catch (e) {\n event.call(\"error\", request, e);\n return;\n }\n } else {\n result = xhr;\n }\n event.call(\"load\", request, result);\n } else {\n event.call(\"error\", request, o);\n }\n }\n\n xhr.onprogress = function(e) {\n event.call(\"progress\", request, e);\n };\n\n request = {\n header: function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers.get(name);\n if (value == null) headers.remove(name);\n else headers.set(name, value + \"\");\n return request;\n },\n\n // If mimeType is non-null and no Accept header is set, a default is used.\n mimeType: function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return request;\n },\n\n // Specifies what type the response value should take;\n // for instance, arraybuffer, blob, document, or text.\n responseType: function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return request;\n },\n\n timeout: function(value) {\n if (!arguments.length) return timeout;\n timeout = +value;\n return request;\n },\n\n user: function(value) {\n return arguments.length < 1 ? user : (user = value == null ? null : value + \"\", request);\n },\n\n password: function(value) {\n return arguments.length < 1 ? password : (password = value == null ? null : value + \"\", request);\n },\n\n // Specify how to convert the response content to a specific type;\n // changes the callback value on \"load\" events.\n response: function(value) {\n response = value;\n return request;\n },\n\n // Alias for send(\"GET\", …).\n get: function(data, callback) {\n return request.send(\"GET\", data, callback);\n },\n\n // Alias for send(\"POST\", …).\n post: function(data, callback) {\n return request.send(\"POST\", data, callback);\n },\n\n // If callback is non-null, it will be used for error and load events.\n send: function(method, data, callback) {\n xhr.open(method, url, true, user, password);\n if (mimeType != null && !headers.has(\"accept\")) headers.set(\"accept\", mimeType + \",*/*\");\n if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });\n if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);\n if (responseType != null) xhr.responseType = responseType;\n if (timeout > 0) xhr.timeout = timeout;\n if (callback == null && typeof data === \"function\") callback = data, data = null;\n if (callback != null && callback.length === 1) callback = fixCallback(callback);\n if (callback != null) request.on(\"error\", callback).on(\"load\", function(xhr) { callback(null, xhr); });\n event.call(\"beforesend\", request, xhr);\n xhr.send(data == null ? null : data);\n return request;\n },\n\n abort: function() {\n xhr.abort();\n return request;\n },\n\n on: function() {\n var value = event.on.apply(event, arguments);\n return value === event ? request : value;\n }\n };\n\n if (callback != null) {\n if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n return request.get(callback);\n }\n\n return request;\n};\n\nfunction fixCallback(callback) {\n return function(error, xhr) {\n callback(error == null ? xhr : null);\n };\n}\n\nfunction hasResponse(xhr) {\n var type = xhr.responseType;\n return type && type !== \"text\"\n ? xhr.response // null on error\n : xhr.responseText; // \"\" on error\n}\n\nvar EOL = {};\nvar EOF = {};\nvar QUOTE = 34;\nvar NEWLINE = 10;\nvar RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nvar dsvFormat = function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n })).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return text == null ? \"\"\n : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : text;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatRows: formatRows\n };\n};\n\nvar csv$1 = dsvFormat(\",\");\n\nvar tsv = dsvFormat(\"\\t\");\n\n// Matches absolute URLs with optional protocol\n// https://... file://... //...\nvar protocol_re = /^([A-Za-z]+:)?\\/\\//;\n\n// Special treatment in node.js for the file: protocol\nvar fileProtocol = 'file://';\n\n// Request options to check for d3-request\nvar requestOptions = [\n 'mimeType',\n 'responseType',\n 'user',\n 'password'\n];\n\n/**\n * Creates a new loader instance that provides methods for requesting files\n * from either the network or disk, and for sanitizing request URIs.\n * @param {object} [options] - Optional default loading options to use.\n * @return {object} - A new loader instance.\n */\nvar loader = function(options) {\n return {\n options: options || {},\n sanitize: sanitize,\n load: load,\n file: file,\n http: http\n };\n};\n\nfunction marshall(loader, options) {\n return extend({}, loader.options, options);\n}\n\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\nfunction load(uri, options) {\n var loader = this;\n return loader.sanitize(uri, options)\n .then(function(opt) {\n var url = opt.href;\n return opt.localFile\n ? loader.file(url)\n : loader.http(url, options);\n });\n}\n\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to sanity check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\nfunction sanitize(uri, options) {\n options = marshall(this, options);\n return new Promise(function(accept, reject) {\n var result = {href: null},\n isFile, hasProtocol, loadFile, base;\n\n if (uri == null || typeof uri !== 'string') {\n reject('Sanitize failure, invalid URI: ' + $(uri));\n return;\n }\n\n hasProtocol = protocol_re.test(uri);\n\n // if relative url (no protocol/host), prepend baseURL\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!startsWith(uri, '/') && base[base.length-1] !== '/') {\n uri = '/' + uri;\n }\n uri = base + uri;\n }\n\n // should we load from file system?\n loadFile = (isFile = startsWith(uri, fileProtocol))\n || options.mode === 'file'\n || options.mode !== 'http' && !hasProtocol && fs();\n\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (startsWith(uri, '//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n }\n\n // set non-enumerable mode flag to indicate local file load\n Object.defineProperty(result, 'localFile', {value: !!loadFile});\n\n // set uri\n result.href = uri;\n\n // set default result target, if specified\n if (options.target) {\n result.target = options.target + '';\n }\n\n // return\n accept(result);\n });\n}\n\n/**\n * HTTP request loader.\n * @param {string} url - The url to request.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to the file contents.\n */\nfunction http(url, options) {\n options = marshall(this, options);\n return new Promise(function(accept, reject) {\n var req = request$1(url),\n name;\n\n for (name in options.headers) {\n req.header(name, options.headers[name]);\n }\n\n requestOptions.forEach(function(name) {\n if (options[name]) req[name](options[name]);\n });\n\n req.on('error', function(error) {\n reject(error || 'Error loading URL: ' + url);\n })\n .on('load', function(result) {\n var text$$1 = result && result.responseText;\n (!result || result.status === 0)\n ? reject(text$$1 || 'Error')\n : accept(text$$1);\n })\n .get();\n });\n}\n\n/**\n * File system loader.\n * @param {string} filename - The file system path to load.\n * @return {Promise} - A promise that resolves to the file contents.\n */\nfunction file(filename) {\n return new Promise(function(accept, reject) {\n var f = fs();\n f ? f.readFile(filename, function(error, data) {\n if (error) reject(error);\n else accept(data);\n })\n : reject('No file system access for ' + filename);\n });\n}\n\nfunction fs() {\n var fs = typeof require === 'function' && require('fs');\n return fs && isFunction(fs.readFile) ? fs : null;\n}\n\nfunction startsWith(string, query) {\n return string == null ? false : string.lastIndexOf(query, 0) === 0;\n}\n\nvar typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\n\nvar typeTests = [\n isBoolean$1,\n isInteger,\n isNumber$1,\n isDate$1\n];\n\nvar typeList = [\n 'boolean',\n 'integer',\n 'number',\n 'date'\n];\n\nfunction inferType(values, field$$1) {\n if (!values || !values.length) return 'unknown';\n\n var tests = typeTests.slice(),\n value, i, n, j;\n\n for (i=0, n=values.length; i 1) arcs = extractArcs(topology, object$$1, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object$$1, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object$$1);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n\nvar bisect = function(a, x) {\n var lo = 0, hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (a[mid] < x) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n};\n\nvar topojson = function(data, format) {\n var method, object, property;\n data = json$1(data, format);\n\n method = (format && (property = format.feature)) ? feature\n : (format && (property = format.mesh)) ? mesh\n : error$1('Missing TopoJSON feature or mesh parameter.');\n\n object = (object = data.objects[property])\n ? method(data, object)\n : error$1('Invalid TopoJSON object: ' + property);\n\n return object && object.features || [object];\n};\n\nvar formats = {\n dsv: dsv$1,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json$1,\n topojson: topojson\n};\n\nvar formats$1 = function(name, format) {\n if (arguments.length > 1) {\n formats[name] = format;\n return this;\n } else {\n return formats.hasOwnProperty(name) ? formats[name] : null;\n }\n};\n\nvar t0 = new Date;\nvar t1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n\nvar millisecond = newInterval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n\nvar second = newInterval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nvar minute = newInterval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nvar hour = newInterval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nvar day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nfunction weekday(i) {\n return newInterval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar month = newInterval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nvar year = newInterval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nvar utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nvar utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nvar utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nfunction utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcMonth = newInterval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nvar utcYear = newInterval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day$$1;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day$$1 = week.getUTCDay();\n week = day$$1 > 4 || day$$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day$$1 = week.getDay();\n week = day$$1 > 4 || day$$1 === 0 ? monday.ceil(week) : monday(week);\n week = day.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day$$1 = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\nvar numberRe = /^\\s*\\d+/;\nvar percentRe = /^%/;\nvar requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad$1(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad$1(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad$1(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad$1(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad$1(1 + day.count(year(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad$1(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad$1(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad$1(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad$1(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day$$1 = d.getDay();\n return day$$1 === 0 ? 7 : day$$1;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad$1(sunday.count(year(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day$$1 = d.getDay();\n d = (day$$1 >= 4 || day$$1 === 0) ? thursday(d) : thursday.ceil(d);\n return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad$1(monday.count(year(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad$1(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad$1(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad$1(z / 60 | 0, \"0\", 2)\n + pad$1(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad$1(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad$1(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad$1(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad$1(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad$1(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad$1(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad$1(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad$1(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day$$1 = d.getUTCDay();\n d = (day$$1 >= 4 || day$$1 === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad$1(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad$1(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad$1(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n\nvar locale$1;\nvar timeFormat;\nvar timeParse;\nvar utcFormat;\nvar utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale(definition) {\n locale$1 = formatLocale(definition);\n timeFormat = locale$1.format;\n timeParse = locale$1.parse;\n utcFormat = locale$1.utcFormat;\n utcParse = locale$1.utcParse;\n return locale$1;\n}\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nvar read = function(data, schema, dateParse) {\n schema = schema || {};\n\n var reader = formats$1(schema.type || 'json');\n if (!reader) error$1('Unknown data format type: ' + schema.type);\n\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, dateParse);\n\n if (data.hasOwnProperty('columns')) delete data.columns;\n return data;\n};\n\nfunction parse(data, types, dateParse) {\n if (!data.length) return; // early exit for empty data\n\n dateParse = dateParse || timeParse;\n\n var fields = data.columns || Object.keys(data[0]),\n parsers, datum, field$$1, i, j, n, m;\n\n if (types === 'auto') types = inferTypes(data, fields);\n\n fields = Object.keys(types);\n parsers = fields.map(function(field$$1) {\n var type = types[field$$1],\n parts, pattern;\n\n if (type && (type.indexOf('date:') === 0 || type.indexOf('utc:') === 0)) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n\n if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n (pattern[0] === '\"' && pattern[pattern.length-1] === '\"')) {\n pattern = pattern.slice(1, -1);\n }\n\n return parts[0] === 'utc' ? utcParse(pattern) : dateParse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field$$1 + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i=0, n=data.length, m=fields.length; i= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error$1('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nvar StopPropagation = {};\n\n// Pulse visit type flags\nvar ADD = (1 << 0);\nvar REM = (1 << 1);\nvar MOD = (1 << 2);\nvar ADD_REM = ADD | REM;\nvar ADD_MOD = ADD | MOD;\nvar ALL = ADD | REM | MOD;\nvar REFLOW = (1 << 3);\nvar SOURCE = (1 << 4);\nvar NO_SOURCE = (1 << 5);\nvar NO_FIELDS = (1 << 6);\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\n\nvar prototype$4 = Pulse.prototype;\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nprototype$4.StopPropagation = StopPropagation;\n\n/**\n * Boolean flag indicating ADD (added) tuples.\n */\nprototype$4.ADD = ADD;\n\n/**\n * Boolean flag indicating REM (removed) tuples.\n */\nprototype$4.REM = REM;\n\n/**\n * Boolean flag indicating MOD (modified) tuples.\n */\nprototype$4.MOD = MOD;\n\n/**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\nprototype$4.ADD_REM = ADD_REM;\n\n/**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\nprototype$4.ADD_MOD = ADD_MOD;\n\n/**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\nprototype$4.ALL = ALL;\n\n/**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\nprototype$4.REFLOW = REFLOW;\n\n/**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\nprototype$4.SOURCE = SOURCE;\n\n/**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\nprototype$4.NO_SOURCE = NO_SOURCE;\n\n/**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\nprototype$4.NO_FIELDS = NO_FIELDS;\n\n/**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\nprototype$4.fork = function(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n};\n\n/**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\nprototype$4.clone = function() {\n var p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n};\n\n/**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\nprototype$4.addAll = function() {\n var p = this;\n if (!this.source || this.source.length === this.add.length) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n return p;\n }\n};\n\n/**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\nprototype$4.init = function(src, flags) {\n var p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n }\n\n return p;\n};\n\n/**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\nprototype$4.runAfter = function(func) {\n this.dataflow.runAfter(func);\n};\n\n/**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\nprototype$4.changed = function(flags) {\n var f = flags || ALL;\n return ((f & ADD) && this.add.length)\n || ((f & REM) && this.rem.length)\n || ((f & MOD) && this.mod.length);\n};\n\n/**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\nprototype$4.reflow = function(fork) {\n if (fork) return this.fork(ALL).reflow();\n\n var len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n};\n\n/**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\nprototype$4.modifies = function(_) {\n var fields = array(_),\n hash = this.fields || (this.fields = {});\n fields.forEach(function(f) { hash[f] = true; });\n return this;\n};\n\n/**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\nprototype$4.modified = function(_) {\n var fields = this.fields;\n return !(this.mod.length && fields) ? false\n : !arguments.length ? !!fields\n : isArray(_) ? _.some(function(f) { return fields[f]; })\n : fields[_];\n};\n\n/**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype$4.filter = function(flags, filter) {\n var p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n};\n\nfunction addFilter(a, b) {\n return a ? function(t,i) { return a(t,i) && b(t,i); } : b;\n}\n\n/**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype$4.materialize = function(flags) {\n flags = flags || ALL;\n var p = this;\n if ((flags & ADD) && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if ((flags & REM) && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if ((flags & MOD) && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if ((flags & SOURCE) && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n};\n\nfunction materialize(data, filter) {\n var out = [];\n visitArray(data, filter, function(_) { out.push(_); });\n return out;\n}\n\nfunction filter(pulse, flags) {\n var map = {};\n pulse.visit(flags, function(t) { map[tupleid(t)] = 1; });\n return function(t) { return map[tupleid(t)] ? null : t; };\n}\n\n/**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype$4.visit = function(flags, visitor) {\n var p = this, v = visitor, src, sum;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n\n if ((flags & REFLOW) && (src = p.source)) {\n sum = p.add.length + p.mod.length;\n if (sum === src.length) {\n // do nothing\n } else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n var p = this,\n c = 0,\n pulse, hash, i, n, f;\n\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (i=0, n=pulses.length; i= Info) {\n dt = Date.now();\n df.debug('-- START PROPAGATION (' + df._clock + ') -----');\n }\n\n // initialize queue, reset touched operators\n df._touched.forEach(function(op) { df._enqueue(op, true); });\n df._touched = UniqueList(id);\n\n try {\n while (df._heap.size() > 0) {\n op = df._heap.pop();\n\n // re-queue if rank changes\n if (op.rank !== op.qrank) { df._enqueue(op, true); continue; }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n\n if (level >= Debug) {\n df.debug(op.id, next === StopPropagation ? 'STOP' : next, op);\n }\n\n // propagate the pulse\n if (next !== StopPropagation) {\n df._pulse = next;\n if (op._targets) op._targets.forEach(function(op) { df._enqueue(op); });\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n error = err;\n }\n\n // reset pulse map\n df._pulses = {};\n df._pulse = null;\n\n if (level >= Info) {\n dt = Date.now() - dt;\n df.info('> Pulse ' + df._clock + ': ' + count + ' operators; ' + dt + 'ms');\n }\n\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n if (df._onrun) {\n try { df._onrun(df, count, error); } catch (err) { df.error(err); }\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n var postrun = df._postrun;\n df._postrun = [];\n postrun\n .sort(function(a, b) { return b.priority - a.priority; })\n .forEach(function(_) { invokeCallback(df, _.callback); });\n }\n\n return count;\n}\n\nfunction invokeCallback(df, callback) {\n try { callback(df); } catch (err) { df.error(err); }\n}\n\n/**\n * Runs the dataflow and returns a Promise that resolves when the\n * propagation cycle completes. The standard run method may exit early\n * if there are pending data loading operations. In contrast, this\n * method returns a Promise to allow callers to receive notification\n * when dataflow evaluation completes.\n * @return {Promise} - A promise that resolves to this dataflow.\n */\nfunction runAsync() {\n return this._pending || Promise.resolve(this.run());\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n */\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n invokeCallback(this, callback);\n }\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nfunction enqueue(op, force) {\n var p = !this._pulses[op.id];\n if (p) this._pulses[op.id] = this._pulse;\n if (p || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nfunction getPulse(op, encode) {\n var s = op.source,\n stamp = this._clock,\n p;\n\n if (s && isArray(s)) {\n p = s.map(function(_) { return _.pulse; });\n return new MultiPulse(this, stamp, p, encode);\n }\n\n p = this._pulses[op.id];\n if (s) {\n s = s.pulse;\n if (!s || s === StopPropagation) {\n p.source = [];\n } else if (s.stamp === stamp && p.target !== op) {\n p = s;\n } else {\n p.source = s.source;\n }\n }\n\n return p;\n}\n\nvar NO_OPT = {skip: false, force: false};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction touch(op, options) {\n var opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction update(op, value, options) {\n var opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n\n var p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._pulses[op.id] = changeset.pulse(p, t);\n\n return this;\n}\n\nfunction Heap(comparator) {\n this.cmp = comparator;\n this.nodes = [];\n}\n\nvar prototype$6 = Heap.prototype;\n\nprototype$6.size = function() {\n return this.nodes.length;\n};\n\nprototype$6.clear = function() {\n this.nodes = [];\n return this;\n};\n\nprototype$6.peek = function() {\n return this.nodes[0];\n};\n\nprototype$6.push = function(x) {\n var array = this.nodes;\n array.push(x);\n return siftdown(array, 0, array.length-1, this.cmp);\n};\n\nprototype$6.pop = function() {\n var array = this.nodes,\n last = array.pop(),\n item;\n\n if (array.length) {\n item = array[0];\n array[0] = last;\n siftup(array, 0, this.cmp);\n } else {\n item = last;\n }\n return item;\n};\n\nprototype$6.replace = function(item) {\n var array = this.nodes,\n retval = array[0];\n array[0] = item;\n siftup(array, 0, this.cmp);\n return retval;\n};\n\nprototype$6.pushpop = function(item) {\n var array = this.nodes, ref = array[0];\n if (array.length && this.cmp(ref, item) < 0) {\n array[0] = item;\n item = ref;\n siftup(array, 0, this.cmp);\n }\n return item;\n};\n\nfunction siftdown(array, start, idx, cmp) {\n var item, parent, pidx;\n\n item = array[idx];\n while (idx > start) {\n pidx = (idx - 1) >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\nfunction siftup(array, idx, cmp) {\n var start = idx,\n end = array.length,\n item = array[idx],\n cidx = 2 * idx + 1, ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = 2 * idx + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nfunction Dataflow() {\n this._log = logger();\n this.logLevel(Error$1);\n\n this._clock = 0;\n this._rank = 0;\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._pulses = {};\n this._pulse = null;\n\n this._heap = new Heap(function(a, b) { return a.qrank - b.qrank; });\n this._postrun = [];\n}\n\nvar prototype = Dataflow.prototype;\n\n/**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\nprototype.stamp = function() {\n return this._clock;\n};\n\n/**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\nprototype.loader = function(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n};\n\n/**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\nprototype.cleanThreshold = 1e4;\n\n// OPERATOR REGISTRATION\nprototype.add = add;\nprototype.connect = connect;\nprototype.rank = rank;\nprototype.rerank = rerank;\n\n// OPERATOR UPDATES\nprototype.pulse = pulse;\nprototype.touch = touch;\nprototype.update = update;\nprototype.changeset = changeset;\n\n// DATA LOADING\nprototype.ingest = ingest$1;\nprototype.request = request;\n\n// EVENT HANDLING\nprototype.events = events;\nprototype.on = on;\n\n// PULSE PROPAGATION\nprototype.run = run;\nprototype.runAsync = runAsync;\nprototype.runAfter = runAfter;\nprototype._enqueue = enqueue;\nprototype._getPulse = getPulse;\n\n// LOGGING AND ERROR HANDLING\n\nfunction logMethod(method) {\n return function() {\n return this._log[method].apply(this, arguments);\n };\n}\n\n/**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\nprototype.error = logMethod('error');\n\n/**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\nprototype.warn = logMethod('warn');\n\n/**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\nprototype.info = logMethod('info');\n\n/**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\nprototype.debug = logMethod('debug');\n\n/**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\nprototype.logLevel = logMethod('level');\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\n\nvar prototype$7 = inherits(Transform, Operator);\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\nprototype$7.run = function(pulse) {\n if (pulse.stamp <= this.stamp) return pulse.StopPropagation;\n\n var rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n\n if (rv !== pulse.StopPropagation) this.pulse = rv;\n this.stamp = pulse.stamp;\n\n return rv;\n};\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\nprototype$7.evaluate = function(pulse) {\n var params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n};\n\n/**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\nprototype$7.transform = function() {};\n\nvar transforms = {};\n\nfunction definition(type) {\n var t = transform$1(type);\n return t && t.Definition || null;\n}\n\nfunction transform$1(type) {\n type = type && type.toLowerCase();\n return transforms.hasOwnProperty(type) ? transforms[type] : null;\n}\n\n// Utilities\n\nfunction multikey(f) {\n return function(x) {\n var n = f.length,\n i = 1,\n k = String(f[0](x));\n\n for (; i 1 ? this.dev / (this.valid-1) : 0',\n req: ['mean'], idx: 1\n }),\n 'variancep': measure({\n name: 'variancep',\n set: 'this.valid > 1 ? this.dev / this.valid : 0',\n req: ['variance'], idx: 2\n }),\n 'stdev': measure({\n name: 'stdev',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : 0',\n req: ['variance'], idx: 2\n }),\n 'stdevp': measure({\n name: 'stdevp',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : 0',\n req: ['variance'], idx: 2\n }),\n 'stderr': measure({\n name: 'stderr',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : 0',\n req: ['variance'], idx: 2\n }),\n 'distinct': measure({\n name: 'distinct',\n set: 'cell.data.distinct(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci0': measure({\n name: 'ci0',\n set: 'cell.data.ci0(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci1': measure({\n name: 'ci1',\n set: 'cell.data.ci1(this.get)',\n req: ['values'], idx: 3\n }),\n 'median': measure({\n name: 'median',\n set: 'cell.data.q2(this.get)',\n req: ['values'], idx: 3\n }),\n 'q1': measure({\n name: 'q1',\n set: 'cell.data.q1(this.get)',\n req: ['values'], idx: 3\n }),\n 'q3': measure({\n name: 'q3',\n set: 'cell.data.q3(this.get)',\n req: ['values'], idx: 3\n }),\n 'argmin': measure({\n name: 'argmin',\n init: 'this.argmin = null;',\n add: 'if (v < this.min) this.argmin = t;',\n rem: 'if (v <= this.min) this.argmin = null;',\n set: 'this.argmin || cell.data.argmin(this.get)',\n req: ['min'], str: ['values'], idx: 3\n }),\n 'argmax': measure({\n name: 'argmax',\n init: 'this.argmax = null;',\n add: 'if (v > this.max) this.argmax = t;',\n rem: 'if (v >= this.max) this.argmax = null;',\n set: 'this.argmax || cell.data.argmax(this.get)',\n req: ['max'], str: ['values'], idx: 3\n }),\n 'min': measure({\n name: 'min',\n init: 'this.min = null;',\n add: 'if (v < this.min || this.min === null) this.min = v;',\n rem: 'if (v <= this.min) this.min = NaN;',\n set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)',\n str: ['values'], idx: 4\n }),\n 'max': measure({\n name: 'max',\n init: 'this.max = null;',\n add: 'if (v > this.max || this.max === null) this.max = v;',\n rem: 'if (v >= this.max) this.max = NaN;',\n set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)',\n str: ['values'], idx: 4\n })\n};\n\nvar ValidAggregateOps = Object.keys(AggregateOps);\n\nfunction createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction measure(base) {\n return function(out) {\n var m = extend({init:'', add:'', rem:'', idx:0}, base);\n m.out = out || base.name;\n return m;\n };\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg, stream) {\n function collect(m, a) {\n function helper(r) { if (!m[r]) collect(m, m[r] = AggregateOps[r]()); }\n if (a.req) a.req.forEach(helper);\n if (stream && a.str) a.str.forEach(helper);\n return m;\n }\n var map = agg.reduce(\n collect,\n agg.reduce(function(m, a) {\n m[a.name] = a;\n return m;\n }, {})\n );\n var values = [], key$$1;\n for (key$$1 in map) values.push(map[key$$1]);\n return values.sort(compareIndex);\n}\n\nfunction compileMeasures(agg, field$$1) {\n var get = field$$1 || identity,\n all = resolve(agg, true), // assume streaming removes may occur\n init = 'var cell = this.cell; this.valid = 0; this.missing = 0;',\n ctr = 'this.cell = cell; this.init();',\n add = 'if(v==null){++this.missing; return;} if(v!==v) return; ++this.valid;',\n rem = 'if(v==null){--this.missing; return;} if(v!==v) return; --this.valid;',\n set = 'var cell = this.cell;';\n\n all.forEach(function(a) {\n init += a.init;\n add += a.add;\n rem += a.rem;\n });\n agg.slice().sort(compareIndex).forEach(function(a) {\n set += 't[\\'' + a.out + '\\']=' + a.set + ';';\n });\n set += 'return t;';\n\n ctr = Function('cell', ctr);\n ctr.prototype.init = Function(init);\n ctr.prototype.add = Function('v', 't', add);\n ctr.prototype.rem = Function('v', 't', rem);\n ctr.prototype.set = Function('t', set);\n ctr.prototype.get = get;\n ctr.fields = agg.map(function(_) { return _.out; });\n return ctr;\n}\n\nvar bin = function(_) {\n // determine range\n var maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2],\n min = _.extent[0],\n max = _.extent[1],\n span = max - min,\n step, level, minstep, precision, v, i, n, eps;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i=0, n=_.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i-1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n\n // increase step size if too many bins\n while (Math.ceil(span/step) > maxb) { step *= base; }\n\n // decrease step size if allowed\n for (i=0, n=div.length; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max,\n step: step\n };\n};\n\nvar numbers = function(array, f) {\n var numbers = [],\n n = array.length,\n i = -1, a;\n\n if (f == null) {\n while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n }\n return numbers;\n};\n\nfunction number(x) {\n return x === null ? NaN : +x;\n}\n\nexports.random = Math.random;\n\nfunction setRandom(r) {\n exports.random = r;\n}\n\nvar ascending = function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n};\n\nvar bisector = function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n};\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n\nvar ascendingBisect = bisector(ascending);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n\nfunction pair(a, b) {\n return [a, b];\n}\n\nvar number$1 = function(x) {\n return x === null ? NaN : +x;\n};\n\nvar variance = function(values, valueof) {\n var n = values.length,\n m = 0,\n i = -1,\n mean = 0,\n value,\n delta,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number$1(values[i]))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number$1(valueof(values[i], i, values)))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n if (m > 1) return sum / (m - 1);\n};\n\nvar extent = function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n};\n\nvar identity$2 = function(x) {\n return x;\n};\n\nvar sequence = function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n};\n\nvar e10 = Math.sqrt(50);\nvar e5 = Math.sqrt(10);\nvar e2$1 = Math.sqrt(2);\n\nvar ticks = function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n};\n\nfunction tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2$1 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2$1 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2$1) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n\nvar thresholdSturges = function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n};\n\nvar threshold = function(values, p, valueof) {\n if (valueof == null) valueof = number$1;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n};\n\nvar max = function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n};\n\nvar mean = function(values, valueof) {\n var n = values.length,\n m = n,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number$1(values[i]))) sum += value;\n else --m;\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number$1(valueof(values[i], i, values)))) sum += value;\n else --m;\n }\n }\n\n if (m) return sum / m;\n};\n\nvar median = function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n numbers = [];\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number$1(values[i]))) {\n numbers.push(value);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number$1(valueof(values[i], i, values)))) {\n numbers.push(value);\n }\n }\n }\n\n return threshold(numbers.sort(ascending), 0.5);\n};\n\nvar merge$2 = function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n};\n\nvar min = function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n return min;\n};\n\nvar permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n};\n\nvar sum = function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n }\n }\n\n else {\n while (++i < n) {\n if (value = +valueof(values[i], i, values)) sum += value;\n }\n }\n\n return sum;\n};\n\nfunction length(d) {\n return d.length;\n}\n\nvar bootstrapCI = function(array, samples, alpha, f) {\n var values = numbers(array, f),\n n = values.length,\n m = samples,\n a, i, j, mu;\n\n for (j=0, mu=Array(m); j= a && x < b) ? 1 / d : 0;\n };\n\n dist.cdf = function(x) {\n var v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n };\n\n dist.icdf = function(p) {\n return (p >= 0 && p <= 1) ? a - 1 + Math.floor(p * d) : NaN;\n };\n\n return dist.min(min).max(max);\n};\n\nvar randomNormal = function(mean, stdev) {\n var mu,\n sigma,\n next = NaN,\n dist = {};\n\n dist.mean = function(_) {\n if (arguments.length) {\n mu = _ || 0;\n next = NaN;\n return dist;\n } else {\n return mu;\n }\n };\n\n dist.stdev = function(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n next = NaN;\n return dist;\n } else {\n return sigma;\n }\n };\n\n dist.sample = function() {\n var x = 0, y = 0, rds, c;\n if (next === next) {\n x = next;\n next = NaN;\n return x;\n }\n do {\n x = exports.random() * 2 - 1;\n y = exports.random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n next = mu + y * c * sigma;\n return mu + x * c * sigma;\n };\n\n dist.pdf = function(x) {\n var exp = Math.exp(Math.pow(x-mu, 2) / (-2 * Math.pow(sigma, 2)));\n return (1 / (sigma * Math.sqrt(2*Math.PI))) * exp;\n };\n\n // Approximation from West (2009)\n // Better Approximations to Cumulative Normal Functions\n dist.cdf = function(x) {\n var cd,\n z = (x - mu) / sigma,\n Z = Math.abs(z);\n if (Z > 37) {\n cd = 0;\n } else {\n var sum, exp = Math.exp(-Z*Z/2);\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n };\n\n // Approximation of Probit function using inverse error function.\n dist.icdf = function(p) {\n if (p <= 0 || p >= 1) return NaN;\n var x = 2*p - 1,\n v = (8 * (Math.PI - 3)) / (3 * Math.PI * (4-Math.PI)),\n a = (2 / (Math.PI*v)) + (Math.log(1 - Math.pow(x,2)) / 2),\n b = Math.log(1 - (x*x)) / v,\n s = (x > 0 ? 1 : -1) * Math.sqrt(Math.sqrt((a*a) - b) - a);\n return mu + sigma * Math.SQRT2 * s;\n };\n\n return dist.mean(mean).stdev(stdev);\n};\n\n// TODO: support for additional kernels?\nvar randomKDE = function(support, bandwidth) {\n var kernel = randomNormal(),\n dist = {},\n n = 0;\n\n dist.data = function(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n };\n\n dist.bandwidth = function(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n };\n\n dist.sample = function() {\n return support[~~(exports.random() * n)] + bandwidth * kernel.sample();\n };\n\n dist.pdf = function(x) {\n for (var y=0, i=0; i= a && x <= b) ? 1 / d : 0;\n };\n\n dist.cdf = function(x) {\n return x < a ? 0 : x > b ? 1 : (x - a) / d;\n };\n\n dist.icdf = function(p) {\n return (p >= 0 && p <= 1) ? a + p * d : NaN;\n };\n\n return dist.min(min).max(max);\n};\n\nfunction TupleStore(key$$1) {\n this._key = key$$1 ? field(key$$1) : tupleid;\n this.reset();\n}\n\nvar prototype$9 = TupleStore.prototype;\n\nprototype$9.reset = function() {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype$9.add = function(v) {\n this._add.push(v);\n};\n\nprototype$9.rem = function(v) {\n this._rem.push(v);\n};\n\nprototype$9.values = function() {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n\n var a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {}, i, j, v;\n\n // use unique key field to clear removed values\n for (i=0; i= 0) {\n s = get(v[n]) + '';\n if (!map.hasOwnProperty(s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype$9.extent = function(get) {\n if (this._get !== get || !this._ext) {\n var v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\n\nprototype$9.argmin = function(get) {\n return this.extent(get)[0] || {};\n};\n\nprototype$9.argmax = function(get) {\n return this.extent(get)[1] || {};\n};\n\nprototype$9.min = function(get) {\n var m = this.extent(get)[0];\n return m != null ? get(m) : +Infinity;\n};\n\nprototype$9.max = function(get) {\n var m = this.extent(get)[1];\n return m != null ? get(m) : -Infinity;\n};\n\nprototype$9.quartile = function(get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\n\nprototype$9.q1 = function(get) {\n return this.quartile(get)[0];\n};\n\nprototype$9.q2 = function(get) {\n return this.quartile(get)[1];\n};\n\nprototype$9.q3 = function(get) {\n return this.quartile(get)[2];\n};\n\nprototype$9.ci = function(get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\n\nprototype$9.ci0 = function(get) {\n return this.ci(get)[0];\n};\n\nprototype$9.ci1 = function(get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n \"type\": \"Aggregate\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidAggregateOps },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"drop\", \"type\": \"boolean\", \"default\": true },\n { \"name\": \"cross\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype$8 = inherits(Aggregate, Transform);\n\nprototype$8.transform = function(_, pulse) {\n var aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod;\n\n this.stamp = out.stamp;\n\n if (this.value && ((mod = _.modified()) || pulse.modified(this._inputs))) {\n this._prev = this.value;\n this.value = mod ? this.init(_) : {};\n pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); });\n } else {\n this.value = this.value || this.init(_);\n pulse.visit(pulse.REM, function(t) { aggr.rem(t); });\n pulse.visit(pulse.ADD, function(t) { aggr.add(t); });\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(this._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n this.cross();\n }\n\n return aggr.changes(out);\n};\n\nprototype$8.cross = function() {\n var aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(function() { return {}; }),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n var key$$1, i, t, v;\n for (key$$1 in cells) {\n t = cells[key$$1].tuple;\n for (i=0; i} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nfunction Compare(params) {\n Operator.call(this, null, update$1, params);\n}\n\ninherits(Compare, Operator);\n\nfunction update$1(_) {\n return (this.value && !_.modified())\n ? this.value\n : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\n\nCountPattern.Definition = {\n \"type\": \"CountPattern\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"case\", \"type\": \"enum\", \"values\": [\"upper\", \"lower\", \"mixed\"], \"default\": \"mixed\" },\n { \"name\": \"pattern\", \"type\": \"string\", \"default\": \"[\\\\w\\\"]+\" },\n { \"name\": \"stopwords\", \"type\": \"string\", \"default\": \"\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"text\", \"count\"] }\n ]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper': text = text.toUpperCase(); break;\n case 'lower': text = text.toLowerCase(); break;\n }\n return text.match(match);\n}\n\nvar prototype$12 = inherits(CountPattern, Transform);\n\nprototype$12.transform = function(_, pulse) {\n function process(update) {\n return function(tuple) {\n var tokens = tokenize(get(tuple), _.case, match) || [], t;\n for (var i=0, n=tokens.length; i} [params.as] - The names of the output fields.\n */\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\n\nCross.Definition = {\n \"type\": \"Cross\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"filter\", \"type\": \"expr\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"a\", \"b\"] }\n ]\n};\n\nvar prototype$13 = inherits(Cross, Transform);\n\nprototype$13.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n data = this.value,\n as = _.as || ['a', 'b'],\n a = as[0], b = as[1],\n reset = !data\n || pulse.changed(pulse.ADD_REM)\n || _.modified('as')\n || _.modified('filter');\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross$1(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n};\n\nfunction cross$1(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j, left;\n\n for (; i} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nfunction parse$1(def, data) {\n var func = def[FUNCTION];\n if (!Distributions.hasOwnProperty(func)) {\n error$1('Unknown distribution function: ' + func);\n }\n\n var d = Distributions[func]();\n\n for (var name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(function(_) { return parse$1(_, data); }));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.steps=100] - The number of sampling steps.\n */\nfunction Density(params) {\n Transform.call(this, null, params);\n}\n\nvar distributions = [\n {\n \"key\": {\"function\": \"normal\"},\n \"params\": [\n { \"name\": \"mean\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"stdev\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"uniform\"},\n \"params\": [\n { \"name\": \"min\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"max\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"kde\"},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"from\", \"type\": \"data\" },\n { \"name\": \"bandwidth\", \"type\": \"number\", \"default\": 0 }\n ]\n }\n];\n\nvar mixture = {\n \"key\": {\"function\": \"mixture\"},\n \"params\": [\n { \"name\": \"distributions\", \"type\": \"param\", \"array\": true,\n \"params\": distributions },\n { \"name\": \"weights\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nDensity.Definition = {\n \"type\": \"Density\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"steps\", \"type\": \"number\", \"default\": 100 },\n { \"name\": \"method\", \"type\": \"string\", \"default\": \"pdf\",\n \"values\": [\"pdf\", \"cdf\"] },\n { \"name\": \"distribution\", \"type\": \"param\",\n \"params\": distributions.concat(mixture) },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true,\n \"default\": [\"value\", \"density\"] }\n ]\n};\n\nvar prototype$14 = inherits(Density, Transform);\n\nprototype$14.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n var dist = parse$1(_.distribution, source(pulse)),\n method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error$1('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error$1('Missing density extent parameter.');\n }\n method = dist[method];\n\n var as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n step = (domain[1] - domain[0]) / (_.steps || 100),\n values = sequence(domain[0], domain[1] + step/2, step)\n .map(function(v) {\n var tuple = {};\n tuple[as[0]] = v;\n tuple[as[1]] = method(v);\n return ingest(tuple);\n });\n\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n};\n\nfunction source(pulse) {\n return function() { return pulse.materialize(pulse.SOURCE).source; };\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nfunction Extent(params) {\n Transform.call(this, [+Infinity, -Infinity], params);\n}\n\nExtent.Definition = {\n \"type\": \"Extent\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true }\n ]\n};\n\nvar prototype$15 = inherits(Extent, Transform);\n\nprototype$15.transform = function(_, pulse) {\n var extent = this.value,\n field$$1 = _.field,\n min = extent[0],\n max = extent[1],\n flag = pulse.ADD,\n mod;\n\n mod = pulse.changed()\n || pulse.modified(field$$1.fields)\n || _.modified('field');\n\n if (mod) {\n flag = pulse.SOURCE;\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(flag, function(t) {\n var v = field$$1(t);\n if (v != null) {\n // coerce to number\n v = +v;\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n this.value = [min, max];\n};\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n}\n\nvar prototype$17 = inherits(Subflow, Operator);\n\nprototype$17.connect = function(target) {\n this.targets().add(target);\n return (target.source = this);\n};\n\n/**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\nprototype$17.add = function(t) {\n this.value.add.push(t);\n};\n\n/**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\nprototype$17.rem = function(t) {\n this.value.rem.push(t);\n};\n\n/**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\nprototype$17.mod = function(t) {\n this.value.mod.push(t);\n};\n\n/**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\nprototype$17.init = function(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n};\n\n/**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\nprototype$17.evaluate = function() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n};\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n var a = this._targets = [];\n a.active = 0;\n a.forEach = function(f) {\n for (var i=0, n=a.active; i df.cleanThreshold) df.runAfter(cache.clean);\n return pulse;\n};\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nfunction Field(params) {\n Operator.call(this, null, update$2, params);\n}\n\ninherits(Field, Operator);\n\nfunction update$2(_) {\n return (this.value && !_.modified()) ? this.value\n : isArray(_.name) ? array(_.name).map(function(f) { return field(f); })\n : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\n\nFilter.Definition = {\n \"type\": \"Filter\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"expr\", \"type\": \"expr\", \"required\": true }\n ]\n};\n\nvar prototype$18 = inherits(Filter, Transform);\n\nprototype$18.transform = function(_, pulse) {\n var df = pulse.dataflow,\n cache = this.value, // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr,\n isMod = true;\n\n pulse.visit(pulse.REM, function(t) {\n var id$$1 = tupleid(t);\n if (!cache.has(id$$1)) rem.push(t);\n else cache.delete(id$$1);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n if (test(t, _)) add.push(t);\n else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n var id$$1 = tupleid(t),\n b = test(t, _),\n s = cache.get(id$$1);\n if (b && s) {\n cache.delete(id$$1);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id$$1, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n};\n\n// use either provided alias or accessor field name\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map(function(f, i) {\n return as[i] || accessorName(f);\n });\n}\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\n\nFlatten.Definition = {\n \"type\": \"Flatten\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true }\n ]\n};\n\nvar prototype$19 = inherits(Flatten, Transform);\n\nprototype$19.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, function(t) {\n var arrays = fields.map(function(f) { return f(t); }),\n maxlen = arrays.reduce(function(l, a) { return Math.max(l, a.length); }, 0),\n i = 0, j, d, v;\n\n for (; i} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\n\nFold.Definition = {\n \"type\": \"Fold\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"key\", \"value\"] }\n ]\n};\n\nvar prototype$20 = inherits(Fold, Transform);\n\nprototype$20.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n\n out.rem = this.value;\n\n pulse.visit(pulse.SOURCE, function(t) {\n for (var i=0, d; i 0) {\n // need more tuples, generate and add\n for (add=[]; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length\n ? out.materialize(out.ADD).add.concat(add)\n : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length\n ? out.materialize(out.REM).rem.concat(rem)\n : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n};\n\nvar Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\n\nvar Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\n\nImpute.Definition = {\n \"type\": \"Impute\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"key\", \"type\": \"field\", \"required\": true },\n { \"name\": \"keyvals\", \"array\": true },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"method\", \"type\": \"enum\", \"default\": \"value\",\n \"values\": [\"value\", \"mean\", \"median\", \"max\", \"min\"] },\n { \"name\": \"value\", \"default\": 0 }\n ]\n};\n\nvar prototype$23 = inherits(Impute, Transform);\n\nfunction getValue(_) {\n var m = _.method || Methods.value, v;\n\n if (Methods[m] == null) {\n error$1('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return function() { return v; };\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n var f = _.field;\n return function(t) { return t ? f(t) : NaN; };\n}\n\nprototype$23.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field$$1 = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group, value, gVals, kVal, g, i, j, l, n, t;\n\n for (g=0, l=groups.length; g} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nfunction Key(params) {\n Operator.call(this, null, update$3, params);\n}\n\ninherits(Key, Operator);\n\nfunction update$3(_) {\n return (this.value && !_.modified()) ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\n\nLookup.Definition = {\n \"type\": \"Lookup\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"index\", \"type\": \"index\", \"params\": [\n {\"name\": \"from\", \"type\": \"data\", \"required\": true },\n {\"name\": \"key\", \"type\": \"field\", \"required\": true }\n ] },\n { \"name\": \"values\", \"type\": \"field\", \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true },\n { \"name\": \"default\", \"default\": null }\n ]\n};\n\nvar prototype$25 = inherits(Lookup, Transform);\n\nprototype$25.transform = function(_, pulse) {\n var out = pulse,\n as = _.as,\n keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default==null ? null : _.default,\n reset = _.modified(),\n flag = reset ? pulse.SOURCE : pulse.ADD,\n n = keys.length,\n set, m, mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error$1('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error$1('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n\n set = function(t) {\n for (var i=0, k=0, j, v; i>} params.extents - The input extents.\n */\nfunction MultiExtent(params) {\n Operator.call(this, null, update$4, params);\n}\n\ninherits(MultiExtent, Operator);\n\nfunction update$4(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n var min = +Infinity,\n max = -Infinity,\n ext = _.extents,\n i, n, e;\n\n for (i=0, n=ext.length; i max) max = e[1];\n }\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nfunction MultiValues(params) {\n Operator.call(this, null, update$5, params);\n}\n\ninherits(MultiValues, Operator);\n\nfunction update$5(_) {\n return (this.value && !_.modified())\n ? this.value\n : _.values.reduce(function(data, _) { return data.concat(_); }, []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Params(params) {\n Transform.call(this, null, params);\n}\n\ninherits(Params, Transform);\n\nParams.prototype.transform = function(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n};\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\n\nPivot.Definition = {\n \"type\": \"Pivot\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"value\", \"type\": \"field\", \"required\": true },\n { \"name\": \"op\", \"type\": \"enum\", \"values\": ValidAggregateOps, \"default\": \"sum\" },\n { \"name\": \"limit\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype$26 = inherits(Pivot, Aggregate);\n\nprototype$26._transform = prototype$26.transform;\n\nprototype$26.transform = function(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n};\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n var key$$1 = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key$$1).concat(accessorFields(value)),\n keys = pivotKeys(key$$1, _.limit || 0, pulse);\n\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(function() { return op; }),\n fields: keys.map(function(k) { return get$1(k, key$$1, value, fields); }),\n as: keys.map(function(k) { return k + ''; }),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get$1(k, key$$1, value, fields) {\n return accessor(\n function(d) { return key$$1(d) === k ? value(d) : NaN; },\n fields,\n k + ''\n );\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key$$1, limit, pulse) {\n var map = {},\n list = [];\n\n pulse.visit(pulse.SOURCE, function(t) {\n var k = key$$1(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n\n // TODO? Move this comparator to vega-util?\n list.sort(function(u, v) {\n return (uv||v==null) && u!=null ? 1\n : ((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))!==u && v===v ? -1\n : v!==v && u===u ? 1 : 0;\n });\n\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\n\nvar prototype$27 = inherits(PreFacet, Facet);\n\nprototype$27.transform = function(_, pulse) {\n var self = this,\n flow = _.subflow,\n field$$1 = _.field;\n\n if (_.modified('field') || field$$1 && pulse.modified(accessorFields(field$$1))) {\n error$1('PreFacet does not support field modification.');\n }\n\n this._targets.active = 0; // reset list of active subflows\n\n pulse.visit(pulse.MOD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field$$1 ? field$$1(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field$$1 ? field$$1(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t);\n });\n\n pulse.visit(pulse.REM, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field$$1 ? field$$1(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t);\n });\n\n return pulse;\n};\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nfunction Project(params) {\n Transform.call(this, null, params);\n}\n\nProject.Definition = {\n \"type\": \"Project\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n ]\n};\n\nvar prototype$28 = inherits(Project, Transform);\n\nprototype$28.transform = function(_, pulse) {\n var fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive$$1 = fields\n ? function(s, t) { return project(s, t, fields, as); }\n : rederive,\n out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n out = pulse.fork(pulse.NO_SOURCE);\n\n pulse.visit(pulse.REM, function(t) {\n var id$$1 = tupleid(t);\n out.rem.push(lut[id$$1]);\n lut[id$$1] = null;\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var dt = derive$$1(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n\n pulse.visit(pulse.MOD, function(t) {\n out.mod.push(derive$$1(t, lut[tupleid(t)]));\n });\n\n return out;\n};\n\nfunction project(s, t, fields, as) {\n for (var i=0, n=fields.length; i= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, function(t) {\n var id$$1 = tupleid(t);\n if (map[id$$1]) {\n map[id$$1] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(function(t) { return map[tupleid(t)] !== -1; });\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, function(t) {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n for (var i=0, n=res.length-num; i df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n};\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nfunction Values(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$35 = inherits(Values, Transform);\n\nprototype$35.transform = function(_, pulse) {\n var run = !this.value\n || _.modified('field')\n || _.modified('sort')\n || pulse.changed()\n || (_.sort && pulse.modified(_.sort.fields));\n\n if (run) {\n this.value = (_.sort\n ? pulse.source.slice().sort(_.sort)\n : pulse.source).map(_.field);\n }\n};\n\nfunction WindowOp(op, field$$1, param, as) {\n var fn = WindowOps[op](field$$1, param);\n return {\n init: fn.init || zero,\n update: function(w, t) { t[as] = fn.next(w); }\n };\n}\n\nvar WindowOps = {\n row_number: function() {\n return {\n next: function(w) { return w.index + 1; }\n };\n },\n rank: function() {\n var rank;\n return {\n init: function() { rank = 1; },\n next: function(w) {\n var i = w.index,\n data = w.data;\n return (i && w.compare(data[i - 1], data[i])) ? (rank = i + 1) : rank;\n }\n };\n },\n dense_rank: function() {\n var drank;\n return {\n init: function() { drank = 1; },\n next: function(w) {\n var i = w.index,\n d = w.data;\n return (i && w.compare(d[i - 1], d[i])) ? ++drank : drank;\n }\n };\n },\n percent_rank: function() {\n var rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: function(w) {\n return (next(w) - 1) / (w.data.length - 1);\n }\n };\n },\n cume_dist: function() {\n var cume;\n return {\n init: function() { cume = 0; },\n next: function(w) {\n var i = w.index,\n d = w.data,\n c = w.compare;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function(field$$1, num) {\n num = +num;\n if (!(num > 0)) error$1('ntile num must be greater than zero.');\n var cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: function(w) { return Math.ceil(num * next(w)); }\n };\n },\n\n lag: function(field$$1, offset) {\n offset = +offset || 1;\n return {\n next: function(w) {\n var i = w.index - offset;\n return i >= 0 ? field$$1(w.data[i]) : null;\n }\n };\n },\n lead: function(field$$1, offset) {\n offset = +offset || 1;\n return {\n next: function(w) {\n var i = w.index + offset,\n d = w.data;\n return i < d.length ? field$$1(d[i]) : null;\n }\n };\n },\n\n first_value: function(field$$1) {\n return {\n next: function(w) { return field$$1(w.data[w.i0]); }\n };\n },\n last_value: function(field$$1) {\n return {\n next: function(w) { return field$$1(w.data[w.i1 - 1]); }\n }\n },\n nth_value: function(field$$1, nth) {\n nth = +nth;\n if (!(nth > 0)) error$1('nth_value nth must be greater than zero.');\n return {\n next: function(w) {\n var i = w.i0 + (nth - 1);\n return i < w.i1 ? field$$1(w.data[i]) : null;\n }\n }\n }\n};\n\nvar ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n var self = this,\n ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = self.outputs = [],\n windows = self.windows = [],\n inputs = {},\n map = {},\n countOnly = true,\n counts = [],\n measures = [];\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(function(_) { inputs[_] = 1; });\n }\n visitInputs(_.sort);\n\n ops.forEach(function(op, i) {\n var field$$1 = fields[i],\n mname = accessorName(field$$1),\n name = measureName(op, mname, as[i]);\n\n visitInputs(field$$1);\n outputs.push(name);\n\n // Window operation\n if (WindowOps.hasOwnProperty(op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n }\n\n // Aggregate operation\n else {\n if (field$$1 == null && op !== 'count') {\n error$1('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n var m = map[mname];\n if (!m) {\n m = (map[mname] = []);\n m.field = field$$1;\n measures.push(m);\n }\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n self.cell = cell(measures, counts, countOnly);\n }\n\n self.inputs = Object.keys(inputs);\n}\n\nvar prototype$37 = WindowState.prototype;\n\nprototype$37.init = function() {\n this.windows.forEach(function(_) { _.init(); });\n if (this.cell) this.cell.init();\n};\n\nprototype$37.update = function(w, t) {\n var self = this,\n cell = self.cell,\n wind = self.windows,\n data = w.data,\n m = wind && wind.length,\n j;\n\n if (cell) {\n for (j=w.p0; j} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\n\nWindow.Definition = {\n \"type\": \"Window\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidWindowOps.concat(ValidAggregateOps) },\n { \"name\": \"params\", \"type\": \"number\", \"null\": true, \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"frame\", \"type\": \"number\", \"null\": true, \"array\": true, \"length\": 2, \"default\": [null, 0] },\n { \"name\": \"ignorePeers\", \"type\": \"boolean\", \"default\": false }\n ]\n};\n\nvar prototype$36 = inherits(Window, Transform);\n\nprototype$36.transform = function(_, pulse) {\n var self = this,\n state = self.state,\n mod = _.modified(),\n i, n;\n\n this.stamp = pulse.stamp;\n\n // initialize window state\n if (!state || mod) {\n state = self.state = new WindowState(_);\n }\n\n // retrieve group for a tuple\n var key$$1 = groupkey(_.groupby);\n function group(t) { return self.group(key$$1(t)); }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n self.value = {};\n pulse.visit(pulse.SOURCE, function(t) { group(t).add(t); });\n } else {\n pulse.visit(pulse.REM, function(t) { group(t).remove(t); });\n pulse.visit(pulse.ADD, function(t) { group(t).add(t); });\n }\n\n // perform window calculations for each modified partition\n for (i=0, n=self._mlen; i 0 && !c(d[r0], d[r0-1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1+1])) w.i1 = bisect.right(d, d[r1]);\n}\n\n\n\nvar tx = Object.freeze({\n\taggregate: Aggregate,\n\tbin: Bin,\n\tcollect: Collect,\n\tcompare: Compare,\n\tcountpattern: CountPattern,\n\tcross: Cross,\n\tdensity: Density,\n\textent: Extent,\n\tfacet: Facet,\n\tfield: Field,\n\tfilter: Filter,\n\tflatten: Flatten,\n\tfold: Fold,\n\tformula: Formula,\n\tgenerate: Generate,\n\timpute: Impute,\n\tjoinaggregate: JoinAggregate,\n\tkey: Key,\n\tlookup: Lookup,\n\tmultiextent: MultiExtent,\n\tmultivalues: MultiValues,\n\tparams: Params,\n\tpivot: Pivot,\n\tprefacet: PreFacet,\n\tproject: Project,\n\tproxy: Proxy,\n\trelay: Relay,\n\tsample: Sample,\n\tsequence: Sequence,\n\tsieve: Sieve,\n\tsubflow: Subflow,\n\ttupleindex: TupleIndex,\n\tvalues: Values,\n\twindow: Window\n});\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\n\nvar prototype$39 = Bounds.prototype;\n\nprototype$39.clone = function() {\n return new Bounds(this);\n};\n\nprototype$39.clear = function() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n};\n\nprototype$39.empty = function() {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n};\n\nprototype$39.set = function(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n};\n\nprototype$39.add = function(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n};\n\nprototype$39.expand = function(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n};\n\nprototype$39.round = function() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n};\n\nprototype$39.translate = function(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n};\n\nprototype$39.rotate = function(angle, x, y) {\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x*cos + y*sin,\n cy = y - x*sin - y*cos,\n x1 = this.x1, x2 = this.x2,\n y1 = this.y1, y2 = this.y2;\n\n return this.clear()\n .add(cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy)\n .add(cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy)\n .add(cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy)\n .add(cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy);\n};\n\nprototype$39.union = function(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype$39.intersect = function(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype$39.encloses = function(b) {\n return b && (\n this.x1 <= b.x1 &&\n this.x2 >= b.x2 &&\n this.y1 <= b.y1 &&\n this.y2 >= b.y2\n );\n};\n\nprototype$39.alignsWith = function(b) {\n return b && (\n this.x1 == b.x1 ||\n this.x2 == b.x2 ||\n this.y1 == b.y1 ||\n this.y2 == b.y2\n );\n};\n\nprototype$39.intersects = function(b) {\n return b && !(\n this.x2 < b.x1 ||\n this.x1 > b.x2 ||\n this.y2 < b.y1 ||\n this.y1 > b.y2\n );\n};\n\nprototype$39.contains = function(x, y) {\n return !(\n x < this.x1 ||\n x > this.x2 ||\n y < this.y1 ||\n y > this.y2\n );\n};\n\nprototype$39.width = function() {\n return this.x2 - this.x1;\n};\n\nprototype$39.height = function() {\n return this.y2 - this.y1;\n};\n\nvar gradient_id = 0;\n\nvar Gradient = function(p0, p1) {\n var stops = [], gradient;\n return gradient = {\n id: 'gradient_' + (gradient_id++),\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function(offset, color) {\n stops.push({offset: offset, color: color});\n return gradient;\n }\n };\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = (this.bounds || new Bounds());\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = (this.items || []);\n}\n\ninherits(GroupItem, Item);\n\nfunction domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n var c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\n\nfunction domImage() {\n return typeof Image !== 'undefined' ? Image : null;\n}\n\nvar NodeCanvas;\n\ntry {\n // try to load canvas module\n NodeCanvas = require('canvas');\n if (!NodeCanvas) throw 1;\n} catch (e) {\n try {\n // if canvas fails, try to load canvas-prebuilt\n NodeCanvas = require('canvas-prebuilt');\n } catch (e2) {\n // if all options fail, set to null\n NodeCanvas = null;\n }\n}\n\nfunction nodeCanvas(w, h) {\n if (NodeCanvas) {\n try {\n return new NodeCanvas(w, h);\n } catch (e) {\n // do nothing, return null on error\n }\n }\n return null;\n}\n\nfunction nodeImage() {\n return NodeCanvas && NodeCanvas.Image || null;\n}\n\nfunction canvas(w, h) {\n return domCanvas(w, h) || nodeCanvas(w, h) || null;\n}\n\nfunction image() {\n return domImage() || nodeImage() || null;\n}\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nvar prototype$40 = ResourceLoader.prototype;\n\nprototype$40.pending = function() {\n return this._pending;\n};\n\nfunction increment(loader$$1) {\n loader$$1._pending += 1;\n}\n\nfunction decrement(loader$$1) {\n loader$$1._pending -= 1;\n}\n\nprototype$40.sanitizeURL = function(uri) {\n var loader$$1 = this;\n increment(loader$$1);\n\n return loader$$1._loader.sanitize(uri, {context:'href'})\n .then(function(opt) {\n decrement(loader$$1);\n return opt;\n })\n .catch(function() {\n decrement(loader$$1);\n return null;\n });\n};\n\nprototype$40.loadImage = function(uri) {\n var loader$$1 = this,\n Image = image();\n increment(loader$$1);\n\n return loader$$1._loader\n .sanitize(uri, {context: 'image'})\n .then(function(opt) {\n var url = opt.href;\n if (!url || !Image) throw {url: url};\n\n var img = new Image();\n\n img.onload = function() {\n decrement(loader$$1);\n img.loaded = true;\n };\n\n img.onerror = function() {\n decrement(loader$$1);\n img.loaded = false;\n };\n\n img.src = url;\n return img;\n })\n .catch(function(e) {\n decrement(loader$$1);\n return {loaded: false, width: 0, height: 0, src: e && e.url || ''};\n });\n};\n\nprototype$40.ready = function() {\n var loader$$1 = this;\n return new Promise(function(accept) {\n function poll(value) {\n if (!loader$$1.pending()) accept(value);\n else setTimeout(function() { poll(true); }, 10);\n }\n poll(false);\n });\n};\n\nvar pi = Math.PI;\nvar tau = 2 * pi;\nvar epsilon = 1e-6;\nvar tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon)) {}\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nvar constant$2 = function(x) {\n return function constant() {\n return x;\n };\n};\n\nvar abs = Math.abs;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar max$1 = Math.max;\nvar min$1 = Math.min;\nvar sin = Math.sin;\nvar sqrt = Math.sqrt;\n\nvar epsilon$1 = 1e-12;\nvar pi$1 = Math.PI;\nvar halfPi = pi$1 / 2;\nvar tau$1 = 2 * pi$1;\n\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? pi$1 : Math.acos(x);\n}\n\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max$1(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nvar d3_arc = function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant$2(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon$1)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau$1 - epsilon$1) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon$1) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min$1(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon$1) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon$1) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi$1) {\n var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min$1(rc, (r0 - lc) / (kc - 1));\n rc1 = min$1(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon$1)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon$1) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon$1) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$1 / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant$2(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant$2(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant$2(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant$2(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$2(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$2(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$2(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n};\n\nfunction Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nvar curveLinear = function(context) {\n return new Linear(context);\n};\n\nfunction x$1(p) {\n return p[0];\n}\n\nfunction y$1(p) {\n return p[1];\n}\n\nvar line$1 = function() {\n var x = x$1,\n y = y$1,\n defined = constant$2(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$2(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$2(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$2(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n};\n\nvar area$1 = function() {\n var x0 = x$1,\n x1 = null,\n y0 = constant$2(0),\n y1 = y$1,\n defined = constant$2(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line$1().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$2(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$2(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$2(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$2(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$2(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$2(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$2(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n};\n\nvar circle = {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi$1);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau$1);\n }\n};\n\nvar d3_symbol = function() {\n var type = constant$2(circle),\n size = constant$2(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant$2(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant$2(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n};\n\nvar noop$1 = function() {};\n\nfunction point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nfunction Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nvar curveBasis = function(context) {\n return new Basis(context);\n};\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop$1,\n areaEnd: noop$1,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nvar curveBasisClosed = function(context) {\n return new BasisClosed(context);\n};\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nvar curveBasisOpen = function(context) {\n return new BasisOpen(context);\n};\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nvar curveBundle = (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n\nfunction point$1(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nfunction Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point$1(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point$1(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar curveCardinal = (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n\nfunction CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop$1,\n areaEnd: noop$1,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point$1(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar curveCardinalClosed = (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n\nfunction CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point$1(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar curveCardinalOpen = (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n\nfunction point$2(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon$1) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon$1) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point$2(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar curveCatmullRom = (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop$1,\n areaEnd: noop$1,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point$2(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar curveCatmullRomClosed = (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point$2(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar curveCatmullRomOpen = (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop$1,\n areaEnd: noop$1,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nvar curveLinearClosed = function(context) {\n return new LinearClosed(context);\n};\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point$3(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point$3(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n};\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nfunction monotoneX(context) {\n return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n return new MonotoneY(context);\n}\n\nfunction Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nvar curveNatural = function(context) {\n return new Natural(context);\n};\n\nfunction Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nvar curveStep = function(context) {\n return new Step(context, 0.5);\n};\n\nfunction stepBefore(context) {\n return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n return new Step(context, 1);\n}\n\nvar lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: monotoneY,\n vertical: monotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: stepAfter\n },\n 'step-before': {\n curve: stepBefore\n }\n};\n\nfunction curves(type, orientation, tension) {\n var entry = lookup.hasOwnProperty(type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n\n// Path parsing and rendering code adapted from fabric.js -- Thanks!\nvar cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 };\nvar regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\d)([-+])/g, /\\s|,|###/];\n\nvar pathParse = function(pathstr) {\n var result = [],\n path,\n curr,\n chunks,\n parsed, param,\n cmd, len, i, j, n, m;\n\n // First, break path into command sequence\n path = pathstr\n .slice()\n .replace(regexp[0], '###$1')\n .split(regexp[1])\n .slice(1);\n\n // Next, parse each command in turn\n for (i=0, n=path.length; i len) {\n for (j=1, m=parsed.length; j 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n var a00 = cos_th / rx;\n var a01 = sin_th / rx;\n var a10 = (-sin_th) / ry;\n var a11 = (cos_th) / ry;\n var x0 = a00 * ox + a01 * oy;\n var y0 = a10 * ox + a11 * oy;\n var x1 = a00 * x + a01 * y;\n var y1 = a10 * x + a11 * y;\n\n var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0);\n var sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n var sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0);\n var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0);\n\n var th0 = Math.atan2(y0-yc, x0-xc);\n var th1 = Math.atan2(y1-yc, x1-xc);\n\n var th_arc = th1-th0;\n if (th_arc < 0 && sweep === 1){\n th_arc += 2 * Math.PI;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= 2 * Math.PI;\n }\n\n var segs = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n var result = [];\n for (var i=0; i circleThreshold) {\n add$1(cx - r, cy - r);\n add$1(cx + r, cy + r);\n return;\n }\n\n var xmin = Infinity, xmax = -Infinity,\n ymin = Infinity, ymax = -Infinity,\n s, i, x, y;\n\n function update(a) {\n x = r * Math.cos(a);\n y = r * Math.sin(a);\n if (x < xmin) xmin = x;\n if (x > xmax) xmax = x;\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n // Sample end points and interior points aligned with 90 degrees\n update(sa);\n update(ea);\n\n if (ea !== sa) {\n sa = sa % tau$3; if (sa < 0) sa += tau$3;\n ea = ea % tau$3; if (ea < 0) ea += tau$3;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa; sa = ea; ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= tau$3;\n s = sa - (sa % halfPi$1);\n for (i=0; i<4 && s>ea; ++i, s-=halfPi$1) update(s);\n } else {\n s = sa - (sa % halfPi$1) + halfPi$1;\n for (i=0; i<4 && s 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n};\n\nvar Empty$1 = [];\n\nvar stroke = function(context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n\n if (lw <= 0) return false;\n\n opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity);\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty$1);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n};\n\nfunction compare$1(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n\n var items = scene.items,\n output = [], item, i, n;\n\n for (i=0, n=items.length; i= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items=scene.items, i=items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n\nfunction drawAll(path) {\n return function(context, scene, bounds) {\n visit(scene, function(item) {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\n\nfunction drawOne(path) {\n return function(context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n\n if (path(context, items)) return;\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nvar trueFunc = function() { return true; };\n\nfunction pick(test) {\n if (!test) test = trueFunc;\n\n return function(context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n\n return pickVisit(scene, function(item) {\n var b = item.bounds;\n // first hit test against bounding box\n if ((b && !b.contains(gx, gy)) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\n\nfunction hitPath(path, filled) {\n return function(context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = (filled == null) ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke, lw, lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false :\n (fill && context.isPointInPath(x, y)) ||\n (stroke && context.isPointInStroke(x, y));\n };\n}\n\nfunction pickPath(path) {\n return pick(hitPath(path));\n}\n\nvar translate = function(x, y) {\n return 'translate(' + x + ',' + y + ')';\n};\n\nvar translateItem = function(item) {\n return translate(item.x || 0, item.y || 0);\n};\n\nvar markItemPath = function(type, shape) {\n\n function attr(emit, item) {\n emit('transform', translateItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n shape(context(bounds), item);\n return boundStroke(bounds, item)\n .translate(item.x || 0, item.y || 0);\n }\n\n function draw(context$$1, item) {\n var x = item.x || 0,\n y = item.y || 0;\n context$$1.translate(x, y);\n context$$1.beginPath();\n shape(context$$1, item);\n context$$1.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw)\n };\n\n};\n\nvar arc = markItemPath('arc', arc$1);\n\nvar markMultiItemPath = function(type, shape) {\n\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(context(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context$$1, items) {\n context$$1.beginPath();\n shape(context$$1, items);\n }\n\n var hit = hitPath(draw);\n\n function pick$$1(context$$1, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context$$1.pixelRatio;\n y *= context$$1.pixelRatio;\n return hit(context$$1, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick$$1\n };\n\n};\n\nvar area$2 = markMultiItemPath('area', area);\n\nvar clip_id = 1;\n\nfunction resetSVGClipId() {\n clip_id = 1;\n}\n\nvar clip = function(renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id$$1 = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id$$1] || (defs.clipping[id$$1] = {id: id$$1});\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id$$1 + ')';\n};\n\nvar StrokeOffset = 0.5;\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction background(emit, item) {\n var offset = item.stroke ? StrokeOffset : 0;\n emit('class', 'background');\n emit('d', rectangle(null, item, offset, offset));\n}\n\nfunction foreground(emit, item, renderer) {\n var url = item.clip ? clip(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n if (!group.clip && group.items) {\n var items = group.items;\n for (var j=0, m=items.length; j 0) {\n backgroundPath(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n }\n\n // set clip and bounds\n if (group.clip) {\n context.beginPath();\n context.rect(0, 0, w, h);\n context.clip();\n }\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, function(item) {\n renderer.draw(context, item, bounds);\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n });\n}\n\nfunction pick$1(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n var handler = this,\n cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n\n return pickVisit(scene, function(group) {\n var hit, dx, dy, b;\n\n // first hit test against bounding box\n // if a group is clipped, that should be handled by the bounds check.\n b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, so test sub-groups\n dx = (group.x || 0);\n dy = (group.y || 0);\n\n context.save();\n context.translate(dx, dy);\n\n dx = gx - dx;\n dy = gy - dy;\n\n // hit test against contained marks\n hit = pickVisit(group, function(mark) {\n return pickMark(mark, dx, dy)\n ? handler.pick(mark, x, y, dx, dy)\n : null;\n });\n\n // hit test against group background\n if (!hit && scene.interactive !== false\n && (group.fill || group.stroke)\n && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group')\n && mark.bounds && mark.bounds.contains(x, y);\n}\n\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1,\n background: background,\n foreground: foreground\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || image.url !== item.url) {\n image = {loaded: false, width: 0, height: 0};\n renderer.loadImage(item.url).then(function(image) {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr$1(emit, item, renderer) {\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n a = item.aspect === false ? 'none' : 'xMidYMid';\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n emit('href', image.src || '', 'http://www.w3.org/1999/xlink', 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', a);\n}\n\nfunction bound$1(bounds, item) {\n var image = item.image,\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : (image && image.width)) || 0,\n h = (item.height != null ? item.height : (image && image.height)) || 0;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw$1(context, scene, bounds) {\n var renderer = this;\n\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n opacity, ar0, ar1, t;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n if (item.aspect !== false) {\n ar0 = image.width / image.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (image.loaded) {\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.drawImage(image, x, y, w, h);\n }\n });\n}\n\nvar image$1 = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick(),\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line$2 = markMultiItemPath('line', line);\n\nfunction attr$2(emit, item) {\n emit('transform', translateItem(item));\n emit('d', item.path);\n}\n\nfunction path$2(context$$1, item) {\n var path = item.path;\n if (path == null) return true;\n\n var cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n pathRender(context$$1, cache, item.x, item.y);\n}\n\nfunction bound$2(bounds, item) {\n return path$2(context(bounds), item)\n ? bounds.set(0, 0, 0, 0)\n : boundStroke(bounds, item);\n}\n\nvar path$3 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(path$2),\n pick: pickPath(path$2)\n};\n\nfunction attr$3(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound$3(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(\n x = item.x || 0,\n y = item.y || 0,\n (x + item.width) || 0,\n (y + item.height) || 0\n ), item);\n}\n\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2)\n};\n\nfunction attr$4(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x||0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y||0) : 0);\n}\n\nfunction bound$4(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(\n x1 = item.x || 0,\n y1 = item.y || 0,\n item.x2 != null ? item.x2 : x1,\n item.y2 != null ? item.y2 : y1\n ), item);\n}\n\nfunction path$4(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\n\nfunction draw$3(context, scene, bounds) {\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path$4(context, item, opacity)) {\n context.stroke();\n }\n });\n}\n\nfunction hit(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path$4(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick(hit)\n};\n\nvar shape$1 = markItemPath('shape', shape);\n\nvar symbol$1 = markItemPath('symbol', symbol);\n\nvar context$1;\nvar fontHeight;\n\nvar textMetrics = {\n height: height,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\n\nuseCanvas(true);\n\n// make dumb, simple estimate if no canvas is available\nfunction estimateWidth(item) {\n fontHeight = height(item);\n return estimate(textValue(item));\n}\n\nfunction estimate(text) {\n return ~~(0.8 * text.length * fontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item) {\n context$1.font = font(item);\n return measure$1(textValue(item));\n}\n\nfunction measure$1(text) {\n return context$1.measureText(text).width;\n}\n\nfunction height(item) {\n return item.fontSize != null ? item.fontSize : 11;\n}\n\nfunction useCanvas(use) {\n context$1 = use && (context$1 = canvas(1,1)) ? context$1.getContext('2d') : null;\n textMetrics.width = context$1 ? measureWidth : estimateWidth;\n}\n\nfunction textValue(item) {\n var s = item.text;\n if (s == null) {\n return '';\n } else {\n return item.limit > 0 ? truncate$1(item) : s + '';\n }\n}\n\nfunction truncate$1(item) {\n var limit = +item.limit,\n text = item.text + '',\n width;\n\n if (context$1) {\n context$1.font = font(item);\n width = measure$1;\n } else {\n fontHeight = height(item);\n width = estimate;\n }\n\n if (width(text) < limit) return text;\n\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length, mid;\n\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = (lo + hi >>> 1);\n if (width(text.slice(mid)) > limit) lo = mid + 1;\n else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;\n else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\n\n\nfunction font(item, quote) {\n var font = item.font;\n if (quote && font) {\n font = String(font).replace(/\"/g, '\\'');\n }\n return '' +\n (item.fontStyle ? item.fontStyle + ' ' : '') +\n (item.fontVariant ? item.fontVariant + ' ' : '') +\n (item.fontWeight ? item.fontWeight + ' ' : '') +\n height(item) + 'px ' +\n (font || 'sans-serif');\n}\n\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n var baseline = item.baseline,\n h = height(item);\n return Math.round(\n baseline === 'top' ? 0.79*h :\n baseline === 'middle' ? 0.30*h :\n baseline === 'bottom' ? -0.21*h : 0\n );\n}\n\nvar textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\n\nvar tempBounds = new Bounds();\n\nfunction attr$5(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0,\n r = item.radius || 0, t;\n\n if (r) {\n t = (item.theta || 0) - Math.PI/2;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' rotate('+a+')';\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\n\nfunction bound$5(bounds, item, noRotate) {\n var h = textMetrics.height(item),\n a = item.align,\n r = item.radius || 0,\n x = item.x || 0,\n y = item.y || 0,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset\n w, t;\n\n if (r) {\n t = (item.theta || 0) - Math.PI/2;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n // horizontal alignment\n w = textMetrics.width(item);\n if (a === 'center') {\n dx -= (w / 2);\n } else if (a === 'right') {\n dx -= w;\n } else {\n // left by default, do nothing\n }\n\n bounds.set(dx+=x, dy+=y, dx+w, dy+h);\n if (item.angle && !noRotate) {\n bounds.rotate(item.angle*Math.PI/180, x, y);\n }\n return bounds.expand(noRotate || !w ? 0 : 1);\n}\n\nfunction draw$4(context, scene, bounds) {\n visit(scene, function(item) {\n var opacity, x, y, r, t, str;\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n if (!(str = textValue(item))) return; // get text string\n\n opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n\n context.font = font(item);\n context.textAlign = item.align || 'left';\n\n x = item.x || 0;\n y = item.y || 0;\n if ((r = item.radius)) {\n t = (item.theta || 0) - Math.PI/2;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * Math.PI/180);\n x = y = 0; // reset x, y\n }\n x += (item.dx || 0);\n y += (item.dy || 0) + offset(item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n if (item.angle) context.restore();\n });\n}\n\nfunction hit$1(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var b = bound$5(tempBounds, item, true),\n a = -item.angle * Math.PI / 180,\n cos = Math.cos(a),\n sin = Math.sin(a),\n ix = item.x,\n iy = item.y,\n px = cos*gx - sin*gy + (ix - ix*cos + iy*sin),\n py = sin*gx + cos*gy + (iy - ix*sin - iy*cos);\n\n return b.contains(px, py);\n}\n\nvar text$1 = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick(hit$1)\n};\n\nvar trail$1 = markMultiItemPath('trail', trail);\n\nvar marks = {\n arc: arc,\n area: area$2,\n group: group,\n image: image$1,\n line: line$2,\n path: path$3,\n rect: rect,\n rule: rule,\n shape: shape$1,\n symbol: symbol$1,\n text: text$1,\n trail: trail$1\n};\n\nvar boundItem$1 = function(item, func, opt) {\n var type = marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n};\n\nvar DUMMY = {mark: null};\n\nvar boundMark = function(mark, bounds, opt) {\n var type = marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i, n, item, b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem$1(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds\n || mark.bounds && mark.bounds.clear()\n || new Bounds();\n\n if (hasItems) {\n for (i=0, n=items.length; i index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype\n + (mark.role ? ' role-' + mark.role : '')\n + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nvar prototype$42 = Handler.prototype;\n\nprototype$42.initialize = function(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n};\n\nprototype$42.element = function() {\n return this._el;\n};\n\nprototype$42.origin = function(origin) {\n this._origin = origin || [0, 0];\n return this;\n};\n\nprototype$42.scene = function(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n};\n\n// add an event handler\n// subclasses should override\nprototype$42.on = function(/*type, handler*/) {};\n\n// remove an event handler\n// subclasses should override\nprototype$42.off = function(/*type, handler*/) {};\n\n// utility method for finding array index of registered handler\n// returns -1 if handler is not registered\nprototype$42._handlerIndex = function(h, type, handler) {\n for (var i = h ? h.length : 0; --i>=0;) {\n if (h[i].type === type && !handler || h[i].handler === handler) {\n return i;\n }\n }\n return -1;\n};\n\n// return an array with all registered event handlers\nprototype$42.handlers = function() {\n var h = this._handlers, a = [], k;\n for (k in h) { a.push.apply(a, h[k]); }\n return a;\n};\n\nprototype$42.eventName = function(name) {\n var i = name.indexOf('.');\n return i < 0 ? name : name.slice(0,i);\n};\n\nprototype$42.handleHref = function(event, item, href) {\n this._loader\n .sanitize(href, {context:'href'})\n .then(function(opt) {\n var e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (var name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n })\n .catch(function() { /* do nothing */ });\n};\n\nprototype$42.handleTooltip = function(event, item, show) {\n if (item && item.tooltip != null) {\n this._tooltip.call(this._obj, this, event, item,\n show ? item.tooltip : null);\n }\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\n\nvar prototype$43 = Renderer.prototype;\n\n/**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\nprototype$43.initialize = function(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype$43.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype$43.scene = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the background color.\n */\nprototype$43.background = function(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n};\n\n/**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\nprototype$43.resize = function(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n};\n\n/**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\nprototype$43.dirty = function(/*item*/) {\n};\n\n/**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\nprototype$43.render = function(scene) {\n var r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function() { r._render(scene); };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n\n return r;\n};\n\n/**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\nprototype$43._render = function(/*scene*/) {\n // subclasses to override\n};\n\n/**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\nprototype$43.renderAsync = function(scene) {\n var r = this.render(scene);\n return this._ready\n ? this._ready.then(function() { return r; })\n : Promise.resolve(r);\n};\n\n/**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\nprototype$43._load = function(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n var call = r._call;\n r._ready = r._loader.ready()\n .then(function(redraw) {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n};\n\n/**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\nprototype$43.sanitizeURL = function(uri) {\n return this._load('sanitizeURL', uri);\n};\n\n/**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\nprototype$43.loadImage = function(uri) {\n return this._load('loadImage', uri);\n};\n\nvar point$4 = function(event, el) {\n var rect = el.getBoundingClientRect();\n return [\n event.clientX - rect.left - (el.clientLeft || 0),\n event.clientY - rect.top - (el.clientTop || 0)\n ];\n};\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n}\n\nvar prototype$44 = inherits(CanvasHandler, Handler);\n\nprototype$44.initialize = function(el, origin, obj) {\n // add event listeners\n var canvas = this._canvas = el && domFind(el, 'canvas');\n if (canvas) {\n var that = this;\n this.events.forEach(function(type) {\n canvas.addEventListener(type, function(evt) {\n if (prototype$44[type]) {\n prototype$44[type].call(that, evt);\n } else {\n that.fire(type, evt);\n }\n });\n });\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nprototype$44.canvas = function() {\n return this._canvas;\n};\n\n// retrieve the current canvas context\nprototype$44.context = function() {\n return this._canvas.getContext('2d');\n};\n\n// supported events\nprototype$44.events = [\n 'keydown',\n 'keypress',\n 'keyup',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'click',\n 'dblclick',\n 'wheel',\n 'mousewheel',\n 'touchstart',\n 'touchmove',\n 'touchend'\n];\n\n// to keep old versions of firefox happy\nprototype$44.DOMMouseScroll = function(evt) {\n this.fire('mousewheel', evt);\n};\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function(evt) {\n var a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function(evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\nprototype$44.mousemove = move('mousemove', 'mouseover', 'mouseout');\nprototype$44.dragover = move('dragover', 'dragenter', 'dragleave');\n\nprototype$44.mouseout = inactive('mouseout');\nprototype$44.dragleave = inactive('dragleave');\n\nprototype$44.mousedown = function(evt) {\n this._down = this._active;\n this.fire('mousedown', evt);\n};\n\nprototype$44.click = function(evt) {\n if (this._down === this._active) {\n this.fire('click', evt);\n this._down = null;\n }\n};\n\nprototype$44.touchstart = function(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire('touchstart', evt, true);\n};\n\nprototype$44.touchmove = function(evt) {\n this.fire('touchmove', evt, true);\n};\n\nprototype$44.touchend = function(evt) {\n this.fire('touchend', evt, true);\n this._touch = null;\n};\n\n// fire an event\nprototype$44.fire = function(type, evt, touch) {\n var a = touch ? this._touch : this._active,\n h = this._handlers[type], i, len;\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === 'click' && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if ((type === 'mouseover' || type === 'mouseout')) {\n this.handleTooltip(evt, a, type === 'mouseover');\n }\n\n // invoke all registered handlers\n if (h) {\n for (i=0, len=h.length; i= 0) {\n h.splice(i, 1);\n }\n\n return this;\n};\n\nprototype$44.pickEvent = function(evt) {\n var p = point$4(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n};\n\n// find the scenegraph item at the current mouse position\n// x, y -- the absolute x, y mouse coordinates on the canvas element\n// gx, gy -- the relative coordinates within the current group\nprototype$44.pick = function(scene, x, y, gx, gy) {\n var g = this.context(),\n mark = marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n};\n\nvar clip$1 = function(context, scene) {\n var clip = scene.clip;\n\n context.save();\n context.beginPath();\n\n if (isFunction(clip)) {\n clip(context);\n } else {\n var group = scene.group;\n context.rect(0, 0, group.width || 0, group.height || 0);\n }\n\n context.clip();\n};\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\n\nvar resize = function(canvas, width, height, origin, scaleFactor) {\n var inDOM = typeof HTMLElement !== 'undefined'\n && canvas instanceof HTMLElement\n && canvas.parentNode != null;\n\n var context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(\n ratio, 0, 0, ratio,\n ratio * origin[0],\n ratio * origin[1]\n );\n\n return canvas;\n};\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._redraw = false;\n this._dirty = new Bounds();\n}\n\nvar prototype$45 = inherits(CanvasRenderer, Renderer);\nvar base = Renderer.prototype;\nvar tempBounds$1 = new Bounds();\n\nprototype$45.initialize = function(el, width, height, origin, scaleFactor) {\n this._canvas = canvas(1, 1); // instantiate a small canvas\n if (el) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n // this method will invoke resize to size the canvas appropriately\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n};\n\nprototype$45.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n resize(this._canvas, this._width, this._height, this._origin, this._scale);\n this._redraw = true;\n return this;\n};\n\nprototype$45.canvas = function() {\n return this._canvas;\n};\n\nprototype$45.context = function() {\n return this._canvas ? this._canvas.getContext('2d') : null;\n};\n\nprototype$45.dirty = function(item) {\n var b = translate$1(item.bounds, item.mark.group);\n this._dirty.union(b);\n};\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clipping path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n\n return b;\n}\n\nfunction translate$1(bounds, group) {\n if (group == null) return bounds;\n var b = tempBounds$1.clear().union(bounds);\n for (; group != null; group = group.mark.group) {\n b.translate(group.x || 0, group.y || 0);\n }\n return b;\n}\n\nprototype$45._render = function(scene) {\n var g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n b = this._dirty;\n\n // setup\n g.save();\n if (this._redraw || b.empty()) {\n this._redraw = false;\n b = null;\n } else {\n b = clipToBounds(g, b, o);\n }\n\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b);\n\n // takedown\n g.restore();\n\n this._dirty.clear();\n return this;\n};\n\nprototype$45.draw = function(ctx, scene, bounds) {\n var mark = marks[scene.marktype];\n if (scene.clip) clip$1(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n};\n\nprototype$45.clear = function(x, y, w, h) {\n var g = this.context();\n g.clearRect(x, y, w, h);\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n};\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n var h = this;\n h._hrefHandler = listener(h, function(evt, item) {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, function(evt, item) {\n h.handleTooltip(evt, item, evt.type === 'mouseover');\n });\n}\n\nvar prototype$46 = inherits(SVGHandler, Handler);\n\nprototype$46.initialize = function(el, origin, obj) {\n var svg = this._svg;\n if (svg) {\n svg.removeEventListener('click', this._hrefHandler);\n svg.removeEventListener('mouseover', this._tooltipHandler);\n svg.removeEventListener('mouseout', this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener('click', this._hrefHandler);\n svg.addEventListener('mouseover', this._tooltipHandler);\n svg.addEventListener('mouseout', this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nprototype$46.svg = function() {\n return this._svg;\n};\n\n// wrap an event listener for the SVG DOM\nfunction listener(context, handler) {\n return function(evt) {\n var target = evt.target,\n item = target.__data__;\n evt.vegaType = evt.type;\n item = Array.isArray(item) ? item[0] : item;\n handler.call(context._obj, evt, item);\n };\n}\n\n// add an event handler\nprototype$46.on = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n var x = {\n type: type,\n handler: handler,\n listener: listener(this, handler)\n };\n\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n};\n\n// remove an event handler\nprototype$46.off = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n\n return this;\n};\n\n// generate string for an opening xml tag\n// tag: the name of the xml tag\n// attr: hash of attribute name-value pairs to include\n// raw: additional raw string to include in tag markup\nfunction openTag(tag, attr, raw) {\n var s = '<' + tag, key, val;\n if (attr) {\n for (key in attr) {\n val = attr[key];\n if (val != null) {\n s += ' ' + key + '=\"' + val + '\"';\n }\n }\n }\n if (raw) s += ' ' + raw;\n return s + '>';\n}\n\n// generate string for closing xml tag\n// tag: the name of the xml tag\nfunction closeTag(tag) {\n return '';\n}\n\nvar metadata = {\n 'version': '1.1',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink'\n};\n\nvar styles = {\n 'fill': 'fill',\n 'fillOpacity': 'fill-opacity',\n 'stroke': 'stroke',\n 'strokeOpacity': 'stroke-opacity',\n 'strokeWidth': 'stroke-width',\n 'strokeCap': 'stroke-linecap',\n 'strokeJoin': 'stroke-linejoin',\n 'strokeDash': 'stroke-dasharray',\n 'strokeDashOffset': 'stroke-dashoffset',\n 'strokeMiterLimit': 'stroke-miterlimit',\n 'opacity': 'opacity'\n};\n\nvar styleProperties = Object.keys(styles);\n\nvar ns = metadata.xmlns;\n\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 1;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\n\nvar prototype$47 = inherits(SVGRenderer, Renderer);\nvar base$1 = Renderer.prototype;\n\nprototype$47.initialize = function(el, width, height, padding) {\n if (el) {\n this._svg = domChild(el, 0, 'svg', ns);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n // set the svg root group\n this._root = domChild(this._svg, 0, 'g', ns);\n domClear(this._svg, 1);\n }\n\n // create the svg definitions cache\n this._defs = {\n gradient: {},\n clipping: {}\n };\n\n // set background color if defined\n this.background(this._bgcolor);\n\n return base$1.initialize.call(this, el, width, height, padding);\n};\n\nprototype$47.background = function(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base$1.background.apply(this, arguments);\n};\n\nprototype$47.resize = function(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n this._svg.setAttribute('width', this._width * this._scale);\n this._svg.setAttribute('height', this._height * this._scale);\n this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height);\n this._root.setAttribute('transform', 'translate(' + this._origin + ')');\n }\n\n this._dirty = [];\n\n return this;\n};\n\nprototype$47.svg = function() {\n if (!this._svg) return null;\n\n var attr = {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: '0 0 ' + this._width + ' ' + this._height\n };\n for (var key$$1 in metadata) {\n attr[key$$1] = metadata[key$$1];\n }\n\n var bg = !this._bgcolor ? ''\n : (openTag('rect', {\n width: this._width,\n height: this._height,\n style: 'fill: ' + this._bgcolor + ';'\n }) + closeTag('rect'));\n\n return openTag('svg', attr) + bg + this._svg.innerHTML + closeTag('svg');\n};\n\n\n// -- Render entry point --\n\nprototype$47._render = function(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._resetDefs();\n this.draw(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.updateDefs();\n\n this._dirty = [];\n ++this._dirtyID;\n\n return this;\n};\n\n// -- Manage SVG definitions ('defs') block --\n\nprototype$47.updateDefs = function() {\n var svg = this._svg,\n defs = this._defs,\n el = defs.el,\n index = 0, id$$1;\n\n for (id$$1 in defs.gradient) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n updateGradient(el, defs.gradient[id$$1], index++);\n }\n\n for (id$$1 in defs.clipping) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n updateClipping(el, defs.clipping[id$$1], index++);\n }\n\n // clean-up\n if (el) {\n if (index === 0) {\n svg.removeChild(el);\n defs.el = null;\n } else {\n domClear(el, index);\n }\n }\n};\n\nfunction updateGradient(el, grad, index) {\n var i, n, stop;\n\n el = domChild(el, index, 'linearGradient', ns);\n el.setAttribute('id', grad.id);\n el.setAttribute('x1', grad.x1);\n el.setAttribute('x2', grad.x2);\n el.setAttribute('y1', grad.y1);\n el.setAttribute('y2', grad.y2);\n\n for (i=0, n=grad.stops.length; i 1;\n}\n\n\n// -- Set attributes & styles on SVG elements ---\n\nvar element = null;\nvar values$1 = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nvar mark_extras = {\n group: function(mdef, el, item) {\n values$1 = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.foreground(emit, item, this);\n\n element = el.childNodes[0];\n mdef.background(emit, item, this);\n\n var value = item.mark.interactive === false ? 'none' : null;\n if (value !== values$1.events) {\n element.style.setProperty('pointer-events', value);\n values$1.events = value;\n }\n },\n text: function(mdef, el, item) {\n var str = textValue(item);\n if (str !== values$1.text) {\n el.textContent = str;\n values$1.text = str;\n }\n str = font(item);\n if (str !== values$1.font) {\n el.style.setProperty('font', str);\n values$1.font = str;\n }\n }\n};\n\nprototype$47._update = function(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values$1 = el.__values__;\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n var extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg css styles\n // note: element may be modified by 'extra' method\n this.style(element, item);\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values$1[name]) return;\n\n if (value != null) {\n // if value is provided, update DOM attribute\n if (ns) {\n element.setAttributeNS(ns, name, value);\n } else {\n element.setAttribute(name, value);\n }\n } else {\n // else remove DOM attribute\n if (ns) {\n element.removeAttributeNS(ns, name);\n } else {\n element.removeAttribute(name);\n }\n }\n\n // note current value for future comparison\n values$1[name] = value;\n}\n\nprototype$47.style = function(el, o) {\n if (o == null) return;\n var i, n, prop, name, value;\n\n for (i=0, n=styleProperties.length; i 0) ? openTag('defs') + defs + closeTag('defs') : '';\n};\n\nvar object$1;\n\nfunction emit$1(name, value, ns, prefixed) {\n object$1[prefixed || name] = value;\n}\n\nprototype$48.attributes = function(attr, item) {\n object$1 = {};\n attr(emit$1, item, this);\n return object$1;\n};\n\nprototype$48.href = function(item) {\n var that = this,\n href = item.href,\n attr;\n\n if (href) {\n if (attr = that._hrefs && that._hrefs[href]) {\n return attr;\n } else {\n that.sanitizeURL(href).then(function(attr) {\n // rewrite to use xlink namespace\n // note that this will be deprecated in SVG 2.0\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (that._hrefs || (that._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n};\n\nprototype$48.mark = function(scene) {\n var renderer = this,\n mdef = marks[scene.marktype],\n tag = mdef.tag,\n defs = this._defs,\n str = '',\n style;\n\n if (tag !== 'g' && scene.interactive === false) {\n style = 'style=\"pointer-events: none;\"';\n }\n\n // render opening group tag\n str += openTag('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip(renderer, scene, scene.group) : null\n }, style);\n\n // render contained elements\n function process(item) {\n var href = renderer.href(item);\n if (href) str += openTag('a', href);\n\n style = (tag !== 'g') ? applyStyles(item, scene, tag, defs) : null;\n str += openTag(tag, renderer.attributes(mdef.attr, item), style);\n\n if (tag === 'text') {\n str += escape_text(textValue(item));\n } else if (tag === 'g') {\n str += openTag('path', renderer.attributes(mdef.background, item),\n applyStyles(item, scene, 'bgrect', defs)) + closeTag('path');\n\n str += openTag('g', renderer.attributes(mdef.foreground, item))\n + renderer.markGroup(item)\n + closeTag('g');\n }\n\n str += closeTag(tag);\n if (href) str += closeTag('a');\n }\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return str + closeTag('g');\n};\n\nprototype$48.markGroup = function(scene) {\n var renderer = this,\n str = '';\n\n visit(scene, function(item) {\n str += renderer.mark(item);\n });\n\n return str;\n};\n\nfunction applyStyles(o, mark, tag, defs) {\n if (o == null) return '';\n var i, n, prop, name, value, s = '';\n\n if (tag === 'bgrect' && mark.interactive === false) {\n s += 'pointer-events: none; ';\n }\n\n if (tag === 'text') {\n s += 'font: ' + font(o) + '; ';\n }\n\n for (i=0, n=styleProperties.length; i/g, '>');\n}\n\nvar Canvas = 'canvas';\nvar PNG = 'png';\nvar SVG = 'svg';\nvar None$1 = 'none';\n\nvar RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None$1\n};\n\nvar modules = {};\n\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\n\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\n\nmodules[None$1] = {};\n\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nvar clipBounds = new Bounds();\n\nvar boundClip = function(mark) {\n var clip = mark.clip;\n\n if (isFunction(clip)) {\n clip(context(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n\n mark.bounds.intersect(clipBounds);\n};\n\nvar TOLERANCE = 1e-9;\n\nfunction sceneEqual(a, b, key$$1) {\n return (a === b) ? true\n : (key$$1 === 'path') ? pathEqual(a, b)\n : (a instanceof Date && b instanceof Date) ? +a === +b\n : (isNumber(a) && isNumber(b)) ? Math.abs(a - b) <= TOLERANCE\n : (!a || !b || !isObject(a) && !isObject(b)) ? a == b\n : (a == null || b == null) ? false\n : objectEqual(a, b);\n}\n\nfunction pathEqual(a, b) {\n return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key$$1, i;\n\n if (ka.length !== kb.length) return false;\n\n ka.sort();\n kb.sort();\n\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n\n for (i = ka.length - 1; i >= 0; i--) {\n key$$1 = ka[i];\n if (!sceneEqual(a[key$$1], b[key$$1], key$$1)) return false;\n }\n\n return typeof a === typeof b;\n}\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$38 = inherits(Bound, Transform);\n\nprototype$38.transform = function(_, pulse) {\n var view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = marks[type],\n bound = entry.bound,\n markBounds = mark.bounds, rebound;\n\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(function(item) {\n item.bounds.clear().union(markBounds);\n });\n }\n\n else if (type === 'group' || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, function(item) { view.dirty(item); });\n markBounds.clear();\n mark.items.forEach(function(item) {\n markBounds.union(boundItem(item, bound));\n });\n }\n\n else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n\n pulse.visit(pulse.ADD, function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n pulse.visit(pulse.MOD, function(item) {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(function(item) { markBounds.union(item.bounds); });\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n\n return pulse.modifies('bounds');\n};\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nvar COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\n\nIdentifier.Definition = {\n \"type\": \"Identifier\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"as\", \"type\": \"string\", \"required\": true }\n ]\n};\n\nvar prototype$49 = inherits(Identifier, Transform);\n\nprototype$49.transform = function(_, pulse) {\n var counter = getCounter(pulse.dataflow),\n id$$1 = counter.value,\n as = _.as;\n\n pulse.visit(pulse.ADD, function(t) {\n if (!t[as]) t[as] = ++id$$1;\n });\n\n counter.set(this.value = id$$1);\n return pulse;\n};\n\nfunction getCounter(view) {\n var counter = view._signals[COUNTER_NAME];\n if (!counter) {\n view._signals[COUNTER_NAME] = (counter = view.add(0));\n }\n return counter;\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$50 = inherits(Mark, Transform);\n\nprototype$50.transform = function(_, pulse) {\n var mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this;\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n var Init = mark.marktype === 'group' ? GroupItem : Item;\n pulse.visit(pulse.ADD, function(item) { Init.call(item, mark); });\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n};\n\nfunction lookup$1(_) {\n var g = _.groups, p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0])\n : g && p ? g.lookup(p)\n : null;\n}\n\nvar Top = 'top';\nvar Left = 'left';\nvar Right = 'right';\nvar Bottom = 'bottom';\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$51 = inherits(Overlap, Transform);\n\nvar methods = {\n parity: function(items) {\n return items.filter(function(item, i) {\n return i % 2 ? (item.opacity = 0) : 1;\n });\n },\n greedy: function(items) {\n var a;\n return items.filter(function(b, i) {\n if (!i || !intersect$1(a.bounds, b.bounds)) {\n a = b;\n return 1;\n } else {\n return b.opacity = 0;\n }\n });\n }\n};\n\n// compute bounding box intersection\n// allow 1 pixel of overlap tolerance\nfunction intersect$1(a, b) {\n return !(\n a.x2 - 1 < b.x1 ||\n a.x1 + 1 > b.x2 ||\n a.y2 - 1 < b.y1 ||\n a.y1 + 1 > b.y2\n );\n}\n\nfunction hasOverlap(items) {\n for (var i=1, n=items.length, a=items[0].bounds, b; i 1 && b.height() > 1;\n}\n\nfunction boundTest(scale, orient, tolerance) {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n\n return function(item) {\n return b.encloses(item.bounds);\n };\n}\n\nprototype$51.transform = function(_, pulse) {\n var reduce = methods[_.method] || methods.parity,\n source = pulse.materialize(pulse.SOURCE).source;\n\n if (!source) return;\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n if (_.method === 'greedy') {\n source = source.filter(hasBounds);\n }\n\n // reset all items to be fully opaque\n source.forEach(function(item) { item.opacity = 1; });\n\n var items = source;\n\n if (items.length >= 3 && hasOverlap(items)) {\n pulse = pulse.reflow(_.modified()).modifies('opacity');\n do {\n items = reduce(items);\n } while (items.length >= 3 && hasOverlap(items));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale) {\n var test = boundTest(_.boundScale, _.boundOrient, _.boundTolerance);\n source.forEach(function(item) {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n return pulse;\n};\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nfunction Render(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$52 = inherits(Render, Transform);\n\nprototype$52.transform = function(_, pulse) {\n var view = pulse.dataflow;\n\n pulse.visit(pulse.ALL, function(item) { view.dirty(item); });\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n var item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n};\n\nvar AxisRole$1 = 'axis';\nvar LegendRole$1 = 'legend';\nvar RowHeader$1 = 'row-header';\nvar RowFooter$1 = 'row-footer';\nvar RowTitle = 'row-title';\nvar ColHeader$1 = 'column-header';\nvar ColFooter$1 = 'column-footer';\nvar ColTitle = 'column-title';\n\nfunction extractGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0, mark, items;\n\n var views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j=0, m=headers.length; j= 0 && (g = groups[k]) == null; k-=back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle$1(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset, y = offset;\n isX\n ? (x = Math.round(bounds.x1 + band * bounds.width()))\n : (y = Math.round(bounds.y1 + band * bounds.height()));\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n\nvar Fit = 'fit';\nvar FitX = 'fit-x';\nvar FitY = 'fit-y';\nvar Pad = 'pad';\nvar None$2 = 'none';\nvar Padding = 'padding';\n\nvar AxisRole = 'axis';\nvar TitleRole = 'title';\nvar FrameRole = 'frame';\nvar LegendRole = 'legend';\nvar ScopeRole = 'scope';\nvar RowHeader = 'row-header';\nvar RowFooter = 'row-footer';\nvar ColHeader = 'column-header';\nvar ColFooter = 'column-footer';\n\nvar AxisOffset = 0.5;\nvar tempBounds$2 = new Bounds();\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$53 = inherits(ViewLayout, Transform);\n\nprototype$53.transform = function(_, pulse) {\n // TODO incremental update, output?\n var view = pulse.dataflow;\n _.mark.items.forEach(function(group) {\n if (_.layout) gridLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n return pulse;\n};\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n axisBounds = viewBounds.clone(),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [], title,\n mark, flow, b, i, n;\n\n // layout axes, gather legends, collect bounds\n for (i=0, n=items.length; i -1) bounds.union(item.items[i].bounds);\n if ((i=indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n if (title) s = layoutAxisTitle(title, s, titlePadding, 0, -1, bounds);\n bounds.add(0, -s).add(range, 0);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n if (title) s = layoutAxisTitle(title, s, titlePadding, 1, -1, bounds);\n bounds.add(-s, 0).add(0, range);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n if (title) s = layoutAxisTitle(title, s, titlePadding, 1, 1, bounds);\n bounds.add(0, 0).add(s, range);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n if (title) s = layoutAxisTitle(title, s, titlePadding, 0, 1, bounds);\n bounds.add(0, 0).add(range, s);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n\n if (set$3(item, 'x', x + AxisOffset) | set$3(item, 'y', y + AxisOffset)) {\n item.bounds = tempBounds$2;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction layoutAxisTitle(title, offset, pad$$1, isYAxis, sign, bounds) {\n var b = title.bounds, dx = 0, dy = 0;\n\n if (title.auto) {\n offset += pad$$1;\n\n isYAxis\n ? dx = (title.x || 0) - (title.x = sign * offset)\n : dy = (title.y || 0) - (title.y = sign * offset);\n\n b.translate(-dx, -dy);\n title.mark.bounds.set(b.x1, b.y1, b.x2, b.y2);\n\n if (isYAxis) {\n bounds.add(0, b.y1).add(0, b.y2);\n offset += b.width();\n } else {\n bounds.add(b.x1, 0).add(b.x2, 0);\n offset += b.height();\n }\n } else {\n bounds.union(b);\n }\n\n return offset;\n}\n\nfunction layoutTitle(view, title, axisBounds) {\n var item = title.items[0],\n datum = item.datum,\n orient = datum.orient,\n offset = item.offset,\n bounds = item.bounds,\n x = 0, y = 0;\n\n tempBounds$2.clear().union(bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = item.x;\n y = axisBounds.y1 - offset;\n break;\n case Left:\n x = axisBounds.x1 - offset;\n y = item.y;\n break;\n case Right:\n x = axisBounds.x2 + offset;\n y = item.y;\n break;\n case Bottom:\n x = item.x;\n y = axisBounds.y2 + offset;\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n bounds.translate(x - item.x, y - item.y);\n if (set$3(item, 'x', x) | set$3(item, 'y', y)) {\n item.bounds = tempBounds$2;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n // update bounds\n return title.bounds.clear().union(bounds);\n}\n\nfunction layoutLegend(view, legend, flow, xBounds, yBounds, width, height) {\n var item = legend.items[0],\n datum = item.datum,\n orient = datum.orient,\n offset = item.offset,\n bounds = item.bounds,\n x = 0,\n y = 0,\n w, h, axisBounds;\n\n if (orient === Top || orient === Bottom) {\n axisBounds = yBounds,\n x = flow[orient];\n } else if (orient === Left || orient === Right) {\n axisBounds = xBounds;\n y = flow[orient];\n }\n\n tempBounds$2.clear().union(bounds);\n bounds.clear();\n\n // aggregate bounds to determine size\n // shave off 1 pixel because it looks better...\n item.items.forEach(function(_) { bounds.union(_.bounds); });\n w = Math.round(bounds.width()) + 2 * item.padding - 1;\n h = Math.round(bounds.height()) + 2 * item.padding - 1;\n\n switch (orient) {\n case Left:\n x -= w + offset - Math.floor(axisBounds.x1);\n flow.left += h + flow.margin;\n break;\n case Right:\n x += offset + Math.ceil(axisBounds.x2);\n flow.right += h + flow.margin;\n break;\n case Top:\n y -= h + offset - Math.floor(axisBounds.y1);\n flow.top += w + flow.margin;\n break;\n case Bottom:\n y += offset + Math.ceil(axisBounds.y2);\n flow.bottom += w + flow.margin;\n break;\n case 'top-left':\n x += offset;\n y += offset;\n break;\n case 'top-right':\n x += width - w - offset;\n y += offset;\n break;\n case 'bottom-left':\n x += offset;\n y += height - h - offset;\n break;\n case 'bottom-right':\n x += width - w - offset;\n y += height - h - offset;\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n\n // update legend layout\n if (set$3(item, 'x', x) | set$3(item, 'width', w) |\n set$3(item, 'y', y) | set$3(item, 'height', h)) {\n item.bounds = tempBounds$2;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction layoutSize(view, group, viewBounds, _) {\n var auto = _.autosize || {},\n type = auto.type,\n viewWidth = view._width,\n viewHeight = view._height,\n padding = view.padding();\n\n if (view._autosize < 1 || !type) return;\n\n var width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None$2) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n }\n\n else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n }\n\n else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(\n viewWidth, viewHeight,\n width, height,\n [left, top],\n auto.resize\n );\n}\n\n\n\nvar vtx = Object.freeze({\n\tbound: Bound,\n\tidentifier: Identifier,\n\tmark: Mark,\n\toverlap: Overlap,\n\trender: Render,\n\tviewlayout: ViewLayout\n});\n\nvar Log = 'log';\nvar Pow = 'pow';\nvar Utc = 'utc';\nvar Sqrt = 'sqrt';\nvar Band = 'band';\nvar Time = 'time';\nvar Point = 'point';\nvar Linear$1 = 'linear';\nvar Ordinal = 'ordinal';\nvar Quantile = 'quantile';\nvar Quantize = 'quantize';\nvar Threshold = 'threshold';\nvar BinLinear = 'bin-linear';\nvar BinOrdinal = 'bin-ordinal';\nvar Sequential = 'sequential';\n\nvar invertRange = function(scale) {\n return function(_) {\n var lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [\n scale.invert(lo),\n scale.invert(hi)\n ];\n }\n};\n\nvar invertRangeExtent = function(scale) {\n return function(_) {\n var range = scale.range(),\n lo = _[0],\n hi = _[1],\n min = -1, max, t, i, n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i=0, n=range.length; i= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n\n return [\n lo[0] === undefined ? lo[1] : lo[0],\n hi[1] === undefined ? hi[0] : hi[1]\n ];\n }\n};\n\nvar bandSpace = function(count, paddingInner, paddingOuter) {\n var space = count - paddingInner + paddingOuter * 2;\n return count ? (space > 0 ? space : 1) : 0;\n};\n\nvar array$2 = Array.prototype;\n\nvar map$3 = array$2.map;\nvar slice$2 = array$2.slice;\n\nvar implicit = {name: \"implicit\"};\n\nfunction ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice$2.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice$2.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n\nvar define = function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n};\n\nfunction extend$1(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\";\nvar reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\";\nvar reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\";\nvar reHex3 = /^#([0-9a-f]{3})$/;\nvar reHex6 = /^#([0-9a-f]{6})$/;\nvar reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\");\nvar reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\");\nvar reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\");\nvar reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\");\nvar reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\");\nvar reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color$1, {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nfunction color$1(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color$1(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend$1(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color$1(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend$1(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n\nvar deg2rad = Math.PI / 180;\nvar rad2deg = 180 / Math.PI;\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18;\nvar Xn = 0.96422;\nvar Yn = 1;\nvar Zn = 0.82521;\nvar t0$1 = 4 / 29;\nvar t1$1 = 6 / 29;\nvar t2 = 3 * t1$1 * t1$1;\nvar t3 = t1$1 * t1$1 * t1$1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\n\n\nfunction lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend$1(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0$1;\n}\n\nfunction lab2xyz(t) {\n return t > t1$1 ? t * t * t : t2 * (t - t0$1);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\n\n\nfunction hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend$1(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n\nvar A = -0.14861;\nvar B = +1.78277;\nvar C = -0.29227;\nvar D = -0.90649;\nvar E = +1.97294;\nvar ED = E * D;\nvar EB = E * B;\nvar BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend$1(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nvar basis$1 = function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n};\n\nvar basisClosed = function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n};\n\nvar constant$4 = function(x) {\n return function() {\n return x;\n };\n};\n\nfunction linear$1(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$4(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant$4(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear$1(a, d) : constant$4(isNaN(a) ? b : a);\n}\n\nvar rgb$1 = (function rgbGamma(y) {\n var color$$1 = gamma(y);\n\n function rgb$$1(start, end) {\n var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),\n g = color$$1(start.g, end.g),\n b = color$$1(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb$$1.gamma = rgbGamma;\n\n return rgb$$1;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color$$1;\n for (i = 0; i < n; ++i) {\n color$$1 = rgb(colors[i]);\n r[i] = color$$1.r || 0;\n g[i] = color$$1.g || 0;\n b[i] = color$$1.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color$$1.opacity = 1;\n return function(t) {\n color$$1.r = r(t);\n color$$1.g = g(t);\n color$$1.b = b(t);\n return color$$1 + \"\";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(basis$1);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n\nvar array$3 = function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n};\n\nvar date = function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n};\n\nvar reinterpolate = function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n};\n\nvar object$2 = function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = interpolate(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n};\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\nvar reB = new RegExp(reA.source, \"g\");\n\nfunction zero$1(b) {\n return function() {\n return b;\n };\n}\n\nfunction one$1(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nvar string = function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: reinterpolate(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one$1(q[0].x)\n : zero$1(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n};\n\nvar interpolate = function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant$4(b)\n : (t === \"number\" ? reinterpolate\n : t === \"string\" ? ((c = color$1(b)) ? (b = c, rgb$1) : string)\n : b instanceof color$1 ? rgb$1\n : b instanceof Date ? date\n : Array.isArray(b) ? array$3\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object$2\n : reinterpolate)(a, b);\n};\n\nvar interpolateRound = function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n};\n\nvar degrees = 180 / Math.PI;\n\nvar identity$5 = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nvar decompose = function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n};\n\nvar cssNode;\nvar cssRoot;\nvar cssView;\nvar svgNode;\n\nfunction parseCss(value) {\n if (value === \"none\") return identity$5;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n if (value == null) return identity$5;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity$5;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: reinterpolate(xa, xb)}, {i: i - 2, x: reinterpolate(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: reinterpolate(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: reinterpolate(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: reinterpolate(xa, xb)}, {i: i - 2, x: reinterpolate(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\nvar rho = Math.SQRT2;\nvar rho2 = 2;\nvar rho4 = 4;\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nvar zoom$1 = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n };\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n };\n }\n\n i.duration = S * 1000;\n\n return i;\n};\n\nfunction hsl$1(hue$$1) {\n return function(start, end) {\n var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hsl$2 = hsl$1(hue);\nvar hslLong = hsl$1(nogamma);\n\nfunction lab$1(start, end) {\n var l = nogamma((start = lab(start)).l, (end = lab(end)).l),\n a = nogamma(start.a, end.a),\n b = nogamma(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\nfunction hcl$1(hue$$1) {\n return function(start, end) {\n var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),\n c = nogamma(start.c, end.c),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hcl$2 = hcl$1(hue);\nvar hclLong = hcl$1(nogamma);\n\nfunction cubehelix$1(hue$$1) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix$$1(start, end) {\n var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix$$1.gamma = cubehelixGamma;\n\n return cubehelix$$1;\n })(1);\n}\n\nvar cubehelix$2 = cubehelix$1(hue);\nvar cubehelixLong = cubehelix$1(nogamma);\n\nvar quantize$1 = function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n};\n\n\n\nvar $$1 = Object.freeze({\n\tinterpolate: interpolate,\n\tinterpolateArray: array$3,\n\tinterpolateBasis: basis$1,\n\tinterpolateBasisClosed: basisClosed,\n\tinterpolateDate: date,\n\tinterpolateNumber: reinterpolate,\n\tinterpolateObject: object$2,\n\tinterpolateRound: interpolateRound,\n\tinterpolateString: string,\n\tinterpolateTransformCss: interpolateTransformCss,\n\tinterpolateTransformSvg: interpolateTransformSvg,\n\tinterpolateZoom: zoom$1,\n\tinterpolateRgb: rgb$1,\n\tinterpolateRgbBasis: rgbBasis,\n\tinterpolateRgbBasisClosed: rgbBasisClosed,\n\tinterpolateHsl: hsl$2,\n\tinterpolateHslLong: hslLong,\n\tinterpolateLab: lab$1,\n\tinterpolateHcl: hcl$2,\n\tinterpolateHclLong: hclLong,\n\tinterpolateCubehelix: cubehelix$2,\n\tinterpolateCubehelixLong: cubehelixLong,\n\tquantize: quantize$1\n});\n\nvar constant$5 = function(x) {\n return function() {\n return x;\n };\n};\n\nvar number$2 = function(x) {\n return +x;\n};\n\nvar unit = [0, 1];\n\nfunction deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant$5(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate$$1) {\n return function(a, b) {\n var r = reinterpolate$$1(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate$$1) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate$$1(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate$$1(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate$$1) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate$$1(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisectRight(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nfunction continuous(deinterpolate, reinterpolate$$1) {\n var domain = unit,\n range = unit,\n interpolate$$1 = interpolate,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate$$1) : reinterpolate$$1)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map$3.call(_, number$2), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice$2.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice$2.call(_), interpolate$$1 = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;\n };\n\n return rescale();\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nvar formatDecimal = function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n};\n\nvar exponent = function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n};\n\nvar formatGroup = function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n};\n\nvar formatNumerals = function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n};\n\nvar formatDefault = function(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n};\n\nvar prefixExponent;\n\nvar formatPrefixAuto = function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n};\n\nvar formatRounded = function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n};\n\nvar formatTypes = {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n\n// [[fill]align][sign][symbol][0][width][,][.precision][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n};\n\nvar identity$6 = function(x) {\n return x;\n};\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nvar formatLocale$1 = function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$6,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$6,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n};\n\nvar locale$2;\nvar format;\nvar formatPrefix;\n\ndefaultLocale$1({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nfunction defaultLocale$1(definition) {\n locale$2 = formatLocale$1(definition);\n format = locale$2.format;\n formatPrefix = locale$2.formatPrefix;\n return locale$2;\n}\n\nvar precisionFixed = function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n};\n\nvar precisionPrefix = function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n};\n\nvar precisionRound = function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n};\n\nvar tickFormat$1 = function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n};\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat$1(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nfunction linear() {\n var scale = continuous(deinterpolateLinear, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n\nfunction identity$4() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map$3.call(_, number$2), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity$4().domain(domain);\n };\n\n return linearish(scale);\n}\n\nvar nice = function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n};\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant$5(b);\n}\n\nfunction reinterpolate$1(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nfunction log$2() {\n var scale = continuous(deinterpolate, reinterpolate$1).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log$2().base(base));\n };\n\n return scale;\n}\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nfunction pow$1() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant$5(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow$1().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nfunction sqrt$1() {\n return pow$1().exponent(0.5);\n}\n\nfunction quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisectRight(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice$2.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n\nfunction quantize$2() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisectRight(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice$2.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize$2()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n\nfunction threshold$1() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisectRight(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice$2.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice$2.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold$1()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n\nvar durationSecond$1 = 1000;\nvar durationMinute$1 = durationSecond$1 * 60;\nvar durationHour$1 = durationMinute$1 * 60;\nvar durationDay$1 = durationHour$1 * 24;\nvar durationWeek$1 = durationDay$1 * 7;\nvar durationMonth = durationDay$1 * 30;\nvar durationYear = durationDay$1 * 365;\n\nfunction date$1(t) {\n return new Date(t);\n}\n\nfunction number$3(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {\n var scale = continuous(deinterpolateLinear, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second$$1, 1, durationSecond$1],\n [second$$1, 5, 5 * durationSecond$1],\n [second$$1, 15, 15 * durationSecond$1],\n [second$$1, 30, 30 * durationSecond$1],\n [minute$$1, 1, durationMinute$1],\n [minute$$1, 5, 5 * durationMinute$1],\n [minute$$1, 15, 15 * durationMinute$1],\n [minute$$1, 30, 30 * durationMinute$1],\n [ hour$$1, 1, durationHour$1 ],\n [ hour$$1, 3, 3 * durationHour$1 ],\n [ hour$$1, 6, 6 * durationHour$1 ],\n [ hour$$1, 12, 12 * durationHour$1 ],\n [ day$$1, 1, durationDay$1 ],\n [ day$$1, 2, 2 * durationDay$1 ],\n [ week, 1, durationWeek$1 ],\n [ month$$1, 1, durationMonth ],\n [ month$$1, 3, 3 * durationMonth ],\n [ year$$1, 1, durationYear ]\n ];\n\n function tickFormat(date$$1) {\n return (second$$1(date$$1) < date$$1 ? formatMillisecond\n : minute$$1(date$$1) < date$$1 ? formatSecond\n : hour$$1(date$$1) < date$$1 ? formatMinute\n : day$$1(date$$1) < date$$1 ? formatHour\n : month$$1(date$$1) < date$$1 ? (week(date$$1) < date$$1 ? formatDay : formatWeek)\n : year$$1(date$$1) < date$$1 ? formatMonth\n : formatYear)(date$$1);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year$$1;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond$$1;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map$3.call(_, number$3)) : domain().map(date$1);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));\n };\n\n return scale;\n}\n\nvar time = function() {\n return calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n};\n\nvar utcTime = function() {\n return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n};\n\nfunction band$$1() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = [+_[0], +_[1]];\n return rescale();\n } else {\n return range.slice();\n }\n };\n\n scale.rangeRound = function(_) {\n range = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function(_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function(_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function(_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n\n var lo = +_[0],\n hi = +_[1],\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range[1-reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo===hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function(_) {\n var value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function() {\n return band$$1()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point$5() {\n return pointish(band$$1().paddingInner(1));\n}\n\nvar map$4 = Array.prototype.map;\nvar slice$3 = Array.prototype.slice;\n\nfunction numbers$1(_) {\n return map$4.call(_, function(x) { return +x; });\n}\n\nfunction binLinear() {\n var linear$$1 = linear(),\n domain = [];\n\n function scale(x) {\n return linear$$1(x);\n }\n\n function setDomain(_) {\n domain = numbers$1(_);\n linear$$1.domain([domain[0], peek(domain)]);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (setDomain(_), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (linear$$1.range(_), scale) : linear$$1.range();\n };\n\n scale.rangeRound = function(_) {\n return arguments.length ? (linear$$1.rangeRound(_), scale) : linear$$1.rangeRound();\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (linear$$1.interpolate(_), scale) : linear$$1.interpolate();\n };\n\n scale.invert = function(_) {\n return linear$$1.invert(_);\n };\n\n scale.ticks = function(count) {\n var n = domain.length,\n stride = ~~(n / (count || n));\n\n return stride < 2\n ? scale.domain()\n : domain.filter(function(x, i) { return !(i % stride); });\n };\n\n scale.tickFormat = function() {\n return linear$$1.tickFormat.apply(linear$$1, arguments);\n };\n\n scale.copy = function() {\n return binLinear().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n\nfunction binOrdinal() {\n var domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x\n ? undefined\n : range[(bisectRight(domain, x) - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain = numbers$1(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = slice$3.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n scale.copy = function() {\n return binOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n\nfunction sequential$1(interpolator) {\n var linear$$1 = linear(),\n x0 = 0,\n dx = 1,\n clamp = false;\n\n function update() {\n var domain = linear$$1.domain();\n x0 = domain[0];\n dx = peek(domain) - x0;\n }\n\n function scale(x) {\n var t = (x - x0) / dx;\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.clamp = function(_) {\n if (arguments.length) {\n clamp = !!_;\n return scale;\n } else {\n return clamp;\n }\n };\n\n scale.domain = function(_) {\n return arguments.length ? (linear$$1.domain(_), update(), scale) : linear$$1.domain();\n };\n\n scale.interpolator = function(_) {\n if (arguments.length) {\n interpolator = _;\n return scale;\n } else {\n return interpolator;\n }\n };\n\n scale.copy = function() {\n return sequential$1().domain(linear$$1.domain()).clamp(clamp).interpolator(interpolator);\n };\n\n scale.ticks = function(count) {\n return linear$$1.ticks(count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return linear$$1.tickFormat(count, specifier);\n };\n\n scale.nice = function(count) {\n return linear$$1.nice(count), update(), scale;\n };\n\n return scale;\n}\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor) {\n return function scale() {\n var s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s)\n : s.invertExtent ? invertRangeExtent(s)\n : undefined;\n }\n\n s.type = type;\n return s;\n };\n}\n\nfunction scale$1(type, scale) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale);\n return this;\n } else {\n return scales.hasOwnProperty(type) ? scales[type] : undefined;\n }\n}\n\nvar scales = {\n // base scale types\n identity: identity$4,\n linear: linear,\n log: log$2,\n ordinal: ordinal,\n pow: pow$1,\n sqrt: sqrt$1,\n quantile: quantile,\n quantize: quantize$2,\n threshold: threshold$1,\n time: time,\n utc: utcTime,\n\n // extended scale types\n band: band$$1,\n point: point$5,\n sequential: sequential$1,\n 'bin-linear': binLinear,\n 'bin-ordinal': binOrdinal\n};\n\nfor (var key$1 in scales) {\n scale$1(key$1, scales[key$1]);\n}\n\nfunction colors(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n\nvar category20 = colors(\n '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5'\n);\n\nvar category20b = colors(\n '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6'\n);\n\nvar category20c = colors(\n '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9'\n);\n\nvar tableau10 = colors(\n '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac'\n);\n\nvar tableau20 = colors(\n '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5'\n);\n\nvar blueOrange = new Array(3).concat(\n \"67a9cff7f7f7f1a340\",\n \"0571b092c5defdb863e66101\",\n \"0571b092c5def7f7f7fdb863e66101\",\n \"2166ac67a9cfd1e5f0fee0b6f1a340b35806\",\n \"2166ac67a9cfd1e5f0f7f7f7fee0b6f1a340b35806\",\n \"2166ac4393c392c5ded1e5f0fee0b6fdb863e08214b35806\",\n \"2166ac4393c392c5ded1e5f0f7f7f7fee0b6fdb863e08214b35806\",\n \"0530612166ac4393c392c5ded1e5f0fee0b6fdb863e08214b358067f3b08\",\n \"0530612166ac4393c392c5ded1e5f0f7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nvar colors$1 = function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n};\n\nvar category10 = colors$1(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\nvar Accent = colors$1(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n\nvar Dark2 = colors$1(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n\nvar Paired = colors$1(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n\nvar Pastel1 = colors$1(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n\nvar Pastel2 = colors$1(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n\nvar Set1 = colors$1(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n\nvar Set2 = colors$1(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n\nvar Set3 = colors$1(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n\nvar ramp = function(scheme) {\n return rgbBasis(scheme[scheme.length - 1]);\n};\n\nvar scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors$1);\n\nvar BrBG = ramp(scheme);\n\nvar scheme$1 = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors$1);\n\nvar PRGn = ramp(scheme$1);\n\nvar scheme$2 = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors$1);\n\nvar PiYG = ramp(scheme$2);\n\nvar scheme$3 = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors$1);\n\nvar PuOr = ramp(scheme$3);\n\nvar scheme$4 = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors$1);\n\nvar RdBu = ramp(scheme$4);\n\nvar scheme$5 = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors$1);\n\nvar RdGy = ramp(scheme$5);\n\nvar scheme$6 = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors$1);\n\nvar RdYlBu = ramp(scheme$6);\n\nvar scheme$7 = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors$1);\n\nvar RdYlGn = ramp(scheme$7);\n\nvar scheme$8 = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors$1);\n\nvar Spectral = ramp(scheme$8);\n\nvar scheme$9 = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors$1);\n\nvar BuGn = ramp(scheme$9);\n\nvar scheme$10 = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors$1);\n\nvar BuPu = ramp(scheme$10);\n\nvar scheme$11 = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors$1);\n\nvar GnBu = ramp(scheme$11);\n\nvar scheme$12 = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors$1);\n\nvar OrRd = ramp(scheme$12);\n\nvar scheme$13 = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors$1);\n\nvar PuBuGn = ramp(scheme$13);\n\nvar scheme$14 = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors$1);\n\nvar PuBu = ramp(scheme$14);\n\nvar scheme$15 = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors$1);\n\nvar PuRd = ramp(scheme$15);\n\nvar scheme$16 = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors$1);\n\nvar RdPu = ramp(scheme$16);\n\nvar scheme$17 = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors$1);\n\nvar YlGnBu = ramp(scheme$17);\n\nvar scheme$18 = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors$1);\n\nvar YlGn = ramp(scheme$18);\n\nvar scheme$19 = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors$1);\n\nvar YlOrBr = ramp(scheme$19);\n\nvar scheme$20 = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors$1);\n\nvar YlOrRd = ramp(scheme$20);\n\nvar scheme$21 = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors$1);\n\nvar Blues = ramp(scheme$21);\n\nvar scheme$22 = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors$1);\n\nvar Greens = ramp(scheme$22);\n\nvar scheme$23 = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors$1);\n\nvar Greys = ramp(scheme$23);\n\nvar scheme$24 = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors$1);\n\nvar Purples = ramp(scheme$24);\n\nvar scheme$25 = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors$1);\n\nvar Reds = ramp(scheme$25);\n\nvar scheme$26 = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors$1);\n\nvar Oranges = ramp(scheme$26);\n\nvar cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n\nvar warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nvar rainbow$1 = function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n};\n\nfunction ramp$1(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nvar viridis = ramp$1(colors$1(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nvar magma = ramp$1(colors$1(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nvar inferno = ramp$1(colors$1(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nvar plasma = ramp$1(colors$1(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\n\n\nvar _ = Object.freeze({\n\tschemeCategory10: category10,\n\tschemeAccent: Accent,\n\tschemeDark2: Dark2,\n\tschemePaired: Paired,\n\tschemePastel1: Pastel1,\n\tschemePastel2: Pastel2,\n\tschemeSet1: Set1,\n\tschemeSet2: Set2,\n\tschemeSet3: Set3,\n\tinterpolateBrBG: BrBG,\n\tschemeBrBG: scheme,\n\tinterpolatePRGn: PRGn,\n\tschemePRGn: scheme$1,\n\tinterpolatePiYG: PiYG,\n\tschemePiYG: scheme$2,\n\tinterpolatePuOr: PuOr,\n\tschemePuOr: scheme$3,\n\tinterpolateRdBu: RdBu,\n\tschemeRdBu: scheme$4,\n\tinterpolateRdGy: RdGy,\n\tschemeRdGy: scheme$5,\n\tinterpolateRdYlBu: RdYlBu,\n\tschemeRdYlBu: scheme$6,\n\tinterpolateRdYlGn: RdYlGn,\n\tschemeRdYlGn: scheme$7,\n\tinterpolateSpectral: Spectral,\n\tschemeSpectral: scheme$8,\n\tinterpolateBuGn: BuGn,\n\tschemeBuGn: scheme$9,\n\tinterpolateBuPu: BuPu,\n\tschemeBuPu: scheme$10,\n\tinterpolateGnBu: GnBu,\n\tschemeGnBu: scheme$11,\n\tinterpolateOrRd: OrRd,\n\tschemeOrRd: scheme$12,\n\tinterpolatePuBuGn: PuBuGn,\n\tschemePuBuGn: scheme$13,\n\tinterpolatePuBu: PuBu,\n\tschemePuBu: scheme$14,\n\tinterpolatePuRd: PuRd,\n\tschemePuRd: scheme$15,\n\tinterpolateRdPu: RdPu,\n\tschemeRdPu: scheme$16,\n\tinterpolateYlGnBu: YlGnBu,\n\tschemeYlGnBu: scheme$17,\n\tinterpolateYlGn: YlGn,\n\tschemeYlGn: scheme$18,\n\tinterpolateYlOrBr: YlOrBr,\n\tschemeYlOrBr: scheme$19,\n\tinterpolateYlOrRd: YlOrRd,\n\tschemeYlOrRd: scheme$20,\n\tinterpolateBlues: Blues,\n\tschemeBlues: scheme$21,\n\tinterpolateGreens: Greens,\n\tschemeGreens: scheme$22,\n\tinterpolateGreys: Greys,\n\tschemeGreys: scheme$23,\n\tinterpolatePurples: Purples,\n\tschemePurples: scheme$24,\n\tinterpolateReds: Reds,\n\tschemeReds: scheme$25,\n\tinterpolateOranges: Oranges,\n\tschemeOranges: scheme$26,\n\tinterpolateCubehelixDefault: cubehelix$3,\n\tinterpolateRainbow: rainbow$1,\n\tinterpolateWarm: warm,\n\tinterpolateCool: cool,\n\tinterpolateViridis: viridis,\n\tinterpolateMagma: magma,\n\tinterpolateInferno: inferno,\n\tinterpolatePlasma: plasma\n});\n\nvar discrete = {\n blueorange: blueOrange\n};\n\nvar schemes = {\n // d3 categorical palettes\n category10: category10,\n accent: Accent,\n dark2: Dark2,\n paired: Paired,\n pastel1: Pastel1,\n pastel2: Pastel2,\n set1: Set1,\n set2: Set2,\n set3: Set3,\n\n // additional categorical palettes\n category20: category20,\n category20b: category20b,\n category20c: category20c,\n tableau10: tableau10,\n tableau20: tableau20,\n\n // sequential multi-hue interpolators\n viridis: viridis,\n magma: magma,\n inferno: inferno,\n plasma: plasma,\n\n // extended interpolators\n blueorange: rgbBasis(peek(blueOrange))\n};\n\nfunction add$2(name, suffix) {\n schemes[name] = _['interpolate' + suffix];\n discrete[name] = _['scheme' + suffix];\n}\n\n// sequential single-hue\nadd$2('blues', 'Blues');\nadd$2('greens', 'Greens');\nadd$2('greys', 'Greys');\nadd$2('purples', 'Purples');\nadd$2('reds', 'Reds');\nadd$2('oranges', 'Oranges');\n\n// diverging\nadd$2('brownbluegreen', 'BrBG');\nadd$2('purplegreen', 'PRGn');\nadd$2('pinkyellowgreen', 'PiYG');\nadd$2('purpleorange', 'PuOr');\nadd$2('redblue', 'RdBu');\nadd$2('redgrey', 'RdGy');\nadd$2('redyellowblue', 'RdYlBu');\nadd$2('redyellowgreen', 'RdYlGn');\nadd$2('spectral', 'Spectral');\n\n// sequential multi-hue\nadd$2('bluegreen', 'BuGn');\nadd$2('bluepurple', 'BuPu');\nadd$2('greenblue', 'GnBu');\nadd$2('orangered', 'OrRd');\nadd$2('purplebluegreen', 'PuBuGn');\nadd$2('purpleblue', 'PuBu');\nadd$2('purplered', 'PuRd');\nadd$2('redpurple', 'RdPu');\nadd$2('yellowgreenblue', 'YlGnBu');\nadd$2('yellowgreen', 'YlGn');\nadd$2('yelloworangebrown', 'YlOrBr');\nadd$2('yelloworangered', 'YlOrRd');\n\nvar getScheme = function(name, scheme$$1) {\n if (arguments.length > 1) {\n schemes[name] = scheme$$1;\n return this;\n }\n\n var part = name.split('-');\n name = part[0];\n part = +part[1] + 1;\n\n return part && discrete.hasOwnProperty(name) ? discrete[name][part-1]\n : !part && schemes.hasOwnProperty(name) ? schemes[name]\n : undefined;\n};\n\nfunction interpolateRange(interpolator, range) {\n var start = range[0],\n span = peek(range) - start;\n return function(i) { return interpolator(start + i * span); };\n}\n\nfunction scaleFraction(scale, min, max) {\n var delta = max - min;\n return !delta ? constant(0)\n : scale.type === 'linear' || scale.type === 'sequential'\n ? function(_) { return (_ - min) / delta; }\n : scale.copy().domain([min, max]).range([0, 1]).interpolate(lerp);\n}\n\nfunction lerp(a, b) {\n var span = b - a;\n return function(i) { return a + i * span; }\n}\n\nfunction interpolate$1(type, gamma) {\n var interp = $$1[method(type)];\n return (gamma != null && interp && interp.gamma)\n ? interp.gamma(gamma)\n : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase()\n .split('-')\n .map(function(s) { return s[0].toUpperCase() + s.slice(1); })\n .join('');\n}\n\nvar time$1 = {\n millisecond: millisecond,\n second: second,\n minute: minute,\n hour: hour,\n day: day,\n week: sunday,\n month: month,\n year: year\n};\n\nvar utc = {\n millisecond: millisecond,\n second: second,\n minute: utcMinute,\n hour: utcHour,\n day: utcDay,\n week: utcSunday,\n month: utcMonth,\n year: utcYear\n};\n\nfunction timeInterval(name) {\n return time$1.hasOwnProperty(name) && time$1[name];\n}\n\nfunction utcInterval(name) {\n return utc.hasOwnProperty(name) && utc[name];\n}\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @return {*} - The tick count or interval function.\n */\nfunction tickCount(scale$$1, count) {\n var step;\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = scale$$1.type === 'time' ? timeInterval(count)\n : scale$$1.type === 'utc' ? utcInterval(count)\n : error$1('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nfunction validTicks(scale$$1, ticks, count) {\n var range = scale$$1.range(),\n lo = range[0],\n hi = peek(range);\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n }\n\n ticks = ticks.filter(function(v) {\n v = scale$$1(v);\n return !(v < lo || v > hi)\n });\n\n if (count > 0 && ticks.length > 1) {\n var endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter(function(_, i) { return !(i % 2); });\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction tickValues(scale$$1, count) {\n return scale$$1.ticks ? scale$$1.ticks(count) : scale$$1.domain();\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3 4.0\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier).\n * @return {function(*):string} - The generated label formatter.\n */\nfunction tickFormat(scale$$1, count, specifier) {\n var format$$1 = scale$$1.tickFormat\n ? scale$$1.tickFormat(count, specifier)\n : String;\n\n return (scale$$1.type === Log)\n ? filter$1(format$$1, variablePrecision(specifier))\n : format$$1;\n}\n\nfunction filter$1(sourceFormat, targetFormat) {\n return function(_) {\n return sourceFormat(_) ? targetFormat(_) : '';\n };\n}\n\nfunction variablePrecision(specifier) {\n var s = formatSpecifier(specifier || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%': s.precision -= 2; break;\n case 'e': s.precision -= 1; break;\n }\n return trimZeroes(\n format(s), // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n}\n\nfunction trimZeroes(format$$1, decimalChar) {\n return function(x) {\n var str = format$$1(x),\n dec = str.indexOf(decimalChar),\n idx, end;\n\n if (dec < 0) return str;\n\n idx = rightmostDigit(str, dec);\n end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') { ++idx; break; }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n var i = str.lastIndexOf('e'), c;\n if (i > 0) return i;\n for (i=str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$54 = inherits(AxisTicks, Transform);\n\nprototype$54.transform = function(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n count = _.count == null ? (_.values ? _.values.length : 10) : tickCount(scale, _.count),\n format = _.format || tickFormat(scale, count, _.formatSpecifier),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n\n if (ticks) out.rem = ticks;\n\n ticks = values.map(function(value, i) {\n return ingest({\n index: i / (values.length - 1),\n value: value,\n label: format(value)\n });\n });\n\n if (_.extra) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {value: ticks[0].value},\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n\n return out;\n};\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$55 = inherits(DataJoin, Transform);\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction isExit(t) {\n return t.exit;\n}\n\nprototype$55.transform = function(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key$$1 = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key$$1))) {\n error$1('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = fastmap().test(isExit);\n map.lookup = function(t) { return map.get(key$$1(t)); };\n }\n\n pulse.visit(pulse.ADD, function(t) {\n var k = key$$1(t),\n x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n map.set(k, (x = item(t)));\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n\n pulse.visit(pulse.MOD, function(t) {\n var k = key$$1(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n\n pulse.visit(pulse.REM, function(t) {\n var k = key$$1(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (_.clean && map.empty > df.cleanThreshold) df.runAfter(map.clean);\n\n return out;\n};\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$56 = inherits(Encode, Transform);\n\nprototype$56.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(function(e) { return encoders[e]; })) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, function(t) {\n enter(t, _);\n update(t, _);\n if (set !== falsy && set !== update) set(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) out.modifies(set.output);\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, function(t) { exit(t, _); });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n var flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, function(t) {\n var mod = enter(t, _);\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, function(t) {\n if (set(t, _)) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n};\n\nvar discrete$1 = {};\ndiscrete$1[Quantile] = quantile$1;\ndiscrete$1[Quantize] = quantize$3;\ndiscrete$1[Threshold] = threshold$2;\ndiscrete$1[BinLinear] = bin$1;\ndiscrete$1[BinOrdinal] = bin$1;\n\nfunction labelValues(scale, count, gradient) {\n if (gradient) return scale.domain();\n var values = discrete$1[scale.type];\n return values ? values(scale) : tickValues(scale, count);\n}\n\nfunction quantize$3(scale) {\n var domain = scale.domain(),\n x0 = domain[0],\n x1 = peek(domain),\n n = scale.range().length,\n values = new Array(n),\n i = 0;\n\n values[0] = -Infinity;\n while (++i < n) values[i] = (i * x1 - (i - n) * x0) / n;\n values.max = +Infinity;\n\n return values;\n}\n\nfunction quantile$1(scale) {\n var values = [-Infinity].concat(scale.quantiles());\n values.max = +Infinity;\n\n return values;\n}\n\nfunction threshold$2(scale) {\n var values = [-Infinity].concat(scale.domain());\n values.max = +Infinity;\n\n return values;\n}\n\nfunction bin$1(scale) {\n var values = scale.domain();\n values.max = values.pop();\n\n return values;\n}\n\nfunction labelFormat(scale, format) {\n return discrete$1[scale.type] ? formatRange(format) : formatPoint(format);\n}\n\nfunction formatRange(format) {\n return function(value, index, array$$1) {\n var limit = array$$1[index + 1] || array$$1.max || +Infinity,\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + '\\u2013' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n };\n}\n\nfunction formatValue(value, format) {\n return isFinite(value) ? format(value) : null;\n}\n\nfunction formatPoint(format) {\n return function(value) {\n return format(value);\n };\n}\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=10] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\n\nvar prototype$57 = inherits(LegendEntries, Transform);\n\nprototype$57.transform = function(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n total = 0,\n items = this.value,\n grad = _.type === 'gradient',\n scale = _.scale,\n count = _.count == null ? 5 : tickCount(scale, _.count),\n format = _.format || tickFormat(scale, count, _.formatSpecifier),\n values = _.values || labelValues(scale, count, grad);\n\n format = labelFormat(scale, format);\n if (items) out.rem = items;\n\n if (grad) {\n var domain = _.values ? scale.domain() : values,\n fraction = scaleFraction(scale, domain[0], peek(domain));\n } else {\n var size = _.size,\n offset;\n if (isFunction(size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(values[0]) === 0) {\n values = values.slice(1);\n }\n // compute size offset for legend entries\n offset = values.reduce(function(max, value) {\n return Math.max(max, size(value, _));\n }, 0);\n } else {\n size = constant(offset = size || 8);\n }\n }\n\n items = values.map(function(value, index) {\n var t = ingest({\n index: index,\n label: format(value, index, values),\n value: value\n });\n\n if (grad) {\n t.perc = fraction(value);\n } else {\n t.offset = offset;\n t.size = size(value, _);\n t.total = Math.round(total);\n total += t.size;\n }\n return t;\n });\n\n out.source = items;\n out.add = items;\n this.value = items;\n\n return out;\n};\n\nvar Paths = fastmap({\n 'line': line$3,\n 'line-radial': lineR,\n 'arc': arc$2,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\nfunction sourceX(t) { return t.source.x; }\nfunction sourceY(t) { return t.source.y; }\nfunction targetX(t) { return t.target.x; }\nfunction targetY(t) { return t.target.y; }\n\n /**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\n\nLinkPath.Definition = {\n \"type\": \"LinkPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sourceX\", \"type\": \"field\", \"default\": \"source.x\" },\n { \"name\": \"sourceY\", \"type\": \"field\", \"default\": \"source.y\" },\n { \"name\": \"targetX\", \"type\": \"field\", \"default\": \"target.x\" },\n { \"name\": \"targetY\", \"type\": \"field\", \"default\": \"target.y\" },\n { \"name\": \"orient\", \"type\": \"enum\", \"default\": \"vertical\",\n \"values\": [\"horizontal\", \"vertical\", \"radial\"] },\n { \"name\": \"shape\", \"type\": \"enum\", \"default\": \"line\",\n \"values\": [\"line\", \"arc\", \"curve\", \"diagonal\", \"orthogonal\"] },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype$58 = inherits(LinkPath, Transform);\n\nprototype$58.transform = function(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error$1('LinkPath unsupported type: ' + _.shape\n + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, function(t) {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n\n return pulse.reflow(_.modified()).modifies(as);\n};\n\n// -- Link Path Generation Methods -----\n\nfunction line$3(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'L' + tx + ',' + ty;\n}\n\nfunction lineR(sa, sr, ta, tr) {\n return line$3(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction arc$2(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy +\n 'A' + rr + ',' + rr +\n ' ' + ra + ' 0 1' +\n ' ' + tx + ',' + ty;\n}\n\nfunction arcR(sa, sr, ta, tr) {\n return arc$2(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction curve(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy +\n 'C' + (sx+ix) + ',' + (sy+iy) +\n ' ' + (tx+iy) + ',' + (ty-ix) +\n ' ' + tx + ',' + ty;\n}\n\nfunction curveR(sa, sr, ta, tr) {\n return curve(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction orthoX(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'V' + ty + 'H' + tx;\n}\n\nfunction orthoY(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'H' + tx + 'V' + ty;\n}\n\nfunction orthoR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) +\n ' ' + (sr*tc) + ',' + (sr*ts) +\n 'L' + (tr*tc) + ',' + (tr*ts);\n}\n\nfunction diagonalX(sx, sy, tx, ty) {\n var m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + m + ',' + sy +\n ' ' + m + ',' + ty +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalY(sx, sy, tx, ty) {\n var m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + sx + ',' + m +\n ' ' + tx + ',' + m +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'C' + (mr*sc) + ',' + (mr*ss) +\n ' ' + (mr*tc) + ',' + (mr*ts) +\n ' ' + (tr*tc) + ',' + (tr*ts);\n}\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\n\nPie.Definition = {\n \"type\": \"Pie\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"startAngle\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"endAngle\", \"type\": \"number\", \"default\": 6.283185307179586 },\n { \"name\": \"sort\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"startAngle\", \"endAngle\"] }\n ]\n};\n\nvar prototype$59 = inherits(Pie, Transform);\n\nprototype$59.transform = function(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field$$1 = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field$$1),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = sequence(n),\n i, t, v;\n\n if (_.sort) {\n index.sort(function(a, b) {\n return values[a] - values[b];\n });\n }\n\n for (i=0; i -1) return raw;\n\n var domain = _.domain,\n type = scale.type,\n zero$$1 = _.zero || (_.zero === undefined && INCLUDE_ZERO[type]),\n n, mid;\n\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (INCLUDE_PAD[type] && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero$$1 || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = ((domain = domain.slice()).length - 1) || 1;\n if (zero$$1) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n if (mid < domain[0] || mid > domain[n]) {\n df.warn('Scale domainMid exceeds domain min or max.', mid);\n }\n domain.splice(n, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domain);\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\n\nfunction rawDomain(scale, raw) {\n if (raw) {\n scale.domain(raw);\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad$$1, exponent) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad$$1),\n d = type === Log ? zoomLog(domain, null, frac)\n : type === Sqrt ? zoomPow(domain, null, frac, 0.5)\n : type === Pow ? zoomPow(domain, null, frac, exponent)\n : zoomLinear(domain, null, frac);\n\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length-1] = d[1];\n return domain;\n}\n\nfunction configureRange(scale, _, count) {\n var round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(scale.type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(scale.type, _, count);\n if (isFunction(range)) return scale.interpolator(range);\n }\n\n // given a range array for a sequential scale, convert to interpolator\n else if (range && scale.type === Sequential) {\n return scale.interpolator(rgbBasis(flip(range, _.reverse)));\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate$1(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error$1('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1\n : ((_.paddingInner != null ? _.paddingInner : _.padding) || 0);\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var name = _.scheme.toLowerCase(),\n scheme = getScheme(name),\n extent = _.schemeExtent,\n discrete;\n\n if (!scheme) {\n error$1('Unrecognized scheme name: ' + _.scheme);\n }\n\n // determine size for potential discrete range\n count = (type === Threshold) ? count + 1\n : (type === BinOrdinal) ? count - 1\n : (type === Quantile || type === Quantize) ? (+_.schemeCount || DEFAULT_COUNT)\n : count;\n\n // adjust and/or quantize scheme as appropriate\n return type === Sequential ? adjustScheme(scheme, extent, _.reverse)\n : !extent && (discrete = getScheme(name + '-' + count)) ? discrete\n : isFunction(scheme) ? quantize$4(adjustScheme(scheme, extent), count)\n : type === Ordinal ? scheme : scheme.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return (isFunction(scheme) && (extent || reverse))\n ? interpolateRange(scheme, flip(extent || [0, 1], reverse))\n : scheme;\n}\n\nfunction flip(array$$1, reverse) {\n return reverse ? array$$1.slice().reverse() : array$$1;\n}\n\nfunction quantize$4(interpolator, count) {\n var samples = new Array(count),\n n = (count - 1) || 1;\n for (var i = 0; i < count; ++i) samples[i] = interpolator(i / n);\n return samples;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$61 = inherits(SortItems, Transform);\n\nprototype$61.transform = function(_, pulse) {\n var mod = _.modified('sort')\n || pulse.changed(pulse.ADD)\n || pulse.modified(_.sort.fields)\n || pulse.modified('datum');\n\n if (mod) pulse.source.sort(_.sort);\n\n this.modified(mod);\n return pulse;\n};\n\nvar Center = 'center';\nvar Normalize = 'normalize';\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - One of 'zero', 'center', 'normalize'.\n */\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\n\nStack.Definition = {\n \"type\": \"Stack\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"offset\", \"type\": \"enum\", \"default\": \"zero\", \"values\": [\"zero\", \"center\", \"normalize\"] },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"y0\", \"y1\"] }\n ]\n};\n\nvar prototype$62 = inherits(Stack, Transform);\n\nprototype$62.transform = function(_, pulse) {\n var as = _.as || ['y0', 'y1'],\n y0 = as[0],\n y1 = as[1],\n field$$1 = _.field || one,\n stack = _.offset === Center ? stackCenter\n : _.offset === Normalize ? stackNormalize\n : stackZero,\n groups, i, n, max;\n\n // partition, sum, and sort the stack groups\n groups = partition$1(pulse.source, _.groupby, _.sort, field$$1);\n\n // compute stack layouts per group\n for (i=0, n=groups.length, max=groups.max; i max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n\n return groups;\n}\n\n\n\nvar encode = Object.freeze({\n\taxisticks: AxisTicks,\n\tdatajoin: DataJoin,\n\tencode: Encode,\n\tlegendentries: LegendEntries,\n\tlinkpath: LinkPath,\n\tpie: Pie,\n\tscale: Scale,\n\tsortitems: SortItems,\n\tstack: Stack,\n\tvalidTicks: validTicks\n});\n\nvar array$4 = Array.prototype;\n\nvar slice$4 = array$4.slice;\n\nvar ascending$2 = function(a, b) {\n return a - b;\n};\n\nvar area$3 = function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n};\n\nvar constant$6 = function(x) {\n return function() {\n return x;\n };\n};\n\nvar contains = function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n};\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nvar noop$3 = function() {};\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nvar contours = function() {\n var dx = 1,\n dy = 1,\n threshold$$1 = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold$$1(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = sequence(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending$2);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area$3(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold$$1 = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$6(slice$4.call(_)) : constant$6(_), contours) : threshold$$1;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;\n };\n\n return contours;\n};\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nfunction blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nvar contourDensity = function() {\n var x = defaultX,\n y = defaultY,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold$$1 = constant$6(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (x(d, i, data) + o) >> k,\n yi = (y(d, i, data) + o) >> k;\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n ++values0[xi + yi * n];\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold$$1(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = sequence(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$6(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$6(+_), density) : y;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold$$1 = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$6(slice$4.call(_)) : constant$6(_), density) : threshold$$1;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n};\n\nvar CONTOUR_PARAMS = ['size', 'smooth'];\nvar DENSITY_PARAMS = ['x', 'y', 'size', 'cellSize', 'bandwidth'];\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\n\nContour.Definition = {\n \"type\": \"Contour\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2, \"required\": true },\n { \"name\": \"values\", \"type\": \"number\", \"array\": true },\n { \"name\": \"x\", \"type\": \"field\" },\n { \"name\": \"y\", \"type\": \"field\" },\n { \"name\": \"cellSize\", \"type\": \"number\" },\n { \"name\": \"bandwidth\", \"type\": \"number\" },\n { \"name\": \"count\", \"type\": \"number\" },\n { \"name\": \"smooth\", \"type\": \"boolean\" },\n { \"name\": \"nice\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"thresholds\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nvar prototype$63 = inherits(Contour, Transform);\n\nprototype$63.transform = function(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified())\n return pulse.StopPropagation;\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n count = _.count || 10,\n contour, params, values;\n\n if (_.values) {\n contour = contours();\n params = CONTOUR_PARAMS;\n values = _.values;\n } else {\n contour = contourDensity();\n params = DENSITY_PARAMS;\n values = pulse.materialize(pulse.SOURCE).source;\n }\n\n // set threshold parameter\n contour.thresholds(_.thresholds || (_.nice ? count : quantize$5(count)));\n\n // set all other parameters\n params.forEach(function(param) {\n if (_[param] != null) contour[param](_[param]);\n });\n\n if (this.value) out.rem = this.value;\n values = values && values.length ? contour(values).map(ingest) : [];\n this.value = out.source = out.add = values;\n\n return out;\n};\n\nfunction quantize$5(k) {\n return function(values) {\n var ex = extent(values), x0 = ex[0], dx = ex[1] - x0,\n t = [], i = 1;\n for (; i<=k; ++i) t.push(x0 + dx * i / (k + 1));\n return t;\n };\n}\n\nvar Feature = 'Feature';\nvar FeatureCollection = 'FeatureCollection';\nvar MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\n\nGeoJSON.Definition = {\n \"type\": \"GeoJSON\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"length\": 2 },\n { \"name\": \"geojson\", \"type\": \"field\" },\n ]\n};\n\nvar prototype$64 = inherits(GeoJSON, Transform);\n\nprototype$64.transform = function(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson,\n flag = pulse.ADD,\n mod;\n\n mod = _.modified()\n || pulse.changed(pulse.REM)\n || pulse.modified(accessorFields(geojson))\n || (lon && (pulse.modified(accessorFields(lon))))\n || (lat && (pulse.modified(accessorFields(lat))));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = (features = []);\n this._points = (points = []);\n }\n\n if (geojson) {\n pulse.visit(flag, function(t) {\n features.push(geojson(t));\n });\n }\n\n if (lon && lat) {\n pulse.visit(flag, function(t) {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n};\n\n// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nvar adder = function() {\n return new Adder;\n};\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add$3(temp$1, y, this.t);\n add$3(this, temp$1.s, this.s);\n if (this.s) this.t += temp$1.t;\n else this.s = temp$1.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp$1 = new Adder;\n\nfunction add$3(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n\nvar epsilon$2 = 1e-6;\nvar epsilon2$1 = 1e-12;\nvar pi$3 = Math.PI;\nvar halfPi$2 = pi$3 / 2;\nvar quarterPi = pi$3 / 4;\nvar tau$4 = pi$3 * 2;\n\nvar degrees$1 = 180 / pi$3;\nvar radians = pi$3 / 180;\n\nvar abs$1 = Math.abs;\nvar atan = Math.atan;\nvar atan2$1 = Math.atan2;\nvar cos$1 = Math.cos;\nvar ceil = Math.ceil;\nvar exp$1 = Math.exp;\n\nvar log$3 = Math.log;\nvar pow$2 = Math.pow;\nvar sin$1 = Math.sin;\nvar sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt$2 = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos$1(x) {\n return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);\n}\n\nfunction asin$1(x) {\n return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);\n}\n\nfunction noop$4() {}\n\nfunction streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nvar geoStream = function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n};\n\nvar areaRingSum = adder();\n\nvar areaSum = adder();\nvar lambda00;\nvar phi00;\nvar lambda0;\nvar cosPhi0;\nvar sinPhi0;\n\nvar areaStream = {\n point: noop$4,\n lineStart: noop$4,\n lineEnd: noop$4,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop$4;\n },\n sphere: function() {\n areaSum.add(tau$4);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos$1(phi),\n sinPhi = sin$1(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos$1(adLambda),\n v = k * sdLambda * sin$1(adLambda);\n areaRingSum.add(atan2$1(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nvar area$4 = function(object) {\n areaSum.reset();\n geoStream(object, areaStream);\n return areaSum * 2;\n};\n\nfunction spherical(cartesian) {\n return [atan2$1(cartesian[1], cartesian[0]), asin$1(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);\n return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];\n}\n\nfunction cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n var l = sqrt$2(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\nvar lambda0$1;\nvar phi0;\nvar lambda1;\nvar phi1;\nvar lambda2;\nvar lambda00$1;\nvar phi00$1;\nvar p0;\nvar deltaSum = adder();\nvar ranges;\nvar range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon$2) phi1 = 90;\n else if (deltaSum < -epsilon$2) phi0 = -90;\n range[0] = lambda0$1, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees$1 * sign,\n phii,\n antimeridian = abs$1(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees$1;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees$1;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n }\n } else {\n if (lambda1 >= lambda0$1) {\n if (lambda < lambda0$1) lambda0$1 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0$1, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs$1(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00$1 = lambda, phi00$1 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00$1, phi00$1);\n areaStream.lineEnd();\n if (abs$1(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);\n range[0] = lambda0$1, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nvar bounds$1 = function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n ranges = [];\n geoStream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0$1 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0$1, phi0], [lambda1, phi1]];\n};\n\nvar W0;\nvar W1;\nvar X0;\nvar Y0;\nvar Z0;\nvar X1;\nvar Y1;\nvar Z1;\nvar X2;\nvar Y2;\nvar Z2;\nvar lambda00$2;\nvar phi00$2;\nvar x0;\nvar y0;\nvar z0; // previous point\n\nvar centroidStream = {\n sphere: noop$4,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi);\n centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi);\n x0 = cosPhi * cos$1(lambda);\n y0 = cosPhi * sin$1(lambda);\n z0 = sin$1(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi),\n x = cosPhi * cos$1(lambda),\n y = cosPhi * sin$1(lambda),\n z = sin$1(phi),\n w = atan2$1(sqrt$2((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00$2, phi00$2);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00$2 = lambda, phi00$2 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos$1(phi);\n x0 = cosPhi * cos$1(lambda);\n y0 = cosPhi * sin$1(lambda);\n z0 = sin$1(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi),\n x = cosPhi * cos$1(lambda),\n y = cosPhi * sin$1(lambda),\n z = sin$1(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt$2(cx * cx + cy * cy + cz * cz),\n w = asin$1(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nvar centroid = function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n geoStream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2$1) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2$1) return [NaN, NaN];\n }\n\n return [atan2$1(y, x) * degrees$1, asin$1(z / sqrt$2(m)) * degrees$1];\n};\n\nvar compose = function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n};\n\nfunction rotationIdentity(lambda, phi) {\n return [lambda > pi$3 ? lambda - tau$4 : lambda < -pi$3 ? lambda + tau$4 : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$4 : lambda < -pi$3 ? lambda + tau$4 : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos$1(deltaPhi),\n sinDeltaPhi = sin$1(deltaPhi),\n cosDeltaGamma = cos$1(deltaGamma),\n sinDeltaGamma = sin$1(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos$1(phi),\n x = cos$1(lambda) * cosPhi,\n y = sin$1(lambda) * cosPhi,\n z = sin$1(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2$1(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin$1(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos$1(phi),\n x = cos$1(lambda) * cosPhi,\n y = sin$1(lambda) * cosPhi,\n z = sin$1(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2$1(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin$1(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nvar rotation = function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n };\n\n return forward;\n};\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos$1(radius),\n sinRadius = sin$1(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau$4;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos$1(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$2) % tau$4;\n}\n\nvar clipBuffer = function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop$4,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n};\n\nvar pointEqual = function(a, b) {\n return abs$1(a[0] - b[0]) < epsilon$2 && abs$1(a[1] - b[1]) < epsilon$2;\n};\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nvar clipRejoin = function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link$1(subject);\n link$1(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n};\n\nfunction link$1(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n\nvar sum$2 = adder();\n\nvar polygonContains = function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n sinPhi = sin$1(phi),\n normal = [sin$1(lambda), -cos$1(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum$2.reset();\n\n if (sinPhi === 1) phi = halfPi$2 + epsilon$2;\n else if (sinPhi === -1) phi = -halfPi$2 - epsilon$2;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin$1(phi0),\n cosPhi0 = cos$1(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin$1(phi1),\n cosPhi1 = cos$1(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi$3,\n k = sinPhi0 * sinPhi1;\n\n sum$2.add(atan2$1(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));\n angle += antimeridian ? delta + sign * tau$4 : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon$2 || angle < epsilon$2 && sum$2 < -epsilon$2) ^ (winding & 1);\n};\n\nvar clip$2 = function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge$2(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n};\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);\n}\n\nvar clipAntimeridian = clip$2(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi$3, -halfPi$2]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi$3 : -pi$3,\n delta = abs$1(lambda1 - lambda0);\n if (abs$1(delta - pi$3) < epsilon$2) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian\n if (abs$1(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies\n if (abs$1(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin$1(lambda0 - lambda1);\n return abs$1(sinLambda0Lambda1) > epsilon$2\n ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)\n - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi$2;\n stream.point(-pi$3, phi);\n stream.point(0, phi);\n stream.point(pi$3, phi);\n stream.point(pi$3, 0);\n stream.point(pi$3, -phi);\n stream.point(0, -phi);\n stream.point(-pi$3, -phi);\n stream.point(-pi$3, 0);\n stream.point(-pi$3, phi);\n } else if (abs$1(from[0] - to[0]) > epsilon$2) {\n var lambda = from[0] < to[0] ? pi$3 : -pi$3;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n\nvar clipCircle = function(radius) {\n var cr = cos$1(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs$1(cr) > epsilon$2; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos$1(lambda) * cos$1(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon$2;\n point1[1] += epsilon$2;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt$2(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs$1(delta - pi$3) < epsilon$2,\n meridian = polar || delta < epsilon$2;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi$3 - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip$2(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);\n};\n\nvar clipLine = function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n};\n\nvar clipMax = 1e9;\nvar clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs$1(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3\n : abs$1(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1\n : abs$1(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge$2(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\nvar lengthSum = adder();\nvar lambda0$2;\nvar sinPhi0$1;\nvar cosPhi0$1;\n\nvar lengthStream = {\n sphere: noop$4,\n point: noop$4,\n lineStart: lengthLineStart,\n lineEnd: noop$4,\n polygonStart: noop$4,\n polygonEnd: noop$4\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop$4;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin$1(phi),\n cosPhi = cos$1(phi),\n delta = abs$1(lambda - lambda0$2),\n cosDelta = cos$1(delta),\n sinDelta = sin$1(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n lengthSum.add(atan2$1(sqrt$2(x * x + y * y), z));\n lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n}\n\nvar length$1 = function(object) {\n lengthSum.reset();\n geoStream(object, lengthStream);\n return +lengthSum;\n};\n\nvar coordinates = [null, null];\nvar object$3 = {type: \"LineString\", coordinates: coordinates};\n\nvar distance = function(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length$1(object$3);\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ab = distance(coordinates[0], coordinates[1]),\n ao = distance(coordinates[0], point),\n ob = distance(point, coordinates[1]);\n return ao + ob <= ab + epsilon$2;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n}\n\nfunction graticuleX(y0, y1, dy) {\n var y = sequence(y0, y1 - epsilon$2, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = sequence(x0, x1 - epsilon$2, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return sequence(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(sequence(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(sequence(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$1(x % DX) > epsilon$2; }).map(x))\n .concat(sequence(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$1(y % DY) > epsilon$2; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])\n .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);\n}\n\nvar identity$7 = function(x) {\n return x;\n};\n\nvar areaSum$1 = adder();\nvar areaRingSum$1 = adder();\nvar x00;\nvar y00;\nvar x0$1;\nvar y0$1;\n\nvar areaStream$1 = {\n point: noop$4,\n lineStart: noop$4,\n lineEnd: noop$4,\n polygonStart: function() {\n areaStream$1.lineStart = areaRingStart$1;\n areaStream$1.lineEnd = areaRingEnd$1;\n },\n polygonEnd: function() {\n areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$4;\n areaSum$1.add(abs$1(areaRingSum$1));\n areaRingSum$1.reset();\n },\n result: function() {\n var area = areaSum$1 / 2;\n areaSum$1.reset();\n return area;\n }\n};\n\nfunction areaRingStart$1() {\n areaStream$1.point = areaPointFirst$1;\n}\n\nfunction areaPointFirst$1(x, y) {\n areaStream$1.point = areaPoint$1;\n x00 = x0$1 = x, y00 = y0$1 = y;\n}\n\nfunction areaPoint$1(x, y) {\n areaRingSum$1.add(y0$1 * x - x0$1 * y);\n x0$1 = x, y0$1 = y;\n}\n\nfunction areaRingEnd$1() {\n areaPoint$1(x00, y00);\n}\n\nvar x0$2 = Infinity;\nvar y0$2 = x0$2;\nvar x1 = -x0$2;\nvar y1 = x1;\n\nvar boundsStream$1 = {\n point: boundsPoint$1,\n lineStart: noop$4,\n lineEnd: noop$4,\n polygonStart: noop$4,\n polygonEnd: noop$4,\n result: function() {\n var bounds = [[x0$2, y0$2], [x1, y1]];\n x1 = y1 = -(y0$2 = x0$2 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint$1(x, y) {\n if (x < x0$2) x0$2 = x;\n if (x > x1) x1 = x;\n if (y < y0$2) y0$2 = y;\n if (y > y1) y1 = y;\n}\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0$1 = 0;\nvar Y0$1 = 0;\nvar Z0$1 = 0;\nvar X1$1 = 0;\nvar Y1$1 = 0;\nvar Z1$1 = 0;\nvar X2$1 = 0;\nvar Y2$1 = 0;\nvar Z2$1 = 0;\nvar x00$1;\nvar y00$1;\nvar x0$3;\nvar y0$3;\n\nvar centroidStream$1 = {\n point: centroidPoint$1,\n lineStart: centroidLineStart$1,\n lineEnd: centroidLineEnd$1,\n polygonStart: function() {\n centroidStream$1.lineStart = centroidRingStart$1;\n centroidStream$1.lineEnd = centroidRingEnd$1;\n },\n polygonEnd: function() {\n centroidStream$1.point = centroidPoint$1;\n centroidStream$1.lineStart = centroidLineStart$1;\n centroidStream$1.lineEnd = centroidLineEnd$1;\n },\n result: function() {\n var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n : [NaN, NaN];\n X0$1 = Y0$1 = Z0$1 =\n X1$1 = Y1$1 = Z1$1 =\n X2$1 = Y2$1 = Z2$1 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint$1(x, y) {\n X0$1 += x;\n Y0$1 += y;\n ++Z0$1;\n}\n\nfunction centroidLineStart$1() {\n centroidStream$1.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream$1.point = centroidPointLine;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0$3, dy = y - y0$3, z = sqrt$2(dx * dx + dy * dy);\n X1$1 += z * (x0$3 + x) / 2;\n Y1$1 += z * (y0$3 + y) / 2;\n Z1$1 += z;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidLineEnd$1() {\n centroidStream$1.point = centroidPoint$1;\n}\n\nfunction centroidRingStart$1() {\n centroidStream$1.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd$1() {\n centroidPointRing(x00$1, y00$1);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream$1.point = centroidPointRing;\n centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0$3,\n dy = y - y0$3,\n z = sqrt$2(dx * dx + dy * dy);\n\n X1$1 += z * (x0$3 + x) / 2;\n Y1$1 += z * (y0$3 + y) / 2;\n Z1$1 += z;\n\n z = y0$3 * x - x0$3 * y;\n X2$1 += z * (x0$3 + x);\n Y2$1 += z * (y0$3 + y);\n Z2$1 += z * 3;\n centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau$4);\n break;\n }\n }\n },\n result: noop$4\n};\n\nvar lengthSum$1 = adder();\nvar lengthRing;\nvar x00$2;\nvar y00$2;\nvar x0$4;\nvar y0$4;\n\nvar lengthStream$1 = {\n point: noop$4,\n lineStart: function() {\n lengthStream$1.point = lengthPointFirst$1;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint$1(x00$2, y00$2);\n lengthStream$1.point = noop$4;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum$1;\n lengthSum$1.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst$1(x, y) {\n lengthStream$1.point = lengthPoint$1;\n x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n}\n\nfunction lengthPoint$1(x, y) {\n x0$4 -= x, y0$4 -= y;\n lengthSum$1.add(sqrt$2(x0$4 * x0$4 + y0$4 * y0$4));\n x0$4 = x, y0$4 = y;\n}\n\nfunction PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle$2(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle$2(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle$2(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n\nvar geoPath = function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n geoStream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n geoStream(object, projectionStream(areaStream$1));\n return areaStream$1.result();\n };\n\n path.measure = function(object) {\n geoStream(object, projectionStream(lengthStream$1));\n return lengthStream$1.result();\n };\n\n path.bounds = function(object) {\n geoStream(object, projectionStream(boundsStream$1));\n return boundsStream$1.result();\n };\n\n path.centroid = function(object) {\n geoStream(object, projectionStream(centroidStream$1));\n return centroidStream$1.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$7) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n};\n\nfunction transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream$1));\n fitBounds(boundsStream$1.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nvar maxDepth = 16;\nvar cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)\n\nvar resample = function(project, delta2) {\n return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n};\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample$1(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt$2(a * a + b * b + c * c),\n phi2 = asin$1(c /= m),\n lambda2 = abs$1(abs$1(c) - 1) < epsilon$2 || abs$1(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2$1(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs$1((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n function transform(x, y) {\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k, (dy - y) / k];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n var cosAlpha = cos$1(alpha),\n sinAlpha = sin$1(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n };\n return transform;\n}\n\nfunction projection$1(project) {\n return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity$7, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees$1, point[1] * degrees$1];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$2(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n\nfunction conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi$3 / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];\n };\n\n return p;\n}\n\nfunction cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos$1(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin$1(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin$1(y * cosPhi0)];\n };\n\n return forward;\n}\n\nfunction conicEqualAreaRaw(y0, y1) {\n var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs$1(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$2(c) / n;\n\n function project(x, y) {\n var r = sqrt$2(c - 2 * n * sin$1(y)) / n;\n return [r * sin$1(x *= n), r0 - r * cos$1(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y;\n return [atan2$1(x, abs$1(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nvar conicEqualArea = function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n};\n\nvar albers = function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n};\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nvar geoAlbersUsa = function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n};\n\nfunction azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos$1(x),\n cy = cos$1(y),\n k = scale(cx * cy);\n return [\n k * cy * sin$1(x),\n k * sin$1(y)\n ];\n }\n}\n\nfunction azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt$2(x * x + y * y),\n c = angle(z),\n sc = sin$1(c),\n cc = cos$1(c);\n return [\n atan2$1(x * sc, z * cc),\n asin$1(z && y * sc / z)\n ];\n }\n}\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt$2(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin$1(z / 2);\n});\n\nvar geoAzimuthalEqualArea = function() {\n return projection$1(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n};\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos$1(c)) && c / sin$1(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nvar geoAzimuthalEquidistant = function() {\n return projection$1(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n};\n\nfunction mercatorRaw(lambda, phi) {\n return [lambda, log$3(tan((halfPi$2 + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp$1(y)) - halfPi$2];\n};\n\nvar geoMercator = function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau$4);\n};\n\nfunction mercatorProjection(project) {\n var m = projection$1(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi$3 * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n\nfunction tany(y) {\n return tan((halfPi$2 + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n var cy0 = cos$1(y0),\n n = y0 === y1 ? sin$1(y0) : log$3(cy0 / cos$1(y1)) / log$3(tany(y1) / tany(y0)),\n f = cy0 * pow$2(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }\n else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }\n var r = f / pow$2(tany(y), n);\n return [r * sin$1(n * x), f - r * cos$1(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign$1(n) * sqrt$2(x * x + fy * fy);\n return [atan2$1(x, abs$1(fy)) / n * sign$1(fy), 2 * atan(pow$2(f / r, 1 / n)) - halfPi$2];\n };\n\n return project;\n}\n\nvar geoConicConformal = function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n};\n\nfunction equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nvar geoEquirectangular = function() {\n return projection$1(equirectangularRaw)\n .scale(152.63);\n};\n\nfunction conicEquidistantRaw(y0, y1) {\n var cy0 = cos$1(y0),\n n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs$1(n) < epsilon$2) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin$1(nx), g - gy * cos$1(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y;\n return [atan2$1(x, abs$1(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$2(x * x + gy * gy)];\n };\n\n return project;\n}\n\nvar geoConicEquidistant = function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n};\n\nfunction gnomonicRaw(x, y) {\n var cy = cos$1(y), k = cos$1(x) * cy;\n return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nvar geoGnomonic = function() {\n return projection$1(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n};\n\nfunction scaleTranslate$1(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({\n point: function(x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n}\n\nvar geoIdentity = function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$7, // scale, translate and reflect\n x0 = null, y0, x1, y1, // clip extent\n postclip = identity$7,\n cache,\n cacheStream,\n projection;\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return projection = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n },\n postclip: function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n },\n clipExtent: function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function(_) {\n return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function(_) {\n return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function(_) {\n return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function(_) {\n return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function(extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function(size, object) {\n return fitSize(projection, size, object);\n },\n fitWidth: function(width, object) {\n return fitWidth(projection, width, object);\n },\n fitHeight: function(height, object) {\n return fitHeight(projection, height, object);\n }\n };\n};\n\nfunction orthographicRaw(x, y) {\n return [cos$1(y) * sin$1(x), sin$1(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin$1);\n\nvar geoOrthographic = function() {\n return projection$1(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon$2);\n};\n\nfunction stereographicRaw(x, y) {\n var cy = cos$1(y), k = 1 + cos$1(x) * cy;\n return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nvar geoStereographic = function() {\n return projection$1(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n};\n\nfunction transverseMercatorRaw(lambda, phi) {\n return [log$3(tan((halfPi$2 + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp$1(x)) - halfPi$2];\n};\n\nvar geoTransverseMercator = function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n};\n\nvar defaultPath = geoPath();\n\nvar projectionProperties = [\n // standard properties in d3-geo\n 'clipAngle',\n 'clipExtent',\n 'scale',\n 'translate',\n 'center',\n 'rotate',\n 'parallels',\n 'precision',\n 'reflectX',\n 'reflectY',\n\n // extended properties in d3-geo-projections\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create$1(type, constructor) {\n return function projection$$1() {\n var p = constructor();\n\n p.type = type;\n\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function() {\n var c = projection$$1();\n projectionProperties.forEach(function(prop) {\n if (p.hasOwnProperty(prop)) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nfunction projection$$1(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create$1(type, proj);\n return this;\n } else {\n return projections.hasOwnProperty(type) ? projections[type] : null;\n }\n}\n\nfunction getProjectionPath(proj) {\n return (proj && proj.path) || defaultPath;\n}\n\nvar projections = {\n // base d3-geo projection types\n albers: albers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: conicEqualArea,\n conicequidistant: geoConicEquidistant,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (var key$2 in projections) {\n projection$$1(key$2, projections[key$2]);\n}\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\n\nGeoPath.Definition = {\n \"type\": \"GeoPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype$65 = inherits(GeoPath, Transform);\n\nprototype$65.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field$$1 = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n function set(t) { t[as] = path(field$$1(t)); }\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field$$1 === identity || pulse.modified(field$$1.fields)\n ? out.ADD_MOD\n : out.ADD;\n }\n\n var prev = initPath(path, _.pointRadius);\n out.visit(flag, set);\n path.pointRadius(prev);\n\n return out.modifies(as);\n};\n\nfunction initPath(path, pointRadius) {\n var prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\n\nGeoPoint.Definition = {\n \"type\": \"GeoPoint\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\", \"required\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"x\", \"y\"] }\n ]\n};\n\nvar prototype$66 = inherits(GeoPoint, Transform);\n\nprototype$66.transform = function(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n var xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n};\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\n\nGeoShape.Definition = {\n \"type\": \"GeoShape\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\", \"default\": \"datum\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"shape\" }\n ]\n};\n\nvar prototype$67 = inherits(GeoShape, Transform);\n\nprototype$67.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n datum = _.field || field('datum'),\n as = _.as || 'shape',\n flag = out.ADD_MOD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(\n getProjectionPath(_.projection),\n datum,\n _.pointRadius\n );\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, function(t) { t[as] = shape; });\n\n return out.modifies(as);\n};\n\nfunction shapeGenerator(path, field$$1, pointRadius) {\n var shape = pointRadius == null\n ? function(_) { return path(field$$1(_)); }\n : function(_) {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field$$1(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = function(_) {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = graticule();\n}\n\nGraticule.Definition = {\n \"type\": \"Graticule\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMajor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMinor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"step\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"stepMajor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [90, 360] },\n { \"name\": \"stepMinor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [10, 10] },\n { \"name\": \"precision\", \"type\": \"number\", \"default\": 2.5 }\n ]\n};\n\nvar prototype$68 = inherits(Graticule, Transform);\n\nprototype$68.transform = function(_, pulse) {\n var src = this.value,\n gen = this.generator, t;\n\n if (!src.length || _.modified()) {\n for (var prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n\n return pulse;\n};\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\nvar prototype$69 = inherits(Projection, Transform);\n\nprototype$69.transform = function(_, pulse) {\n var proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = (proj = create$2(_.type));\n projectionProperties.forEach(function(prop) {\n if (_[prop] != null) set$4(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(function(prop) {\n if (_.modified(prop)) set$4(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit$1(proj, _);\n\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n};\n\nfunction fit$1(proj, _) {\n var data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data)\n : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create$2(type) {\n var constructor = projection$$1((type || 'mercator').toLowerCase());\n if (!constructor) error$1('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set$4(proj, key$$1, value) {\n if (isFunction(proj[key$$1])) proj[key$$1](value);\n}\n\nfunction collectGeoJSON(features) {\n features = array(features);\n return features.length === 1\n ? features[0]\n : {\n type: FeatureCollection,\n features: features.reduce(function(list, f) {\n (f && f.type === FeatureCollection) ? list.push.apply(list, f.features)\n : isArray(f) ? list.push.apply(list, f)\n : list.push(f);\n return list;\n }, [])\n };\n}\n\n\n\nvar geo = Object.freeze({\n\tcontour: Contour,\n\tgeojson: GeoJSON,\n\tgeopath: GeoPath,\n\tgeopoint: GeoPoint,\n\tgeoshape: GeoShape,\n\tgraticule: Graticule,\n\tprojection: Projection\n});\n\nvar forceCenter = function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n};\n\nvar constant$8 = function(x) {\n return function() {\n return x;\n };\n};\n\nvar jiggle = function() {\n return (Math.random() - 0.5) * 1e-6;\n};\n\nvar tree_add = function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add$4(this.cover(x, y), x, y, d);\n};\n\nfunction add$4(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nfunction addAll$1(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n if (y1 < y0) y0 = this._y0, y1 = this._y1;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add$4(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n\nvar tree_cover = function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1 || y0 > y || y > y1) {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);\n break;\n }\n case 1: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);\n break;\n }\n case 2: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);\n break;\n }\n case 3: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the quadtree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n};\n\nvar tree_data = function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n};\n\nvar tree_extent = function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n};\n\nvar Quad = function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n};\n\nvar tree_find = function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n};\n\nvar tree_remove = function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n};\n\nfunction removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n\nvar tree_root = function() {\n return this._root;\n};\n\nvar tree_size = function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n};\n\nvar tree_visit = function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n};\n\nvar tree_visitAfter = function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n};\n\nfunction defaultX$1(d) {\n return d[0];\n}\n\nvar tree_x = function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n};\n\nfunction defaultY$1(d) {\n return d[1];\n}\n\nvar tree_y = function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n};\n\nfunction quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = addAll$1;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n\nfunction x$2(d) {\n return d.x + d.vx;\n}\n\nfunction y$2(d) {\n return d.y + d.vy;\n}\n\nvar forceCollide = function(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant$8(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x$2, y$2).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$8(+_), initialize(), force) : radius;\n };\n\n return force;\n};\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nvar forceLink = function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant$8(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = map(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$8(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant$8(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n};\n\nvar frame = 0;\nvar timeout = 0;\nvar interval = 0;\nvar pokeDelay = 1000;\nvar taskHead;\nvar taskTail;\nvar clockLast = 0;\nvar clockNow = 0;\nvar clockSkew = 0;\nvar clock = typeof performance === \"object\" && performance.now ? performance : Date;\nvar setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nfunction timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n\nfunction x$3(d) {\n return d.x;\n}\n\nfunction y$3(d) {\n return d.y;\n}\n\nvar initialRadius = 10;\nvar initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nvar forceSimulation = function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick() {\n var i, n = nodes.length, node;\n\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.each(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n};\n\nvar forceManyBody = function() {\n var nodes,\n node,\n alpha,\n strength = constant$8(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x$3, y$3).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$8(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n};\n\nvar forceX = function(x) {\n var strength = constant$8(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant$8(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$8(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$8(+_), initialize(), force) : x;\n };\n\n return force;\n};\n\nvar forceY = function(y) {\n var strength = constant$8(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant$8(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$8(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$8(+_), initialize(), force) : y;\n };\n\n return force;\n};\n\nvar ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\n\nvar Forces = 'forces';\nvar ForceParams = [\n 'alpha', 'alphaMin', 'alphaTarget',\n 'velocityDecay', 'forces'\n ];\nvar ForceConfig = ['static', 'iterations'];\nvar ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nfunction Force(params) {\n Transform.call(this, null, params);\n}\n\nForce.Definition = {\n \"type\": \"Force\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"static\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"restart\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 300 },\n { \"name\": \"alpha\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"alphaMin\", \"type\": \"number\", \"default\": 0.001 },\n { \"name\": \"alphaTarget\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"velocityDecay\", \"type\": \"number\", \"default\": 0.4 },\n { \"name\": \"forces\", \"type\": \"param\", \"array\": true,\n \"params\": [\n {\n \"key\": {\"force\": \"center\"},\n \"params\": [\n { \"name\": \"x\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"y\", \"type\": \"number\", \"default\": 0 }\n ]\n },\n {\n \"key\": {\"force\": \"collide\"},\n \"params\": [\n { \"name\": \"radius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.7 },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"nbody\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": -30 },\n { \"name\": \"theta\", \"type\": \"number\", \"default\": 0.9 },\n { \"name\": \"distanceMin\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"distanceMax\", \"type\": \"number\" }\n ]\n },\n {\n \"key\": {\"force\": \"link\"},\n \"params\": [\n { \"name\": \"links\", \"type\": \"data\" },\n { \"name\": \"id\", \"type\": \"field\" },\n { \"name\": \"distance\", \"type\": \"number\", \"default\": 30, \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"x\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"x\", \"type\": \"field\" }\n ]\n },\n {\n \"key\": {\"force\": \"y\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"y\", \"type\": \"field\" }\n ]\n }\n ] },\n {\n \"name\": \"as\", \"type\": \"string\", \"array\": true, \"modify\": false,\n \"default\": ForceOutput\n }\n ]\n};\n\nvar prototype$70 = inherits(Force, Transform);\n\nprototype$70.transform = function(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig)\n || (pulse.changed() && _.restart))\n {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1))\n .alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n};\n\nprototype$70.finish = function(_, pulse) {\n var dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (var args=this._argops, j=0, m=args.length, arg; j= 0) sum += children[i].value;\n node.value = sum;\n}\n\nvar node_count = function() {\n return this.eachAfter(count);\n};\n\nvar node_each = function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n};\n\nvar node_eachBefore = function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n};\n\nvar node_eachAfter = function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n};\n\nvar node_sum = function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n};\n\nvar node_sort = function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n};\n\nvar node_path = function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n};\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n\nvar node_ancestors = function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n};\n\nvar node_descendants = function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n};\n\nvar node_leaves = function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n};\n\nvar node_links = function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n};\n\nfunction hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nfunction Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n\nvar slice$5 = Array.prototype.slice;\n\nfunction shuffle$1(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n\nvar enclose = function(circles) {\n var i = 0, n = (circles = shuffle$1(slice$5.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n};\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node$1(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nfunction packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node$1(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nfunction optional(f) {\n return f == null ? null : required(f);\n}\n\nfunction required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n\nfunction constantZero() {\n return 0;\n}\n\nvar constant$9 = function(x) {\n return function() {\n return x;\n };\n};\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nvar pack$1 = function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant$9(+x), pack) : padding;\n };\n\n return pack;\n};\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\nvar roundNode = function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n};\n\nvar treemapDice = function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n};\n\nvar partition$2 = function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n};\n\nvar keyPrefix = \"$\";\nvar preroot = {depth: -1};\nvar ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nvar stratify = function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n};\n\nfunction defaultSeparation$1(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nvar tree$1 = function() {\n var separation = defaultSeparation$1,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n};\n\nvar treemapSlice = function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n};\n\nvar phi = (1 + Math.sqrt(5)) / 2;\n\nfunction squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nvar treemapSquarify = (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n\nvar treemap = function() {\n var tile = treemapSquarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant$9(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n};\n\nvar treemapBinary = function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n};\n\nvar treemapSliceDice = function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n};\n\nvar treemapResquarify = (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {function(object): *} [params.key] - Unique key field for each tuple.\n * If not provided, the tuple id field is used.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\n\nNest.Definition = {\n \"type\": \"Nest\",\n \"metadata\": {\"treesource\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"keys\", \"type\": \"field\", \"array\": true },\n { \"name\": \"key\", \"type\": \"field\" },\n { \"name\": \"generate\", \"type\": \"boolean\" }\n ]\n};\n\nvar prototype$71 = inherits(Nest, Transform);\n\nfunction children(n) {\n return n.values;\n}\n\nprototype$71.transform = function(_, pulse) {\n if (!pulse.source) {\n error$1('Nest transform requires an upstream data source.');\n }\n\n var key$$1 = _.key || tupleid,\n gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n root, tree, map$$1;\n\n if (!this.value || mod || pulse.changed()) {\n // collect nodes to remove\n if (gen && this.value) {\n this.value.each(function(node) {\n if (node.children) out.rem.push(node);\n });\n }\n\n // generate new tree structure\n root = array(_.keys)\n .reduce(function(n, k) { n.key(k); return n; }, nest())\n .entries(out.source);\n this.value = tree = hierarchy({values: root}, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(function(node) {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n map$$1 = tree.lookup = {};\n tree.each(function(node) {\n if (tupleid(node.data) != null) {\n map$$1[key$$1(node.data)] = node;\n }\n });\n }\n\n out.source.root = this.value;\n return out;\n};\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype$73 = inherits(HierarchyLayout, Transform);\n\nprototype$73.transform = function(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error$1(this.constructor.name\n + ' transform requires a backing tree data source.');\n }\n\n var layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n\n if (_.field) root.sum(_.field);\n if (_.sort) root.sort(_.sort);\n\n setParams(layout, this.params, _);\n try {\n this.value = layout(root);\n } catch (err) {\n error$1(err);\n }\n root.each(function(node) { setFields(node, fields, as); });\n\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n};\n\nfunction setParams(layout, params, _) {\n for (var p, i=0, n=params.length; i 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nfunction clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {\n delete edges[i];\n }\n }\n}\n\nfunction createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nfunction cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nfunction cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nfunction sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nfunction clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]\n : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]\n : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n\nvar circlePool = [];\n\nvar firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nfunction attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2$2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nfunction detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nfunction removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon$3\n && Math.abs(y - lArc.circle.cy) < epsilon$3) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon$3\n && Math.abs(y - rArc.circle.cy) < epsilon$3) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon$3) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon$3) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon$3) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon$3) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n\nvar epsilon$3 = 1e-6;\nvar epsilon2$2 = 1e-12;\nvar beaches;\nvar cells;\nvar circles;\nvar edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nfunction Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n};\n\nvar voronoi$1 = function() {\n var x = x$4,\n y = y$4,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon$3) * epsilon$3, Math.round(y(d, i, data) / epsilon$3) * epsilon$3];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$10(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$10(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n};\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\n\nVoronoi.Definition = {\n \"type\": \"Voronoi\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"x\", \"type\": \"field\", \"required\": true },\n { \"name\": \"y\", \"type\": \"field\", \"required\": true },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"default\": [[-1e5, -1e5], [1e5, 1e5]],\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype$79 = inherits(Voronoi, Transform);\n\nvar defaultExtent = [[-1e5, -1e5], [1e5, 1e5]];\n\nprototype$79.transform = function(_, pulse) {\n var as = _.as || 'path',\n data = pulse.source,\n diagram, polygons, i, n;\n\n // configure and construct voronoi diagram\n diagram = voronoi$1().x(_.x).y(_.y);\n if (_.size) diagram.size(_.size);\n else diagram.extent(_.extent || defaultExtent);\n\n this.value = (diagram = diagram(data));\n\n // map polygons to paths\n polygons = diagram.polygons();\n for (i=0, n=data.length; i> 5;\nvar ch = 1 << 11;\n\nvar cloud = function() {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function() {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(function(d) {\n return {\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~fontSize(d),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n };\n }).sort(function(a, b) { return b.size - a.size; });\n\n while (++i < n) {\n var d = data[i];\n d.x = (size[0] * (random() + .5)) >> 1;\n d.y = (size[1] * (random() + .5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);\n else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas$$1) {\n canvas$$1.width = canvas$$1.height = 1;\n var ratio = Math.sqrt(canvas$$1.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\n canvas$$1.width = (cw << 5) / ratio;\n canvas$$1.height = ch / ratio;\n\n var context = canvas$$1.getContext(\"2d\");\n context.fillStyle = context.strokeStyle = \"red\";\n context.textAlign = \"center\";\n\n return {context: context, ratio: ratio};\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n\n tag.x = startX + dx;\n tag.y = startY + dy;\n\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\n tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n\n cloud.words = function(_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function(_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function(_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function(_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function(_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function(_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function(_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function(_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function(_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function(_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function(_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n};\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w, w32, h, i, j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\n w = c.measureText(d.text + \"m\").width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = (w + 0x1f) >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= (cw << 5)) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function(t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function(t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0: x += dx; break;\n case 1: y += dy; break;\n case 2: x -= dx; break;\n default: y -= dy; break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\n\nfunction functor(d) {\n return typeof d === \"function\" ? d : function() { return d; };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nvar Output$4 = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\n\nvar Params$1 = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\n\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\n\nWordcloud.Definition = {\n \"type\": \"Wordcloud\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"font\", \"type\": \"string\", \"expr\": true, \"default\": \"sans-serif\" },\n { \"name\": \"fontStyle\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontWeight\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontSize\", \"type\": \"number\", \"expr\": true, \"default\": 14 },\n { \"name\": \"fontSizeRange\", \"type\": \"number\", \"array\": \"nullable\", \"default\": [10, 50] },\n { \"name\": \"rotate\", \"type\": \"number\", \"expr\": true, \"default\": 0 },\n { \"name\": \"text\", \"type\": \"field\" },\n { \"name\": \"spiral\", \"type\": \"string\", \"values\": [\"archimedean\", \"rectangular\"] },\n { \"name\": \"padding\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 7, \"default\": Output$4 }\n ]\n};\n\nvar prototype$80 = inherits(Wordcloud, Transform);\n\nprototype$80.transform = function(_, pulse) {\n function modp(param) {\n var p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n var mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params$1.some(modp))) return;\n\n var data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output$4,\n fontSize = _.fontSize || 14,\n range;\n\n isFunction(fontSize)\n ? (range = _.fontSizeRange)\n : (fontSize = constant(fontSize));\n\n // create font size scaling function as needed\n if (range) {\n var fsize = fontSize,\n sizeScale = scale$1('sqrt')()\n .domain(extent$2(fsize, data))\n .range(range);\n fontSize = function(x) { return sizeScale(fsize(x)); };\n }\n\n data.forEach(function(t) {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n var words = layout\n .words(data)\n .text(_.text)\n .size(_.size || [500, 500])\n .padding(_.padding || 1)\n .spiral(_.spiral || 'archimedean')\n .rotate(_.rotate || 0)\n .font(_.font || 'sans-serif')\n .fontStyle(_.fontStyle || 'normal')\n .fontWeight(_.fontWeight || 'normal')\n .fontSize(fontSize)\n .random(exports.random)\n .layout();\n\n var size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n i = 0,\n n = words.length,\n w, t;\n\n for (; i max) max = v;\n }\n\n return [min, max];\n}\n\n\n\nvar wordcloud = Object.freeze({\n\twordcloud: Wordcloud\n});\n\nfunction array8(n) { return new Uint8Array(n); }\n\nfunction array16(n) { return new Uint16Array(n); }\n\nfunction array32(n) { return new Uint32Array(n); }\n\n/**\n * Maintains CrossFilter state.\n */\nfunction Bitmaps() {\n\n var width = 8,\n data = [],\n seen = array32(0),\n curr = array$5(0, width),\n prev = array$5(0, width);\n\n return {\n\n data: function() { return data; },\n\n seen: function() {\n return (seen = lengthen(seen, data.length));\n },\n\n add: function(array) {\n for (var i=0, j=data.length, n=array.length, t; i boolean (true => remove)\n var n = data.length,\n copy = Array(n - num),\n reindex = data, // reuse old data array for index map\n t, i, j;\n\n // seek forward to first removal\n for (i=0; !map[i] && i k || m > width) {\n width = Math.max(m, width);\n curr = array$5(n, width, curr);\n prev = array$5(n, width);\n }\n }\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array$5(n, m, array) {\n var copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nvar Dimension = function(index, i, query) {\n var bit = (1 << i);\n\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd: function(added, curr) {\n var dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length, i;\n\n for (i=0; i 0) for (i=0; i remove\n var n = size,\n idx, i, j;\n\n // seek forward to first removal\n for (i=0; !map[index[i]] && i y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge$3(base, value0, index0, n0, value1, index1, n1, value, index) {\n var i0 = 0, i1 = 0, i;\n\n for (i=0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\n\nCrossFilter.Definition = {\n \"type\": \"CrossFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"query\", \"type\": \"array\", \"array\": true, \"required\": true,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} }\n ]\n};\n\nvar prototype$81 = inherits(CrossFilter, Transform);\n\nprototype$81.transform = function(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields')\n || _.fields.some(function(f) { return pulse.modified(f.fields); });\n\n return init\n ? this.reinit(_, pulse)\n : this.eval(_, pulse);\n }\n};\n\nprototype$81.init = function(_, pulse) {\n var fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length,\n i = 0, key$$1, index;\n\n // instantiate indices and dimensions\n for (; i lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one$$1;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one$$1;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one$$1;\n }\n }\n\n dim.range = query.slice();\n};\n\nprototype$81.incrementOne = function(dim, query, add, rem) {\n var bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one$$1 = dim.one,\n i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one$$1;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one$$1;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one$$1;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one$$1;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n};\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\n\nResolveFilter.Definition = {\n \"type\": \"ResolveFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"ignore\", \"type\": \"number\", \"required\": true,\n \"description\": \"A bit mask indicating which filters to ignore.\" },\n { \"name\": \"filter\", \"type\": \"object\", \"required\": true,\n \"description\": \"Per-tuple filter bitmaps from a CrossFilter transform.\" }\n ]\n};\n\nvar prototype$82 = inherits(ResolveFilter, Transform);\n\nprototype$82.transform = function(_, pulse) {\n var ignore = ~(_.ignore || 0), // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n var output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = function(k) {\n return !(curr[k] & ignore) ? data[k] : null;\n };\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & (mask-1))) { // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, function(k) {\n return (curr[k] & ignore) === mask ? data[k] : null;\n });\n\n } else { // multiple filters changed\n output.filter(output.ADD, function(k) {\n var c = curr[k] & ignore,\n f = !c && (c ^ (prev[k] & ignore));\n return f ? data[k] : null;\n });\n output.filter(output.REM, function(k) {\n var c = curr[k] & ignore,\n f = c && !(c ^ (c ^ (prev[k] & ignore)));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, function(t) { return pass(t._index); });\n};\n\n\n\nvar xf = Object.freeze({\n\tcrossfilter: CrossFilter,\n\tresolvefilter: ResolveFilter\n});\n\nvar version = \"3.3.1\";\n\nvar Default = 'default';\n\nvar cursor = function(view) {\n var cursor = view._signals.cursor;\n\n // add cursor signal to dataflow, if needed\n if (!cursor) {\n view._signals.cursor = (cursor = view.add({user: Default, item: null}));\n }\n\n // evaluate cursor on each mousemove event\n view.on(view.events('view', 'mousemove'), cursor,\n function(_, event) {\n var value = cursor.value,\n user = value ? (isString(value) ? value : value.user) : Default,\n item = event.item && event.item.cursor || null;\n\n return (value && user === value.user && item == value.item) ? value\n : {user: user, item: item};\n }\n );\n\n // when cursor signal updates, set visible cursor\n view.add(null, function(_) {\n var user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(user && user !== Default ? user : (item || user));\n\n return item;\n }, {cursor: cursor});\n};\n\nfunction setCursor(cursor) {\n // set cursor on document body\n // this ensures cursor applies even if dragging out of view\n if (typeof document !== 'undefined' && document.body) {\n document.body.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n if (!data.hasOwnProperty(name)) {\n error$1('Unrecognized data set: ' + name);\n }\n return data[name];\n}\n\nfunction data(name) {\n return dataref(this, name).values.value;\n}\n\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error$1('Second argument to changes must be a changeset.');\n }\n var dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\n\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\n\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\n\nfunction height$1(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\n\nfunction offset$1(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [\n padding.left + origin[0],\n padding.top + origin[1]\n ];\n}\n\nfunction resizeRenderer(view) {\n var origin = offset$1(view),\n w = width(view),\n h = height$1(view);\n\n view._renderer.background(view._background);\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(function(handler) {\n handler(w, h);\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nvar eventExtend = function(view, event, item) {\n var el = view._renderer.scene(),\n p, e, translate;\n\n if (el) {\n translate = offset$1(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point$4(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.vega = extension(view, item, p);\n event.item = item;\n return event;\n};\n\nfunction extension(view, item, point) {\n var itemGroup = item\n ? item.mark.marktype === 'group' ? item : item.mark.group\n : null;\n\n function group(name) {\n var g = itemGroup, i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) { g = i; break; }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n\n var p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: function(item) { return xy(item)[0]; },\n y: function(item) { return xy(item)[1]; }\n };\n}\n\nvar VIEW = 'view';\nvar WINDOW = 'window';\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nfunction initializeEventConfig(config) {\n config = extend({}, config);\n\n var def = config.defaults;\n if (def) {\n if (isArray(def.prevent)) {\n def.prevent = toSet(def.prevent);\n }\n if (isArray(def.allow)) {\n def.allow = toSet(def.allow);\n }\n }\n\n return config;\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def && def.prevent,\n allow = def && def.allow;\n\n return prevent === false || allow === true ? false\n : prevent === true || allow === false ? true\n : prevent ? prevent[type]\n : allow ? !allow[type]\n : view.preventDefault();\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nfunction events$1(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function(e, item) {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n try {\n s.receive(eventExtend(view, e, item));\n } catch (error) {\n view.error(error);\n } finally {\n view.run();\n }\n },\n sources;\n\n if (source === VIEW) {\n view.addEventListener(type, send);\n return s;\n }\n\n if (source === WINDOW) {\n if (typeof window !== 'undefined') sources = [window];\n } else if (typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n return s;\n }\n\n for (var i=0, n=sources.length; i= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n};\n\nvar element$1 = function(tag, attr, text) {\n var el = document.createElement(tag);\n for (var key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n};\n\nvar BindClass = 'vega-bind';\nvar NameClass = 'vega-bind-name';\nvar RadioClass = 'vega-bind-radio';\nvar OptionClass = 'vega-option-';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nvar bind$1 = function(view, el, binding) {\n if (!el) return;\n\n var param = binding.param,\n bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: function(value) {\n bind.source = true;\n view.signal(param.signal, value).run();\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n generate(bind, el, param, view.signal(param.signal));\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, function() {\n bind.source\n ? (bind.source = false)\n : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n};\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, value) {\n var div = element$1('div', {'class': BindClass});\n\n div.appendChild(element$1('span',\n {'class': NameClass},\n (param.name || param.signal)\n ));\n\n el.appendChild(div);\n\n var input = form;\n switch (param.input) {\n case 'checkbox': input = checkbox; break;\n case 'select': input = select; break;\n case 'radio': input = radio; break;\n case 'range': input = range$1; break;\n }\n\n input(bind, div, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n var node = element$1('input');\n\n for (var key$$1 in param) {\n if (key$$1 !== 'signal' && key$$1 !== 'element') {\n node.setAttribute(key$$1 === 'input' ? 'type' : key$$1, param[key$$1]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n\n el.appendChild(node);\n\n node.addEventListener('input', function() {\n bind.update(node.value);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.value = value; };\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n var attr = {type: 'checkbox', name: param.signal};\n if (value) attr.checked = true;\n var node = element$1('input', attr);\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(node.checked);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.checked = !!value || null; };\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n var node = element$1('select', {name: param.signal});\n\n param.options.forEach(function(option) {\n var attr = {value: option};\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element$1('option', attr, option+''));\n });\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(param.options[node.selectedIndex]);\n });\n\n bind.elements = [node];\n bind.set = function(value) {\n for (var i=0, n=param.options.length; i\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar source$1;\nvar index$1;\nvar length$2;\nvar lookahead;\n\nvar TokenBooleanLiteral = 1;\nvar TokenEOF = 2;\nvar TokenIdentifier = 3;\nvar TokenKeyword = 4;\nvar TokenNullLiteral = 5;\nvar TokenNumericLiteral = 6;\nvar TokenPunctuator = 7;\nvar TokenStringLiteral = 8;\n\nvar SyntaxArrayExpression = 'ArrayExpression';\nvar SyntaxBinaryExpression = 'BinaryExpression';\nvar SyntaxCallExpression = 'CallExpression';\nvar SyntaxConditionalExpression = 'ConditionalExpression';\nvar SyntaxIdentifier = 'Identifier';\nvar SyntaxLiteral = 'Literal';\nvar SyntaxLogicalExpression = 'LogicalExpression';\nvar SyntaxMemberExpression = 'MemberExpression';\nvar SyntaxObjectExpression = 'ObjectExpression';\nvar SyntaxProperty = 'Property';\nvar SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0';\nvar MessageUnexpectedNumber = 'Unexpected number';\nvar MessageUnexpectedString = 'Unexpected string';\nvar MessageUnexpectedIdentifier = 'Unexpected identifier';\nvar MessageUnexpectedReserved = 'Unexpected reserved word';\nvar MessageUnexpectedEOS = 'Unexpected end of input';\nvar MessageInvalidRegExp = 'Invalid regular expression';\nvar MessageUnterminatedRegExp = 'Invalid regular expression: missing /';\nvar MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.';\nvar MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL';\nvar DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]');\nvar RegexNonAsciiIdentifierPart = new RegExp('[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]');\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords$1 = {\n 'if':1, 'in':1, 'do':1,\n 'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n 'function':1, 'continue':1, 'debugger':1,\n 'interface':1, 'protected':1,\n 'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n var ch;\n\n while (index$1 < length$2) {\n ch = source$1.charCodeAt(index$1);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index$1;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index$1 < length$2 && isHexDigit(source$1[index$1])) {\n ch = source$1[index$1++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n\n ch = source$1[index$1];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index$1 < length$2) {\n ch = source$1[index$1++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = ((code - 0x10000) >> 10) + 0xD800;\n cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n\n ch = source$1.charCodeAt(index$1++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source$1.charCodeAt(index$1) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index$1;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n\n while (index$1 < length$2) {\n ch = source$1.charCodeAt(index$1);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index$1;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source$1.charCodeAt(index$1) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index$1;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n\n start = index$1++;\n while (index$1 < length$2) {\n ch = source$1.charCodeAt(index$1);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index$1 = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index$1;\n } else {\n break;\n }\n }\n\n return source$1.slice(start, index$1);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n\n start = index$1;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source$1.charCodeAt(index$1) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords$1.hasOwnProperty(id)) {\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index$1\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index$1,\n code = source$1.charCodeAt(index$1),\n code2,\n ch1 = source$1[index$1],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index$1;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index$1\n };\n\n default:\n code2 = source$1.charCodeAt(index$1 + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index$1 += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index$1\n };\n\n case 0x21: // !\n case 0x3D: // =\n index$1 += 2;\n\n // !== and ===\n if (source$1.charCodeAt(index$1) === 0x3D) {\n ++index$1;\n }\n return {\n type: TokenPunctuator,\n value: source$1.slice(start, index$1),\n start: start,\n end: index$1\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source$1.substr(index$1, 4);\n\n if (ch4 === '>>>=') {\n index$1 += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index$1\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index$1 += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index$1\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index$1 += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index$1\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index$1;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index$1\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n var number = '';\n\n while (index$1 < length$2) {\n if (!isHexDigit(source$1[index$1])) {\n break;\n }\n number += source$1[index$1++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source$1.charCodeAt(index$1))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index$1\n };\n}\n\nfunction scanOctalLiteral(start) {\n var number = '0' + source$1[index$1++];\n while (index$1 < length$2) {\n if (!isOctalDigit(source$1[index$1])) {\n break;\n }\n number += source$1[index$1++];\n }\n\n if (isIdentifierStart(source$1.charCodeAt(index$1)) || isDecimalDigit(source$1.charCodeAt(index$1))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index$1\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n\n ch = source$1[index$1];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index$1;\n number = '';\n if (ch !== '.') {\n number = source$1[index$1++];\n ch = source$1[index$1];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index$1;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source$1.charCodeAt(index$1))) {\n number += source$1[index$1++];\n }\n ch = source$1[index$1];\n }\n\n if (ch === '.') {\n number += source$1[index$1++];\n while (isDecimalDigit(source$1.charCodeAt(index$1))) {\n number += source$1[index$1++];\n }\n ch = source$1[index$1];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source$1[index$1++];\n\n ch = source$1[index$1];\n if (ch === '+' || ch === '-') {\n number += source$1[index$1++];\n }\n if (isDecimalDigit(source$1.charCodeAt(index$1))) {\n while (isDecimalDigit(source$1.charCodeAt(index$1))) {\n number += source$1[index$1++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source$1.charCodeAt(index$1))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index$1\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote, start, ch, code, octal = false;\n\n quote = source$1[index$1];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index$1;\n ++index$1;\n\n while (index$1 < length$2) {\n ch = source$1[index$1++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source$1[index$1++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source$1[index$1] === '{') {\n ++index$1;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n\n if (index$1 < length$2 && isOctalDigit(source$1[index$1])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source$1[index$1++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index$1 < length$2 &&\n isOctalDigit(source$1[index$1])) {\n code = code * 8 + '01234567'.indexOf(source$1[index$1++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source$1[index$1] === '\\n') {\n ++index$1;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index$1\n };\n}\n\nfunction testRegExp(pattern, flags) {\n var tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, function($0, $1) {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n })\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source$1[index$1];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source$1[index$1++];\n\n classMarker = false;\n terminated = false;\n while (index$1 < length$2) {\n ch = source$1[index$1++];\n str += ch;\n if (ch === '\\\\') {\n ch = source$1[index$1++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n\n str = '';\n flags = '';\n while (index$1 < length$2) {\n ch = source$1[index$1];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index$1;\n if (ch === '\\\\' && index$1 < length$2) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n\n lookahead = null;\n skipComment();\n start = index$1;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index$1\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier ||\n token.type === TokenKeyword ||\n token.type === TokenBooleanLiteral ||\n token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n var ch;\n\n skipComment();\n\n if (index$1 >= length$2) {\n return {\n type: TokenEOF,\n start: index$1,\n end: index$1\n };\n }\n\n ch = source$1.charCodeAt(index$1);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source$1.charCodeAt(index$1 + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n var token;\n\n token = lookahead;\n index$1 = token.end;\n\n lookahead = advance();\n\n index$1 = token.end;\n\n return token;\n}\n\nfunction peek$1() {\n var pos;\n\n pos = index$1;\n\n lookahead = advance();\n index$1 = pos;\n}\n\nfunction finishArrayExpression(elements) {\n var node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n var node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n var node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n var node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n var node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source$1.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n var node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n var node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n var node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n var node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function(whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n\n error = new Error(msg);\n error.index = index$1;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n var token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n var elements = [];\n\n index$1 = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n var token;\n\n index$1 = lookahead.start;\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n\n index$1 = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property, name, key, map = {},\n toString = String;\n\n index$1 = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression$1();\n\n expect(')');\n\n return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n \"if\": 1,\n \"this\": 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index$1 = lookahead.start;\n\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek$1();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index$1 < length$2) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n}\n\nfunction parseNonComputedProperty() {\n var token;\n index$1 = lookahead.start;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression$1();\n\n expect(']');\n\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n var expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if ((match('++') || match('--'))) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression$1() {\n var expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nvar parse$3 = function(code) {\n source$1 = code;\n index$1 = 0;\n length$2 = source$1.length;\n lookahead = null;\n\n peek$1();\n\n var expr = parseExpression$1();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error(\"Unexpect token after expression.\");\n }\n return expr;\n};\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nvar Functions = function(codegen) {\n\n function fncall(name, args, cast, type) {\n var obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ?\n '()' :\n '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return function(args) {\n return fncall(name, args, cast, type);\n };\n }\n\n var DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n\n return {\n // MATH functions\n isNaN: 'isNaN',\n isFinite: 'isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n\n clamp: function(args) {\n if (args.length < 3) error$1('Missing arguments to clamp function.');\n if (args.length > 3) error$1('Too many arguments to clamp function.');\n var a = args.map(codegen);\n return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n },\n\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n // shared sequence functions\n length: fn('length', null, -1),\n indexof: fn('indexOf', null),\n lastindexof: fn('lastIndexOf', null),\n slice: fn('slice', null),\n\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n replace: fn('replace', STRING),\n\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n\n // Control Flow functions\n if: function(args) {\n if (args.length < 3) error$1('Missing arguments to if function.');\n if (args.length > 3) error$1('Too many arguments to if function.');\n var a = args.map(codegen);\n return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n }\n };\n};\n\nvar codegen = function(opt) {\n opt = opt || {};\n\n var whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n globals = {},\n fields = {},\n memberDepth = 0;\n\n var outputGlobal = isFunction(globalvar)\n ? globalvar\n : function (id$$1) { return globalvar + '[\"' + id$$1 + '\"]'; };\n\n function visit(ast) {\n if (isString(ast)) return ast;\n var generator = Generators[ast.type];\n if (generator == null) error$1('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n var Generators = {\n Literal: function(n) {\n return n.raw;\n },\n\n Identifier: function(n) {\n var id$$1 = n.name;\n if (memberDepth > 0) {\n return id$$1;\n } else if (blacklist.hasOwnProperty(id$$1)) {\n return error$1('Illegal identifier: ' + id$$1);\n } else if (constants.hasOwnProperty(id$$1)) {\n return constants[id$$1];\n } else if (whitelist.hasOwnProperty(id$$1)) {\n return id$$1;\n } else {\n globals[id$$1] = 1;\n return outputGlobal(id$$1);\n }\n },\n\n MemberExpression: function(n) {\n var d = !n.computed;\n var o = visit(n.object);\n if (d) memberDepth += 1;\n var p = visit(n.property);\n if (o === fieldvar) { fields[p] = 1; } // HACKish...\n if (d) memberDepth -= 1;\n return o + (d ? '.'+p : '['+p+']');\n },\n\n CallExpression: function(n) {\n if (n.callee.type !== 'Identifier') {\n error$1('Illegal callee type: ' + n.callee.type);\n }\n var callee = n.callee.name;\n var args = n.arguments;\n var fn = functions.hasOwnProperty(callee) && functions[callee];\n if (!fn) error$1('Unrecognized function: ' + callee);\n return isFunction(fn)\n ? fn(args)\n : fn + '(' + args.map(visit).join(',') + ')';\n },\n\n ArrayExpression: function(n) {\n return '[' + n.elements.map(visit).join(',') + ']';\n },\n\n BinaryExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n UnaryExpression: function(n) {\n return '(' + n.operator + visit(n.argument) + ')';\n },\n\n ConditionalExpression: function(n) {\n return '(' + visit(n.test) +\n '?' + visit(n.consequent) +\n ':' + visit(n.alternate) +\n ')';\n },\n\n LogicalExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n ObjectExpression: function(n) {\n return '{' + n.properties.map(visit).join(',') + '}';\n },\n\n Property: function(n) {\n memberDepth += 1;\n var k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n var result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n\n return codegen;\n};\n\nvar formatCache = {};\n\nfunction formatter(type, method, specifier) {\n var k = type + ':' + specifier,\n e = formatCache[k];\n if (!e || e[0] !== method) {\n formatCache[k] = (e = [method, method(specifier)]);\n }\n return e[1];\n}\n\nfunction format$1(_, specifier) {\n return formatter('format', format, specifier)(_);\n}\n\nfunction timeFormat$1(_, specifier) {\n return formatter('timeFormat', timeFormat, specifier)(_);\n}\n\nfunction utcFormat$1(_, specifier) {\n return formatter('utcFormat', utcFormat, specifier)(_);\n}\n\nfunction timeParse$1(_, specifier) {\n return formatter('timeParse', timeParse, specifier)(_);\n}\n\nfunction utcParse$1(_, specifier) {\n return formatter('utcParse', utcParse, specifier)(_);\n}\n\nvar dateObj = new Date(2000, 0, 1);\n\nfunction time$2(month, day, specifier) {\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat$1(dateObj, specifier);\n}\n\nfunction monthFormat(month) {\n return time$2(month, 1, '%B');\n}\n\nfunction monthAbbrevFormat(month) {\n return time$2(month, 1, '%b');\n}\n\nfunction dayFormat(day) {\n return time$2(0, 2 + day, '%A');\n}\n\nfunction dayAbbrevFormat(day) {\n return time$2(0, 2 + day, '%a');\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\n\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction log$4(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length-1];\n}\n\nfunction warn() {\n return log$4(this.context.dataflow, 'warn', arguments);\n}\n\nfunction info() {\n return log$4(this.context.dataflow, 'info', arguments);\n}\n\nfunction debug() {\n return log$4(this.context.dataflow, 'debug', arguments);\n}\n\nvar inScope = function(item) {\n var group = this.context.group,\n value = false;\n\n if (group) while (item) {\n if (item === group) { value = true; break; }\n item = item.mark.group;\n }\n return value;\n};\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nvar clampRange = function(range, min, max) {\n var lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n\n return span >= (max - min)\n ? [min, max]\n : [\n Math.min(Math.max(lo, min), max - span),\n Math.min(Math.max(hi, span), max)\n ];\n};\n\nfunction pinchDistance(event) {\n var t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction pinchAngle(event) {\n var t = event.touches;\n return Math.atan2(\n t[0].clientY - t[1].clientY,\n t[0].clientX - t[1].clientX\n );\n}\n\nvar _window = (typeof window !== 'undefined' && window) || null;\n\nfunction screen() {\n return _window ? _window.screen : {};\n}\n\nfunction windowSize() {\n return _window\n ? [_window.innerWidth, _window.innerHeight]\n : [undefined, undefined];\n}\n\nfunction containerSize() {\n var view = this.context.dataflow,\n el = view.container && view.container();\n return el\n ? [el.clientWidth, el.clientHeight]\n : [undefined, undefined];\n}\n\nvar flush = function(range, value, threshold, left, right, center) {\n var l = Math.abs(value - range[0]),\n r = Math.abs(peek(range) - value);\n return l < r && l <= threshold ? left\n : r <= threshold ? right\n : center;\n};\n\nvar span = function(array) {\n return (array[array.length-1] - array[0]) || 0;\n};\n\nvar Literal = 'Literal';\nvar Identifier$1 = 'Identifier';\n\nvar indexPrefix = '@';\nvar scalePrefix = '%';\nvar dataPrefix = ':';\n\nfunction getScale(name, ctx) {\n var s;\n return isFunction(name) ? name\n : isString(name) ? (s = ctx.scales[name]) && s.value\n : undefined;\n}\n\nfunction addScaleDependency(scope, params, name) {\n var scaleName = scalePrefix + name;\n if (!params.hasOwnProperty(scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n }\n else if (args[0].type === Identifier$1) {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nfunction range$2(name, group) {\n var s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\n\nfunction domain(name, group) {\n var s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\n\nfunction bandwidth(name, group) {\n var s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\n\nfunction copy$1(name, group) {\n var s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\n\nfunction scale$2(name, value, group) {\n var s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction invert(name, range, group) {\n var s = getScale(name, (group || this).context);\n return !s ? undefined\n : isArray(range) ? (s.invertRange || s.invert)(range)\n : (s.invert || s.invertExtent)(range);\n}\n\nvar scaleGradient = function(scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n\n var gradient = Gradient(p0, p1),\n stops = scale.domain(),\n min = stops[0],\n max = stops[stops.length-1],\n fraction = scaleFraction(scale, min, max);\n\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== stops[stops.length-1]) stops.push(max);\n }\n\n for (var i=0, n=stops.length; i r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n\n return (left ? r0 <= value : r0 < value) &&\n (right ? value <= r1 : value < r1);\n};\n\nvar encode$1 = function(item, name, retval) {\n if (item) {\n var df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n};\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true\n : isArray(a) && isArray(b) && a.length === b.length ? equalArray(a, b)\n : false;\n}\n\nfunction equalArray(a, b) {\n for (var i=0, n=a.length; i, fields: array, values: array<*>, bins: object}\nfunction vlPoint(name, datum, op) {\n return vlSelection.call(this, name, datum, op, testPoint);\n}\n\n// Assumes interval selection typles are of the form:\n// {unit: string, intervals: array<{encoding: string, field:string, extent:array}>}\nfunction vlInterval(name, datum, op) {\n return vlSelection.call(this, name, datum, op, testInterval);\n}\n\nfunction vlMultiVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error$1('First argument to indata must be a string literal.');\n\n var data = args[0].value,\n // vlMulti, vlMultiDomain have different # of params, but op is always last.\n op = args.length >= 2 && args[args.length-1].value,\n field$$1 = 'unit',\n indexName = indexPrefix + field$$1;\n\n if (op === INTERSECT && !params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field$$1);\n }\n\n dataVisitor(name, args, scope, params);\n}\n\n/**\n * Materializes a point selection as a scale domain.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} [encoding] - A particular encoding channel to materialize.\n * @param {string} [field] - A particular field to materialize.\n * @param {string} [op='intersect'] - The set operation for combining selections.\n * One of 'intersect' (default) or 'union'.\n * @returns {array} An array of values to serve as a scale domain.\n */\nfunction vlPointDomain(name, encoding, field$$1, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n entry = entries[0],\n i = 0, n, index, values, continuous, units;\n\n if (!entry) return undefined;\n\n for (n = encoding ? entry.encodings.length : entry.fields.length; i 2;\n break;\n }\n }\n\n values = entries.reduce(function(acc, entry) {\n var extent = entry.intervals[index].extent,\n value = discrete\n ? extent.map(function (d) { return {unit: entry.unit, value: d}; })\n : {unit: entry.unit, value: extent};\n\n if (discrete) {\n acc.push.apply(acc, value);\n } else {\n acc.push(value);\n }\n return acc;\n }, []);\n\n\n return discrete ? discreteDomain(values, op) : continuousDomain(values, op);\n}\n\nfunction discreteDomain(entries, op) {\n var units = {}, count = 0,\n values = {}, domain = [],\n i = 0, n = entries.length,\n entry, unit, v, key$$1;\n\n for (; i hi) {\n hi = extent[0];\n lo = extent[1];\n }\n domain = domain ? merge$$1(domain, lo, hi) : [lo, hi];\n }\n\n return domain && domain.length && (+domain[0] !== +domain[1])\n ? domain\n : undefined;\n}\n\nfunction unionInterval(domain, lo, hi) {\n if (domain[0] > lo) domain[0] = lo;\n if (domain[1] < hi) domain[1] = hi;\n return domain;\n}\n\nfunction intersectInterval(domain, lo, hi) {\n if (hi < domain[0] || domain[1] < lo) {\n return [];\n } else {\n if (domain[0] < lo) domain[0] = lo;\n if (domain[1] > hi) domain[1] = hi;\n }\n return domain;\n}\n\n// Expression function context object\nvar functionContext = {\n random: function() { return exports.random(); }, // override default\n isArray: isArray,\n isBoolean: isBoolean,\n isDate: isDate,\n isNumber: isNumber,\n isObject: isObject,\n isRegExp: isRegExp,\n isString: isString,\n isTuple: isTuple,\n toBoolean: toBoolean,\n toDate: toDate,\n toNumber: toNumber,\n toString: toString,\n pad: pad,\n peek: peek,\n truncate: truncate,\n rgb: rgb,\n lab: lab,\n hcl: hcl,\n hsl: hsl,\n sequence: sequence,\n format: format$1,\n utcFormat: utcFormat$1,\n utcParse: utcParse$1,\n timeFormat: timeFormat$1,\n timeParse: timeParse$1,\n monthFormat: monthFormat,\n monthAbbrevFormat: monthAbbrevFormat,\n dayFormat: dayFormat,\n dayAbbrevFormat: dayAbbrevFormat,\n quarter: quarter,\n utcquarter: utcquarter,\n warn: warn,\n info: info,\n debug: debug,\n inScope: inScope,\n clampRange: clampRange,\n pinchDistance: pinchDistance,\n pinchAngle: pinchAngle,\n screen: screen,\n containerSize: containerSize,\n windowSize: windowSize,\n span: span,\n flush: flush,\n bandspace: bandspace,\n inrange: inrange,\n setdata: setdata,\n pathShape: pathShape,\n panLinear: panLinear,\n panLog: panLog,\n panPow: panPow,\n zoomLinear: zoomLinear,\n zoomLog: zoomLog,\n zoomPow: zoomPow,\n encode: encode$1,\n modify: modify\n};\n\nvar eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'];\nvar eventPrefix = 'event.vega.';\nvar thisPrefix = 'this.';\nvar astVisitors = {}; // AST visitors for dependency analysis\n\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy$1, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range$2, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale$2, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data$1, dataVisitor);\nexpressionFunction('vlSingle', vlPoint, dataVisitor);\nexpressionFunction('vlSingleDomain', vlPointDomain, dataVisitor);\nexpressionFunction('vlMulti', vlPoint, vlMultiVisitor);\nexpressionFunction('vlMultiDomain', vlPointDomain, vlMultiVisitor);\nexpressionFunction('vlInterval', vlInterval, dataVisitor);\nexpressionFunction('vlIntervalDomain', vlIntervalDomain, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// Build expression function registry\nfunction buildFunctions(codegen$$1) {\n var fn = Functions(codegen$$1);\n eventFunctions.forEach(function(name) { fn[name] = eventPrefix + name; });\n for (var name in functionContext) { fn[name] = thisPrefix + name; }\n return fn;\n}\n\n// Export code generator and parameters\nvar codegenParams = {\n blacklist: ['_'],\n whitelist: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: function(id$$1) { return '_[' + $('$' + id$$1) + ']'; },\n functions: buildFunctions,\n constants: Constants,\n visitors: astVisitors\n};\n\nvar codeGenerator = codegen(codegenParams);\n\nvar signalPrefix = '$';\n\nvar parseExpression = function(expr, scope, preamble) {\n var params = {}, ast, gen;\n\n // parse the expression to an abstract syntax tree (ast)\n try {\n ast = parse$3(expr);\n } catch (err) {\n error$1('Expression parse error: ' + $(expr));\n }\n\n // analyze ast function calls for dependencies\n ast.visit(function visitor(node) {\n if (node.type !== 'CallExpression') return;\n var name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(function(name) {\n var signalName = signalPrefix + name;\n if (!params.hasOwnProperty(signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: preamble ? preamble + 'return(' + gen.code + ');' : gen.code,\n $fields: gen.fields,\n $params: params\n };\n};\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\n\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\n\nfunction operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nfunction ref(op) {\n var ref = {$ref: op.id};\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\n\nvar tupleidRef = {\n $tupleid: 1,\n toString: function() { return ':_tupleid_:'; }\n};\n\nfunction fieldRef(field$$1, name) {\n return name ? {$field: field$$1, $name: name} : {$field: field$$1};\n}\n\nvar keyFieldRef = fieldRef('key');\n\nfunction compareRef(fields, orders) {\n return {$compare: fields, $order: orders};\n}\n\nfunction keyRef(fields, flat) {\n var ref = {$key: fields};\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nvar Ascending = 'ascending';\n\nvar Descending = 'descending';\n\nfunction sortKey(sort) {\n return !isObject(sort) ? ''\n : (sort.order === Descending ? '-' : '+')\n + aggrField(sort.op, sort.field);\n}\n\nfunction aggrField(op, field$$1) {\n return (op && op.signal ? '$' + op.signal : op || '')\n + (op && field$$1 ? '_' : '')\n + (field$$1 && field$$1.signal ? '$' + field$$1.signal : field$$1 || '');\n}\n\n// -----\n\nvar Scope = 'scope';\n\nvar View$1 = 'view';\n\nfunction isSignal(_) {\n return _ && _.signal;\n}\n\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\n\nvar parseStream = function(stream, scope) {\n return stream.signal ? scope.getSignal(stream.signal).id\n : stream.scale ? scope.getScale(stream.scale).id\n : parseStream$1(stream, scope);\n};\n\nfunction eventSource(source) {\n return source === Scope ? View$1 : (source || View$1);\n}\n\nfunction parseStream$1(stream, scope) {\n var method = stream.merge ? mergeStream\n : stream.stream ? nestedStream\n : stream.type ? eventStream\n : error$1('Invalid stream specification: ' + $(stream));\n\n return method(stream, scope);\n}\n\nfunction mergeStream(stream, scope) {\n var list = stream.merge.map(function(s) {\n return parseStream$1(s, scope);\n });\n\n var entry$$1 = streamParameters({merge: list}, stream, scope);\n return scope.addStream(entry$$1).id;\n}\n\nfunction nestedStream(stream, scope) {\n var id$$1 = parseStream$1(stream.stream, scope),\n entry$$1 = streamParameters({stream: id$$1}, stream, scope);\n return scope.addStream(entry$$1).id;\n}\n\nfunction eventStream(stream, scope) {\n var id$$1 = scope.event(eventSource(stream.source), stream.type),\n entry$$1 = streamParameters({stream: id$$1}, stream, scope);\n return Object.keys(entry$$1).length === 1 ? id$$1\n : scope.addStream(entry$$1).id;\n}\n\nfunction streamParameters(entry$$1, stream, scope) {\n var param = stream.between;\n\n if (param) {\n if (param.length !== 2) {\n error$1('Stream \"between\" parameter must have 2 entries: ' + $(stream));\n }\n entry$$1.between = [\n parseStream$1(param[0], scope),\n parseStream$1(param[1], scope)\n ];\n }\n\n param = stream.filter ? array(stream.filter) : [];\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n if (stream.source === Scope) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n if (param.length) {\n entry$$1.filter = parseExpression('(' + param.join(')&&(') + ')').$expr;\n }\n\n if ((param = stream.throttle) != null) {\n entry$$1.throttle = +param;\n }\n\n if ((param = stream.debounce) != null) {\n entry$$1.debounce = +param;\n }\n\n if (stream.consume) {\n entry$$1.consume = true;\n }\n\n return entry$$1;\n}\n\nfunction filterMark(type, name, role) {\n var item = 'event.item';\n return item\n + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '')\n + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '')\n + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nvar selector = function(selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW$1;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n};\n\nvar VIEW$1 = 'view';\nvar LBRACK = '[';\nvar RBRACK = ']';\nvar LBRACE = '{';\nvar RBRACE = '}';\nvar COLON = ':';\nvar COMMA = ',';\nvar NAME = '@';\nvar GT = '>';\nvar ILLEGAL$1 = /[[\\]{}]/;\nvar DEFAULT_SOURCE;\nvar MARKS;\nvar DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\n\nfunction isMarkType(type) {\n return MARKS.hasOwnProperty(type);\n}\n\nfunction find$1(s, i, endChar, pushChar, popChar) {\n var count = 0,\n n = s.length,\n c;\n for (; i= 0) --count;\n else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\n\nfunction parseMerge(s) {\n var output = [],\n start = 0,\n n = s.length,\n i = 0;\n\n while (i < n) {\n i = find$1(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '['\n ? parseBetween(s)\n : parseStream$2(s);\n}\n\nfunction parseBetween(s) {\n var n = s.length,\n i = 1,\n b, stream;\n\n i = find$1(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n\n stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream$2(s) {\n var stream = {source: DEFAULT_SOURCE},\n source = [],\n throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0, j,\n filter;\n\n // extract throttle from end\n if (s[n-1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i+1, n-1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find$1(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find$1(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find$1(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n-1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL$1.test(source[n-1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n\n return stream;\n}\n\nfunction parseThrottle(s) {\n var a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(function(_) {\n var x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nvar preamble = 'var datum=event.item&&event.item.datum;';\n\nvar parseUpdate = function(spec, scope, target) {\n var events = spec.events,\n update = spec.update,\n encode = spec.encode,\n sources = [],\n value$$1 = '', entry$$1;\n\n if (!events) {\n error$1('Signal update missing events specification.');\n }\n\n // interpret as an event selector string\n if (isString(events)) {\n events = selector(events, scope.isSubscope() ? Scope : View$1);\n }\n\n // separate event streams from signal updates\n events = array(events).filter(function(stream) {\n if (stream.signal || stream.scale) {\n sources.push(stream);\n return 0;\n } else {\n return 1;\n }\n });\n\n // merge event streams, include as source\n if (events.length) {\n sources.push(events.length > 1 ? {merge: events} : events[0]);\n }\n\n if (encode != null) {\n if (update) error$1('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + $(encode) + ')';\n }\n\n // resolve update value\n value$$1 = isString(update) ? parseExpression(update, scope, preamble)\n : update.expr != null ? parseExpression(update.expr, scope, preamble)\n : update.value != null ? update.value\n : update.signal != null ? {\n $expr: '_.value',\n $params: {value: scope.signalRef(update.signal)}\n }\n : error$1('Invalid signal update specification.');\n\n entry$$1 = {\n target: target,\n update: value$$1\n };\n\n if (spec.force) {\n entry$$1.options = {force: true};\n }\n\n sources.forEach(function(source) {\n source = {source: parseStream(source, scope)};\n scope.addUpdate(extend(source, entry$$1));\n });\n};\n\nvar parseSignalUpdates = function(signal, scope) {\n var op = scope.getSignal(signal.name);\n\n if (signal.update) {\n var expr = parseExpression(signal.update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n\n if (signal.on) {\n signal.on.forEach(function(_) {\n parseUpdate(_, scope, op.id);\n });\n }\n};\n\nfunction transform$3(name) {\n return function(params, value$$1, parent) {\n return entry(name, value$$1, params || undefined, parent);\n };\n}\n\nvar Aggregate$1 = transform$3('aggregate');\nvar AxisTicks$1 = transform$3('axisticks');\nvar Bound$1 = transform$3('bound');\nvar Collect$1 = transform$3('collect');\nvar Compare$1 = transform$3('compare');\nvar DataJoin$1 = transform$3('datajoin');\nvar Encode$1 = transform$3('encode');\n\nvar Facet$1 = transform$3('facet');\nvar Field$1 = transform$3('field');\nvar Key$1 = transform$3('key');\nvar LegendEntries$1 = transform$3('legendentries');\nvar Mark$1 = transform$3('mark');\nvar MultiExtent$1 = transform$3('multiextent');\nvar MultiValues$1 = transform$3('multivalues');\nvar Overlap$1 = transform$3('overlap');\nvar Params$2 = transform$3('params');\nvar PreFacet$1 = transform$3('prefacet');\nvar Projection$1 = transform$3('projection');\nvar Proxy$1 = transform$3('proxy');\nvar Relay$1 = transform$3('relay');\nvar Render$1 = transform$3('render');\nvar Scale$1 = transform$3('scale');\nvar Sieve$1 = transform$3('sieve');\nvar SortItems$1 = transform$3('sortitems');\nvar ViewLayout$1 = transform$3('viewlayout');\nvar Values$1 = transform$3('values');\n\nvar FIELD_REF_ID = 0;\n\nvar types = [\n 'identity',\n 'ordinal', 'band', 'point',\n 'bin-linear', 'bin-ordinal',\n 'linear', 'pow', 'sqrt', 'log', 'sequential',\n 'time', 'utc',\n 'quantize', 'quantile', 'threshold'\n];\n\nvar allTypes = toSet(types);\nvar ordinalTypes = toSet(types.slice(1, 6));\n\nfunction isOrdinal(type) {\n return ordinalTypes.hasOwnProperty(type);\n}\n\nfunction isQuantile(type) {\n return type === 'quantile';\n}\n\nfunction initScale(spec, scope) {\n var type = spec.type || 'linear';\n\n if (!allTypes.hasOwnProperty(type)) {\n error$1('Unrecognized scale type: ' + $(type));\n }\n\n scope.addScale(spec.name, {\n type: type,\n domain: undefined\n });\n}\n\nfunction parseScale(spec, scope) {\n var params = scope.getScale(spec.name).params,\n key$$1;\n\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n\n if (spec.nice != null) {\n parseScaleNice(spec.nice, params);\n }\n\n for (key$$1 in spec) {\n if (params.hasOwnProperty(key$$1) || key$$1 === 'name') continue;\n params[key$$1] = parseLiteral(spec[key$$1], scope);\n }\n}\n\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v\n : v.signal ? scope.signalRef(v.signal)\n : error$1('Unsupported object: ' + $(v));\n}\n\nfunction parseArray(v, scope) {\n return v.signal\n ? scope.signalRef(v.signal)\n : v.map(function(v) { return parseLiteral(v, scope); });\n}\n\nfunction dataLookupError(name) {\n error$1('Can not find data set: ' + $(name));\n}\n\n// -- SCALE DOMAIN ----\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error$1('No scale domain defined for domainMin/domainMax to override.');\n }\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal)\n : (isArray(domain) ? explicitDomain\n : domain.fields ? multipleDomain\n : singularDomain)(domain, spec, scope);\n}\n\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(function(v) {\n return parseLiteral(v, scope);\n });\n}\n\nfunction singularDomain(domain, spec, scope) {\n var data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n\n return isOrdinal(spec.type)\n ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false))\n : isQuantile(spec.type) ? data.domainRef(scope, domain.field)\n : data.extentRef(scope, domain.field);\n}\n\nfunction multipleDomain(domain, spec, scope) {\n var data = domain.data,\n fields = domain.fields.reduce(function(dom, d) {\n d = isString(d) ? {data: data, field: d}\n : (isArray(d) || d.signal) ? fieldRef$1(d, scope)\n : d;\n dom.push(d);\n return dom;\n }, []);\n\n return (isOrdinal(spec.type) ? ordinalMultipleDomain\n : isQuantile(spec.type) ? quantileMultipleDomain\n : numericMultipleDomain)(domain, scope, fields);\n}\n\nfunction fieldRef$1(data, scope) {\n var name = '_:vega:_' + (FIELD_REF_ID++),\n coll = Collect$1({});\n\n if (isArray(data)) {\n coll.value = {$ingest: data};\n } else if (data.signal) {\n var code = 'setdata(' + $(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n scope.addDataPipeline(name, [coll, Sieve$1({})]);\n return {data: name, field: 'data'};\n}\n\nfunction ordinalMultipleDomain(domain, scope, fields) {\n var counts, a, c, v;\n\n // get value counts for each domain field\n counts = fields.map(function(f) {\n var data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field);\n });\n\n // sum counts from all fields\n a = scope.add(Aggregate$1({\n groupby: keyFieldRef,\n ops:['sum'], fields: [scope.fieldRef('count')], as:['count'],\n pulse: counts\n }));\n\n // collect aggregate output\n c = scope.add(Collect$1({pulse: ref(a)}));\n\n // extract values for combined domain\n v = scope.add(Values$1({\n field: keyFieldRef,\n sort: scope.sortRef(parseSort(domain.sort, true)),\n pulse: ref(c)\n }));\n\n return ref(v);\n}\n\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';\n else sort = {field: 'key'};\n } else if (!sort.field && sort.op !== 'count') {\n error$1('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n error$1('Multiple domain scales can not sort by field.');\n } else if (multidomain && sort.op && sort.op !== 'count') {\n error$1('Multiple domain scales support op count only.');\n }\n }\n return sort;\n}\n\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n var values = fields.map(function(f) {\n var data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n });\n\n // combine value arrays\n return ref(scope.add(MultiValues$1({values: values})));\n}\n\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n var extents = fields.map(function(f) {\n var data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n });\n\n // combine extents\n return ref(scope.add(MultiExtent$1({extents: extents})));\n}\n\n// -- SCALE NICE -----\n\nfunction parseScaleNice(nice, params) {\n params.nice = isObject(nice)\n ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n }\n : parseLiteral(nice);\n}\n\n// -- SCALE INTERPOLATION -----\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n}\n\n// -- SCALE RANGE -----\n\nfunction parseScaleRange(spec, scope, params) {\n var range = spec.range,\n config = scope.config.range;\n\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && config.hasOwnProperty(range)) {\n spec = extend({}, spec, {range: config[range]});\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {signal: 'width'}];\n } else if (range === 'height') {\n range = isOrdinal(spec.type)\n ? [0, {signal: 'height'}]\n : [{signal: 'height'}, 0];\n } else {\n error$1('Unrecognized scale range value: ' + $(range));\n }\n } else if (range.scheme) {\n params.scheme = parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isOrdinal(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error$1('Unsupported range type: ' + $(range));\n }\n\n return range.map(function(v) {\n return parseLiteral(v, scope);\n });\n}\n\nvar parseProjection = function(proj, scope) {\n var params = {};\n\n for (var name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter(proj[name], name, scope);\n }\n\n scope.addProjection(proj.name, params);\n};\n\nfunction parseParameter(_, name, scope) {\n return isArray(_) ? _.map(function(_) { return parseParameter(_, name, scope); })\n : !isObject(_) ? _\n : _.signal ? scope.signalRef(_.signal)\n : name === 'fit' ? _\n : error$1('Unsupported parameter object: ' + $(_));\n}\n\nvar Top$1 = 'top';\nvar Left$1 = 'left';\nvar Right$1 = 'right';\nvar Bottom$1 = 'bottom';\n\nvar Index = 'index';\nvar Label = 'label';\nvar Offset = 'offset';\nvar Perc = 'perc';\nvar Size = 'size';\nvar Total = 'total';\nvar Value = 'value';\n\nvar GuideLabelStyle = 'guide-label';\nvar GuideTitleStyle = 'guide-title';\nvar GroupTitleStyle = 'group-title';\n\nvar LegendScales = [\n 'shape',\n 'size',\n 'fill',\n 'stroke',\n 'strokeDash',\n 'opacity'\n];\n\nvar Skip = {\n name: 1,\n interactive: 1\n};\n\nvar Skip$1 = toSet(['rule']);\nvar Swap = toSet(['group', 'image', 'rect']);\n\nvar adjustSpatial = function(encode, marktype) {\n var code = '';\n\n if (Skip$1[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n};\n\nvar color$2 = function(enc, scope, params, fields) {\n function color(type, x, y, z) {\n var a = entry$1(null, x, scope, params, fields),\n b = entry$1(null, y, scope, params, fields),\n c = entry$1(null, z, scope, params, fields);\n return 'this.' + type + '(' + [a, b, c].join(',') + ').toString()';\n }\n\n return (enc.c) ? color('hcl', enc.h, enc.c, enc.l)\n : (enc.h || enc.s) ? color('hsl', enc.h, enc.s, enc.l)\n : (enc.l || enc.a) ? color('lab', enc.l, enc.a, enc.b)\n : (enc.r || enc.g || enc.b) ? color('rgb', enc.r, enc.g, enc.b)\n : null;\n};\n\nvar expression = function(code, scope, params, fields) {\n var expr = parseExpression(code, scope);\n expr.$fields.forEach(function(name) { fields[name] = 1; });\n extend(params, expr.$params);\n return expr.$expr;\n};\n\nvar field$1 = function(ref, scope, params, fields) {\n return resolve$1(isObject(ref) ? ref : {datum: ref}, scope, params, fields);\n};\n\nfunction resolve$1(ref, scope, params, fields) {\n var object, level, field$$1;\n\n if (ref.signal) {\n object = 'datum';\n field$$1 = expression(ref.signal, scope, params, fields);\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n\n while (level-- > 0) {\n object += '.mark.group';\n }\n\n if (ref.parent) {\n field$$1 = ref.parent;\n object += '.datum';\n } else {\n field$$1 = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field$$1 = ref.datum;\n } else {\n error$1('Invalid field reference: ' + $(ref));\n }\n\n if (!ref.signal) {\n if (isString(field$$1)) {\n fields[field$$1] = 1; // TODO review field tracking?\n field$$1 = splitAccessPath(field$$1).map($).join('][');\n } else {\n field$$1 = resolve$1(field$$1, scope, params, fields);\n }\n }\n\n return object + '[' + field$$1 + ']';\n}\n\nvar scale$3 = function(enc, value, scope, params, fields) {\n var scale = getScale$1(enc.scale, scope, params, fields),\n interp, func, flag;\n\n if (enc.range != null) {\n // pull value from scale range\n interp = +enc.range;\n func = scale + '.range()';\n value = (interp === 0) ? (func + '[0]')\n : '($=' + func + ',' + ((interp === 1) ? '$[$.length-1]'\n : '$[0]+' + interp + '*($[$.length-1]-$[0])') + ')';\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = scale + '(' + value + ')';\n\n if (enc.band && (flag = hasBandwidth(enc.scale, scope))) {\n func = scale + '.bandwidth';\n interp = +enc.band;\n interp = func + '()' + (interp===1 ? '' : '*' + interp);\n\n // if we don't know the scale type, check for bandwidth\n if (flag < 0) interp = '(' + func + '?' + interp + ':0)';\n\n value = (value ? value + '+' : '') + interp;\n\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = '(datum.extra?' + scale + '(datum.extra.value):' + value + ')';\n }\n }\n\n if (value == null) value = '0';\n }\n\n return value;\n};\n\nfunction hasBandwidth(name, scope) {\n if (!isString(name)) return -1;\n var type = scope.scaleType(name);\n return type === 'band' || type === 'point' ? 1 : 0;\n}\n\nfunction getScale$1(name, scope, params, fields) {\n var scaleName;\n\n if (isString(name)) {\n // direct scale lookup; add scale as parameter\n scaleName = scalePrefix + name;\n if (!params.hasOwnProperty(scaleName)) {\n params[scaleName] = scope.scaleRef(name);\n }\n scaleName = $(scaleName);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (scaleName in scope.scales) {\n params[scalePrefix + scaleName] = scope.scaleRef(scaleName);\n }\n scaleName = $(scalePrefix) + '+'\n + (name.signal\n ? '(' + expression(name.signal, scope, params, fields) + ')'\n : field$1(name, scope, params, fields));\n }\n\n return '_[' + scaleName + ']';\n}\n\nvar gradient$1 = function(enc, scope, params, fields) {\n return 'this.gradient('\n + getScale$1(enc.gradient, scope, params, fields)\n + ',' + $(enc.start)\n + ',' + $(enc.stop)\n + ',' + $(enc.count)\n + ')';\n};\n\nvar property = function(property, scope, params, fields) {\n return isObject(property)\n ? '(' + entry$1(null, property, scope, params, fields) + ')'\n : property;\n};\n\nvar entry$1 = function(channel, enc, scope, params, fields) {\n if (enc.gradient != null) {\n return gradient$1(enc, scope, params, fields);\n }\n\n var value = enc.signal ? expression(enc.signal, scope, params, fields)\n : enc.color ? color$2(enc.color, scope, params, fields)\n : enc.field != null ? field$1(enc.field, scope, params, fields)\n : enc.value !== undefined ? $(enc.value)\n : undefined;\n\n if (enc.scale != null) {\n value = scale$3(enc, value, scope, params, fields);\n }\n\n if (value === undefined) {\n value = null;\n }\n\n if (enc.exponent != null) {\n value = 'Math.pow(' + value + ','\n + property(enc.exponent, scope, params, fields) + ')';\n }\n\n if (enc.mult != null) {\n value += '*' + property(enc.mult, scope, params, fields);\n }\n\n if (enc.offset != null) {\n value += '+' + property(enc.offset, scope, params, fields);\n }\n\n if (enc.round) {\n value = 'Math.round(' + value + ')';\n }\n\n return value;\n};\n\nvar set$5 = function(obj, key$$1, value) {\n return obj + '[' + $(key$$1) + ']=' + value + ';';\n};\n\nvar rule$1 = function(channel, rules, scope, params, fields) {\n var code = '';\n\n rules.forEach(function(rule) {\n var value = entry$1(channel, rule, scope, params, fields);\n code += rule.test\n ? expression(rule.test, scope, params, fields) + '?' + value + ':'\n : value;\n });\n\n return set$5('o', channel, code);\n};\n\nfunction parseEncode(encode, marktype, params, scope) {\n var fields = {},\n code = 'var o=item,datum=o.datum,$;',\n channel, enc, value;\n\n for (channel in encode) {\n enc = encode[channel];\n if (isArray(enc)) { // rule\n code += rule$1(channel, enc, scope, params, fields);\n } else {\n value = entry$1(channel, enc, scope, params, fields);\n code += set$5('o', channel, value);\n }\n }\n\n code += adjustSpatial(encode, marktype);\n code += 'return 1;';\n\n return {\n $expr: code,\n $fields: Object.keys(fields),\n $output: Object.keys(encode)\n };\n}\n\nvar MarkRole = 'mark';\nvar FrameRole$1 = 'frame';\nvar ScopeRole$1 = 'scope';\n\nvar AxisRole$2 = 'axis';\nvar AxisDomainRole = 'axis-domain';\nvar AxisGridRole = 'axis-grid';\nvar AxisLabelRole = 'axis-label';\nvar AxisTickRole = 'axis-tick';\nvar AxisTitleRole = 'axis-title';\n\nvar LegendRole$2 = 'legend';\nvar LegendEntryRole = 'legend-entry';\nvar LegendGradientRole = 'legend-gradient';\nvar LegendLabelRole = 'legend-label';\nvar LegendSymbolRole = 'legend-symbol';\nvar LegendTitleRole = 'legend-title';\n\nvar TitleRole$1 = 'title';\n\nfunction encoder(_) {\n return isObject(_) ? _ : {value: _};\n}\n\nfunction addEncode(object, name, value) {\n if (value != null) {\n object[name] = isObject(value) && !isArray(value) ? value : {value: value};\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction extendEncode(encode, extra, skip) {\n for (var name in extra) {\n if (skip && skip.hasOwnProperty(name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n return encode;\n}\n\nfunction encoders(encode, type, role, style, scope, params) {\n var enc, key$$1;\n params = params || {};\n params.encoders = {$encode: (enc = {})};\n\n encode = applyDefaults(encode, type, role, style, scope.config);\n\n for (key$$1 in encode) {\n enc[key$$1] = parseEncode(encode[key$$1], type, params, scope);\n }\n\n return params;\n}\n\nfunction applyDefaults(encode, type, role, style, config) {\n var enter = {}, key$$1, skip, props;\n\n // ignore legend and axis\n if (role == 'legend' || String(role).indexOf('axis') === 0) {\n role = null;\n }\n\n // resolve mark config\n props = role === FrameRole$1 ? config.group\n : (role === MarkRole) ? extend({}, config.mark, config[type])\n : null;\n\n for (key$$1 in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key$$1, encode)\n || (key$$1 === 'fill' || key$$1 === 'stroke')\n && (has('fill', encode) || has('stroke', encode));\n\n if (!skip) enter[key$$1] = {value: props[key$$1]};\n }\n\n // resolve styles, apply with increasing precedence\n array(style).forEach(function(name) {\n var props = config.style && config.style[name];\n for (var key$$1 in props) {\n if (!has(key$$1, encode)) {\n enter[key$$1] = {value: props[key$$1]};\n }\n }\n });\n\n encode = extend({}, encode); // defensive copy\n encode.enter = extend(enter, encode.enter);\n\n return encode;\n}\n\nfunction has(key$$1, encode) {\n return encode && (\n (encode.enter && encode.enter[key$$1]) ||\n (encode.update && encode.update[key$$1])\n );\n}\n\nvar guideMark = function(type, role, style, key, dataRef, encode, extras) {\n return {\n type: type,\n name: extras ? extras.name : undefined,\n role: role,\n style: (extras && extras.style) || style,\n key: key,\n from: dataRef,\n interactive: !!(extras && extras.interactive),\n encode: extendEncode(encode, extras, Skip)\n };\n};\n\nvar GroupMark = 'group';\nvar RectMark = 'rect';\nvar RuleMark = 'rule';\nvar SymbolMark = 'symbol';\nvar TextMark = 'text';\n\nvar legendGradient = function(spec, scale, config, userEncode) {\n var zero = {value: 0},\n encode = {}, enter, update;\n\n encode.enter = enter = {\n opacity: zero,\n x: zero,\n y: zero\n };\n addEncode(enter, 'width', config.gradientWidth);\n addEncode(enter, 'height', config.gradientHeight);\n addEncode(enter, 'stroke', config.gradientStrokeColor);\n addEncode(enter, 'strokeWidth', config.gradientStrokeWidth);\n\n encode.exit = {\n opacity: zero\n };\n\n encode.update = update = {\n x: zero,\n y: zero,\n fill: {gradient: scale, start: [0,0], stop: [1,0]},\n opacity: {value: 1}\n };\n addEncode(update, 'width', config.gradientWidth);\n addEncode(update, 'height', config.gradientHeight);\n\n return guideMark(RectMark, LegendGradientRole, null, undefined, undefined, encode, userEncode);\n};\n\nvar alignExpr = 'datum.' + Perc + '<=0?\"left\"'\n + ':datum.' + Perc + '>=1?\"right\":\"center\"';\n\nvar legendGradientLabels = function(spec, config, userEncode, dataRef) {\n var zero = {value: 0},\n encode = {}, enter, update;\n\n encode.enter = enter = {\n opacity: zero\n };\n addEncode(enter, 'fill', config.labelColor);\n addEncode(enter, 'font', config.labelFont);\n addEncode(enter, 'fontSize', config.labelFontSize);\n addEncode(enter, 'fontWeight', config.labelFontWeight);\n addEncode(enter, 'baseline', config.gradientLabelBaseline);\n addEncode(enter, 'limit', config.gradientLabelLimit);\n\n encode.exit = {\n opacity: zero\n };\n\n encode.update = update = {\n opacity: {value: 1},\n text: {field: Label}\n };\n\n enter.x = update.x = {\n field: Perc,\n mult: config.gradientWidth\n };\n\n enter.y = update.y = {\n value: config.gradientHeight,\n offset: config.gradientLabelOffset\n };\n\n enter.align = update.align = {signal: alignExpr};\n\n return guideMark(TextMark, LegendLabelRole, GuideLabelStyle, Perc, dataRef, encode, userEncode);\n};\n\nvar legendLabels = function(spec, config, userEncode, dataRef) {\n var zero = {value: 0},\n encode = {}, enter, update;\n\n encode.enter = enter = {\n opacity: zero\n };\n addEncode(enter, 'align', config.labelAlign);\n addEncode(enter, 'baseline', config.labelBaseline);\n addEncode(enter, 'fill', config.labelColor);\n addEncode(enter, 'font', config.labelFont);\n addEncode(enter, 'fontSize', config.labelFontSize);\n addEncode(enter, 'fontWeight', config.labelFontWeight);\n addEncode(enter, 'limit', config.labelLimit);\n\n encode.exit = {\n opacity: zero\n };\n\n encode.update = update = {\n opacity: {value: 1},\n text: {field: Label}\n };\n\n enter.x = update.x = {\n field: Offset,\n offset: config.labelOffset\n };\n\n enter.y = update.y = {\n field: Size,\n mult: 0.5,\n offset: {\n field: Total,\n offset: {\n field: {group: 'entryPadding'},\n mult: {field: Index}\n }\n }\n };\n\n return guideMark(TextMark, LegendLabelRole, GuideLabelStyle, Value, dataRef, encode, userEncode);\n};\n\nvar legendSymbols = function(spec, config, userEncode, dataRef) {\n var zero = {value: 0},\n encode = {}, enter, update;\n\n encode.enter = enter = {\n opacity: zero\n };\n addEncode(enter, 'shape', config.symbolType);\n addEncode(enter, 'size', config.symbolSize);\n addEncode(enter, 'strokeWidth', config.symbolStrokeWidth);\n if (!spec.fill) {\n addEncode(enter, 'fill', config.symbolFillColor);\n addEncode(enter, 'stroke', config.symbolStrokeColor);\n }\n\n encode.exit = {\n opacity: zero\n };\n\n encode.update = update = {\n opacity: {value: 1}\n };\n\n enter.x = update.x = {\n field: Offset,\n mult: 0.5\n };\n\n enter.y = update.y = {\n field: Size,\n mult: 0.5,\n offset: {\n field: Total,\n offset: {\n field: {group: 'entryPadding'},\n mult: {field: Index}\n }\n }\n };\n\n LegendScales.forEach(function(scale) {\n if (spec[scale]) {\n update[scale] = enter[scale] = {scale: spec[scale], field: Value};\n }\n });\n\n return guideMark(SymbolMark, LegendSymbolRole, null, Value, dataRef, encode, userEncode);\n};\n\nvar legendTitle = function(spec, config, userEncode, dataRef) {\n var zero = {value: 0},\n title = spec.title,\n encode = {}, enter;\n\n encode.enter = enter = {\n x: {field: {group: 'padding'}},\n y: {field: {group: 'padding'}},\n opacity: zero\n };\n addEncode(enter, 'align', config.titleAlign);\n addEncode(enter, 'baseline', config.titleBaseline);\n addEncode(enter, 'fill', config.titleColor);\n addEncode(enter, 'font', config.titleFont);\n addEncode(enter, 'fontSize', config.titleFontSize);\n addEncode(enter, 'fontWeight', config.titleFontWeight);\n addEncode(enter, 'limit', config.titleLimit);\n\n encode.exit = {\n opacity: zero\n };\n\n encode.update = {\n opacity: {value: 1},\n text: title && title.signal ? {signal: title.signal} : {value: title + ''}\n };\n\n return guideMark(TextMark, LegendTitleRole, GuideTitleStyle, null, dataRef, encode, userEncode);\n};\n\nvar guideGroup = function(role, style, name, dataRef, interactive, encode, marks) {\n return {\n type: GroupMark,\n name: name,\n role: role,\n style: style,\n from: dataRef,\n interactive: interactive || false,\n encode: encode,\n marks: marks\n };\n};\n\nvar clip$3 = function(clip, scope) {\n var expr;\n\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n\n return expr\n ? scope.signalRef(expr)\n : !!clip;\n};\n\nfunction param(value) {\n return isObject(value) && value.signal\n ? value.signal\n : $(value);\n}\n\nvar role = function(spec) {\n var role = spec.role || '';\n return (!role.indexOf('axis') || !role.indexOf('legend'))\n ? role\n : spec.type === GroupMark ? ScopeRole$1 : (role || MarkRole);\n};\n\nvar definition$1 = function(spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || role(spec),\n zindex: +spec.zindex || undefined\n };\n};\n\nvar interactive = function(spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal)\n : spec === false ? false\n : true;\n};\n\n/**\n * Parse a data transform specification.\n */\nvar parseTransform = function(spec, scope) {\n var def = definition(spec.type);\n if (!def) error$1('Unrecognized transform type: ' + $(spec.type));\n\n var t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n\n return t;\n};\n\n/**\n * Parse all parameters of a data transform.\n */\nfunction parseParameters(def, spec, scope) {\n var params = {}, pdef, i, n;\n for (i=0, n=def.params.length; i 0;\n};\n\nprototype$85.toRuntime = function() {\n this.finish();\n return {\n background: this.background,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig\n };\n};\n\nprototype$85.id = function() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n};\n\nprototype$85.add = function(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(function(ref$$1) { ref$$1.$ref = op.id; });\n op.refs = null;\n }\n return op;\n};\n\nprototype$85.proxy = function(op) {\n var vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy$1({value: vref}));\n};\n\nprototype$85.addStream = function(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n};\n\nprototype$85.addUpdate = function(update) {\n this.updates.push(update);\n return update;\n};\n\n// Apply metadata\nprototype$85.finish = function() {\n var name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n var data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (var field$$1 in ds.index) {\n annotate(ds.index[field$$1], name, 'index:' + field$$1);\n }\n }\n\n return this;\n};\n\n// ----\n\nprototype$85.pushState = function(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve$1({pulse: encode}))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n};\n\nprototype$85.popState = function() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n};\n\nprototype$85.parent = function() {\n return peek(this._parent);\n};\n\nprototype$85.encode = function() {\n return peek(this._encode);\n};\n\nprototype$85.lookup = function() {\n return peek(this._lookup);\n};\n\nprototype$85.markpath = function() {\n var p = this._markpath;\n return ++p[p.length-1];\n};\n\n// ----\n\nprototype$85.fieldRef = function(field$$1, name) {\n if (isString(field$$1)) return fieldRef(field$$1, name);\n if (!field$$1.signal) {\n error$1('Unsupported field reference: ' + $(field$$1));\n }\n\n var s = field$$1.signal,\n f = this.field[s],\n params;\n\n if (!f) { // TODO: replace with update signalRef?\n params = {name: this.signalRef(s)};\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field$1(params)));\n }\n return f;\n};\n\nprototype$85.compareRef = function(cmp, stable) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return ref(sig[_.signal]);\n } else {\n return _;\n }\n }\n\n var sig = this.signals,\n signal = false,\n fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n\n if (stable) {\n fields.push(tupleidRef);\n }\n\n return signal\n ? ref(this.add(Compare$1({fields: fields, orders: orders})))\n : compareRef(fields, orders);\n};\n\nprototype$85.keyRef = function(fields, flat) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return ref(sig[_.signal]);\n } else {\n return _;\n }\n }\n\n var sig = this.signals,\n signal = false;\n fields = array(fields).map(check);\n\n return signal\n ? ref(this.add(Key$1({fields: fields, flat: flat})))\n : keyRef(fields, flat);\n};\n\nprototype$85.sortRef = function(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n var a = [aggrField(sort.op, sort.field), tupleidRef],\n o = sort.order || Ascending;\n\n return o.signal\n ? ref(this.add(Compare$1({\n fields: a,\n orders: [o = this.signalRef(o.signal), o]\n })))\n : compareRef(a, [o, o]);\n};\n\n// ----\n\nprototype$85.event = function(source, type) {\n var key$$1 = source + ':' + type;\n if (!this.events[key$$1]) {\n var id$$1 = this.id();\n this.streams.push({\n id: id$$1,\n source: source,\n type: type\n });\n this.events[key$$1] = id$$1;\n }\n return this.events[key$$1];\n};\n\n// ----\n\nprototype$85.addSignal = function(name, value$$1) {\n if (this.signals.hasOwnProperty(name)) {\n error$1('Duplicate signal name: ' + $(name));\n }\n var op = value$$1 instanceof Entry ? value$$1 : this.add(operator(value$$1));\n return this.signals[name] = op;\n};\n\nprototype$85.getSignal = function(name) {\n if (!this.signals[name]) {\n error$1('Unrecognized signal name: ' + $(name));\n }\n return this.signals[name];\n};\n\nprototype$85.signalRef = function(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!this.lambdas.hasOwnProperty(s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n};\n\nprototype$85.parseLambdas = function() {\n var code = Object.keys(this.lambdas);\n for (var i=0, n=code.length; i 0 ? ',' : '')\n + (isObject(value$$1)\n ? (value$$1.signal || propertyLambda(value$$1))\n : $(value$$1));\n }\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n var code = '{',\n i = 0,\n key$$1, value$$1;\n\n for (key$$1 in obj) {\n value$$1 = obj[key$$1];\n code += (++i > 1 ? ',' : '')\n + $(key$$1) + ':'\n + (isObject(value$$1)\n ? (value$$1.signal || propertyLambda(value$$1))\n : $(value$$1));\n }\n return code + '}';\n}\n\nprototype$85.addBinding = function(name, bind) {\n if (!this.bindings) {\n error$1('Nested signals do not support binding: ' + $(name));\n }\n this.bindings.push(extend({signal: name}, bind));\n};\n\n// ----\n\nprototype$85.addScaleProj = function(name, transform) {\n if (this.scales.hasOwnProperty(name)) {\n error$1('Duplicate scale or projection name: ' + $(name));\n }\n this.scales[name] = this.add(transform);\n};\n\nprototype$85.addScale = function(name, params) {\n this.addScaleProj(name, Scale$1(params));\n};\n\nprototype$85.addProjection = function(name, params) {\n this.addScaleProj(name, Projection$1(params));\n};\n\nprototype$85.getScale = function(name) {\n if (!this.scales[name]) {\n error$1('Unrecognized scale name: ' + $(name));\n }\n return this.scales[name];\n};\n\nprototype$85.projectionRef =\nprototype$85.scaleRef = function(name) {\n return ref(this.getScale(name));\n};\n\nprototype$85.projectionType =\nprototype$85.scaleType = function(name) {\n return this.getScale(name).params.type;\n};\n\n// ----\n\nprototype$85.addData = function(name, dataScope) {\n if (this.data.hasOwnProperty(name)) {\n error$1('Duplicate data set name: ' + $(name));\n }\n return (this.data[name] = dataScope);\n};\n\nprototype$85.getData = function(name) {\n if (!this.data[name]) {\n error$1('Undefined data set name: ' + $(name));\n }\n return this.data[name];\n};\n\nprototype$85.addDataPipeline = function(name, entries) {\n if (this.data.hasOwnProperty(name)) {\n error$1('Duplicate data set name: ' + $(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n};\n\nvar defaults = function(configs) {\n var output = defaults$1();\n (configs || []).forEach(function(config) {\n var key$$1, value, style;\n if (config) {\n for (key$$1 in config) {\n if (key$$1 === 'style') {\n style = output.style || (output.style = {});\n for (key$$1 in config.style) {\n style[key$$1] = extend(style[key$$1] || {}, config.style[key$$1]);\n }\n } else {\n value = config[key$$1];\n output[key$$1] = isObject(value) && !isArray(value)\n ? extend(isObject(output[key$$1]) ? output[key$$1] : {}, value)\n : value;\n }\n }\n }\n });\n return output;\n};\n\nvar defaultFont = 'sans-serif';\nvar defaultSymbolSize = 30;\nvar defaultStrokeWidth = 2;\nvar defaultColor = '#4c78a8';\nvar black = \"#000\";\nvar gray$1 = '#888';\nvar lightGray = '#ddd';\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults$1() {\n return {\n // default padding around visualization\n padding: 0,\n\n // default for automatic sizing; options: \"none\", \"pad\", \"fit\"\n // or provide an object (e.g., {\"type\": \"pad\", \"resize\": true})\n autosize: 'pad',\n\n // default view background color\n // covers the entire view component\n background: null,\n\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {allow: ['wheel']}\n },\n\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: { fill: defaultColor },\n area: { fill: defaultColor },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: { stroke: defaultColor },\n rect: { fill: defaultColor },\n rule: { stroke: black },\n shape: { stroke: defaultColor },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n\n // style definitions\n style: {\n // axis & legend labels\n \"guide-label\": {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n \"guide-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n \"group-title\": {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n }\n },\n\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray$1,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n gridOpacity: 1,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelPadding: 2,\n ticks: true,\n tickColor: gray$1,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titleAlign: 'center',\n titlePadding: 4\n },\n\n // correction for centering bias\n axisBand: {\n tickOffset: -1\n },\n\n // defaults for legends\n legend: {\n orient: 'right',\n offset: 18,\n padding: 0,\n entryPadding: 5,\n titlePadding: 5,\n gradientWidth: 100,\n gradientHeight: 20,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelBaseline: 'top',\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelOffset: 8,\n labelLimit: 160,\n symbolType: 'circle',\n symbolSize: 100,\n symbolFillColor: 'transparent',\n symbolStrokeColor: gray$1,\n symbolStrokeWidth: 1.5,\n titleAlign: 'left',\n titleBaseline: 'top',\n titleLimit: 180\n },\n\n // defaults for group title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4\n },\n\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues',\n extent: [0.2, 1]\n },\n heatmap: {\n scheme: 'viridis'\n },\n ramp: {\n scheme: 'blues',\n extent: [0.2, 1]\n },\n diverging: {\n scheme: 'blueorange'\n },\n symbol: [\n 'circle',\n 'square',\n 'triangle-up',\n 'cross',\n 'diamond',\n 'triangle-right',\n 'triangle-down',\n 'triangle-left'\n ]\n }\n };\n}\n\nvar parse$2 = function(spec, config) {\n if (!isObject(spec)) error$1('Input Vega specification must be an object.');\n return parseView(spec, new Scope$1(defaults([config, spec.config])))\n .toRuntime();\n};\n\n/**\n * Parse an expression given the argument signature and body code.\n */\nfunction expression$1(args, code, ctx) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length-1] !== ';') {\n code = 'return(' + code + ');';\n }\n var fn = Function.apply(null, args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n/**\n * Parse an expression used to update an operator value.\n */\nfunction operatorExpression(code, ctx) {\n return expression$1(['_'], code, ctx);\n}\n\n/**\n * Parse an expression provided as an operator parameter value.\n */\nfunction parameterExpression(code, ctx) {\n return expression$1(['datum', '_'], code, ctx);\n}\n\n/**\n * Parse an expression applied to an event stream.\n */\nfunction eventExpression(code, ctx) {\n return expression$1(['event'], code, ctx);\n}\n\n/**\n * Parse an expression used to handle an event-driven operator update.\n */\nfunction handlerExpression(code, ctx) {\n return expression$1(['_', 'event'], code, ctx);\n}\n\n/**\n * Parse an expression that performs visual encoding.\n */\nfunction encodeExpression(code, ctx) {\n return expression$1(['item', '_'], code, ctx);\n}\n\n/**\n * Parse a set of operator parameters.\n */\nfunction parseParameters$1(spec, ctx, params) {\n params = params || {};\n var key$$1, value;\n\n for (key$$1 in spec) {\n value = spec[key$$1];\n\n if (value && value.$expr && value.$params) {\n // if expression, parse its parameters\n parseParameters$1(value.$params, ctx, params);\n }\n\n params[key$$1] = isArray(value)\n ? value.map(function(v) { return parseParameter$2(v, ctx); })\n : parseParameter$2(value, ctx);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter$2(spec, ctx) {\n if (!spec || !isObject(spec)) return spec;\n\n for (var i=0, n=PARSERS.length, p; i= 0) {\n l.splice(i, 1);\n }\n return this;\n};\n\nfunction findHandler(signal, handler) {\n var t = signal._targets || [],\n h = t.filter(function(op) {\n var u = op._update;\n return u && u.handler === handler;\n });\n return h.length ? h[0] : null;\n}\n\nprototype$83.addSignalListener = function(name, handler) {\n var s = lookupSignal(this, name),\n h = findHandler(s, handler);\n\n if (!h) {\n h = function() { handler(name, s.value); };\n h.handler = handler;\n this.on(s, null, h);\n }\n return this;\n};\n\nprototype$83.removeSignalListener = function(name, handler) {\n var s = lookupSignal(this, name),\n h = findHandler(s, handler);\n\n if (h) s._targets.remove(h);\n return this;\n};\n\nprototype$83.preventDefault = function(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n};\n\nprototype$83.tooltipHandler = function(_) {\n var h = this._handler;\n if (!arguments.length) {\n return h.handleTooltip;\n } else {\n h.handleTooltip = _ || Handler.prototype.handleTooltip;\n return this;\n }\n};\n\nprototype$83.events = events$1;\nprototype$83.finalize = finalize;\nprototype$83.hover = hover;\n\n// -- DATA ----\nprototype$83.data = data;\nprototype$83.change = change;\nprototype$83.insert = insert;\nprototype$83.remove = remove;\n\n// -- INITIALIZATION ----\nprototype$83.initialize = initialize$1;\n\n// -- HEADLESS RENDERING ----\nprototype$83.toImageURL = renderToImageURL;\nprototype$83.toCanvas = renderToCanvas;\nprototype$83.toSVG = renderToSVG;\n\n// -- SAVE / RESTORE STATE ----\nprototype$83.getState = getState$1;\nprototype$83.setState = setState$1;\n\n// -- Transforms -----\n\nextend(transforms, tx, vtx, encode, geo, force, tree, voronoi, wordcloud, xf);\n\nexports.version = version;\nexports.Dataflow = Dataflow;\nexports.EventStream = EventStream;\nexports.Parameters = Parameters;\nexports.Pulse = Pulse;\nexports.MultiPulse = MultiPulse;\nexports.Operator = Operator;\nexports.Transform = Transform;\nexports.changeset = changeset;\nexports.ingest = ingest;\nexports.isTuple = isTuple;\nexports.definition = definition;\nexports.transform = transform$1;\nexports.transforms = transforms;\nexports.tupleid = tupleid;\nexports.scale = scale$1;\nexports.scheme = getScheme;\nexports.interpolate = interpolate$1;\nexports.interpolateRange = interpolateRange;\nexports.timeInterval = timeInterval;\nexports.utcInterval = utcInterval;\nexports.projection = projection$$1;\nexports.View = View;\nexports.parse = parse$2;\nexports.expressionFunction = expressionFunction;\nexports.formatLocale = defaultLocale$1;\nexports.timeFormatLocale = defaultLocale;\nexports.runtime = parseDataflow;\nexports.runtimeContext = context$2;\nexports.bin = bin;\nexports.bootstrapCI = bootstrapCI;\nexports.quartiles = quartiles;\nexports.setRandom = setRandom;\nexports.randomInteger = integer;\nexports.randomKDE = randomKDE;\nexports.randomMixture = randomMixture;\nexports.randomNormal = randomNormal;\nexports.randomUniform = randomUniform;\nexports.accessor = accessor;\nexports.accessorName = accessorName;\nexports.accessorFields = accessorFields;\nexports.id = id;\nexports.identity = identity;\nexports.zero = zero;\nexports.one = one;\nexports.truthy = truthy;\nexports.falsy = falsy;\nexports.logger = logger;\nexports.None = None;\nexports.Error = Error$1;\nexports.Warn = Warn;\nexports.Info = Info;\nexports.Debug = Debug;\nexports.panLinear = panLinear;\nexports.panLog = panLog;\nexports.panPow = panPow;\nexports.zoomLinear = zoomLinear;\nexports.zoomLog = zoomLog;\nexports.zoomPow = zoomPow;\nexports.array = array;\nexports.compare = compare;\nexports.constant = constant;\nexports.debounce = debounce;\nexports.error = error$1;\nexports.extend = extend;\nexports.extentIndex = extentIndex;\nexports.fastmap = fastmap;\nexports.field = field;\nexports.inherits = inherits;\nexports.isArray = isArray;\nexports.isBoolean = isBoolean;\nexports.isDate = isDate;\nexports.isFunction = isFunction;\nexports.isNumber = isNumber;\nexports.isObject = isObject;\nexports.isRegExp = isRegExp;\nexports.isString = isString;\nexports.key = key;\nexports.merge = merge;\nexports.pad = pad;\nexports.peek = peek;\nexports.repeat = repeat;\nexports.splitAccessPath = splitAccessPath;\nexports.stringValue = $;\nexports.toBoolean = toBoolean;\nexports.toDate = toDate;\nexports.toNumber = toNumber;\nexports.toString = toString;\nexports.toSet = toSet;\nexports.truncate = truncate;\nexports.visitArray = visitArray;\nexports.loader = loader;\nexports.read = read;\nexports.inferType = inferType;\nexports.inferTypes = inferTypes;\nexports.typeParsers = typeParsers;\nexports.formats = formats$1;\nexports.Bounds = Bounds;\nexports.Gradient = Gradient;\nexports.GroupItem = GroupItem;\nexports.ResourceLoader = ResourceLoader;\nexports.Item = Item;\nexports.Scenegraph = Scenegraph;\nexports.Handler = Handler;\nexports.Renderer = Renderer;\nexports.CanvasHandler = CanvasHandler;\nexports.CanvasRenderer = CanvasRenderer;\nexports.SVGHandler = SVGHandler;\nexports.SVGRenderer = SVGRenderer;\nexports.SVGStringRenderer = SVGStringRenderer;\nexports.RenderType = RenderType;\nexports.renderModule = renderModule;\nexports.Marks = marks;\nexports.boundClip = boundClip;\nexports.boundContext = context;\nexports.boundStroke = boundStroke;\nexports.boundItem = boundItem$1;\nexports.boundMark = boundMark;\nexports.pathCurves = curves;\nexports.pathSymbols = symbols$1;\nexports.pathRectangle = vg_rect;\nexports.pathTrail = vg_trail;\nexports.pathParse = pathParse;\nexports.pathRender = pathRender;\nexports.point = point$4;\nexports.domCreate = domCreate;\nexports.domFind = domFind;\nexports.domChild = domChild;\nexports.domClear = domClear;\nexports.openTag = openTag;\nexports.closeTag = closeTag;\nexports.font = font;\nexports.textMetrics = textMetrics;\nexports.resetSVGClipId = resetSVGClipId;\nexports.sceneEqual = sceneEqual;\nexports.pathEqual = pathEqual;\nexports.sceneToJSON = sceneToJSON;\nexports.sceneFromJSON = sceneFromJSON;\nexports.sceneZOrder = zorder;\nexports.sceneVisit = visit;\nexports.scenePickVisit = pickVisit;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@girder/jobs/~/vega-lib/build/vega.js\n// module id = 19\n// module chunks = 0","/**\n * Expose the symbols for a girder plugin under the window.girder.plugins\n * namespace. Required since each plugin is loaded dynamically.\n */\nvar registerPluginNamespace = function (pluginName, symbols) {\n window.girder.plugins[pluginName] = symbols;\n};\n\nexport {\n registerPluginNamespace\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/pluginUtils.js","import JobCollection from './JobCollection';\n\nexport {\n JobCollection\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/collections/index.js","import * as collections from './collections';\nimport * as models from './models';\nimport * as views from './views';\nimport JobStatus from './JobStatus';\n\nexport {\n collections,\n models,\n views,\n JobStatus\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/index.js","import JobModel from './JobModel';\n\nexport {\n JobModel\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/models/index.js","/* eslint-disable import/first */\n\nimport router from '@girder/core/router';\nimport events from '@girder/core/events';\n\nimport JobModel from './models/JobModel';\nimport JobDetailsWidget from './views/JobDetailsWidget';\nimport JobListWidget from './views/JobListWidget';\n\nrouter.route('job/:id', 'jobView', function (id) {\n var job = new JobModel({ _id: id }).once('g:fetched', function () {\n events.trigger('g:navigateTo', JobDetailsWidget, {\n job: job,\n renderImmediate: true\n });\n }, this).once('g:error', function () {\n router.navigate('collections', { trigger: true });\n }, this);\n job.fetch();\n});\n\nrouter.route('jobs/user/:id(/:view)', 'jobList', function (id, view) {\n events.trigger('g:navigateTo', JobListWidget, {\n filter: { userId: id },\n view: view,\n showGraphs: true,\n showFilters: true,\n showPageSizeSelector: true\n });\n});\n\nrouter.route('jobs(/:view)', 'allJobList', function (view) {\n events.trigger('g:navigateTo', JobListWidget, {\n allJobsMode: true,\n view: view,\n showGraphs: true,\n showFilters: true,\n showPageSizeSelector: true\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/routes.js","import { wrap } from '@girder/core/utilities/PluginUtils';\nimport AdminView from '@girder/core/views/body/AdminView';\n\nimport adminViewMenuItemTemplate from '../templates/adminViewMenuItem.pug';\n\n/**\n * Add an entry to the AdminView\n */\nwrap(AdminView, 'render', function (render) {\n render.call(this);\n\n this.$('ul.g-admin-options').append(adminViewMenuItemTemplate());\n\n return this;\n});\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/AdminView.js","import HeaderUserView from '@girder/core/views/layout/HeaderUserView';\nimport { getCurrentUser } from '@girder/core/auth';\nimport { wrap } from '@girder/core/utilities/PluginUtils';\n\nimport HeaderUserViewMenuTemplate from '../templates/headerUserViewMenu.pug';\n\n/**\n * Add an entry to the user dropdown menu to navigate to user's job list view.\n */\nwrap(HeaderUserView, 'render', function (render) {\n render.call(this);\n\n var currentUser = getCurrentUser();\n if (currentUser) {\n this.$('#g-user-action-menu>ul').prepend(HeaderUserViewMenuTemplate({\n href: '#jobs/user/' + currentUser.id\n }));\n }\n return this;\n});\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/HeaderUserView.js","import _ from 'underscore';\nimport $ from 'jquery';\nimport {\n parse,\n View as VegaView\n} from 'vega-lib/build/vega';\nimport moment from 'moment';\n\nimport View from '@girder/core/views/View';\n\nimport JobStatus from '../JobStatus';\nimport JobsGraphWidgetTemplate from '../templates/jobsGraphWidget.pug';\n\nimport timingHistoryChartConfig from './timingHistoryChartConfig';\nimport timeChartConfig from './timeChartConfig';\n\nconst JobGraphWidget = View.extend({\n events: {\n 'change input.linear-scale': function (e) {\n this.yScale = $(e.target).is(':checked') ? 'linear' : 'sqrt';\n this.update();\n }\n },\n\n initialize: function (settings) {\n this.view = settings.view;\n this.collection = settings.collection;\n this.timingFilterWidget = settings.timingFilterWidget;\n this.timingFilter = settings.timingFilter;\n\n this.yScale = 'sqrt';\n\n this.listenTo(this.timingFilterWidget, 'g:triggerCheckBoxMenuChanged', function (e) {\n this.timingFilter = _.extend(this.timingFilter, e);\n this.update();\n });\n this.listenTo(this.collection, 'update reset', this.update);\n },\n\n render: function () {\n this.$el.html(JobsGraphWidgetTemplate(this));\n this.timingFilterWidget.setItems(this.timingFilter);\n this.timingFilterWidget.setElement(this.$('.g-job-filter-container .timing')).render();\n this.update();\n return this;\n },\n\n remove: function () {\n this.timingFilterWidget.off('g:triggerCheckBoxMenuChanged');\n View.prototype.remove.call(this);\n },\n\n update: function () {\n var openDetailView = (view) => {\n return (event, item) => {\n if (item && (item.itemName === 'bar' || item.itemName === 'circle')) {\n window.open(`#/job/${item.datum.id}`, '_blank');\n }\n };\n };\n\n if (this.view === 'timing-history') {\n const config = $.extend(true, {}, timingHistoryChartConfig);\n // limit the width to the size of the container. When there are fewer records,\n // further limit the size based on the number of records plus some padding for labels and tooltip to make it looks better\n const width = Math.min(this.$el.width(), this.collection.size() * 30 + 400);\n // the minimum width needed for each job is 10px\n const numberOfJobs = Math.min(this.collection.size(), Math.floor(width / 10));\n const vegaData = this._prepareDataForChart(numberOfJobs);\n const widthForEachJob = width / numberOfJobs;\n // if the width for each job is less than 20px, remove axe labels\n if (widthForEachJob < 20) {\n config.axes[0].encode.labels.opacity = { value: 0 };\n }\n config.width = width;\n config.height = this.$('.g-jobs-graph').height();\n config.data[0].values = vegaData;\n\n const minval = Math.min(0, Math.min.apply(this, vegaData.map((d) => d.elapsed === undefined ? 10 : d.elapsed)) / 1000);\n config.data[1].values = [minval < -86400 ? -86400 : minval];\n\n config.scales[1].type = this.yScale;\n const allStatus = JobStatus.getAll().filter((status) => this.timingFilter ? this.timingFilter[status.text] : true);\n config.scales[2].domain = allStatus.map((status) => status.text);\n config.scales[2].range = allStatus.map((status) => status.color);\n config.scales[3].domain = this.collection.pluck('_id');\n config.scales[3].range = this.collection.pluck('title');\n\n const runtime = parse(config);\n const view = new VegaView(runtime)\n .initialize(this.$('.g-jobs-graph')[0])\n .renderer('svg')\n .hover()\n .run();\n view.addEventListener('click', openDetailView(view));\n\n const positiveTimings = _.clone(this.timingFilter);\n this.timingFilterWidget.setItems(positiveTimings);\n }\n\n if (this.view === 'time') {\n const config = $.extend(true, {}, timeChartConfig);\n // limit the width to the size of the container. When there are fewer records,\n // further limit the size based on the number of records plus some padding for labels and tooltip to make it looks better\n const width = Math.min(this.$el.width(), this.collection.size() * 30 + 400);\n // the minimum width needed for each job is 6px\n const numberOfJobs = Math.min(this.collection.size(), Math.floor(width / 6));\n const vegaData = this._prepareDataForChart(numberOfJobs);\n const widthForEachJob = width / numberOfJobs;\n // if the width for each job is less than 20px, remove date axe and axe labels\n if (widthForEachJob < 20) {\n config.axes.splice(0, 1);\n config.axes[0].encode.labels.opacity = { value: 0 };\n }\n config.width = width;\n config.height = this.$('.g-jobs-graph').height();\n config.data[0].values = vegaData;\n config.scales[1].type = this.yScale;\n config.scales[2].domain = this.collection.pluck('_id');\n config.scales[2].range = this.collection.map(\n (job) => moment(job.get('updated')).format('MM/DD'));\n config.scales[3].domain = this.collection.pluck('_id');\n config.scales[3].range = this.collection.pluck('title');\n const allStatus = JobStatus.getAll().filter((status) => {\n if (status.text !== 'Inactive' && status.text !== 'Queued') {\n if (this.timingFilter) {\n return this.timingFilter[status.text];\n }\n return false;\n }\n return false;\n });\n config.scales[4].domain = allStatus.map((status) => status.text);\n config.scales[4].range = allStatus.map((status) => status.color);\n\n const runtime = parse(config);\n const view = new VegaView(runtime)\n .initialize(this.$('.g-jobs-graph')[0])\n .renderer('svg')\n .hover()\n .run();\n view.addEventListener('click', openDetailView(view));\n\n const positiveTimings = _.clone(this.timingFilter);\n delete positiveTimings.Inactive;\n delete positiveTimings.Queued;\n this.timingFilterWidget.setItems(positiveTimings);\n }\n },\n\n _prepareDataForChart(numberOfJobs) {\n let allRecords = [];\n\n for (var i = numberOfJobs - 1; i >= 0; i--) {\n const job = this.collection.at(i);\n const id = job.get('_id');\n const title = job.get('title');\n const currentStatus = JobStatus.text(job.get('status'));\n const updated = moment(job.get('updated')).format('L LT');\n const records = job.calculateSegmentation()\n .map((segment) => {\n const status = segment.status;\n let elapsed = '';\n switch (status) {\n case 'Inactive':\n elapsed = -segment.elapsed;\n break;\n case 'Queued':\n elapsed = -segment.elapsed;\n break;\n default:\n elapsed = segment.elapsed;\n }\n return {\n id: id,\n title: title,\n updated: updated,\n status: status,\n currentStatus: currentStatus,\n elapsed: elapsed\n };\n })\n .filter((record) => this.timingFilter[record.status]);\n if (records.length) {\n allRecords = records.concat(allRecords);\n } else {\n allRecords.unshift({\n id: id,\n title: title,\n updated: updated,\n currentStatus: currentStatus\n });\n }\n }\n return allRecords;\n }\n});\n\nexport default JobGraphWidget;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/JobGraphWidget.js","import JobDetailsWidget from './JobDetailsWidget';\nimport JobListWidget from './JobListWidget';\nimport CheckBoxMenu from './CheckBoxMenu';\n\nexport {\n JobDetailsWidget,\n JobListWidget,\n CheckBoxMenu\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/index.js","const timeChartConfig = {\n width: 894,\n height: 673,\n autosize: 'fit',\n data: [\n {\n name: 'table',\n values: [],\n transform: [\n {\n type: 'filter',\n expr: 'datum.elapsed > 0'\n },\n {\n type: 'aggregate',\n groupby: ['id', 'title', 'currentStatus'],\n fields: ['elapsed'],\n ops: ['sum'],\n as: ['sum_y']\n },\n {\n type: 'formula',\n as: 'adjSum_y',\n expr: 'datum.sum_y/1000'\n }\n ]\n }\n ],\n scales: [\n {\n name: 'x',\n type: 'point',\n range: 'width',\n domain: {\n data: 'table',\n field: 'id'\n }\n },\n {\n name: 'y',\n type: 'sqrt',\n range: 'height',\n domain: {\n fields: [\n {\n data: 'table',\n field: 'adjSum_y'\n }\n ]\n }\n },\n {\n name: 'xlabels2',\n type: 'ordinal',\n domain: [],\n range: []\n },\n {\n name: 'xlabels',\n type: 'ordinal',\n domain: [],\n range: []\n },\n {\n name: 'timing',\n type: 'ordinal',\n domain: [],\n range: []\n }\n ],\n axes: [\n {\n scale: 'x',\n orient: 'top',\n encode: {\n labels: {\n update: {\n text: { field: 'value', scale: 'xlabels2' },\n angle: { value: -50 },\n align: { value: 'left' },\n itemName: { value: 'xlabel2' }\n }\n }\n },\n offset: 10\n },\n {\n scale: 'x',\n orient: 'bottom',\n encode: {\n labels: {\n update: {\n text: { field: 'value', scale: 'xlabels' },\n angle: { value: 50 },\n align: { value: 'left' },\n itemName: { value: 'xlabel' }\n }\n }\n }\n },\n {\n orient: 'left',\n scale: 'y',\n format: 's',\n title: 'seconds',\n encode: {\n labels: {\n itemName: { value: 'ylabel' }\n }\n }\n }\n ],\n signals: [\n {\n name: 'hover',\n value: {\n pos: {},\n datum: {}\n },\n on: [\n {\n events: '@circle:mousemove',\n update: '{ pos: {x: x(), y: y()}, datum:datum}'\n },\n {\n events: '@circle:mouseout',\n update: '{pos:{},datum:{}}'\n }\n ]\n },\n {\n name: 'tt0',\n value: {},\n update: '{ title:hover.datum.title, sum_y:hover.datum[\"sum_y\"] }'\n },\n {\n name: 'tt1',\n value: {},\n update: '{ sum_y: ' +\n '!tt0.sum_y ? \"\" : ' +\n 'floor(tt0.sum_y/(' +\n ' tt0.sum_y >= 3600000 ? 3600000 : (' +\n ' tt0.sum_y >= 60000 ? 60000 : 1000))) + ' +\n 'timeFormat(datetime(0,0,0,0,0,0,tt0.sum_y), ' +\n ' tt0.sum_y >= 3600000 ? \":%M:%S.%L\": (' +\n ' tt0.sum_y >= 60000 ? \":%S.%L\" : \".%Ls\")) }'\n },\n {\n name: 'tt2',\n value: {},\n update: '{ width:!tt0.title?0:max(tt0.title.length, tt1.sum_y.length)*7 }'\n },\n {\n name: 'tooltip',\n value: {},\n update: '{ y:hover.pos.y+30, x:(hover.pos.x>width-tt2.width+5?hover.pos.x-tt2.width-5:hover.pos.x+5), width:tt2.width, title:tt0.title, sum_y:tt1.sum_y }'\n }\n ],\n marks: [\n {\n type: 'line',\n name: '',\n from: {\n data: 'table'\n },\n encode: {\n enter: {\n x: {\n scale: 'x',\n field: 'id'\n },\n y: {\n scale: 'y',\n field: 'adjSum_y'\n },\n itemName: {\n value: 'line'\n },\n strokeWidth: { value: 2 },\n stroke: { value: '#4682b4' },\n dx: { value: 50 }\n },\n update: {\n fillOpacity: {\n value: 1\n }\n },\n hover: {\n fillOpacity: {\n value: 0.5\n }\n }\n }\n },\n {\n type: 'symbol',\n name: 'circle',\n shape: 'circle',\n from: {\n data: 'table'\n },\n encode: {\n enter: {\n x: {\n scale: 'x',\n field: 'id'\n },\n y: {\n scale: 'y',\n field: 'adjSum_y'\n },\n itemName: {\n value: 'circle'\n },\n strokeWidth: { value: 1 },\n fill: { value: '#1F77B4' },\n cursor: { value: 'pointer' }\n },\n update: {\n fillOpacity: {\n value: 1\n },\n size: { value: 30 },\n stroke: { value: '#1F77B4' }\n },\n hover: {\n size: { value: 85 },\n stroke: { value: 'white' }\n }\n }\n },\n {\n type: 'group',\n encode: {\n update: {\n x: { signal: 'tooltip.x' },\n y: { signal: 'tooltip.y' },\n width: { signal: 'tooltip.width' },\n height: { value: 37 },\n fill: { value: '#fff' },\n fillOpacity: { value: 1 },\n stroke: { value: '#aaa' },\n strokeWidth: { value: 0.5 }\n }\n },\n marks: [\n {\n name: 'title',\n type: 'text',\n encode: {\n update: {\n x: { value: 6 },\n y: { value: 14 },\n text: { signal: 'tooltip.title' },\n fill: { value: 'black' }\n }\n }\n },\n {\n name: 'elapsed',\n type: 'text',\n encode: {\n update: {\n x: { value: 6 },\n y: { value: 30 },\n text: { signal: 'tooltip.sum_y' },\n fill: { value: 'black' },\n fontWeight: { value: 'bold' }\n }\n }\n }\n ]\n }\n ],\n legends: [\n {\n fill: 'timing',\n title: 'Status',\n offset: 20,\n encode: {\n title: {\n dx: { value: 13 },\n fontSize: { value: 12 }\n },\n symbols: {\n opacity: { value: 0 }\n },\n labels: {\n fontSize: { value: 12 }\n }\n }\n }\n ]\n};\n\nexport default timeChartConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/timeChartConfig.js","const timingHistoryChartConfig = {\n width: 800,\n height: 500,\n autosize: 'fit',\n data: [\n {\n name: 'table',\n values: [\n ],\n transform: [\n {\n type: 'formula',\n as: 'adjElapsed',\n expr: 'clamp(datum.elapsed/1000,-86400,86400)'\n }\n ]\n },\n {\n name: 'min_y',\n values: []\n },\n {\n name: 'stacked',\n source: 'table',\n transform: [\n {\n type: 'stack',\n groupby: ['id'],\n field: 'adjElapsed'\n }\n ]\n },\n {\n name: 'stats',\n source: 'table',\n transform: [\n {\n type: 'aggregate',\n groupby: ['id', 'title', 'currentStatus'],\n fields: ['adjElapsed'],\n ops: ['sum'],\n as: ['sum_y']\n },\n {\n type: 'formula',\n as: 'min_y',\n expr: 'data(\"min_y\")[0].data'\n }\n ]\n }\n ],\n scales: [\n {\n name: 'x',\n type: 'band',\n range: 'width',\n domain: { data: 'table', field: 'id' }\n },\n {\n name: 'y',\n type: 'linear',\n range: 'height',\n clamp: true,\n domain: {\n fields: [\n { data: 'table', field: 'adjElapsed' },\n { data: 'stats', field: 'sum_y' }\n ]\n }\n },\n {\n name: 'color',\n type: 'ordinal',\n range: 'category20c',\n domain: [{ data: 'table', field: 'status' }]\n },\n {\n name: 'xlabels',\n type: 'ordinal',\n domain: [],\n range: []\n }\n ],\n axes: [\n {\n scale: 'x',\n orient: 'bottom',\n encode: {\n labels: {\n update: {\n text: { field: 'value', scale: 'xlabels' },\n angle: { value: 50 },\n align: { value: 'left' },\n dy: { value: 5 },\n dx: { value: 7 }\n }\n }\n }\n },\n {\n orient: 'left',\n scale: 'y',\n format: 's',\n title: 'seconds',\n encode: {\n labels: {\n update: {\n itemName: { value: 'ylabel' }\n }\n }\n }\n }\n ],\n signals: [\n {\n name: 'hover',\n value: { pos: {}, datum: {} },\n on: [\n {\n events: '@timing:mousemove',\n update: '{ pos: {x: x(), y: y()}, datum:datum}'\n },\n {\n events: '@timing:mouseout',\n update: '{pos:{},datum:{}}'\n }\n ]\n },\n {\n name: 'tt0',\n value: {},\n update: '{ title:hover.datum.title, updated:hover.datum.updated, status:!hover.datum.status?\"\":hover.datum.status+\":\", elapsed:abs(hover.datum[\"elapsed\"]) }'\n },\n {\n name: 'tt1',\n value: {},\n update: '{ elapsed: ' +\n '!tt0.elapsed ? \"\" : ' +\n 'floor(tt0.elapsed/(' +\n ' tt0.elapsed >= 3600000 ? 3600000 : (' +\n ' tt0.elapsed >= 60000 ? 60000 : 1000))) + ' +\n 'timeFormat(datetime(0,0,0,0,0,0,tt0.elapsed), ' +\n ' tt0.elapsed >= 3600000 ? \":%M:%S.%L\": (' +\n ' tt0.elapsed >= 60000 ? \":%S.%L\" : \".%Ls\")) }'\n },\n {\n name: 'tt2',\n value: {},\n update: '{ width:!tt0.title?0:max(max(max(tt0.title.length,tt0.status.length),tt1.elapsed.length),tt0.updated.length)*7 }'\n },\n {\n name: 'tooltip',\n value: {},\n update: '{ y:hover.pos.y+30, x:(hover.pos.x>width-tt2.width-5?hover.pos.x-tt2.width-5:hover.pos.x+5), width:tt2.width, title:tt0.title, updated:tt0.updated, status:tt0.status, elapsed:tt1.elapsed }'\n },\n {\n name: 'sHover',\n value: { pos: {}, datum: {} },\n on: [\n {\n events: '@statusmark:mousemove',\n update: '{ pos: {x: x(), y: y()}, datum:datum}'\n },\n {\n events: '@statusmark:mouseout',\n update: '{pos:{},datum:{}}'\n }\n ]\n },\n {\n name: 'stt0',\n value: {},\n update: '{ status:sHover.datum?sHover.datum.currentStatus:\"\" }'\n },\n {\n name: 'stt1',\n value: {},\n update: '{ width:(stt0.status?stt0.status.length:0)*9 }'\n },\n {\n name: 'sTooltip',\n value: {},\n update: '{ y:sHover.pos.y+30, x:(sHover.pos.x>width-stt1.width-7?sHover.pos.x-stt1.width-5:sHover.pos.x+5), width:stt1.width, status:stt0.status }'\n }\n ],\n marks: [\n {\n type: 'rect',\n name: 'timing',\n from: {\n data: 'stacked'\n },\n encode: {\n enter: {\n x: { scale: 'x', field: 'id' },\n width: { scale: 'x', band: true, offset: -2 },\n y: { scale: 'y', field: 'y0' },\n y2: { scale: 'y', field: 'y1' },\n fill: { scale: 'color', field: 'status' },\n itemName: { value: 'bar' },\n cursor: { value: 'pointer' }\n },\n update: { fillOpacity: { value: 1 } },\n hover: {\n fillOpacity: { value: 0.5 }\n }\n }\n },\n {\n name: 'statusmarkbase',\n type: 'rect',\n from: {\n data: 'stats'\n },\n encode: {\n enter: {\n width: { scale: 'x', band: true, offset: -4 },\n height: { value: 6 },\n x: { scale: 'x', field: 'id', offset: 1 },\n y: { scale: 'y', field: 'min_y', offset: 9 },\n fill: { value: 'rgb(204,204,204)' },\n itemName: { value: 'status' }\n },\n update: { fillOpacity: { value: 1 } },\n hover: {\n fillOpacity: { value: 0.5 }\n }\n }\n },\n {\n name: 'statusmark',\n type: 'rect',\n from: {\n data: 'stats'\n },\n encode: {\n enter: {\n width: { scale: 'x', band: true, offset: -4 },\n height: { value: 6 },\n x: { scale: 'x', field: 'id', offset: 1 },\n y: { scale: 'y', field: 'min_y', offset: 9 },\n fill: { scale: 'color', field: 'currentStatus' },\n itemName: { value: 'status' }\n },\n update: { fillOpacity: { value: 1 } },\n hover: {\n fillOpacity: { value: 0.5 }\n }\n }\n },\n {\n name: 'timingTooltip',\n type: 'group',\n encode: {\n update: {\n x: { signal: 'tooltip.x' },\n y: { signal: 'tooltip.y' },\n width: { signal: 'tooltip.width' },\n height: { value: 65 },\n fill: { value: '#fff' },\n fillOpacity: { value: 1 },\n stroke: { value: '#aaa' },\n strokeWidth: { value: 0.5 }\n }\n },\n marks: [\n {\n name: 'title',\n type: 'text',\n encode: {\n update: {\n x: { value: 6 },\n y: { value: 14 },\n text: { signal: 'tooltip.title' },\n fill: { value: 'black' }\n }\n }\n },\n {\n name: 'updated',\n type: 'text',\n encode: {\n update: {\n x: { value: 6 },\n y: { value: 29 },\n text: { signal: 'tooltip.updated' },\n fill: { value: 'black' }\n }\n }\n },\n {\n name: 'status',\n type: 'text',\n encode: {\n update: {\n x: { value: 6 },\n y: { value: 44 },\n text: { signal: 'tooltip.status' },\n fill: { value: 'black' },\n fontWeight: { value: 'bold' }\n }\n }\n },\n {\n name: 'elapsed',\n type: 'text',\n encode: {\n update: {\n x: { value: 6 },\n y: { value: 59 },\n text: { signal: 'tooltip.elapsed' },\n fill: { value: 'black' },\n fontWeight: { value: 'bold' }\n }\n }\n }\n ]\n },\n {\n name: 'statusTooltip',\n type: 'group',\n encode: {\n update: {\n x: { signal: 'sTooltip.x' },\n y: { signal: 'sTooltip.y' },\n width: { signal: 'sTooltip.width' },\n height: { value: 24 },\n fill: { value: '#fff' },\n fillOpacity: { value: 1 },\n stroke: { value: '#aaa' },\n strokeWidth: { value: 0.5 }\n }\n },\n marks: [\n {\n name: 'status',\n type: 'text',\n encode: {\n update: {\n x: { value: 8 },\n y: { value: 16 },\n text: { signal: 'sTooltip.status' },\n fill: { value: 'black' },\n fontWeight: { value: 'bold' }\n }\n }\n }\n ]\n }\n ],\n legends: [\n {\n fill: 'color',\n title: 'Selected Phases',\n offset: 20,\n encode: {\n title: {\n update: {\n fontSize: { value: 12 }\n }\n },\n symbols: {\n update: {\n shape: { value: 'square' }\n }\n },\n labels: {\n update: {\n fontSize: { value: 12 }\n }\n }\n }\n }\n ]\n};\n\nexport default timingHistoryChartConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/views/timingHistoryChartConfig.js","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FadminViewMenuItem.pug\":\"li.g-all-jobs\\n a(href='#jobs')\\n i.icon-tasks\\n | Jobs\\n\"};\n;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FadminViewMenuItem.pug\";\npug_html = pug_html + \"\\u003Cli class=\\\"g-all-jobs\\\"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FadminViewMenuItem.pug\";\npug_html = pug_html + \"\\u003Ca href=\\\"#jobs\\\"\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FadminViewMenuItem.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-tasks\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FadminViewMenuItem.pug\";\npug_html = pug_html + \" Jobs\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/adminViewMenuItem.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FheaderUserViewMenu.pug\":\"li(role=\\\"presentation\\\")\\n a.g-my-jobs(href=href)\\n i.icon-tasks\\n | My jobs\\n\"};\n;var locals_for_with = (locals || {});(function (href) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FheaderUserViewMenu.pug\";\npug_html = pug_html + \"\\u003Cli role=\\\"presentation\\\"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FheaderUserViewMenu.pug\";\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"g-my-jobs\\\"\"+pug.attr(\"href\", href, true, true)) + \"\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FheaderUserViewMenu.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-tasks\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FheaderUserViewMenu.pug\";\npug_html = pug_html + \"My jobs\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";}.call(this,\"href\" in locals_for_with?locals_for_with.href:typeof href!==\"undefined\"?href:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/headerUserViewMenu.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\":\".checkbox.g-job-checkall\\n label\\n input(type=\\\"checkbox\\\", checked=checkAllChecked)\\n | Check all\\nul\\n each checked, name in items\\n li(role=\\\"presentation\\\")\\n .checkbox\\n label\\n input.g-job-filter-checkbox(type=\\\"checkbox\\\", id=name, checked=checked)\\n = name\\n\"};\n;var locals_for_with = (locals || {});(function (checkAllChecked, items) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"checkbox g-job-checkall\\\"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Clabel\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" type=\\\"checkbox\\\"\"+pug.attr(\"checked\", checkAllChecked, true, true)) + \"\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"Check all\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 5;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cul\\u003E\";\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\n// iterate items\n;(function(){\n var $$obj = items;\n if ('number' == typeof $$obj.length) {\n for (var name = 0, $$l = $$obj.length; name < $$l; name++) {\n var checked = $$obj[name];\n;pug_debug_line = 7;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cli role=\\\"presentation\\\"\\u003E\";\n;pug_debug_line = 8;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"checkbox\\\"\\u003E\";\n;pug_debug_line = 9;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Clabel\\u003E\";\n;pug_debug_line = 10;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"g-job-filter-checkbox\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"id\", name, true, true)+pug.attr(\"checked\", checked, true, true)) + \"\\u003E\";\n;pug_debug_line = 11;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = name) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var name in $$obj) {\n $$l++;\n var checked = $$obj[name];\n;pug_debug_line = 7;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cli role=\\\"presentation\\\"\\u003E\";\n;pug_debug_line = 8;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"checkbox\\\"\\u003E\";\n;pug_debug_line = 9;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Clabel\\u003E\";\n;pug_debug_line = 10;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"g-job-filter-checkbox\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"id\", name, true, true)+pug.attr(\"checked\", checked, true, true)) + \"\\u003E\";\n;pug_debug_line = 11;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxContent.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = name) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\";}.call(this,\"checkAllChecked\" in locals_for_with?locals_for_with.checkAllChecked:typeof checkAllChecked!==\"undefined\"?checkAllChecked:undefined,\"items\" in locals_for_with?locals_for_with.items:typeof items!==\"undefined\"?items:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/jobCheckBoxContent.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxMenu.pug\":\"a.g-job-checkbox-menu-link(data-toggle=\\\"dropdown\\\", data-target=`#g-job-checkbox-menu-${title}`)\\n | #{title}\\n i.icon-filter\\n.dropdown(id=`g-job-checkbox-menu-${title}`)\\n .dropdown-menu(role=\\\"menu\\\")\\n\"};\n;var locals_for_with = (locals || {});(function (title) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxMenu.pug\";\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"g-job-checkbox-menu-link\\\"\"+\" data-toggle=\\\"dropdown\\\"\"+pug.attr(\"data-target\", `#g-job-checkbox-menu-${title}`, true, true)) + \"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxMenu.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = title) ? \"\" : pug_interp));\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxMenu.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-filter\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fa\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxMenu.pug\";\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"dropdown\\\"\"+pug.attr(\"id\", `g-job-checkbox-menu-${title}`, true, true)) + \"\\u003E\";\n;pug_debug_line = 5;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobCheckBoxMenu.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"dropdown-menu\\\" role=\\\"menu\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"title\" in locals_for_with?locals_for_with.title:typeof title!==\"undefined\"?title:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/jobCheckBoxMenu.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\":\"ol.breadcrumb\\n li.breadcrumb-item\\n a(href=\\\"#\\u002Fjobs\\\") Jobs\\n li.breadcrumb-item.active Job detail\\n.g-field-container\\n .g-job-info-key.inline(property=\\\"title\\\") Title:\\n .g-job-info-value.inline(property=\\\"title\\\")= job.get('title')\\n.g-field-container\\n .g-job-info-key.inline(property=\\\"type\\\") Type:\\n .g-job-info-value.inline(property=\\\"type\\\")= job.get('type')\\n.g-field-container\\n .g-job-info-key.inline(property=\\\"_id\\\") Job ID:\\n .g-job-info-value.inline(property=\\\"_id\\\")= job.get('_id')\\n.g-field-container\\n .g-job-info-key.inline(property=\\\"status\\\") Status:\\n .g-job-status-badge(status=statusText.toLowerCase(), style=`color: ${textColor}; background-color: ${color};`)\\n i(class=JobStatus.icon(job.get('status')))\\n | #{statusText}\\n if JobStatus.isCancelable(job)\\n button.g-job-cancel.btn.btn-default.btn-sm(type=\\\"button\\\")\\n i.icon-cancel\\n | Cancel\\nif job.get('timestamps') && job.get('timestamps').length\\n .g-field-container\\n .g-job-info-key Timeline:\\n .g-job-timeline-container\\n.g-field-container\\n .g-job-info-key.inline(property=\\\"created\\\") Created:\\n .g-job-info-value.inline(property=\\\"created\\\")= formatDate(job.get('created'), DATE_SECOND)\\n.g-field-container\\n .g-job-info-key.inline(property=\\\"when\\\") Scheduled start:\\n .g-job-info-value.inline(property=\\\"when\\\")= formatDate(job.get('when'), DATE_SECOND)\\nif job.get('updated')\\n .g-field-container\\n .g-job-info-key.inline(property=\\\"updated\\\") Last update:\\n .g-job-info-value.inline(property=\\\"updated\\\")= formatDate(job.get('updated'), DATE_SECOND)\\nif job.get('log')\\n - var log = job.get('log').join('')\\n .g-job-info-key(property=\\\"log\\\") Log output:\\n .g-job-log-container.g-monospace-viewer(property=\\\"log\\\")= log\\nif job.get('meta') && !_.isEmpty(job.get('meta'))\\n .g-job-info-key(property=\\\"args\\\") Job metadata:\\n .g-monospace-viewer(property=\\\"args\\\")= JSON.stringify(job.get('meta'), null, ' ')\\nif job.get('args') && job.get('args').length\\n .g-job-info-key(property=\\\"args\\\") Positional arguments:\\n .g-monospace-viewer(property=\\\"args\\\")= JSON.stringify(job.get('args'), null, ' ')\\nif job.get('kwargs')\\n .g-job-info-key(property=\\\"kwargs\\\") Keyword arguments:\\n .g-monospace-viewer(property=\\\"kwargs\\\")= JSON.stringify(job.get('kwargs'), null, ' ')\\n\"};\n;var locals_for_with = (locals || {});(function (DATE_SECOND, JSON, JobStatus, _, color, formatDate, job, statusText, textColor) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Col class=\\\"breadcrumb\\\"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cli class=\\\"breadcrumb-item\\\"\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Ca href=\\\"#\\u002Fjobs\\\"\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Jobs\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cli class=\\\"breadcrumb-item active\\\"\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Job detail\\u003C\\u002Fli\\u003E\\u003C\\u002Fol\\u003E\";\n;pug_debug_line = 5;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"title\\\"\\u003E\";\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Title:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 7;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-value inline\\\" property=\\\"title\\\"\\u003E\";\n;pug_debug_line = 7;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 8;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 9;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"type\\\"\\u003E\";\n;pug_debug_line = 9;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Type:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 10;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-value inline\\\" property=\\\"type\\\"\\u003E\";\n;pug_debug_line = 10;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('type')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 11;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 12;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"_id\\\"\\u003E\";\n;pug_debug_line = 12;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Job ID:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 13;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-value inline\\\" property=\\\"_id\\\"\\u003E\";\n;pug_debug_line = 13;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('_id')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 14;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 15;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"status\\\"\\u003E\";\n;pug_debug_line = 15;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Status:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 16;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"g-job-status-badge\\\"\"+pug.attr(\"status\", statusText.toLowerCase(), true, true)+pug.attr(\"style\", pug.style(`color: ${textColor}; background-color: ${color};`), true, true)) + \"\\u003E\";\n;pug_debug_line = 17;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Ci\" + (pug.attr(\"class\", pug.classes([JobStatus.icon(job.get('status'))], [true]), false, true)) + \"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 18;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \" \";\n;pug_debug_line = 18;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = statusText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 19;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (JobStatus.isCancelable(job)) {\n;pug_debug_line = 20;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cbutton class=\\\"g-job-cancel btn btn-default btn-sm\\\" type=\\\"button\\\"\\u003E\";\n;pug_debug_line = 21;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-cancel\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 22;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Cancel\\u003C\\u002Fbutton\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 23;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (job.get('timestamps') && job.get('timestamps').length) {\n;pug_debug_line = 24;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 25;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key\\\"\\u003E\";\n;pug_debug_line = 25;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Timeline:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 26;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-timeline-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 27;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 28;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"created\\\"\\u003E\";\n;pug_debug_line = 28;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Created:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 29;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-value inline\\\" property=\\\"created\\\"\\u003E\";\n;pug_debug_line = 29;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = formatDate(job.get('created'), DATE_SECOND)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 30;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 31;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"when\\\"\\u003E\";\n;pug_debug_line = 31;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Scheduled start:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 32;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-value inline\\\" property=\\\"when\\\"\\u003E\";\n;pug_debug_line = 32;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = formatDate(job.get('when'), DATE_SECOND)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 33;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (job.get('updated')) {\n;pug_debug_line = 34;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-field-container\\\"\\u003E\";\n;pug_debug_line = 35;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key inline\\\" property=\\\"updated\\\"\\u003E\";\n;pug_debug_line = 35;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Last update:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 36;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-value inline\\\" property=\\\"updated\\\"\\u003E\";\n;pug_debug_line = 36;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = formatDate(job.get('updated'), DATE_SECOND)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 37;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (job.get('log')) {\n;pug_debug_line = 38;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nvar log = job.get('log').join('')\n;pug_debug_line = 39;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key\\\" property=\\\"log\\\"\\u003E\";\n;pug_debug_line = 39;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Log output:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 40;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-log-container g-monospace-viewer\\\" property=\\\"log\\\"\\u003E\";\n;pug_debug_line = 40;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = log) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 41;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (job.get('meta') && !_.isEmpty(job.get('meta'))) {\n;pug_debug_line = 42;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key\\\" property=\\\"args\\\"\\u003E\";\n;pug_debug_line = 42;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Job metadata:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 43;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-monospace-viewer\\\" property=\\\"args\\\"\\u003E\";\n;pug_debug_line = 43;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = JSON.stringify(job.get('meta'), null, ' ')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 44;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (job.get('args') && job.get('args').length) {\n;pug_debug_line = 45;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key\\\" property=\\\"args\\\"\\u003E\";\n;pug_debug_line = 45;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Positional arguments:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 46;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-monospace-viewer\\\" property=\\\"args\\\"\\u003E\";\n;pug_debug_line = 46;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = JSON.stringify(job.get('args'), null, ' ')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 47;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\nif (job.get('kwargs')) {\n;pug_debug_line = 48;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-info-key\\\" property=\\\"kwargs\\\"\\u003E\";\n;pug_debug_line = 48;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"Keyword arguments:\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 49;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-monospace-viewer\\\" property=\\\"kwargs\\\"\\u003E\";\n;pug_debug_line = 49;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobDetailsWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = JSON.stringify(job.get('kwargs'), null, ' ')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"DATE_SECOND\" in locals_for_with?locals_for_with.DATE_SECOND:typeof DATE_SECOND!==\"undefined\"?DATE_SECOND:undefined,\"JSON\" in locals_for_with?locals_for_with.JSON:typeof JSON!==\"undefined\"?JSON:undefined,\"JobStatus\" in locals_for_with?locals_for_with.JobStatus:typeof JobStatus!==\"undefined\"?JobStatus:undefined,\"_\" in locals_for_with?locals_for_with._:typeof _!==\"undefined\"?_:undefined,\"color\" in locals_for_with?locals_for_with.color:typeof color!==\"undefined\"?color:undefined,\"formatDate\" in locals_for_with?locals_for_with.formatDate:typeof formatDate!==\"undefined\"?formatDate:undefined,\"job\" in locals_for_with?locals_for_with.job:typeof job!==\"undefined\"?job:undefined,\"statusText\" in locals_for_with?locals_for_with.statusText:typeof statusText!==\"undefined\"?statusText:undefined,\"textColor\" in locals_for_with?locals_for_with.textColor:typeof textColor!==\"undefined\"?textColor:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/jobDetailsWidget.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\":\"table.g-jobs-list-table\\n if showHeader\\n thead\\n tr\\n if columns & columnEnum.COLUMN_ACTION_CHECKBOX\\n th\\n .dropdown.check-menu-dropdown\\n button.btn.btn-sm.btn-default.dropdown-toggle.g-job-check-menu-button(data-toggle=\\\"dropdown\\\", disabled=!anyJobChecked)\\n input.g-job-checkbox-all(type=\\\"checkbox\\\", checked=allJobChecked)\\n i.icon-down-dir\\n ul.dropdown-menu\\n li\\n a.g-jobs-list-cancel\\n i.icon-cancel\\n | Cancel\\n if columns & columnEnum.COLUMN_STATUS_ICON\\n th\\n if columns & columnEnum.COLUMN_TITLE\\n th Title\\n if columns & columnEnum.COLUMN_UPDATED\\n th Last update\\n if columns & columnEnum.COLUMN_TYPE\\n th Type\\n if columns & columnEnum.COLUMN_STATUS\\n th Status\\n\\n tbody\\n each job in jobs\\n tr(g-job-id=job.id, class=jobHighlightStates[job.id]?\\\"g-highlight\\\":\\\"\\\")\\n if columns & columnEnum.COLUMN_ACTION_CHECKBOX\\n td\\n input.g-job-checkbox(type=\\\"checkbox\\\", checked=jobCheckedStates[job.id])\\n if columns & columnEnum.COLUMN_STATUS_ICON\\n td(style='color: ' + JobStatus.color(job.get('status')))\\n i(class=JobStatus.icon(job.get('status')))\\n if columns & columnEnum.COLUMN_TITLE\\n if triggerJobClick\\n td\\n a.g-job-trigger-link(cid=job.cid)= job.get('title')\\n else if linkToJob\\n td\\n a(href=`#job\\u002F${job.id}`)= job.get('title')\\n else\\n td= job.get('title')\\n if columns & columnEnum.COLUMN_UPDATED\\n td.g-job-updated-cell= formatDate(job.get('updated'), DATE_SECOND)\\n if columns & columnEnum.COLUMN_TYPE\\n td= job.get('type')\\n if columns & columnEnum.COLUMN_STATUS\\n td.g-job-status-cell= JobStatus.text(job.get('status'))\\n\"};\n;var locals_for_with = (locals || {});(function (DATE_SECOND, JobStatus, allJobChecked, anyJobChecked, columnEnum, columns, formatDate, jobCheckedStates, jobHighlightStates, jobs, linkToJob, showHeader, triggerJobClick) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctable class=\\\"g-jobs-list-table\\\"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (showHeader) {\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cthead\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctr\\u003E\";\n;pug_debug_line = 5;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_ACTION_CHECKBOX) {\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cth\\u003E\";\n;pug_debug_line = 7;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"dropdown check-menu-dropdown\\\"\\u003E\";\n;pug_debug_line = 8;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cbutton\" + (\" class=\\\"btn btn-sm btn-default dropdown-toggle g-job-check-menu-button\\\"\"+\" data-toggle=\\\"dropdown\\\"\"+pug.attr(\"disabled\", !anyJobChecked, true, true)) + \"\\u003E\";\n;pug_debug_line = 9;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"g-job-checkbox-all\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"checked\", allJobChecked, true, true)) + \"\\u003E\";\n;pug_debug_line = 10;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-down-dir\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\";\n;pug_debug_line = 11;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cul class=\\\"dropdown-menu\\\"\\u003E\";\n;pug_debug_line = 12;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cli\\u003E\";\n;pug_debug_line = 13;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ca class=\\\"g-jobs-list-cancel\\\"\\u003E\";\n;pug_debug_line = 14;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-cancel\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 15;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"Cancel\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n}\n;pug_debug_line = 16;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_STATUS_ICON) {\n;pug_debug_line = 17;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cth\\u003E\\u003C\\u002Fth\\u003E\";\n}\n;pug_debug_line = 18;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_TITLE) {\n;pug_debug_line = 19;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cth\\u003E\";\n;pug_debug_line = 19;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"Title\\u003C\\u002Fth\\u003E\";\n}\n;pug_debug_line = 20;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_UPDATED) {\n;pug_debug_line = 21;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cth\\u003E\";\n;pug_debug_line = 21;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"Last update\\u003C\\u002Fth\\u003E\";\n}\n;pug_debug_line = 22;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_TYPE) {\n;pug_debug_line = 23;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cth\\u003E\";\n;pug_debug_line = 23;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"Type\\u003C\\u002Fth\\u003E\";\n}\n;pug_debug_line = 24;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_STATUS) {\n;pug_debug_line = 25;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cth\\u003E\";\n;pug_debug_line = 25;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"Status\\u003C\\u002Fth\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\";\n}\n;pug_debug_line = 27;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctbody\\u003E\";\n;pug_debug_line = 28;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\n// iterate jobs\n;(function(){\n var $$obj = jobs;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var job = $$obj[pug_index0];\n;pug_debug_line = 29;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctr\" + (pug.attr(\"class\", pug.classes([jobHighlightStates[job.id]?\"g-highlight\":\"\"], [true]), false, true)+pug.attr(\"g-job-id\", job.id, true, true)) + \"\\u003E\";\n;pug_debug_line = 30;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_ACTION_CHECKBOX) {\n;pug_debug_line = 31;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 32;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"g-job-checkbox\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"checked\", jobCheckedStates[job.id], true, true)) + \"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 33;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_STATUS_ICON) {\n;pug_debug_line = 34;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\" + (pug.attr(\"style\", pug.style('color: ' + JobStatus.color(job.get('status'))), true, true)) + \"\\u003E\";\n;pug_debug_line = 35;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ci\" + (pug.attr(\"class\", pug.classes([JobStatus.icon(job.get('status'))], [true]), false, true)) + \"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 36;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_TITLE) {\n;pug_debug_line = 37;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (triggerJobClick) {\n;pug_debug_line = 38;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 39;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"g-job-trigger-link\\\"\"+pug.attr(\"cid\", job.cid, true, true)) + \"\\u003E\";\n;pug_debug_line = 39;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nelse\nif (linkToJob) {\n;pug_debug_line = 41;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 42;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"href\", `#job/${job.id}`, true, true)) + \"\\u003E\";\n;pug_debug_line = 42;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nelse {\n;pug_debug_line = 44;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 44;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\n}\n;pug_debug_line = 45;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_UPDATED) {\n;pug_debug_line = 46;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd class=\\\"g-job-updated-cell\\\"\\u003E\";\n;pug_debug_line = 46;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = formatDate(job.get('updated'), DATE_SECOND)) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 47;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_TYPE) {\n;pug_debug_line = 48;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 48;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('type')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 49;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_STATUS) {\n;pug_debug_line = 50;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd class=\\\"g-job-status-cell\\\"\\u003E\";\n;pug_debug_line = 50;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = JobStatus.text(job.get('status'))) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var job = $$obj[pug_index0];\n;pug_debug_line = 29;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctr\" + (pug.attr(\"class\", pug.classes([jobHighlightStates[job.id]?\"g-highlight\":\"\"], [true]), false, true)+pug.attr(\"g-job-id\", job.id, true, true)) + \"\\u003E\";\n;pug_debug_line = 30;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_ACTION_CHECKBOX) {\n;pug_debug_line = 31;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 32;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"g-job-checkbox\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"checked\", jobCheckedStates[job.id], true, true)) + \"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 33;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_STATUS_ICON) {\n;pug_debug_line = 34;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\" + (pug.attr(\"style\", pug.style('color: ' + JobStatus.color(job.get('status'))), true, true)) + \"\\u003E\";\n;pug_debug_line = 35;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ci\" + (pug.attr(\"class\", pug.classes([JobStatus.icon(job.get('status'))], [true]), false, true)) + \"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 36;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_TITLE) {\n;pug_debug_line = 37;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (triggerJobClick) {\n;pug_debug_line = 38;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 39;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"g-job-trigger-link\\\"\"+pug.attr(\"cid\", job.cid, true, true)) + \"\\u003E\";\n;pug_debug_line = 39;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nelse\nif (linkToJob) {\n;pug_debug_line = 41;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 42;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"href\", `#job/${job.id}`, true, true)) + \"\\u003E\";\n;pug_debug_line = 42;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nelse {\n;pug_debug_line = 44;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 44;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\n}\n;pug_debug_line = 45;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_UPDATED) {\n;pug_debug_line = 46;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd class=\\\"g-job-updated-cell\\\"\\u003E\";\n;pug_debug_line = 46;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = formatDate(job.get('updated'), DATE_SECOND)) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 47;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_TYPE) {\n;pug_debug_line = 48;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd\\u003E\";\n;pug_debug_line = 48;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = job.get('type')) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\n;pug_debug_line = 49;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\nif (columns & columnEnum.COLUMN_STATUS) {\n;pug_debug_line = 50;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + \"\\u003Ctd class=\\\"g-job-status-cell\\\"\\u003E\";\n;pug_debug_line = 50;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobList.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = JobStatus.text(job.get('status'))) ? \"\" : pug_interp)) + \"\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\";}.call(this,\"DATE_SECOND\" in locals_for_with?locals_for_with.DATE_SECOND:typeof DATE_SECOND!==\"undefined\"?DATE_SECOND:undefined,\"JobStatus\" in locals_for_with?locals_for_with.JobStatus:typeof JobStatus!==\"undefined\"?JobStatus:undefined,\"allJobChecked\" in locals_for_with?locals_for_with.allJobChecked:typeof allJobChecked!==\"undefined\"?allJobChecked:undefined,\"anyJobChecked\" in locals_for_with?locals_for_with.anyJobChecked:typeof anyJobChecked!==\"undefined\"?anyJobChecked:undefined,\"columnEnum\" in locals_for_with?locals_for_with.columnEnum:typeof columnEnum!==\"undefined\"?columnEnum:undefined,\"columns\" in locals_for_with?locals_for_with.columns:typeof columns!==\"undefined\"?columns:undefined,\"formatDate\" in locals_for_with?locals_for_with.formatDate:typeof formatDate!==\"undefined\"?formatDate:undefined,\"jobCheckedStates\" in locals_for_with?locals_for_with.jobCheckedStates:typeof jobCheckedStates!==\"undefined\"?jobCheckedStates:undefined,\"jobHighlightStates\" in locals_for_with?locals_for_with.jobHighlightStates:typeof jobHighlightStates!==\"undefined\"?jobHighlightStates:undefined,\"jobs\" in locals_for_with?locals_for_with.jobs:typeof jobs!==\"undefined\"?jobs:undefined,\"linkToJob\" in locals_for_with?locals_for_with.linkToJob:typeof linkToJob!==\"undefined\"?linkToJob:undefined,\"showHeader\" in locals_for_with?locals_for_with.showHeader:typeof showHeader!==\"undefined\"?showHeader:undefined,\"triggerJobClick\" in locals_for_with?locals_for_with.triggerJobClick:typeof triggerJobClick!==\"undefined\"?triggerJobClick:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/jobList.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\":\"if showFilters\\n .g-page-size-container\\n span Page size\\n select.g-page-size\\n each val in pageSizes\\n option(selected=val===pageSize)= val\\n\\nif showPageSizeSelector\\n .g-job-filter-container.clearfix\\n .type\\n .status\\n\\nbutton.g-job-worker-task-info.btn.btn-default(title=\\\"Task information\\\")\\n | Task information\\n\\nif showGraphs\\n ul.g-jobs.nav.nav-tabs\\n li(class=(currentView==='list' ? 'active' : ''))\\n a(data-toggle=\\\"tab\\\", name=\\\"list\\\")\\n i.icon-th-list\\n | List\\n li(class=(currentView==='timing-history' ? 'active' : ''))\\n a(data-toggle=\\\"tab\\\", name=\\\"timing-history\\\")\\n i.icon-chart-bar\\n | Timing history\\n li(class=(currentView==='time' ? 'active' : ''))\\n a(data-toggle=\\\"tab\\\", name=\\\"time\\\")\\n i.icon-chart-line\\n | Time series\\n\\n.g-main-content\\n\\n.g-job-pagination\\n\\n.g-no-job-record No records found\\n\"};\n;var locals_for_with = (locals || {});(function (currentView, pageSize, pageSizes, showFilters, showGraphs, showPageSizeSelector) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\nif (showFilters) {\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-page-size-container\\\"\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cspan\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"Page size\\u003C\\u002Fspan\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cselect class=\\\"g-page-size\\\"\\u003E\";\n;pug_debug_line = 5;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\n// iterate pageSizes\n;(function(){\n var $$obj = pageSizes;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var val = $$obj[pug_index0];\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"selected\", val===pageSize, true, true)) + \"\\u003E\";\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var val = $$obj[pug_index0];\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"selected\", val===pageSize, true, true)) + \"\\u003E\";\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 8;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\nif (showPageSizeSelector) {\n;pug_debug_line = 9;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-filter-container clearfix\\\"\\u003E\";\n;pug_debug_line = 10;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"type\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 11;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"status\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n;pug_debug_line = 13;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cbutton class=\\\"g-job-worker-task-info btn btn-default\\\" title=\\\"Task information\\\"\\u003E\";\n;pug_debug_line = 14;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"Task information\\u003C\\u002Fbutton\\u003E\";\n;pug_debug_line = 16;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\nif (showGraphs) {\n;pug_debug_line = 17;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cul class=\\\"g-jobs nav nav-tabs\\\"\\u003E\";\n;pug_debug_line = 18;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"class\", pug.classes([(currentView==='list' ? 'active' : '')], [true]), false, true)) + \"\\u003E\";\n;pug_debug_line = 19;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Ca data-toggle=\\\"tab\\\" name=\\\"list\\\"\\u003E\";\n;pug_debug_line = 20;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-th-list\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 21;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \" List\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n;pug_debug_line = 22;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"class\", pug.classes([(currentView==='timing-history' ? 'active' : '')], [true]), false, true)) + \"\\u003E\";\n;pug_debug_line = 23;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Ca data-toggle=\\\"tab\\\" name=\\\"timing-history\\\"\\u003E\";\n;pug_debug_line = 24;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-chart-bar\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 25;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \" Timing history\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n;pug_debug_line = 26;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"class\", pug.classes([(currentView==='time' ? 'active' : '')], [true]), false, true)) + \"\\u003E\";\n;pug_debug_line = 27;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Ca data-toggle=\\\"tab\\\" name=\\\"time\\\"\\u003E\";\n;pug_debug_line = 28;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Ci class=\\\"icon-chart-line\\\"\\u003E\\u003C\\u002Fi\\u003E\";\n;pug_debug_line = 29;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \" Time series\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n}\n;pug_debug_line = 31;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-main-content\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 33;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-pagination\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 35;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-no-job-record\\\"\\u003E\";\n;pug_debug_line = 35;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobListWidget.pug\";\npug_html = pug_html + \"No records found\\u003C\\u002Fdiv\\u003E\";}.call(this,\"currentView\" in locals_for_with?locals_for_with.currentView:typeof currentView!==\"undefined\"?currentView:undefined,\"pageSize\" in locals_for_with?locals_for_with.pageSize:typeof pageSize!==\"undefined\"?pageSize:undefined,\"pageSizes\" in locals_for_with?locals_for_with.pageSizes:typeof pageSizes!==\"undefined\"?pageSizes:undefined,\"showFilters\" in locals_for_with?locals_for_with.showFilters:typeof showFilters!==\"undefined\"?showFilters:undefined,\"showGraphs\" in locals_for_with?locals_for_with.showGraphs:typeof showGraphs!==\"undefined\"?showGraphs:undefined,\"showPageSizeSelector\" in locals_for_with?locals_for_with.showPageSizeSelector:typeof showPageSizeSelector!==\"undefined\"?showPageSizeSelector:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/jobListWidget.pug","var pug = require(\"!../../../pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;var pug_debug_filename, pug_debug_line;try {var pug_debug_sources = {\"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\":\".g-job-filter-container.clearfix\\n .timing\\n .checkbox\\n label\\n input.linear-scale(type=\\\"checkbox\\\", checked=yScale==='linear')\\n | Use linear scale\\n\\n.g-jobs-graph\\n\"};\n;var locals_for_with = (locals || {});(function (yScale) {;pug_debug_line = 1;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-job-filter-container clearfix\\\"\\u003E\";\n;pug_debug_line = 2;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"timing\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 3;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"checkbox\\\"\\u003E\";\n;pug_debug_line = 4;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"\\u003Clabel\\u003E\";\n;pug_debug_line = 5;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"linear-scale\\\"\"+\" type=\\\"checkbox\\\"\"+pug.attr(\"checked\", yScale==='linear', true, true)) + \"\\u003E\";\n;pug_debug_line = 6;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"Use linear scale\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n;pug_debug_line = 8;pug_debug_filename = \"\\u002Fopt\\u002Fgirder\\u002Fgirder\\u002Fweb_client\\u002Fnode_modules\\u002F@girder\\u002Fjobs\\u002Ftemplates\\u002FjobsGraphWidget.pug\";\npug_html = pug_html + \"\\u003Cdiv class=\\\"g-jobs-graph\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"yScale\" in locals_for_with?locals_for_with.yScale:typeof yScale!==\"undefined\"?yScale:undefined));} catch (err) {pug.rethrow(err, pug_debug_filename, pug_debug_line, pug_debug_sources[pug_debug_filename]);};return pug_html;};\nmodule.exports = template;\n\n\n// WEBPACK FOOTER //\n// ./~/@girder/jobs/templates/jobsGraphWidget.pug","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@girder/jobs/stylesheets/jobDetailsWidget.styl\n// module id = 39\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@girder/jobs/stylesheets/jobListWidget.styl\n// module id = 40\n// module chunks = 0","module.exports = (__webpack_require__(0))(126);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/views/body/AdminView.js from dll-reference girder_lib\n// module id = 41\n// module chunks = 0","module.exports = (__webpack_require__(0))(143);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/views/layout/HeaderUserView.js from dll-reference girder_lib\n// module id = 42\n// module chunks = 0","module.exports = (__webpack_require__(0))(24);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./node_modules/moment/moment.js from dll-reference girder_lib\n// module id = 43\n// module chunks = 0","module.exports = (__webpack_require__(0))(256);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/views/widgets/TimelineWidget.js from dll-reference girder_lib\n// module id = 44\n// module chunks = 0","module.exports = (__webpack_require__(0))(27);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/collections/Collection.js from dll-reference girder_lib\n// module id = 45\n// module chunks = 0","module.exports = (__webpack_require__(0))(387);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./node_modules/node-libs-browser/node_modules/buffer/index.js from dll-reference girder_lib\n// module id = 46\n// module chunks = 0","module.exports = (__webpack_require__(0))(41);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/models/AccessControlledModel.js from dll-reference girder_lib\n// module id = 47\n// module chunks = 0","module.exports = (__webpack_require__(0))(46);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/views/widgets/PaginateWidget.js from dll-reference girder_lib\n// module id = 48\n// module chunks = 0","module.exports = (__webpack_require__(0))(8);\n\n\n//////////////////\n// WEBPACK FOOTER\n// delegated ./src/constants.js from dll-reference girder_lib\n// module id = 49\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// canvas (ignored)\n// module id = 51\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// canvas-prebuilt (ignored)\n// module id = 52\n// module chunks = 0","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// fs (ignored)\n// module id = 53\n// module chunks = 0"],"sourceRoot":""}