You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/09/10 02:49:53 UTC

[echarts-examples] 01/15: compile ts to js files

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/echarts-examples.git

commit 424edd89bb70f7bc4ff887498c478ed04adecad5
Author: pissang <bm...@gmail.com>
AuthorDate: Mon Sep 6 12:35:21 2021 +0800

    compile ts to js files
---
 README.md                                          |    8 +-
 _config.yml                                        |    2 -
 package-lock.json                                  |  196 ++-
 package.json                                       |    6 +-
 public/data/area-basic.js                          |   22 -
 public/data/area-pieces.js                         |   66 -
 public/data/area-rainfall.js                       |  188 ---
 public/data/area-simple.js                         |   78 --
 public/data/area-stack-gradient.js                 |  174 ---
 public/data/area-stack.js                          |  103 --
 public/data/area-time-axis.js                      |   67 -
 public/data/bar-animation-delay.js                 |   70 --
 public/data/bar-background.js                      |   24 -
 public/data/bar-brush.js                           |  114 --
 public/data/bar-data-color.js                      |   25 -
 public/data/bar-drilldown.js                       |   99 --
 public/data/bar-gradient.js                        |   96 --
 public/data/bar-histogram.js                       |  126 --
 public/data/bar-label-rotation.js                  |  166 ---
 public/data/bar-large.js                           |   93 --
 public/data/bar-negative.js                        |   77 --
 public/data/bar-negative2.js                       |   66 -
 public/data/bar-polar-label-radial.js              |   30 -
 public/data/bar-polar-label-tangential.js          |   30 -
 public/data/bar-polar-real-estate.js               |  101 --
 public/data/bar-polar-stack-radial.js              |   49 -
 public/data/bar-polar-stack.js                     |   50 -
 public/data/bar-race-country.js                    |  142 ---
 public/data/bar-race.js                            |   65 -
 public/data/bar-rich-text.js                       |  151 ---
 public/data/bar-simple.js                          |   20 -
 public/data/bar-stack.js                           |  125 --
 public/data/bar-tick-align.js                      |   43 -
 public/data/bar-waterfall.js                       |   66 -
 public/data/bar-waterfall2.js                      |   91 --
 public/data/bar-y-category-stack.js                |   92 --
 public/data/bar-y-category.js                      |   48 -
 public/data/bar1.js                                |   74 --
 public/data/boxplot-light-velocity.js              |   84 --
 public/data/boxplot-light-velocity2.js             |   87 --
 public/data/boxplot-multi.js                       |  106 --
 public/data/bubble-gradient.js                     |  109 --
 public/data/calendar-charts.js                     |  193 ---
 public/data/calendar-effectscatter.js              |  167 ---
 public/data/calendar-graph.js                      |  126 --
 public/data/calendar-heatmap.js                    |   54 -
 public/data/calendar-horizontal.js                 |   72 --
 public/data/calendar-lunar.js                      |  468 -------
 public/data/calendar-pie.js                        |  116 --
 public/data/calendar-simple.js                     |   37 -
 public/data/calendar-vertical.js                   |   78 --
 public/data/candlestick-brush.js                   |  264 ----
 public/data/candlestick-large.js                   |  208 ----
 public/data/candlestick-sh-2015.js                 |  134 --
 public/data/candlestick-sh.js                      |  324 -----
 public/data/candlestick-simple.js                  |   22 -
 public/data/candlestick-touch.js                   |  245 ----
 public/data/circle-packing-with-d3.js              |  219 ----
 public/data/confidence-band.js                     |  113 --
 public/data/covid-america.js                       |  404 ------
 public/data/custom-bar-trend.js                    |  115 --
 public/data/custom-calendar-icon.js                |  119 --
 public/data/data-transform-filter.js               |   81 --
 public/data/data-transform-multiple-pie.js         |   80 --
 public/data/data-transform-sort-bar.js             |   38 -
 public/data/dataset-default.js                     |   50 -
 public/data/dataset-encode0.js                     |   49 -
 public/data/dataset-encode1.js                     |   98 --
 public/data/dataset-link.js                        |   73 --
 public/data/dataset-series-layout-by.js            |   42 -
 public/data/dataset-simple0.js                     |   29 -
 public/data/dataset-simple1.js                     |   29 -
 public/data/dynamic-data.js                        |  132 --
 public/data/dynamic-data2.js                       |   77 --
 public/data/effectScatter-bmap.js                  |  575 ---------
 public/data/effectScatter-map.js                   |  503 --------
 public/data/funnel-align.js                        |  114 --
 public/data/funnel-customize.js                    |   88 --
 public/data/funnel-mutiple.js                      |  103 --
 public/data/funnel.js                              |   72 --
 public/data/gauge-barometer.js                     |  122 --
 public/data/gauge-car.js                           |  575 ---------
 public/data/gauge-clock.js                         |  230 ----
 public/data/gauge-grade.js                         |   88 --
 public/data/gauge-multi-title.js                   |   85 --
 public/data/gauge-progress.js                      |   93 --
 public/data/gauge-ring.js                          |  102 --
 public/data/gauge-simple.js                        |   29 -
 public/data/gauge-speed.js                         |   55 -
 public/data/gauge-stage.js                         |   61 -
 public/data/gauge-temperature.js                   |  125 --
 public/data/gauge.js                               |   23 -
 public/data/geo-beef-cuts.js                       |   74 --
 public/data/geo-seatmap-flight.js                  |   93 --
 public/data/geo-svg-lines.js                       |   84 --
 public/data/geo-svg-map.js                         |  202 ---
 public/data/geo-svg-scatter-simple.js              |   54 -
 public/data/geo-svg-traffic.js                     |  167 ---
 public/data/graph-circular-layout.js               |   59 -
 public/data/graph-force-dynamic.js                 |   57 -
 public/data/graph-force.js                         |   48 -
 public/data/graph-force2.js                        |   64 -
 public/data/graph-grid.js                          |   50 -
 public/data/graph-label-overlap.js                 |   49 -
 public/data/graph-life-expectancy.js               |  103 --
 public/data/graph-npm.js                           |   54 -
 public/data/graph-simple.js                        |   87 --
 public/data/graph-webkit-dep.js                    |   43 -
 public/data/graph.js                               |   61 -
 public/data/grid-multiple.js                       |  174 ---
 public/data/heatmap-cartesian.js                   |   65 -
 public/data/line-aqi.js                            |   99 --
 public/data/line-draggable.js                      |  139 ---
 public/data/line-easing.js                         |  233 ----
 public/data/line-function.js                       |   72 --
 public/data/line-gradient.js                       |   74 --
 public/data/line-graphic.js                        |  125 --
 public/data/line-in-cartesian-coordinate-system.js |   15 -
 public/data/line-log.js                            |   57 -
 public/data/line-marker.js                         |   88 --
 public/data/line-markline.js                       |   78 --
 public/data/line-pen.js                            |   73 --
 public/data/line-polar.js                          |   42 -
 public/data/line-polar2.js                         |   47 -
 public/data/line-race.js                           |   90 --
 public/data/line-sections.js                       |   86 --
 public/data/line-simple.js                         |   20 -
 public/data/line-smooth.js                         |   21 -
 public/data/line-stack.js                          |   69 --
 public/data/line-step.js                           |   56 -
 public/data/line-style.js                          |   32 -
 public/data/line-tooltip-touch.js                  |  151 ---
 public/data/line-y-category.js                     |   53 -
 public/data/lines-airline.js                       |   64 -
 public/data/lines-bmap-bus.js                      |  148 ---
 public/data/lines-bmap-effect.js                   |  195 ---
 public/data/lines-bmap.js                          |  133 --
 public/data/lines-ny.js                            |   91 --
 public/data/map-HK.js                              |   98 --
 public/data/map-bar-morph.js                       |  147 ---
 public/data/map-usa.js                             |  137 ---
 public/data/mix-line-bar.js                        |   78 --
 public/data/mix-zoom-on-value.js                   |  101 --
 public/data/multiple-x-axis.js                     |   96 --
 public/data/multiple-y-axis.js                     |  111 --
 public/data/parallel-aqi.js                        |  224 ----
 public/data/parallel-nutrients.js                  |  186 ---
 public/data/parallel-simple.js                     |   31 -
 public/data/pictorialBar-bar-transition.js         |  144 ---
 public/data/pictorialBar-body-fill.js              |  146 ---
 public/data/pictorialBar-dotted.js                 |  111 --
 public/data/pictorialBar-forest.js                 |  111 --
 public/data/pictorialBar-hill.js                   |  113 --
 public/data/pictorialBar-spirit.js                 |  114 --
 public/data/pictorialBar-vehicle.js                |  113 --
 public/data/pictorialBar-velocity.js               |  100 --
 public/data/pie-alignTo.js                         |   94 --
 public/data/pie-borderRadius.js                    |   50 -
 public/data/pie-custom.js                          |   70 --
 public/data/pie-doughnut.js                        |   45 -
 public/data/pie-labelLine-adjust.js                |   95 --
 public/data/pie-legend.js                          |   81 --
 public/data/pie-nest.js                            |   87 --
 public/data/pie-parliament-transition.js           |  141 ---
 public/data/pie-pattern.js                         |   63 -
 public/data/pie-rich-text.js                       |  135 ---
 public/data/pie-roseType-simple.js                 |   44 -
 public/data/pie-roseType.js                        |   82 --
 public/data/pie-simple.js                          |   42 -
 public/data/polar-roundCap.js                      |   49 -
 public/data/radar-aqi.js                           |  222 ----
 public/data/radar-custom.js                        |  138 ---
 public/data/radar-multiple.js                      |   97 --
 public/data/radar.js                               |   40 -
 public/data/radar2.js                              |   73 --
 public/data/sankey-energy.js                       |   35 -
 public/data/sankey-itemstyle.js                    | 1281 --------------------
 public/data/sankey-levels.js                       |   71 --
 public/data/sankey-nodeAlign-left.js               |   37 -
 public/data/sankey-nodeAlign-right.js              |   38 -
 public/data/sankey-simple.js                       |   54 -
 public/data/sankey-vertical.js                     |   47 -
 public/data/scatter-aggregate-bar.js               |  187 ---
 public/data/scatter-anscombe-quartet.js            |  145 ---
 public/data/scatter-aqi-color.js                   |  261 ----
 public/data/scatter-clustering.js                  |  131 --
 public/data/scatter-effect.js                      |   78 --
 public/data/scatter-exponential-regression.js      |   84 --
 public/data/scatter-label-align-right.js           |   57 -
 public/data/scatter-label-align-top.js             |   51 -
 public/data/scatter-large.js                       |   74 --
 public/data/scatter-linear-regression.js           |  267 ----
 public/data/scatter-logarithmic-regression.js      |  133 --
 public/data/scatter-map-brush.js                   |  652 ----------
 public/data/scatter-matrix.js                      |  300 -----
 public/data/scatter-nebula.js                      |   76 --
 public/data/scatter-nutrients-matrix.js            |  422 -------
 public/data/scatter-nutrients.js                   |  177 ---
 public/data/scatter-painter-choice.js              |   61 -
 public/data/scatter-polar-punchCard.js             |   65 -
 public/data/scatter-polynomial-regression.js       |   84 --
 public/data/scatter-punchCard.js                   |   70 --
 public/data/scatter-simple.js                      |   39 -
 public/data/scatter-single-axis.js                 |   56 -
 public/data/scatter-stream-visual.js               |   60 -
 public/data/scatter-symbol-morph.js                |  133 --
 public/data/scatter-weibo.js                       |  103 --
 public/data/scatter-weight.js                      |  264 ----
 public/data/sunburst-borderRadius.js               |   65 -
 public/data/sunburst-drink.js                      |  723 -----------
 public/data/sunburst-label-rotate.js               |   95 --
 public/data/sunburst-monochrome.js                 |  175 ---
 public/data/sunburst-simple.js                     |   64 -
 public/data/sunburst-visualMap.js                  |   94 --
 public/data/themeRiver-basic.js                    |  100 --
 public/data/themeRiver-lastfm.js                   |   80 --
 public/data/tree-basic.js                          |   58 -
 public/data/tree-legend.js                         |  260 ----
 public/data/tree-orient-bottom-top.js              |   59 -
 public/data/tree-orient-right-left.js              |   64 -
 public/data/tree-polyline.js                       |  179 ---
 public/data/tree-radial.js                         |   41 -
 public/data/tree-vertical.js                       |   54 -
 public/data/treemap-disk.js                        |   87 --
 public/data/treemap-drill-down.js                  |   85 --
 public/data/treemap-obama.js                       |  226 ----
 public/data/treemap-show-parent.js                 |  103 --
 public/data/treemap-simple.js                      |   33 -
 public/data/treemap-sunburst-transition.js         |   56 -
 public/data/treemap-visual.js                      |  144 ---
 public/data/watermark.js                           |  218 ----
 public/data/wind-barb.js                           |  272 -----
 public/examples/ts/README.md                       |    3 +
 .../ts}/archive/custom-aggregate-scatter-bar.js    |    0
 .../archive/custom-aggregate-scatter-cluster.js    |    0
 .../ts}/archive/custom-aggregate-scatter-pie.js    |    0
 .../ts}/archive/custom-combine-separate-morph.js   |    0
 .../ts}/archive/custom-one-to-one-morph.js         |    0
 .../ts}/archive/custom-story-transition.js         |    0
 .../ts}/custom-cartesian-polygon.js                |    0
 public/{data => examples/ts}/custom-error-bar.js   |    0
 .../{data => examples/ts}/custom-error-scatter.js  |    0
 .../{data => examples/ts}/custom-gantt-flight.js   |    0
 public/{data => examples/ts}/custom-gauge.js       |    0
 public/{data => examples/ts}/custom-hexbin.js      |    0
 public/{data => examples/ts}/custom-ohlc.js        |    0
 .../{data => examples/ts}/custom-polar-heatmap.js  |    0
 public/{data => examples/ts}/custom-profile.js     |    0
 public/{data => examples/ts}/custom-profit.js      |    0
 public/{data => examples/ts}/custom-spiral-race.js |    0
 public/{data => examples/ts}/custom-wind.js        |    0
 public/{data => examples/ts}/cycle-plot.js         |    0
 .../ts}/data-transform-aggregate.js                |    0
 .../ts}/doc-example/aria-decal-newspaper.js        |    0
 .../ts}/doc-example/aria-decal-simple.js           |    0
 .../ts}/doc-example/aria-decal.js                  |    0
 .../{data => examples/ts}/doc-example/aria-pie.js  |    0
 .../ts}/doc-example/axisPointer-handle-image.js    |    0
 .../ts}/doc-example/bar-dataZoom-filterMode.js     |    0
 .../{data => examples/ts}/doc-example/bar-large.js |    0
 .../ts}/doc-example/bar-media-timeline.js          |    0
 .../ts}/doc-example/barGrid-barGap.js              |    0
 .../ts}/doc-example/candlestick-axisPointer.js     |    0
 .../ts}/doc-example/canvas-vs-svg-en.js            |    0
 .../ts}/doc-example/canvas-vs-svg.js               |    0
 .../ts}/doc-example/custom-transition-simple.js    |    0
 .../data-transform-multiple-sort-bar.js            |    0
 .../ts}/doc-example/dataset-encode-simple0.js      |    2 +-
 .../ts}/doc-example/geo-svg-label-basic.js         |    0
 .../ts}/doc-example/geo-svg-layout-basic.js        |    0
 .../ts}/doc-example/geo-svg-named-basic.js         |    0
 .../ts}/doc-example/getting-started.js             |    0
 .../ts}/doc-example/graphic-bounding.js            |    0
 .../ts}/doc-example/label-position.js              |    0
 .../ts}/doc-example/line-stack-tiled.js            |    0
 .../ts}/doc-example/map-example.js                 |    0
 .../doc-example/map-visualMap-continuous-text.js   |    0
 .../ts}/doc-example/map-visualMap-continuous.js    |    0
 .../ts}/doc-example/map-visualMap-pieces.js        |    0
 .../doc-example/map-visualMap-piecewise-text.js    |    0
 .../ts}/doc-example/mix-timeline-all.js            |    0
 .../ts}/doc-example/parallel-all.js                |    0
 .../ts}/doc-example/pictorialBar-clip.js           |    0
 .../ts}/doc-example/pictorialBar-graphicType.js    |    0
 .../ts}/doc-example/pictorialBar-patternSize.js    |    0
 .../ts}/doc-example/pictorialBar-position.js       |    0
 .../ts}/doc-example/pictorialBar-repeat.js         |    0
 .../doc-example/pictorialBar-repeatDirection.js    |    0
 .../ts}/doc-example/pictorialBar-repeatLayout.js   |    0
 .../pictorialBar-symbolBoundingDataArray.js        |    0
 .../ts}/doc-example/pictorialBar-symbolSize.js     |    0
 .../ts}/doc-example/pie-highlight.js               |    0
 .../ts}/doc-example/pie-label-bleedMargin.js       |    0
 .../doc-example/pie-label-distanceToLabelLine.js   |    0
 .../ts}/doc-example/pie-label-margin.js            |    0
 .../{data => examples/ts}/doc-example/pie-media.js |    0
 .../ts}/doc-example/polar-anticlockwise.js         |    0
 .../ts}/doc-example/polar-start-angle.js           |    0
 public/{data => examples/ts}/doc-example/radar.js  |    0
 .../ts}/doc-example/scatter-dataZoom-all.js        |    0
 .../ts}/doc-example/scatter-tutorial-dataZoom-1.js |    0
 .../ts}/doc-example/scatter-tutorial-dataZoom-2.js |    0
 .../ts}/doc-example/scatter-tutorial-dataZoom-3.js |    0
 .../doc-example/scatter-visualMap-categories.js    |    0
 .../ts}/doc-example/scatter-visualMap-piecewise.js |    0
 .../ts}/doc-example/sunburst-color.js              |    2 +-
 .../ts}/doc-example/sunburst-highlight-ancestor.js |    0
 .../doc-example/sunburst-highlight-descendant.js   |    0
 .../ts}/doc-example/sunburst-label-align.js        |    0
 .../ts}/doc-example/sunburst-simple.js             |    2 +-
 .../ts}/doc-example/text-block-fragment.js         |    0
 .../ts}/doc-example/text-fregment-align.js         |    0
 .../ts}/doc-example/text-options.js                |    0
 .../ts}/doc-example/timeline-dynamic-series.js     |    2 +-
 .../ts}/doc-example/title-block.js                 |    0
 .../ts}/doc-example/treemap-borderColor.js         |    0
 .../ts}/doc-example/tutorial-async.js              |    0
 .../ts}/doc-example/tutorial-dynamic-data.js       |    0
 .../ts}/doc-example/tutorial-loading.js            |    0
 .../ts}/doc-example/tutorial-styling-step0.js      |    0
 .../ts}/doc-example/tutorial-styling-step1.js      |    0
 .../ts}/doc-example/tutorial-styling-step2.js      |    0
 .../ts}/doc-example/tutorial-styling-step3.js      |    0
 .../ts}/doc-example/tutorial-styling-step4.js      |    0
 .../ts}/doc-example/tutorial-styling-step5.js      |    0
 .../ts}/doc-example/value-animation-simple.js      |    0
 public/{data => examples/ts}/geo-lines.js          |    0
 public/{data => examples/ts}/geo-map-scatter.js    |    0
 public/{data => examples/ts}/geo-organ.js          |    0
 public/{data => examples/ts}/heatmap-bmap.js       |    0
 .../ts}/heatmap-large-piecewise.js                 |    0
 public/{data => examples/ts}/heatmap-large.js      |    0
 public/{data => examples/ts}/heatmap-map.js        |    0
 public/examples/ts/line-gradient.ts                |    2 +-
 public/{data => examples/ts}/map-bin.js            |    0
 .../{data => examples/ts}/map-china-dataRange.js   |    0
 public/{data => examples/ts}/map-china.js          |    0
 public/{data => examples/ts}/map-labels.js         |    2 +-
 public/{data => examples/ts}/map-locate.js         |    0
 public/{data => examples/ts}/map-polygon.js        |    0
 public/{data => examples/ts}/map-province.js       |    0
 .../{data => examples/ts}/map-world-dataRange.js   |    0
 public/{data => examples/ts}/map-world.js          |    0
 .../{data => examples/ts}/mix-timeline-finance.js  |    0
 .../ts}/scatter-clustering-process.js              |    0
 .../ts}/scatter-life-expectancy-timeline.js        |    0
 public/{data => examples/ts}/scatter-map.js        |    0
 .../ts}/scatter-world-population.js                |    0
 public/{data => examples/ts}/sunburst-book.js      |   38 +-
 public/examples/ts/watermark.ts                    |    2 +-
 public/examples/tsconfig.json                      |    9 +-
 public/examples/types/example.d.ts                 |   46 +-
 tool/build-example.js                              |    1 -
 353 files changed, 243 insertions(+), 27272 deletions(-)

diff --git a/README.md b/README.md
index b56d153..5891e3f 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ It will copy all the build resources to echarts-website/next/examples
 
 ## Edit example
 
-All test cases are in the `public/data` folder. The comment in the header
+All test cases are in the `public/examples/ts` folder. The comment in the header
 
 ```js
 /*
@@ -53,6 +53,12 @@ videoEnd: 6000
 */
 ```
 
+Most of examples are written in `TypeScript`. You need to comile it to `JavaScript` by using command:
+
+```shell
+npm run compile:example
+```
+
 
 ## Some built-in features available in examples
 
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index a98ff5b..0000000
--- a/_config.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-# Handling Reading
-markdown_ext: "markdown,mkdown,mkdn,mkd"
diff --git a/package-lock.json b/package-lock.json
index fc83889..215c765 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1251,6 +1251,15 @@
         "@types/node": "*"
       }
     },
+    "@types/jquery": {
+      "version": "3.5.6",
+      "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.6.tgz",
+      "integrity": "sha512-SmgCQRzGPId4MZQKDj9Hqc6kSXFNWZFHpELkyK8AQhf8Zr6HKfCzFv9ZC1Fv3FyQttJZOlap3qYb12h61iZAIg==",
+      "dev": true,
+      "requires": {
+        "@types/sizzle": "*"
+      }
+    },
     "@types/json-schema": {
       "version": "7.0.5",
       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
@@ -1269,6 +1278,12 @@
       "integrity": "sha1-bRGowtWEBbPbk4irdAEGy/pkw8k=",
       "dev": true
     },
+    "@types/sizzle": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
+      "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==",
+      "dev": true
+    },
     "@typescript-eslint/types": {
       "version": "4.12.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.12.0.tgz",
@@ -3116,6 +3131,124 @@
         }
       }
     },
+    "download-git-repo": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/download-git-repo/-/download-git-repo-3.0.2.tgz",
+      "integrity": "sha512-N8hWXD4hXqmEcNoR8TBYFntaOcYvEQ7Bz90mgm3bZRTuteGQqwT32VDMnTyD0KTEvb8BWrMc1tVmzuV9u/WrAg==",
+      "dev": true,
+      "requires": {
+        "download": "^7.1.0",
+        "git-clone": "^0.1.0",
+        "rimraf": "^3.0.0"
+      },
+      "dependencies": {
+        "download": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+          "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+          "dev": true,
+          "requires": {
+            "archive-type": "^4.0.0",
+            "caw": "^2.0.1",
+            "content-disposition": "^0.5.2",
+            "decompress": "^4.2.0",
+            "ext-name": "^5.0.0",
+            "file-type": "^8.1.0",
+            "filenamify": "^2.0.0",
+            "get-stream": "^3.0.0",
+            "got": "^8.3.1",
+            "make-dir": "^1.2.0",
+            "p-event": "^2.1.0",
+            "pify": "^3.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "dev": true
+        },
+        "got": {
+          "version": "8.3.2",
+          "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+          "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+          "dev": true,
+          "requires": {
+            "@sindresorhus/is": "^0.7.0",
+            "cacheable-request": "^2.1.1",
+            "decompress-response": "^3.3.0",
+            "duplexer3": "^0.1.4",
+            "get-stream": "^3.0.0",
+            "into-stream": "^3.1.0",
+            "is-retry-allowed": "^1.1.0",
+            "isurl": "^1.0.0-alpha5",
+            "lowercase-keys": "^1.0.0",
+            "mimic-response": "^1.0.0",
+            "p-cancelable": "^0.4.0",
+            "p-timeout": "^2.0.1",
+            "pify": "^3.0.0",
+            "safe-buffer": "^5.1.1",
+            "timed-out": "^4.0.1",
+            "url-parse-lax": "^3.0.0",
+            "url-to-options": "^1.0.1"
+          }
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "p-cancelable": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+          "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+          "dev": true
+        },
+        "p-event": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+          "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+          "dev": true,
+          "requires": {
+            "p-timeout": "^2.0.1"
+          }
+        },
+        "p-timeout": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+          "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+          "dev": true,
+          "requires": {
+            "p-finally": "^1.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "prepend-http": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+          "dev": true
+        },
+        "url-parse-lax": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+          "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+          "dev": true,
+          "requires": {
+            "prepend-http": "^2.0.0"
+          }
+        }
+      }
+    },
     "duplexer": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
@@ -3129,19 +3262,19 @@
       "dev": true
     },
     "echarts": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.0.0.tgz",
-      "integrity": "sha512-6SDcJbLVOcfQyjPg+spNU1+JVrkU1B9fzUa5tpbP/mMNUPyigCOJwcEIQAJSbp9jt5UP3EXvQR0vtYXIo9AjyA==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.2.0.tgz",
+      "integrity": "sha512-7CrCKGRjFdpLIJ/Yt1gpHeqs5PiCem2GHPdWZPwKl7WSYeZu0Qzm1bcCFe9/b4dfVaL1zlY4JmdzaVwKksVeqg==",
       "dev": true,
       "requires": {
-        "tslib": "1.10.0",
-        "zrender": "5.0.1"
+        "tslib": "2.3.0",
+        "zrender": "5.2.0"
       },
       "dependencies": {
         "tslib": {
-          "version": "1.10.0",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
-          "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
           "dev": true
         }
       }
@@ -3221,6 +3354,12 @@
         "is-arrayish": "^0.2.1"
       }
     },
+    "esbuild": {
+      "version": "0.8.57",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz",
+      "integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==",
+      "dev": true
+    },
     "escalade": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz",
@@ -3427,6 +3566,12 @@
         "schema-utils": "^2.5.0"
       }
     },
+    "file-type": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+      "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+      "dev": true
+    },
     "filename-reserved-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
@@ -3574,6 +3719,12 @@
         "pinkie-promise": "^2.0.0"
       }
     },
+    "git-clone": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/git-clone/-/git-clone-0.1.0.tgz",
+      "integrity": "sha1-DXYWN3gJOu9/HDAjjyqe8/B6Lrk=",
+      "dev": true
+    },
     "github-from-package": {
       "version": "0.0.0",
       "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@@ -5367,9 +5518,9 @@
       "dev": true
     },
     "prettier": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
-      "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz",
+      "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==",
       "dev": true
     },
     "process-nextick-args": {
@@ -5643,6 +5794,15 @@
       "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=",
       "dev": true
     },
+    "rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
     "run-parallel": {
       "version": "1.1.9",
       "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.1.9.tgz",
@@ -7161,18 +7321,18 @@
       "dev": true
     },
     "zrender": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.0.1.tgz",
-      "integrity": "sha512-i8FNCKAKfF0EfZFJ6w2p30umBrCyy481/PePFQqPdtNgCl5Hp5z7/dovqb7soEoFkhNvhjJ/J4W9zFALeae6yA==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.2.0.tgz",
+      "integrity": "sha512-87v3gvB0lcWy48ObA/DwrhQ95ADMMRhECVrXmHDFCBNvbxHFfEDZtrZh4VmVjLAeFAjimY4PyZ65rbLCivdszA==",
       "dev": true,
       "requires": {
-        "tslib": "1.10.0"
+        "tslib": "2.3.0"
       },
       "dependencies": {
         "tslib": {
-          "version": "1.10.0",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
-          "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
           "dev": true
         }
       }
diff --git a/package.json b/package.json
index 39e45f0..8fe1fee 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,7 @@
     "release": "npm run build && node build/copyResource.js --env asf",
     "dev": "npx concurrently --kill-others \"npm:watch\" \"npm:server\"",
     "build:example": "node tool/build-example.js && node tool/build-example.js --source data-gl",
+    "compile:example": "tsc --project public/examples/tsconfig.json",
     "test:e2e": "node e2e/main.js --bundler webpack -m",
     "test:e2e:local": "node e2e/main.js --bundler webpack -m --local",
     "test:e2e:esbuild": "node e2e/main.js --bundler esbuild -m",
@@ -20,6 +21,7 @@
     "@babel/preset-env": "^7.10.2",
     "@ffmpeg/core": "^0.10.0",
     "@ffmpeg/ffmpeg": "^0.10.1",
+    "@types/jquery": "^3.5.6",
     "@typescript-eslint/typescript-estree": "^4.10.0",
     "argparse": "^1.0.9",
     "babel-loader": "^8.1.0",
@@ -28,7 +30,7 @@
     "css-loader": "^3.5.3",
     "cwebp-bin": "^6.1.1",
     "download-git-repo": "^3.0.2",
-    "echarts": "^5.0.0",
+    "echarts": "^5.2.0",
     "echarts-stat": "^1.2.0",
     "esbuild": "^0.8.34",
     "file-loader": "^4.3.0",
@@ -42,7 +44,7 @@
     "open": "^7.1.0",
     "pixelmatch": "^5.2.1",
     "pngjs": "^6.0.0",
-    "prettier": "^2.2.1",
+    "prettier": "^2.3.2",
     "sass.js": "^0.11.1",
     "sassjs-loader": "^2.0.0",
     "seedrandom": "^3.0.5",
diff --git a/public/data/area-basic.js b/public/data/area-basic.js
deleted file mode 100644
index 6200298..0000000
--- a/public/data/area-basic.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-title: Basic area chart
-titleCN: 基础面积图
-category: line
-difficulty: 1
-*/
-
-option = {
-    xAxis: {
-        type: 'category',
-        boundaryGap: false,
-        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-    },
-    yAxis: {
-        type: 'value'
-    },
-    series: [{
-        data: [820, 932, 901, 934, 1290, 1330, 1320],
-        type: 'line',
-        areaStyle: {}
-    }]
-};
diff --git a/public/data/area-pieces.js b/public/data/area-pieces.js
deleted file mode 100644
index a6cb4a1..0000000
--- a/public/data/area-pieces.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-title: Area Pieces
-titleCN: 折线图区域高亮
-category: 'line, visualMap'
-difficulty: 3
-*/
-
-
-option = {
-    xAxis: {
-        type: 'category',
-        boundaryGap: false
-    },
-    yAxis: {
-        type: 'value',
-        boundaryGap: [0, '30%']
-    },
-    visualMap: {
-        type: 'piecewise',
-        show: false,
-        dimension: 0,
-        seriesIndex: 0,
-        pieces: [{
-            gt: 1,
-            lt: 3,
-            color: 'rgba(0, 0, 180, 0.4)'
-        }, {
-            gt: 5,
-            lt: 7,
-            color: 'rgba(0, 0, 180, 0.4)'
-        }]
-    },
-    series: [
-        {
-            type: 'line',
-            smooth: 0.6,
-            symbol: 'none',
-            lineStyle: {
-                color: '#5470C6',
-                width: 5
-            },
-            markLine: {
-                symbol: ['none', 'none'],
-                label: {show: false},
-                data: [
-                    {xAxis: 1},
-                    {xAxis: 3},
-                    {xAxis: 5},
-                    {xAxis: 7}
-                ]
-            },
-            areaStyle: {},
-            data: [
-                ['2019-10-10', 200],
-                ['2019-10-11', 560],
-                ['2019-10-12', 750],
-                ['2019-10-13', 580],
-                ['2019-10-14', 250],
-                ['2019-10-15', 300],
-                ['2019-10-16', 450],
-                ['2019-10-17', 300],
-                ['2019-10-18', 100]
-            ]
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/area-rainfall.js b/public/data/area-rainfall.js
deleted file mode 100644
index 1ca5bc9..0000000
--- a/public/data/area-rainfall.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-title: Rainfall
-titleCN: 雨量流量关系图
-category: line
-difficulty: 5
-*/
-
-option = {
-    title: {
-        text: '雨量流量关系图',
-        subtext: '数据来自西安兰特水电测控技术有限公司',
-        left: 'center',
-        align: 'right'
-    },
-    grid: {
-        bottom: 80
-    },
-    toolbox: {
-        feature: {
-            dataZoom: {
-                yAxisIndex: 'none'
-            },
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'cross',
-            animation: false,
-            label: {
-                backgroundColor: '#505765'
-            }
-        }
-    },
-    legend: {
-        data: ['流量', '降雨量'],
-        left: 10
-    },
-    dataZoom: [
-        {
-            show: true,
-            realtime: true,
-            start: 65,
-            end: 85
-        },
-        {
-            type: 'inside',
-            realtime: true,
-            start: 65,
-            end: 85
-        }
-    ],
-    xAxis: [
-        {
-            type: 'category',
-            boundaryGap: false,
-            axisLine: {onZero: false},
-            data: [
-                '2009/6/12 2:00', '2009/6/12 3:00', '2009/6/12 4:00', '2009/6/12 5:00', '2009/6/12 6:00', '2009/6/12 7:00', '2009/6/12 8:00', '2009/6/12 9:00', '2009/6/12 10:00', '2009/6/12 11:00', '2009/6/12 12:00', '2009/6/12 13:00', '2009/6/12 14:00', '2009/6/12 15:00', '2009/6/12 16:00', '2009/6/12 17:00', '2009/6/12 18:00', '2009/6/12 19:00', '2009/6/12 20:00', '2009/6/12 21:00', '2009/6/12 22:00', '2009/6/12 23:00',
-                '2009/6/13 0:00', '2009/6/13 1:00', '2009/6/13 2:00', '2009/6/13 3:00', '2009/6/13 4:00', '2009/6/13 5:00', '2009/6/13 6:00', '2009/6/13 7:00', '2009/6/13 8:00', '2009/6/13 9:00', '2009/6/13 10:00', '2009/6/13 11:00', '2009/6/13 12:00', '2009/6/13 13:00', '2009/6/13 14:00', '2009/6/13 15:00', '2009/6/13 16:00', '2009/6/13 17:00', '2009/6/13 18:00', '2009/6/13 19:00', '2009/6/13 20:00', '2009/6/13 21:00', '2009/6/13 22:00', '2009/6/13 23:00',
-                '2009/6/14 0:00', '2009/6/14 1:00', '2009/6/14 2:00', '2009/6/14 3:00', '2009/6/14 4:00', '2009/6/14 5:00', '2009/6/14 6:00', '2009/6/14 7:00', '2009/6/14 8:00', '2009/6/14 9:00', '2009/6/14 10:00', '2009/6/14 11:00', '2009/6/14 12:00', '2009/6/14 13:00', '2009/6/14 14:00', '2009/6/14 15:00', '2009/6/14 16:00', '2009/6/14 17:00', '2009/6/14 18:00', '2009/6/14 19:00', '2009/6/14 20:00', '2009/6/14 21:00', '2009/6/14 22:00', '2009/6/14 23:00',
-                '2009/6/15 0:00', '2009/6/15 1:00', '2009/6/15 2:00', '2009/6/15 3:00', '2009/6/15 4:00', '2009/6/15 5:00', '2009/6/15 6:00', '2009/6/15 7:00', '2009/6/15 8:00', '2009/6/15 9:00', '2009/6/15 10:00', '2009/6/15 11:00', '2009/6/15 12:00', '2009/6/15 13:00', '2009/6/15 14:00', '2009/6/15 15:00', '2009/6/15 16:00', '2009/6/15 17:00', '2009/6/15 18:00', '2009/6/15 19:00', '2009/6/15 20:00', '2009/6/15 21:00', '2009/6/15 22:00', '2009/6/15 23:00',
-                '2009/6/15 0:00', '2009/6/16 1:00', '2009/6/16 2:00', '2009/6/16 3:00', '2009/6/16 4:00', '2009/6/16 5:00', '2009/6/16 6:00', '2009/6/16 7:00', '2009/6/16 8:00', '2009/6/16 9:00', '2009/6/16 10:00', '2009/6/16 11:00', '2009/6/16 12:00', '2009/6/16 13:00', '2009/6/16 14:00', '2009/6/16 15:00', '2009/6/16 16:00', '2009/6/16 17:00', '2009/6/16 18:00', '2009/6/16 19:00', '2009/6/16 20:00', '2009/6/16 21:00', '2009/6/16 22:00', '2009/6/16 23:00',
-                '2009/6/15 0:00', '2009/6/17 1:00', '2009/6/17 2:00', '2009/6/17 3:00', '2009/6/17 4:00', '2009/6/17 5:00', '2009/6/17 6:00', '2009/6/17 7:00', '2009/6/17 8:00', '2009/6/17 9:00', '2009/6/17 10:00', '2009/6/17 11:00', '2009/6/17 12:00', '2009/6/17 13:00', '2009/6/17 14:00', '2009/6/17 15:00', '2009/6/17 16:00', '2009/6/17 17:00', '2009/6/17 18:00', '2009/6/17 19:00', '2009/6/17 20:00', '2009/6/17 21:00', '2009/6/17 22:00', '2009/6/17 23:00',
-                '2009/6/18 0:00', '2009/6/18 1:00', '2009/6/18 2:00', '2009/6/18 3:00', '2009/6/18 4:00', '2009/6/18 5:00', '2009/6/18 6:00', '2009/6/18 7:00', '2009/6/18 8:00', '2009/6/18 9:00', '2009/6/18 10:00', '2009/6/18 11:00', '2009/6/18 12:00', '2009/6/18 13:00', '2009/6/18 14:00', '2009/6/18 15:00', '2009/6/18 16:00', '2009/6/18 17:00', '2009/6/18 18:00', '2009/6/18 19:00', '2009/6/18 20:00', '2009/6/18 21:00', '2009/6/18 22:00', '2009/6/18 23:00',
-                '2009/6/15 0:00', '2009/6/19 1:00', '2009/6/19 2:00', '2009/6/19 3:00', '2009/6/19 4:00', '2009/6/19 5:00', '2009/6/19 6:00', '2009/6/19 7:00', '2009/6/19 8:00', '2009/6/19 9:00', '2009/6/19 10:00', '2009/6/19 11:00', '2009/6/19 12:00', '2009/6/19 13:00', '2009/6/19 14:00', '2009/6/19 15:00', '2009/6/19 16:00', '2009/6/19 17:00', '2009/6/19 18:00', '2009/6/19 19:00', '2009/6/19 20:00', '2009/6/19 21:00', '2009/6/19 22:00', '2009/6/19 23:00',
-                '2009/6/20 0:00', '2009/6/20 1:00', '2009/6/20 2:00', '2009/6/20 3:00', '2009/6/20 4:00', '2009/6/20 5:00', '2009/6/20 6:00', '2009/6/20 7:00', '2009/6/20 8:00', '2009/6/20 9:00', '2009/6/20 10:00', '2009/6/20 11:00', '2009/6/20 12:00', '2009/6/20 13:00', '2009/6/20 14:00', '2009/6/20 15:00', '2009/6/20 16:00', '2009/6/20 17:00', '2009/6/20 18:00', '2009/6/20 19:00', '2009/6/20 20:00', '2009/6/20 21:00', '2009/6/20 22:00', '2009/6/20 23:00',
-                '2009/6/21 0:00', '2009/6/21 1:00', '2009/6/21 2:00', '2009/6/21 3:00', '2009/6/21 4:00', '2009/6/21 5:00', '2009/6/21 6:00', '2009/6/21 7:00', '2009/6/21 8:00', '2009/6/21 9:00', '2009/6/21 10:00', '2009/6/21 11:00', '2009/6/21 12:00', '2009/6/21 13:00', '2009/6/21 14:00', '2009/6/21 15:00', '2009/6/21 16:00', '2009/6/21 17:00', '2009/6/21 18:00', '2009/6/21 19:00', '2009/6/21 20:00', '2009/6/21 21:00', '2009/6/21 22:00', '2009/6/21 23:00',
-                '2009/6/22 0:00', '2009/6/22 1:00', '2009/6/22 2:00', '2009/6/22 3:00', '2009/6/22 4:00', '2009/6/22 5:00', '2009/6/22 6:00', '2009/6/22 7:00', '2009/6/22 8:00', '2009/6/22 9:00', '2009/6/22 10:00', '2009/6/22 11:00', '2009/6/22 12:00', '2009/6/22 13:00', '2009/6/22 14:00', '2009/6/22 15:00', '2009/6/22 16:00', '2009/6/22 17:00', '2009/6/22 18:00', '2009/6/22 19:00', '2009/6/22 20:00', '2009/6/22 21:00', '2009/6/22 22:00', '2009/6/22 23:00',
-                '2009/6/23 0:00', '2009/6/23 1:00', '2009/6/23 2:00', '2009/6/23 3:00', '2009/6/23 4:00', '2009/6/23 5:00', '2009/6/23 6:00', '2009/6/23 7:00', '2009/6/23 8:00', '2009/6/23 9:00', '2009/6/23 10:00', '2009/6/23 11:00', '2009/6/23 12:00', '2009/6/23 13:00', '2009/6/23 14:00', '2009/6/23 15:00', '2009/6/23 16:00', '2009/6/23 17:00', '2009/6/23 18:00', '2009/6/23 19:00', '2009/6/23 20:00', '2009/6/23 21:00', '2009/6/23 22:00', '2009/6/23 23:00',
-                '2009/6/24 0:00', '2009/6/24 1:00', '2009/6/24 2:00', '2009/6/24 3:00', '2009/6/24 4:00', '2009/6/24 5:00', '2009/6/24 6:00', '2009/6/24 7:00', '2009/6/24 8:00', '2009/6/24 9:00', '2009/6/24 10:00', '2009/6/24 11:00', '2009/6/24 12:00', '2009/6/24 13:00', '2009/6/24 14:00', '2009/6/24 15:00', '2009/6/24 16:00', '2009/6/24 17:00', '2009/6/24 18:00', '2009/6/24 19:00', '2009/6/24 20:00', '2009/6/24 21:00', '2009/6/24 22:00', '2009/6/24 23:00',
-                '2009/6/25 0:00', '2009/6/25 1:00', '2009/6/25 2:00', '2009/6/25 3:00', '2009/6/25 4:00', '2009/6/25 5:00', '2009/6/25 6:00', '2009/6/25 7:00', '2009/6/25 8:00', '2009/6/25 9:00', '2009/6/25 10:00', '2009/6/25 11:00', '2009/6/25 12:00', '2009/6/25 13:00', '2009/6/25 14:00', '2009/6/25 15:00', '2009/6/25 16:00', '2009/6/25 17:00', '2009/6/25 18:00', '2009/6/25 19:00', '2009/6/25 20:00', '2009/6/25 21:00', '2009/6/25 22:00', '2009/6/25 23:00',
-                '2009/6/26 0:00', '2009/6/26 1:00', '2009/6/26 2:00', '2009/6/26 3:00', '2009/6/26 4:00', '2009/6/26 5:00', '2009/6/26 6:00', '2009/6/26 7:00', '2009/6/26 8:00', '2009/6/26 9:00', '2009/6/26 10:00', '2009/6/26 11:00', '2009/6/26 12:00', '2009/6/26 13:00', '2009/6/26 14:00', '2009/6/26 15:00', '2009/6/26 16:00', '2009/6/26 17:00', '2009/6/26 18:00', '2009/6/26 19:00', '2009/6/26 20:00', '2009/6/26 21:00', '2009/6/26 22:00', '2009/6/26 23:00',
-                '2009/6/27 0:00', '2009/6/27 1:00', '2009/6/27 2:00', '2009/6/27 3:00', '2009/6/27 4:00', '2009/6/27 5:00', '2009/6/27 6:00', '2009/6/27 7:00', '2009/6/27 8:00', '2009/6/27 9:00', '2009/6/27 10:00', '2009/6/27 11:00', '2009/6/27 12:00', '2009/6/27 13:00', '2009/6/27 14:00', '2009/6/27 15:00', '2009/6/27 16:00', '2009/6/27 17:00', '2009/6/27 18:00', '2009/6/27 19:00', '2009/6/27 20:00', '2009/6/27 21:00', '2009/6/27 22:00', '2009/6/27 23:00',
-                '2009/6/28 0:00', '2009/6/28 1:00', '2009/6/28 2:00', '2009/6/28 3:00', '2009/6/28 4:00', '2009/6/28 5:00', '2009/6/28 6:00', '2009/6/28 7:00', '2009/6/28 8:00', '2009/6/28 9:00', '2009/6/28 10:00', '2009/6/28 11:00', '2009/6/28 12:00', '2009/6/28 13:00', '2009/6/28 14:00', '2009/6/28 15:00', '2009/6/28 16:00', '2009/6/28 17:00', '2009/6/28 18:00', '2009/6/28 19:00', '2009/6/28 20:00', '2009/6/28 21:00', '2009/6/28 22:00', '2009/6/28 23:00',
-                '2009/6/29 0:00', '2009/6/29 1:00', '2009/6/29 2:00', '2009/6/29 3:00', '2009/6/29 4:00', '2009/6/29 5:00', '2009/6/29 6:00', '2009/6/29 7:00', '2009/6/29 8:00', '2009/6/29 9:00', '2009/6/29 10:00', '2009/6/29 11:00', '2009/6/29 12:00', '2009/6/29 13:00', '2009/6/29 14:00', '2009/6/29 15:00', '2009/6/29 16:00', '2009/6/29 17:00', '2009/6/29 18:00', '2009/6/29 19:00', '2009/6/29 20:00', '2009/6/29 21:00', '2009/6/29 22:00', '2009/6/29 23:00',
-                '2009/6/30 0:00', '2009/6/30 1:00', '2009/6/30 2:00', '2009/6/30 3:00', '2009/6/30 4:00', '2009/6/30 5:00', '2009/6/30 6:00', '2009/6/30 7:00', '2009/6/30 8:00', '2009/6/30 9:00', '2009/6/30 10:00', '2009/6/30 11:00', '2009/6/30 12:00', '2009/6/30 13:00', '2009/6/30 14:00', '2009/6/30 15:00', '2009/6/30 16:00', '2009/6/30 17:00', '2009/6/30 18:00', '2009/6/30 19:00', '2009/6/30 20:00', '2009/6/30 21:00', '2009/6/30 22:00', '2009/6/30 23:00',
-                '2009/7/1 0:00', '2009/7/1 1:00', '2009/7/1 2:00', '2009/7/1 3:00', '2009/7/1 4:00', '2009/7/1 5:00', '2009/7/1 6:00', '2009/7/1 7:00', '2009/7/1 8:00', '2009/7/1 9:00', '2009/7/1 10:00', '2009/7/1 11:00', '2009/7/1 12:00', '2009/7/1 13:00', '2009/7/1 14:00', '2009/7/1 15:00', '2009/7/1 16:00', '2009/7/1 17:00', '2009/7/1 18:00', '2009/7/1 19:00', '2009/7/1 20:00', '2009/7/1 21:00', '2009/7/1 22:00', '2009/7/1 23:00',
-                '2009/7/2 0:00', '2009/7/2 1:00', '2009/7/2 2:00', '2009/7/2 3:00', '2009/7/2 4:00', '2009/7/2 5:00', '2009/7/2 6:00', '2009/7/2 7:00', '2009/7/2 8:00', '2009/7/2 9:00', '2009/7/2 10:00', '2009/7/2 11:00', '2009/7/2 12:00', '2009/7/2 13:00', '2009/7/2 14:00', '2009/7/2 15:00', '2009/7/2 16:00', '2009/7/2 17:00', '2009/7/2 18:00', '2009/7/2 19:00', '2009/7/2 20:00', '2009/7/2 21:00', '2009/7/2 22:00', '2009/7/2 23:00',
-                '2009/7/3 0:00', '2009/7/3 1:00', '2009/7/3 2:00', '2009/7/3 3:00', '2009/7/3 4:00', '2009/7/3 5:00', '2009/7/3 6:00', '2009/7/3 7:00', '2009/7/3 8:00', '2009/7/3 9:00', '2009/7/3 10:00', '2009/7/3 11:00', '2009/7/3 12:00', '2009/7/3 13:00', '2009/7/3 14:00', '2009/7/3 15:00', '2009/7/3 16:00', '2009/7/3 17:00', '2009/7/3 18:00', '2009/7/3 19:00', '2009/7/3 20:00', '2009/7/3 21:00', '2009/7/3 22:00', '2009/7/3 23:00',
-                '2009/7/4 0:00', '2009/7/4 1:00', '2009/7/4 2:00', '2009/7/4 3:00', '2009/7/4 4:00', '2009/7/4 5:00', '2009/7/4 6:00', '2009/7/4 7:00', '2009/7/4 8:00', '2009/7/4 9:00', '2009/7/4 10:00', '2009/7/4 11:00', '2009/7/4 12:00', '2009/7/4 13:00', '2009/7/4 14:00', '2009/7/4 15:00', '2009/7/4 16:00', '2009/7/4 17:00', '2009/7/4 18:00', '2009/7/4 19:00', '2009/7/4 20:00', '2009/7/4 21:00', '2009/7/4 22:00', '2009/7/4 23:00',
-                '2009/7/5 0:00', '2009/7/5 1:00', '2009/7/5 2:00', '2009/7/5 3:00', '2009/7/5 4:00', '2009/7/5 5:00', '2009/7/5 6:00', '2009/7/5 7:00', '2009/7/5 8:00', '2009/7/5 9:00', '2009/7/5 10:00', '2009/7/5 11:00', '2009/7/5 12:00', '2009/7/5 13:00', '2009/7/5 14:00', '2009/7/5 15:00', '2009/7/5 16:00', '2009/7/5 17:00', '2009/7/5 18:00', '2009/7/5 19:00', '2009/7/5 20:00', '2009/7/5 21:00', '2009/7/5 22:00', '2009/7/5 23:00',
-                '2009/7/6 0:00', '2009/7/6 1:00', '2009/7/6 2:00', '2009/7/6 3:00', '2009/7/6 4:00', '2009/7/6 5:00', '2009/7/6 6:00', '2009/7/6 7:00', '2009/7/6 8:00', '2009/7/6 9:00', '2009/7/6 10:00', '2009/7/6 11:00', '2009/7/6 12:00', '2009/7/6 13:00', '2009/7/6 14:00', '2009/7/6 15:00', '2009/7/6 16:00', '2009/7/6 17:00', '2009/7/6 18:00', '2009/7/6 19:00', '2009/7/6 20:00', '2009/7/6 21:00', '2009/7/6 22:00', '2009/7/6 23:00',
-                '2009/7/7 0:00', '2009/7/7 1:00', '2009/7/7 2:00', '2009/7/7 3:00', '2009/7/7 4:00', '2009/7/7 5:00', '2009/7/7 6:00', '2009/7/7 7:00', '2009/7/7 8:00', '2009/7/7 9:00', '2009/7/7 10:00', '2009/7/7 11:00', '2009/7/7 12:00', '2009/7/7 13:00', '2009/7/7 14:00', '2009/7/7 15:00', '2009/7/7 16:00', '2009/7/7 17:00', '2009/7/7 18:00', '2009/7/7 19:00', '2009/7/7 20:00', '2009/7/7 21:00', '2009/7/7 22:00', '2009/7/7 23:00',
-                '2009/7/8 0:00', '2009/7/8 1:00', '2009/7/8 2:00', '2009/7/8 3:00', '2009/7/8 4:00', '2009/7/8 5:00', '2009/7/8 6:00', '2009/7/8 7:00', '2009/7/8 8:00', '2009/7/8 9:00', '2009/7/8 10:00', '2009/7/8 11:00', '2009/7/8 12:00', '2009/7/8 13:00', '2009/7/8 14:00', '2009/7/8 15:00', '2009/7/8 16:00', '2009/7/8 17:00', '2009/7/8 18:00', '2009/7/8 19:00', '2009/7/8 20:00', '2009/7/8 21:00', '2009/7/8 22:00', '2009/7/8 23:00',
-                '2009/7/9 0:00', '2009/7/9 1:00', '2009/7/9 2:00', '2009/7/9 3:00', '2009/7/9 4:00', '2009/7/9 5:00', '2009/7/9 6:00', '2009/7/9 7:00', '2009/7/9 8:00', '2009/7/9 9:00', '2009/7/9 10:00', '2009/7/9 11:00', '2009/7/9 12:00', '2009/7/9 13:00', '2009/7/9 14:00', '2009/7/9 15:00', '2009/7/9 16:00', '2009/7/9 17:00', '2009/7/9 18:00', '2009/7/9 19:00', '2009/7/9 20:00', '2009/7/9 21:00', '2009/7/9 22:00', '2009/7/9 23:00',
-                '2009/7/10 0:00', '2009/7/10 1:00', '2009/7/10 2:00', '2009/7/10 3:00', '2009/7/10 4:00', '2009/7/10 5:00', '2009/7/10 6:00', '2009/7/10 7:00', '2009/7/10 8:00', '2009/7/10 9:00', '2009/7/10 10:00', '2009/7/10 11:00', '2009/7/10 12:00', '2009/7/10 13:00', '2009/7/10 14:00', '2009/7/10 15:00', '2009/7/10 16:00', '2009/7/10 17:00', '2009/7/10 18:00', '2009/7/10 19:00', '2009/7/10 20:00', '2009/7/10 21:00', '2009/7/10 22:00', '2009/7/10 23:00',
-                '2009/7/11 0:00', '2009/7/11 1:00', '2009/7/11 2:00', '2009/7/11 3:00', '2009/7/11 4:00', '2009/7/11 5:00', '2009/7/11 6:00', '2009/7/11 7:00', '2009/7/11 8:00', '2009/7/11 9:00', '2009/7/11 10:00', '2009/7/11 11:00', '2009/7/11 12:00', '2009/7/11 13:00', '2009/7/11 14:00', '2009/7/11 15:00', '2009/7/11 16:00', '2009/7/11 17:00', '2009/7/11 18:00', '2009/7/11 19:00', '2009/7/11 20:00', '2009/7/11 21:00', '2009/7/11 22:00', '2009/7/11 23:00',
-                '2009/7/12 0:00', '2009/7/12 1:00', '2009/7/12 2:00', '2009/7/12 3:00', '2009/7/12 4:00', '2009/7/12 5:00', '2009/7/12 6:00', '2009/7/12 7:00', '2009/7/12 8:00', '2009/7/12 9:00', '2009/7/12 10:00', '2009/7/12 11:00', '2009/7/12 12:00', '2009/7/12 13:00', '2009/7/12 14:00', '2009/7/12 15:00', '2009/7/12 16:00', '2009/7/12 17:00', '2009/7/12 18:00', '2009/7/12 19:00', '2009/7/12 20:00', '2009/7/12 21:00', '2009/7/12 22:00', '2009/7/12 23:00',
-                '2009/7/13 0:00', '2009/7/13 1:00', '2009/7/13 2:00', '2009/7/13 3:00', '2009/7/13 4:00', '2009/7/13 5:00', '2009/7/13 6:00', '2009/7/13 7:00', '2009/7/13 8:00', '2009/7/13 9:00', '2009/7/13 10:00', '2009/7/13 11:00', '2009/7/13 12:00', '2009/7/13 13:00', '2009/7/13 14:00', '2009/7/13 15:00', '2009/7/13 16:00', '2009/7/13 17:00', '2009/7/13 18:00', '2009/7/13 19:00', '2009/7/13 20:00', '2009/7/13 21:00', '2009/7/13 22:00', '2009/7/13 23:00',
-                '2009/7/14 0:00', '2009/7/14 1:00', '2009/7/14 2:00', '2009/7/14 3:00', '2009/7/14 4:00', '2009/7/14 5:00', '2009/7/14 6:00', '2009/7/14 7:00', '2009/7/14 8:00', '2009/7/14 9:00', '2009/7/14 10:00', '2009/7/14 11:00', '2009/7/14 12:00', '2009/7/14 13:00', '2009/7/14 14:00', '2009/7/14 15:00', '2009/7/14 16:00', '2009/7/14 17:00', '2009/7/14 18:00', '2009/7/14 19:00', '2009/7/14 20:00', '2009/7/14 21:00', '2009/7/14 22:00', '2009/7/14 23:00',
-                '2009/7/15 0:00', '2009/7/15 1:00', '2009/7/15 2:00', '2009/7/15 3:00', '2009/7/15 4:00', '2009/7/15 5:00', '2009/7/15 6:00', '2009/7/15 7:00', '2009/7/15 8:00', '2009/7/15 9:00', '2009/7/15 10:00', '2009/7/15 11:00', '2009/7/15 12:00', '2009/7/15 13:00', '2009/7/15 14:00', '2009/7/15 15:00', '2009/7/15 16:00', '2009/7/15 17:00', '2009/7/15 18:00', '2009/7/15 19:00', '2009/7/15 20:00', '2009/7/15 21:00', '2009/7/15 22:00', '2009/7/15 23:00',
-                '2009/7/16 0:00', '2009/7/16 1:00', '2009/7/16 2:00', '2009/7/16 3:00', '2009/7/16 4:00', '2009/7/16 5:00', '2009/7/16 6:00', '2009/7/16 7:00', '2009/7/16 8:00', '2009/7/16 9:00', '2009/7/16 10:00', '2009/7/16 11:00', '2009/7/16 12:00', '2009/7/16 13:00', '2009/7/16 14:00', '2009/7/16 15:00', '2009/7/16 16:00', '2009/7/16 17:00', '2009/7/16 18:00', '2009/7/16 19:00', '2009/7/16 20:00', '2009/7/16 21:00', '2009/7/16 22:00', '2009/7/16 23:00',
-                '2009/7/17 0:00', '2009/7/17 1:00', '2009/7/17 2:00', '2009/7/17 3:00', '2009/7/17 4:00', '2009/7/17 5:00', '2009/7/17 6:00', '2009/7/17 7:00', '2009/7/17 8:00', '2009/7/17 9:00', '2009/7/17 10:00', '2009/7/17 11:00', '2009/7/17 12:00', '2009/7/17 13:00', '2009/7/17 14:00', '2009/7/17 15:00', '2009/7/17 16:00', '2009/7/17 17:00', '2009/7/17 18:00', '2009/7/17 19:00', '2009/7/17 20:00', '2009/7/17 21:00', '2009/7/17 22:00', '2009/7/17 23:00',
-                '2009/7/18 0:00', '2009/7/18 1:00', '2009/7/18 2:00', '2009/7/18 3:00', '2009/7/18 4:00', '2009/7/18 5:00', '2009/7/18 6:00', '2009/7/18 7:00', '2009/7/18 8:00', '2009/7/18 9:00', '2009/7/18 10:00', '2009/7/18 11:00', '2009/7/18 12:00', '2009/7/18 13:00', '2009/7/18 14:00', '2009/7/18 15:00', '2009/7/18 16:00', '2009/7/18 17:00', '2009/7/18 18:00', '2009/7/18 19:00', '2009/7/18 20:00', '2009/7/18 21:00', '2009/7/18 22:00', '2009/7/18 23:00',
-                '2009/7/19 0:00', '2009/7/19 1:00', '2009/7/19 2:00', '2009/7/19 3:00', '2009/7/19 4:00', '2009/7/19 5:00', '2009/7/19 6:00', '2009/7/19 7:00', '2009/7/19 8:00', '2009/7/19 9:00', '2009/7/19 10:00', '2009/7/19 11:00', '2009/7/19 12:00', '2009/7/19 13:00', '2009/7/19 14:00', '2009/7/19 15:00', '2009/7/19 16:00', '2009/7/19 17:00', '2009/7/19 18:00', '2009/7/19 19:00', '2009/7/19 20:00', '2009/7/19 21:00', '2009/7/19 22:00', '2009/7/19 23:00',
-                '2009/7/20 0:00', '2009/7/20 1:00', '2009/7/20 2:00', '2009/7/20 3:00', '2009/7/20 4:00', '2009/7/20 5:00', '2009/7/20 6:00', '2009/7/20 7:00', '2009/7/20 8:00', '2009/7/20 9:00', '2009/7/20 10:00', '2009/7/20 11:00', '2009/7/20 12:00', '2009/7/20 13:00', '2009/7/20 14:00', '2009/7/20 15:00', '2009/7/20 16:00', '2009/7/20 17:00', '2009/7/20 18:00', '2009/7/20 19:00', '2009/7/20 20:00', '2009/7/20 21:00', '2009/7/20 22:00', '2009/7/20 23:00',
-                '2009/7/21 0:00', '2009/7/21 1:00', '2009/7/21 2:00', '2009/7/21 3:00', '2009/7/21 4:00', '2009/7/21 5:00', '2009/7/21 6:00', '2009/7/21 7:00', '2009/7/21 8:00', '2009/7/21 9:00', '2009/7/21 10:00', '2009/7/21 11:00', '2009/7/21 12:00', '2009/7/21 13:00', '2009/7/21 14:00', '2009/7/21 15:00', '2009/7/21 16:00', '2009/7/21 17:00', '2009/7/21 18:00', '2009/7/21 19:00', '2009/7/21 20:00', '2009/7/21 21:00', '2009/7/21 22:00', '2009/7/21 23:00',
-                '2009/7/22 0:00', '2009/7/22 1:00', '2009/7/22 2:00', '2009/7/22 3:00', '2009/7/22 4:00', '2009/7/22 5:00', '2009/7/22 6:00', '2009/7/22 7:00', '2009/7/22 8:00', '2009/7/22 9:00', '2009/7/22 10:00', '2009/7/22 11:00', '2009/7/22 12:00', '2009/7/22 13:00', '2009/7/22 14:00', '2009/7/22 15:00', '2009/7/22 16:00', '2009/7/22 17:00', '2009/7/22 18:00', '2009/7/22 19:00', '2009/7/22 20:00', '2009/7/22 21:00', '2009/7/22 22:00', '2009/7/22 23:00',
-                '2009/7/23 0:00', '2009/7/23 1:00', '2009/7/23 2:00', '2009/7/23 3:00', '2009/7/23 4:00', '2009/7/23 5:00', '2009/7/23 6:00', '2009/7/23 7:00', '2009/7/23 8:00', '2009/7/23 9:00', '2009/7/23 10:00', '2009/7/23 11:00', '2009/7/23 12:00', '2009/7/23 13:00', '2009/7/23 14:00', '2009/7/23 15:00', '2009/7/23 16:00', '2009/7/23 17:00', '2009/7/23 18:00', '2009/7/23 19:00', '2009/7/23 20:00', '2009/7/23 21:00', '2009/7/23 22:00', '2009/7/23 23:00',
-                '2009/7/24 0:00', '2009/7/24 1:00', '2009/7/24 2:00', '2009/7/24 3:00', '2009/7/24 4:00', '2009/7/24 5:00', '2009/7/24 6:00', '2009/7/24 7:00', '2009/7/24 8:00', '2009/7/24 9:00', '2009/7/24 10:00', '2009/7/24 11:00', '2009/7/24 12:00', '2009/7/24 13:00', '2009/7/24 14:00', '2009/7/24 15:00', '2009/7/24 16:00', '2009/7/24 17:00', '2009/7/24 18:00', '2009/7/24 19:00', '2009/7/24 20:00', '2009/7/24 21:00', '2009/7/24 22:00', '2009/7/24 23:00',
-                '2009/7/25 0:00', '2009/7/25 1:00', '2009/7/25 2:00', '2009/7/25 3:00', '2009/7/25 4:00', '2009/7/25 5:00', '2009/7/25 6:00', '2009/7/25 7:00', '2009/7/25 8:00', '2009/7/25 9:00', '2009/7/25 10:00', '2009/7/25 11:00', '2009/7/25 12:00', '2009/7/25 13:00', '2009/7/25 14:00', '2009/7/25 15:00', '2009/7/25 16:00', '2009/7/25 17:00', '2009/7/25 18:00', '2009/7/25 19:00', '2009/7/25 20:00', '2009/7/25 21:00', '2009/7/25 22:00', '2009/7/25 23:00',
-                '2009/7/26 0:00', '2009/7/26 1:00', '2009/7/26 2:00', '2009/7/26 3:00', '2009/7/26 4:00', '2009/7/26 5:00', '2009/7/26 6:00', '2009/7/26 7:00', '2009/7/26 8:00', '2009/7/26 9:00', '2009/7/26 10:00', '2009/7/26 11:00', '2009/7/26 12:00', '2009/7/26 13:00', '2009/7/26 14:00', '2009/7/26 15:00', '2009/7/26 16:00', '2009/7/26 17:00', '2009/7/26 18:00', '2009/7/26 19:00', '2009/7/26 20:00', '2009/7/26 21:00', '2009/7/26 22:00', '2009/7/26 23:00',
-                '2009/7/27 0:00', '2009/7/27 1:00', '2009/7/27 2:00', '2009/7/27 3:00', '2009/7/27 4:00', '2009/7/27 5:00', '2009/7/27 6:00', '2009/7/27 7:00', '2009/7/27 8:00', '2009/7/27 9:00', '2009/7/27 10:00', '2009/7/27 11:00', '2009/7/27 12:00', '2009/7/27 13:00', '2009/7/27 14:00', '2009/7/27 15:00', '2009/7/27 16:00', '2009/7/27 17:00', '2009/7/27 18:00', '2009/7/27 19:00', '2009/7/27 20:00', '2009/7/27 21:00', '2009/7/27 22:00', '2009/7/27 23:00',
-                '2009/7/28 0:00', '2009/7/28 1:00', '2009/7/28 2:00', '2009/7/28 3:00', '2009/7/28 4:00', '2009/7/28 5:00', '2009/7/28 6:00', '2009/7/28 7:00', '2009/7/28 8:00', '2009/7/28 9:00', '2009/7/28 10:00', '2009/7/28 11:00', '2009/7/28 12:00', '2009/7/28 13:00', '2009/7/28 14:00', '2009/7/28 15:00', '2009/7/28 16:00', '2009/7/28 17:00', '2009/7/28 18:00', '2009/7/28 19:00', '2009/7/28 20:00', '2009/7/28 21:00', '2009/7/28 22:00', '2009/7/28 23:00',
-                '2009/7/29 0:00', '2009/7/29 1:00', '2009/7/29 2:00', '2009/7/29 3:00', '2009/7/29 4:00', '2009/7/29 5:00', '2009/7/29 6:00', '2009/7/29 7:00', '2009/7/29 8:00', '2009/7/29 9:00', '2009/7/29 10:00', '2009/7/29 11:00', '2009/7/29 12:00', '2009/7/29 13:00', '2009/7/29 14:00', '2009/7/29 15:00', '2009/7/29 16:00', '2009/7/29 17:00', '2009/7/29 18:00', '2009/7/29 19:00', '2009/7/29 20:00', '2009/7/29 21:00', '2009/7/29 22:00', '2009/7/29 23:00',
-                '2009/7/30 0:00', '2009/7/30 1:00', '2009/7/30 2:00', '2009/7/30 3:00', '2009/7/30 4:00', '2009/7/30 5:00', '2009/7/30 6:00', '2009/7/30 7:00', '2009/7/30 8:00', '2009/7/30 9:00', '2009/7/30 10:00', '2009/7/30 11:00', '2009/7/30 12:00', '2009/7/30 13:00', '2009/7/30 14:00', '2009/7/30 15:00', '2009/7/30 16:00', '2009/7/30 17:00', '2009/7/30 18:00', '2009/7/30 19:00', '2009/7/30 20:00', '2009/7/30 21:00', '2009/7/30 22:00', '2009/7/30 23:00',
-                '2009/7/31 0:00', '2009/7/31 1:00', '2009/7/31 2:00', '2009/7/31 3:00', '2009/7/31 4:00', '2009/7/31 5:00', '2009/7/31 6:00', '2009/7/31 7:00', '2009/7/31 8:00', '2009/7/31 9:00', '2009/7/31 10:00', '2009/7/31 11:00', '2009/7/31 12:00', '2009/7/31 13:00', '2009/7/31 14:00', '2009/7/31 15:00', '2009/7/31 16:00', '2009/7/31 17:00', '2009/7/31 18:00', '2009/7/31 19:00', '2009/7/31 20:00', '2009/7/31 21:00', '2009/7/31 22:00', '2009/7/31 23:00',
-                '2009/8/1 0:00', '2009/8/1 1:00', '2009/8/1 2:00', '2009/8/1 3:00', '2009/8/1 4:00', '2009/8/1 5:00', '2009/8/1 6:00', '2009/8/1 7:00', '2009/8/1 8:00', '2009/8/1 9:00', '2009/8/1 10:00', '2009/8/1 11:00', '2009/8/1 12:00', '2009/8/1 13:00', '2009/8/1 14:00', '2009/8/1 15:00', '2009/8/1 16:00', '2009/8/1 17:00', '2009/8/1 18:00', '2009/8/1 19:00', '2009/8/1 20:00', '2009/8/1 21:00', '2009/8/1 22:00', '2009/8/1 23:00', '2009/8/2 0:00', '2009/8/2 1:00', '2009/8/2 2:00', '20 [...]
-                '2009/9/1 0:00', '2009/9/1 1:00', '2009/9/1 2:00', '2009/9/1 3:00', '2009/9/1 4:00', '2009/9/1 5:00', '2009/9/1 6:00', '2009/9/1 7:00', '2009/9/1 8:00', '2009/9/1 9:00', '2009/9/1 10:00', '2009/9/1 11:00', '2009/9/1 12:00', '2009/9/1 13:00', '2009/9/1 14:00', '2009/9/1 15:00', '2009/9/1 16:00', '2009/9/1 17:00', '2009/9/1 18:00', '2009/9/1 19:00', '2009/9/1 20:00', '2009/9/1 21:00', '2009/9/1 22:00', '2009/9/1 23:00', '2009/9/2 0:00', '2009/9/2 1:00', '2009/9/2 2:00', '20 [...]
-                '2009/10/1 0:00', '2009/10/1 1:00', '2009/10/1 2:00', '2009/10/1 3:00', '2009/10/1 4:00', '2009/10/1 5:00', '2009/10/1 6:00', '2009/10/1 7:00', '2009/10/1 8:00', '2009/10/1 9:00', '2009/10/1 10:00', '2009/10/1 11:00', '2009/10/1 12:00', '2009/10/1 13:00', '2009/10/1 14:00', '2009/10/1 15:00', '2009/10/1 16:00', '2009/10/1 17:00', '2009/10/1 18:00', '2009/10/1 19:00', '2009/10/1 20:00', '2009/10/1 21:00', '2009/10/1 22:00', '2009/10/1 23:00', '2009/10/2 0:00', '2009/10/2 1 [...]
-            ].map(function (str) {
-                return str.replace(' ', '\n');
-            })
-        }
-    ],
-    yAxis: [
-        {
-            name: '流量(m^3/s)',
-            type: 'value',
-            max: 500
-        },
-        {
-            name: '降雨量(mm)',
-            nameLocation: 'start',
-            max: 5,
-            type: 'value',
-            inverse: true
-        }
-    ],
-    series: [
-        {
-            name: '流量',
-            type: 'line',
-            areaStyle: {},
-            lineStyle: {
-                width: 1
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            markArea: {
-                silent: true,
-                itemStyle: {
-                    opacity: 0.3
-                },
-                data: [[{
-                    xAxis: '2009/9/12\n7:00'
-                }, {
-                    xAxis: '2009/9/22\n7:00'
-                }]]
-            },
-            data: [
-                0.97,0.96,0.96,0.95,0.95,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0 [...]
-            ]
-        },
-        {
-            name: '降雨量',
-            type: 'line',
-            yAxisIndex: 1,
-            areaStyle: {},
-            lineStyle: {
-                width: 1
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            markArea: {
-                silent: true,
-                itemStyle: {
-                    opacity: 0.3
-                },
-                data: [
-                    [{
-                        xAxis: '2009/9/10\n7:00'
-                    }, {
-                        xAxis: '2009/9/20\n7:00'
-                    }]
-                ]
-            },
-            data: [
-                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.017,0.017,0.017,0.017,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.021,0.026,0.03,0.036,0.036,0.195,0.221,0.019,0.013,0.017,0.03,0.03,0.03,0.046,0.045,0.038,0.084,0.045,0.045,0.037,0.034,0.035,0.036,0.044,0.052,0.048,0.109,0.033,0.029,0.04,0.042,0.042,0.042,0.073,0.076,0.062,0.066,0.066,0.075,0.096,0.128 [...]
-            ]
-        }
-    ]
-};
diff --git a/public/data/area-simple.js b/public/data/area-simple.js
deleted file mode 100644
index 84b9682..0000000
--- a/public/data/area-simple.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-title: Large scale area chart
-titleCN: 大数据量面积图
-category: 'line, dataZoom'
-difficulty: 4
-*/
-
-var base = +new Date(1968, 9, 3);
-var oneDay = 24 * 3600 * 1000;
-var date = [];
-
-var data = [Math.random() * 300];
-
-for (var i = 1; i < 20000; i++) {
-    var now = new Date(base += oneDay);
-    date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'));
-    data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
-}
-
-option = {
-    tooltip: {
-        trigger: 'axis',
-        position: function (pt) {
-            return [pt[0], '10%'];
-        }
-    },
-    title: {
-        left: 'center',
-        text: '大数据量面积图',
-    },
-    toolbox: {
-        feature: {
-            dataZoom: {
-                yAxisIndex: 'none'
-            },
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    xAxis: {
-        type: 'category',
-        boundaryGap: false,
-        data: date
-    },
-    yAxis: {
-        type: 'value',
-        boundaryGap: [0, '100%']
-    },
-    dataZoom: [{
-        type: 'inside',
-        start: 0,
-        end: 10
-    }, {
-        start: 0,
-        end: 10
-    }],
-    series: [
-        {
-            name: '模拟数据',
-            type: 'line',
-            symbol: 'none',
-            sampling: 'lttb',
-            itemStyle: {
-                color: 'rgb(255, 70, 131)'
-            },
-            areaStyle: {
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                    offset: 0,
-                    color: 'rgb(255, 158, 68)'
-                }, {
-                    offset: 1,
-                    color: 'rgb(255, 70, 131)'
-                }])
-            },
-            data: data
-        }
-    ]
-};
diff --git a/public/data/area-stack-gradient.js b/public/data/area-stack-gradient.js
deleted file mode 100644
index 320f241..0000000
--- a/public/data/area-stack-gradient.js
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-title: Gradient Stacked area chart
-titleCN: 渐变堆叠面积图
-category: line
-difficulty: 2
-*/
-
-option = {
-    color: ['#80FFA5', '#00DDFF', '#37A2FF', '#FF0087', '#FFBF00'],
-    title: {
-        text: '渐变堆叠面积图'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'cross',
-            label: {
-                backgroundColor: '#6a7985'
-            }
-        }
-    },
-    legend: {
-        data: ['Line 1', 'Line 2', 'Line 3', 'Line 4', 'Line 5']
-    },
-    toolbox: {
-        feature: {
-            saveAsImage: {}
-        }
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: [
-        {
-            type: 'category',
-            boundaryGap: false,
-            data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    series: [
-        {
-            name: 'Line 1',
-            type: 'line',
-            stack: '总量',
-            smooth: true,
-            lineStyle: {
-                width: 0
-            },
-            showSymbol: false,
-            areaStyle: {
-                opacity: 0.8,
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                    offset: 0,
-                    color: 'rgba(128, 255, 165)'
-                }, {
-                    offset: 1,
-                    color: 'rgba(1, 191, 236)'
-                }])
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [140, 232, 101, 264, 90, 340, 250]
-        },
-        {
-            name: 'Line 2',
-            type: 'line',
-            stack: '总量',
-            smooth: true,
-            lineStyle: {
-                width: 0
-            },
-            showSymbol: false,
-            areaStyle: {
-                opacity: 0.8,
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                    offset: 0,
-                    color: 'rgba(0, 221, 255)'
-                }, {
-                    offset: 1,
-                    color: 'rgba(77, 119, 255)'
-                }])
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [120, 282, 111, 234, 220, 340, 310]
-        },
-        {
-            name: 'Line 3',
-            type: 'line',
-            stack: '总量',
-            smooth: true,
-            lineStyle: {
-                width: 0
-            },
-            showSymbol: false,
-            areaStyle: {
-                opacity: 0.8,
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                    offset: 0,
-                    color: 'rgba(55, 162, 255)'
-                }, {
-                    offset: 1,
-                    color: 'rgba(116, 21, 219)'
-                }])
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [320, 132, 201, 334, 190, 130, 220]
-        },
-        {
-            name: 'Line 4',
-            type: 'line',
-            stack: '总量',
-            smooth: true,
-            lineStyle: {
-                width: 0
-            },
-            showSymbol: false,
-            areaStyle: {
-                opacity: 0.8,
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                    offset: 0,
-                    color: 'rgba(255, 0, 135)'
-                }, {
-                    offset: 1,
-                    color: 'rgba(135, 0, 157)'
-                }])
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [220, 402, 231, 134, 190, 230, 120]
-        },
-        {
-            name: 'Line 5',
-            type: 'line',
-            stack: '总量',
-            smooth: true,
-            lineStyle: {
-                width: 0
-            },
-            showSymbol: false,
-            label: {
-                show: true,
-                position: 'top'
-            },
-            areaStyle: {
-                opacity: 0.8,
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                    offset: 0,
-                    color: 'rgba(255, 191, 0)'
-                }, {
-                    offset: 1,
-                    color: 'rgba(224, 62, 76)'
-                }])
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [220, 302, 181, 234, 210, 290, 150]
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/area-stack.js b/public/data/area-stack.js
deleted file mode 100644
index f229254..0000000
--- a/public/data/area-stack.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-title: Stacked area chart
-titleCN: 堆叠面积图
-category: line
-difficulty: 2
-*/
-
-option = {
-    title: {
-        text: '堆叠区域图'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'cross',
-            label: {
-                backgroundColor: '#6a7985'
-            }
-        }
-    },
-    legend: {
-        data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎']
-    },
-    toolbox: {
-        feature: {
-            saveAsImage: {}
-        }
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: [
-        {
-            type: 'category',
-            boundaryGap: false,
-            data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    series: [
-        {
-            name: '邮件营销',
-            type: 'line',
-            stack: '总量',
-            areaStyle: {},
-            emphasis: {
-                focus: 'series'
-            },
-            data: [120, 132, 101, 134, 90, 230, 210]
-        },
-        {
-            name: '联盟广告',
-            type: 'line',
-            stack: '总量',
-            areaStyle: {},
-            emphasis: {
-                focus: 'series'
-            },
-            data: [220, 182, 191, 234, 290, 330, 310]
-        },
-        {
-            name: '视频广告',
-            type: 'line',
-            stack: '总量',
-            areaStyle: {},
-            emphasis: {
-                focus: 'series'
-            },
-            data: [150, 232, 201, 154, 190, 330, 410]
-        },
-        {
-            name: '直接访问',
-            type: 'line',
-            stack: '总量',
-            areaStyle: {},
-            emphasis: {
-                focus: 'series'
-            },
-            data: [320, 332, 301, 334, 390, 330, 320]
-        },
-        {
-            name: '搜索引擎',
-            type: 'line',
-            stack: '总量',
-            label: {
-                show: true,
-                position: 'top'
-            },
-            areaStyle: {},
-            emphasis: {
-                focus: 'series'
-            },
-            data: [820, 932, 901, 934, 1290, 1330, 1320]
-        }
-    ]
-};
diff --git a/public/data/area-time-axis.js b/public/data/area-time-axis.js
deleted file mode 100644
index c17d393..0000000
--- a/public/data/area-time-axis.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-title: Area Chart with Time Axis
-titleCN: 时间轴折线图
-category: line
-difficulty: 5
-*/
-
-var base = +new Date(1988, 9, 3);
-var oneDay = 24 * 3600 * 1000;
-
-var data = [[base, Math.random() * 300]];
-
-for (var i = 1; i < 20000; i++) {
-    var now = new Date(base += oneDay);
-    data.push([
-        [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'),
-        Math.round((Math.random() - 0.5) * 20 + data[i - 1][1])
-    ]);
-}
-
-option = {
-    tooltip: {
-        trigger: 'axis',
-        position: function (pt) {
-            return [pt[0], '10%'];
-        }
-    },
-    title: {
-        left: 'center',
-        text: '大数据量面积图',
-    },
-    toolbox: {
-        feature: {
-            dataZoom: {
-                yAxisIndex: 'none'
-            },
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    xAxis: {
-        type: 'time',
-        boundaryGap: false
-    },
-    yAxis: {
-        type: 'value',
-        boundaryGap: [0, '100%']
-    },
-    dataZoom: [{
-        type: 'inside',
-        start: 0,
-        end: 20
-    }, {
-        start: 0,
-        end: 20
-    }],
-    series: [
-        {
-            name: '模拟数据',
-            type: 'line',
-            smooth: true,
-            symbol: 'none',
-            areaStyle: {},
-            data: data
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/bar-animation-delay.js b/public/data/bar-animation-delay.js
deleted file mode 100644
index e06247a..0000000
--- a/public/data/bar-animation-delay.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-title: Animation Delay
-titleCN: 柱状图动画延迟
-category: bar
-difficulty: 5
-*/
-
-var xAxisData = [];
-var data1 = [];
-var data2 = [];
-for (var i = 0; i < 100; i++) {
-    xAxisData.push('类目' + i);
-    data1.push((Math.sin(i / 5) * (i / 5 -10) + i / 6) * 5);
-    data2.push((Math.cos(i / 5) * (i / 5 -10) + i / 6) * 5);
-}
-
-option = {
-    title: {
-        text: '柱状图动画延迟'
-    },
-    legend: {
-        data: ['bar', 'bar2']
-    },
-    toolbox: {
-        // y: 'bottom',
-        feature: {
-            magicType: {
-                type: ['stack', 'tiled']
-            },
-            dataView: {},
-            saveAsImage: {
-                pixelRatio: 2
-            }
-        }
-    },
-    tooltip: {},
-    xAxis: {
-        data: xAxisData,
-        splitLine: {
-            show: false
-        }
-    },
-    yAxis: {
-    },
-    series: [{
-        name: 'bar',
-        type: 'bar',
-        data: data1,
-        emphasis: {
-            focus: 'series'
-        },
-        animationDelay: function (idx) {
-            return idx * 10;
-        }
-    }, {
-        name: 'bar2',
-        type: 'bar',
-        data: data2,
-        emphasis: {
-            focus: 'series'
-        },
-        animationDelay: function (idx) {
-            return idx * 10 + 100;
-        }
-    }],
-    animationEasing: 'elasticOut',
-    animationDelayUpdate: function (idx) {
-        return idx * 5;
-    }
-};
\ No newline at end of file
diff --git a/public/data/bar-background.js b/public/data/bar-background.js
deleted file mode 100644
index 74d9ce0..0000000
--- a/public/data/bar-background.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-title: Bar with Background
-category: bar
-titleCN: 带背景色的柱状图
-difficulty: 0
-*/
-
-option = {
-    xAxis: {
-        type: 'category',
-        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-    },
-    yAxis: {
-        type: 'value'
-    },
-    series: [{
-        data: [120, 200, 150, 80, 70, 110, 130],
-        type: 'bar',
-        showBackground: true,
-        backgroundStyle: {
-            color: 'rgba(180, 180, 180, 0.2)'
-        }
-    }]
-};
diff --git a/public/data/bar-brush.js b/public/data/bar-brush.js
deleted file mode 100644
index 82f6178..0000000
--- a/public/data/bar-brush.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-title: Brush Select on Column Chart
-titleCN: 柱状图框选
-category: bar
-difficulty: 4
-*/
-
-var xAxisData = [];
-var data1 = [];
-var data2 = [];
-var data3 = [];
-var data4 = [];
-
-for (var i = 0; i < 10; i++) {
-    xAxisData.push('Class' + i);
-    data1.push((Math.random() * 2).toFixed(2));
-    data2.push((Math.random() * 5).toFixed(2));
-    data3.push((Math.random() + 0.3).toFixed(2));
-    data4.push(-Math.random().toFixed(2));
-}
-
-var emphasisStyle = {
-    itemStyle: {
-        shadowBlur: 10,
-        shadowColor: 'rgba(0,0,0,0.3)'
-    }
-};
-
-option = {
-    legend: {
-        data: ['bar', 'bar2', 'bar3', 'bar4'],
-        left: '10%'
-    },
-    brush: {
-        toolbox: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],
-        xAxisIndex: 0
-    },
-    toolbox: {
-        feature: {
-            magicType: {
-                type: ['stack', 'tiled']
-            },
-            dataView: {}
-        }
-    },
-    tooltip: {},
-    xAxis: {
-        data: xAxisData,
-        name: 'X Axis',
-        axisLine: {onZero: true},
-        splitLine: {show: false},
-        splitArea: {show: false}
-    },
-    yAxis: {},
-    grid: {
-        bottom: 100
-    },
-    series: [
-        {
-            name: 'bar',
-            type: 'bar',
-            stack: 'one',
-            emphasis: emphasisStyle,
-            data: data1
-        },
-        {
-            name: 'bar2',
-            type: 'bar',
-            stack: 'one',
-            emphasis: emphasisStyle,
-            data: data2
-        },
-        {
-            name: 'bar3',
-            type: 'bar',
-            stack: 'two',
-            emphasis: emphasisStyle,
-            data: data3
-        },
-        {
-            name: 'bar4',
-            type: 'bar',
-            stack: 'two',
-            emphasis: emphasisStyle,
-            data: data4
-        }
-    ]
-};
-
-myChart.on('brushSelected', renderBrushed);
-
-function renderBrushed(params) {
-    var brushed = [];
-    var brushComponent = params.batch[0];
-
-    for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
-        var rawIndices = brushComponent.selected[sIdx].dataIndex;
-        brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
-    }
-
-    myChart.setOption({
-        title: {
-            backgroundColor: '#333',
-            text: 'SELECTED DATA INDICES: \n' + brushed.join('\n'),
-            bottom: 0,
-            right:'10%',
-            width: 100,
-            textStyle: {
-                fontSize: 12,
-                color: '#fff'
-            }
-        }
-    });
-}
\ No newline at end of file
diff --git a/public/data/bar-data-color.js b/public/data/bar-data-color.js
deleted file mode 100644
index f6e42c7..0000000
--- a/public/data/bar-data-color.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-title: Set Style of Single Bar.
-category: bar
-titleCN: 自定义单个柱子颜色
-difficulty: 1
-*/
-
-option = {
-    xAxis: {
-        type: 'category',
-        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-    },
-    yAxis: {
-        type: 'value'
-    },
-    series: [{
-        data: [120, {
-            value: 200,
-            itemStyle: {
-                color: '#a90000'
-            }
-        }, 150, 80, 70, 110, 130],
-        type: 'bar'
-    }]
-};
\ No newline at end of file
diff --git a/public/data/bar-drilldown.js b/public/data/bar-drilldown.js
deleted file mode 100644
index 8a95a53..0000000
--- a/public/data/bar-drilldown.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-title: Bar Chart Drilldown Animation.
-category: bar
-titleCN: 柱状图下钻动画
-difficulty: 5
-*/
-
-option = {
-    xAxis: {
-        data: ['Animals', 'Fruits', 'Cars']
-    },
-    yAxis: {},
-    dataGroupId: '',
-    animationDurationUpdate: 500,
-    series: {
-        type: 'bar',
-        id: 'sales',
-        data: [{
-            value: 5,
-            groupId: 'animals'
-        }, {
-            value: 2,
-            groupId: 'fruits'
-        }, {
-            value: 4,
-            groupId: 'cars'
-        }],
-        universalTransition: {
-            enabled: true,
-            divideShape: 'clone'
-        }
-    }
-};
-
-var drilldownData = [{
-    dataGroupId: 'animals',
-    data: [
-        ['Cats', 4],
-        ['Dogs', 2],
-        ['Cows', 1],
-        ['Sheep', 2],
-        ['Pigs', 1]
-    ]
-}, {
-    dataGroupId: 'fruits',
-    data: [
-        ['Apples', 4],
-        ['Oranges', 2]
-    ]
-}, {
-    dataGroupId: 'cars',
-    data: [
-        ['Toyota', 4],
-        ['Opel', 2],
-        ['Volkswagen', 2]
-    ]
-}];
-
-myChart.on('click', function (event) {
-    if (event.data) {
-        var subData = drilldownData.find(function (data) {
-            return data.dataGroupId === event.data.groupId;
-        });
-        if (!subData) {
-            return;
-        }
-        myChart.setOption({
-            xAxis: {
-                data: subData.data.map(function (item) {
-                    return item[0];
-                })
-            },
-            series: {
-                type: 'bar',
-                id: 'sales',
-                dataGroupId: subData.dataGroupId,
-                data: subData.data.map(function (item) {
-                    return item[1];
-                }),
-                universalTransition: {
-                    enabled: true,
-                    divideShape: 'clone'
-                }
-            },
-            graphic: [{
-                type: 'text',
-                left: 50,
-                top: 20,
-                style: {
-                    text: 'Back',
-                    fontSize: 18
-                },
-                onclick: function () {
-                    myChart.setOption(option);
-                }
-            }]
-        });
-    }
-});
\ No newline at end of file
diff --git a/public/data/bar-gradient.js b/public/data/bar-gradient.js
deleted file mode 100644
index a98dd16..0000000
--- a/public/data/bar-gradient.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-title: Clickable Column Chart with Gradient
-titleCN: 特性示例:渐变色 阴影 点击缩放
-category: bar
-difficulty: 3
-*/
-
-var dataAxis = ['点', '击', '柱', '子', '或', '者', '两', '指', '在', '触', '屏', '上', '滑', '动', '能', '够', '自', '动', '缩', '放'];
-var data = [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220];
-var yMax = 500;
-var dataShadow = [];
-
-for (var i = 0; i < data.length; i++) {
-    dataShadow.push(yMax);
-}
-
-option = {
-    title: {
-        text: '特性示例:渐变色 阴影 点击缩放',
-        subtext: 'Feature Sample: Gradient Color, Shadow, Click Zoom'
-    },
-    xAxis: {
-        data: dataAxis,
-        axisLabel: {
-            inside: true,
-            textStyle: {
-                color: '#fff'
-            }
-        },
-        axisTick: {
-            show: false
-        },
-        axisLine: {
-            show: false
-        },
-        z: 10
-    },
-    yAxis: {
-        axisLine: {
-            show: false
-        },
-        axisTick: {
-            show: false
-        },
-        axisLabel: {
-            textStyle: {
-                color: '#999'
-            }
-        }
-    },
-    dataZoom: [
-        {
-            type: 'inside'
-        }
-    ],
-    series: [
-        {
-            type: 'bar',
-            showBackground: true,
-            itemStyle: {
-                color: new echarts.graphic.LinearGradient(
-                    0, 0, 0, 1,
-                    [
-                        {offset: 0, color: '#83bff6'},
-                        {offset: 0.5, color: '#188df0'},
-                        {offset: 1, color: '#188df0'}
-                    ]
-                )
-            },
-            emphasis: {
-                itemStyle: {
-                    color: new echarts.graphic.LinearGradient(
-                        0, 0, 0, 1,
-                        [
-                            {offset: 0, color: '#2378f7'},
-                            {offset: 0.7, color: '#2378f7'},
-                            {offset: 1, color: '#83bff6'}
-                        ]
-                    )
-                }
-            },
-            data: data
-        }
-    ]
-};
-
-// Enable data zoom when user click bar.
-var zoomSize = 6;
-myChart.on('click', function (params) {
-    console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
-    myChart.dispatchAction({
-        type: 'dataZoom',
-        startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
-        endValue: dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
-    });
-});
\ No newline at end of file
diff --git a/public/data/bar-histogram.js b/public/data/bar-histogram.js
deleted file mode 100644
index 9a5d405..0000000
--- a/public/data/bar-histogram.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-title: Histogram with Custom Series
-category: custom
-titleCN: 直方图(自定义系列)
-difficulty: 0
-*/
-
-// See https://github.com/ecomfe/echarts-stat
-echarts.registerTransform(ecStat.transform.histogram);
-
-option = {
-    dataset: [{
-        source: [
-            [8.3, 143],
-            [8.6, 214],
-            [8.8, 251],
-            [10.5, 26],
-            [10.7, 86],
-            [10.8, 93],
-            [11.0, 176],
-            [11.0, 39],
-            [11.1, 221],
-            [11.2, 188],
-            [11.3, 57],
-            [11.4, 91],
-            [11.4, 191],
-            [11.7, 8],
-            [12.0, 196],
-            [12.9, 177],
-            [12.9, 153],
-            [13.3, 201],
-            [13.7, 199],
-            [13.8, 47],
-            [14.0, 81],
-            [14.2, 98],
-            [14.5, 121],
-            [16.0, 37],
-            [16.3, 12],
-            [17.3, 105],
-            [17.5, 168],
-            [17.9, 84],
-            [18.0, 197],
-            [18.0, 155],
-            [20.6, 125]
-        ]
-    }, {
-        transform: {
-            type: 'ecStat:histogram'
-        }
-    }, {
-        transform: {
-            type: 'ecStat:histogram',
-            // print: true,
-            config: { dimensions: [1] }
-        }
-    }],
-    tooltip: {
-    },
-    grid: [{
-        top: '50%',
-        right: '50%'
-    }, {
-        bottom: '52%',
-        right: '50%',
-    }, {
-        top: '50%',
-        left: '52%'
-    }],
-    xAxis: [{
-        scale: true,
-        gridIndex: 0
-    }, {
-        type: 'category',
-        scale: true,
-        axisTick: { show: false },
-        axisLabel: { show: false },
-        axisLine: { show: false },
-        gridIndex: 1
-    }, {
-        scale: true,
-        gridIndex: 2
-    }],
-    yAxis: [{
-        gridIndex: 0
-    }, {
-        gridIndex: 1
-    }, {
-        type: 'category',
-        axisTick: { show: false },
-        axisLabel: { show: false },
-        axisLine: { show: false },
-        gridIndex: 2
-    }],
-    series: [{
-        name: 'origianl scatter',
-        type: 'scatter',
-        xAxisIndex: 0,
-        yAxisIndex: 0,
-        encode: { tooltip: [0, 1] },
-        datasetIndex: 0
-    }, {
-        name: 'histogram',
-        type: 'bar',
-        xAxisIndex: 1,
-        yAxisIndex: 1,
-        barWidth: '99.3%',
-        label: {
-            show: true,
-            position: 'top'
-        },
-        encode: { x: 0, y: 1, itemName: 4 },
-        datasetIndex: 1
-    }, {
-        name: 'histogram',
-        type: 'bar',
-        xAxisIndex: 2,
-        yAxisIndex: 2,
-        barWidth: '99.3%',
-        label: {
-            show: true,
-            position: 'right'
-        },
-        encode: { x: 1, y: 0, itemName: 4 },
-        datasetIndex: 2
-    }]
-};
diff --git a/public/data/bar-label-rotation.js b/public/data/bar-label-rotation.js
deleted file mode 100644
index 141a643..0000000
--- a/public/data/bar-label-rotation.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-title: Bar Label Rotation
-titleCN: 柱状图标签旋转
-category: bar
-difficulty: 3
-*/
-
-var posList = [
-    'left', 'right', 'top', 'bottom',
-    'inside',
-    'insideTop', 'insideLeft', 'insideRight', 'insideBottom',
-    'insideTopLeft', 'insideTopRight', 'insideBottomLeft', 'insideBottomRight'
-];
-
-app.configParameters = {
-    rotate: {
-        min: -90,
-        max: 90
-    },
-    align: {
-        options: {
-            left: 'left',
-            center: 'center',
-            right: 'right'
-        }
-    },
-    verticalAlign: {
-        options: {
-            top: 'top',
-            middle: 'middle',
-            bottom: 'bottom'
-        }
-    },
-    position: {
-        options: posList.reduce(function (map, pos) {
-            map[pos] = pos;
-            return map;
-        }, {})
-    },
-    distance: {
-        min: 0,
-        max: 100
-    }
-};
-
-app.config = {
-    rotate: 90,
-    align: 'left',
-    verticalAlign: 'middle',
-    position: 'insideBottom',
-    distance: 15,
-    onChange: function () {
-        var labelOption = {
-            normal: {
-                rotate: app.config.rotate,
-                align: app.config.align,
-                verticalAlign: app.config.verticalAlign,
-                position: app.config.position,
-                distance: app.config.distance
-            }
-        };
-        myChart.setOption({
-            series: [{
-                label: labelOption
-            }, {
-                label: labelOption
-            }, {
-                label: labelOption
-            }, {
-                label: labelOption
-            }]
-        });
-    }
-};
-
-
-var labelOption = {
-    show: true,
-    position: app.config.position,
-    distance: app.config.distance,
-    align: app.config.align,
-    verticalAlign: app.config.verticalAlign,
-    rotate: app.config.rotate,
-    formatter: '{c}  {name|{a}}',
-    fontSize: 16,
-    rich: {
-        name: {
-        }
-    }
-};
-
-option = {
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    legend: {
-        data: ['Forest', 'Steppe', 'Desert', 'Wetland']
-    },
-    toolbox: {
-        show: true,
-        orient: 'vertical',
-        left: 'right',
-        top: 'center',
-        feature: {
-            mark: {show: true},
-            dataView: {show: true, readOnly: false},
-            magicType: {show: true, type: ['line', 'bar', 'stack', 'tiled']},
-            restore: {show: true},
-            saveAsImage: {show: true}
-        }
-    },
-    xAxis: [
-        {
-            type: 'category',
-            axisTick: {show: false},
-            data: ['2012', '2013', '2014', '2015', '2016']
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    series: [
-        {
-            name: 'Forest',
-            type: 'bar',
-            barGap: 0,
-            label: labelOption,
-            emphasis: {
-                focus: 'series'
-            },
-            data: [320, 332, 301, 334, 390]
-        },
-        {
-            name: 'Steppe',
-            type: 'bar',
-            label: labelOption,
-            emphasis: {
-                focus: 'series'
-            },
-            data: [220, 182, 191, 234, 290]
-        },
-        {
-            name: 'Desert',
-            type: 'bar',
-            label: labelOption,
-            emphasis: {
-                focus: 'series'
-            },
-            data: [150, 232, 201, 154, 190]
-        },
-        {
-            name: 'Wetland',
-            type: 'bar',
-            label: labelOption,
-            emphasis: {
-                focus: 'series'
-            },
-            data: [98, 77, 101, 99, 40]
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/bar-large.js b/public/data/bar-large.js
deleted file mode 100644
index 926c0ee..0000000
--- a/public/data/bar-large.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-title: Large Scale Bar Chart
-category: bar
-titleCN: 大数据量柱图
-difficulty: 5
-*/
-
-
-var dataCount = 5e5;
-var data = generateData(dataCount);
-
-var option = {
-    title: {
-        text: echarts.format.addCommas(dataCount) + ' Data',
-        left: 10
-    },
-    toolbox: {
-        feature: {
-            dataZoom: {
-                yAxisIndex: false
-            },
-            saveAsImage: {
-                pixelRatio: 2
-            }
-        }
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    grid: {
-        bottom: 90
-    },
-    dataZoom: [{
-        type: 'inside'
-    }, {
-        type: 'slider'
-    }],
-    xAxis: {
-        data: data.categoryData,
-        silent: false,
-        splitLine: {
-            show: false
-        },
-        splitArea: {
-            show: false
-        }
-    },
-    yAxis: {
-        splitArea: {
-            show: false
-        }
-    },
-    series: [{
-        type: 'bar',
-        data: data.valueData,
-        // Set `large` for large data amount
-        large: true
-    }]
-};
-
-function generateData(count) {
-    var baseValue = Math.random() * 1000;
-    var time = +new Date(2011, 0, 1);
-    var smallBaseValue;
-
-    function next(idx) {
-        smallBaseValue = idx % 30 === 0
-            ? Math.random() * 700
-            : (smallBaseValue + Math.random() * 500 - 250);
-        baseValue += Math.random() * 20 - 10;
-        return Math.max(
-            0,
-            Math.round(baseValue + smallBaseValue) + 3000
-        );
-    }
-
-    var categoryData = [];
-    var valueData = [];
-
-    for (var i = 0; i < count; i++) {
-        categoryData.push(echarts.format.formatTime('yyyy-MM-dd\nhh:mm:ss', time));
-        valueData.push(next(i).toFixed(2));
-        time += 1000;
-    }
-
-    return {
-        categoryData: categoryData,
-        valueData: valueData
-    };
-}
diff --git a/public/data/bar-negative.js b/public/data/bar-negative.js
deleted file mode 100644
index 8cfd1c6..0000000
--- a/public/data/bar-negative.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-title: Bar Chart with Negative Value
-titleCN: 正负条形图
-category: bar
-difficulty: 4
-*/
-
-option = {
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-        }
-    },
-    legend: {
-        data: ['利润', '支出', '收入']
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    yAxis: [
-        {
-            type: 'category',
-            axisTick: {
-                show: false
-            },
-            data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
-        }
-    ],
-    series: [
-        {
-            name: '利润',
-            type: 'bar',
-            label: {
-                show: true,
-                position: 'inside'
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [200, 170, 240, 244, 200, 220, 210]
-        },
-        {
-            name: '收入',
-            type: 'bar',
-            stack: '总量',
-            label: {
-                show: true
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [320, 302, 341, 374, 390, 450, 420]
-        },
-        {
-            name: '支出',
-            type: 'bar',
-            stack: '总量',
-            label: {
-                show: true,
-                position: 'left'
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [-120, -132, -101, -134, -190, -230, -210]
-        }
-    ]
-};
diff --git a/public/data/bar-negative2.js b/public/data/bar-negative2.js
deleted file mode 100644
index 64fcde9..0000000
--- a/public/data/bar-negative2.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-title: Bar Chart with Negative Value
-titleCN: 交错正负轴标签
-category: bar
-difficulty: 2
-*/
-
-var labelRight = {
-    position: 'right'
-};
-option = {
-    title: {
-        text: '交错正负轴标签',
-        subtext: 'From ExcelHome',
-        sublink: 'http://e.weibo.com/1341556070/AjwF2AgQm'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-        }
-    },
-    grid: {
-        top: 80,
-        bottom: 30
-    },
-    xAxis: {
-        type: 'value',
-        position: 'top',
-        splitLine: {
-            lineStyle: {
-                type: 'dashed'
-            }
-        }
-    },
-    yAxis: {
-        type: 'category',
-        axisLine: {show: false},
-        axisLabel: {show: false},
-        axisTick: {show: false},
-        splitLine: {show: false},
-        data: ['ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'two', 'one']
-    },
-    series: [
-        {
-            name: '生活费',
-            type: 'bar',
-            stack: '总量',
-            label: {
-                show: true,
-                formatter: '{b}'
-            },
-            data: [
-                {value: -0.07, label: labelRight},
-                {value: -0.09, label: labelRight},
-                0.2, 0.44,
-                {value: -0.23, label: labelRight},
-                0.08,
-                {value: -0.17, label: labelRight},
-                0.47,
-                {value: -0.36, label: labelRight},
-                0.18
-            ]
-        }
-    ]
-};
diff --git a/public/data/bar-polar-label-radial.js b/public/data/bar-polar-label-radial.js
deleted file mode 100644
index f5c9054..0000000
--- a/public/data/bar-polar-label-radial.js
+++ /dev/null
@@ -1,30 +0,0 @@
-option = {
-    title: [{
-        text: 'Radial Polar Bar Label Position (middle)'
-    }],
-    polar: {
-        radius: [30, '80%']
-    },
-    radiusAxis: {
-        max: 4,
-        startAngle: 75
-    },
-    angleAxis: {
-        type: 'category',
-        data: ['a', 'b', 'c', 'd'],
-        startAngle: 75
-    },
-    tooltip: {},
-    series: {
-        type: 'bar',
-        data: [2, 1.2, 2.4, 3.6],
-        coordinateSystem: 'polar',
-        label: {
-            show: true,
-            position: 'middle', // or 'start', 'insideStart', 'end', 'insideEnd'
-            formatter: '{b}: {c}',
-        }
-    },
-    backgroundColor: '#fff',
-    animation: 0
-};
diff --git a/public/data/bar-polar-label-tangential.js b/public/data/bar-polar-label-tangential.js
deleted file mode 100644
index db37d3b..0000000
--- a/public/data/bar-polar-label-tangential.js
+++ /dev/null
@@ -1,30 +0,0 @@
-option = {
-    title: [{
-        text: 'Radial Polar Bar Label Position (middle)'
-    }],
-    polar: {
-        radius: [30, '80%']
-    },
-    angleAxis: {
-        max: 4,
-        startAngle: 75
-    },
-    radiusAxis: {
-        type: 'category',
-        data: ['a', 'b', 'c', 'd'],
-        startAngle: 75
-    },
-    tooltip: {},
-    series: {
-        type: 'bar',
-        data: [2, 1.2, 2.4, 3.6],
-        coordinateSystem: 'polar',
-        label: {
-            show: true,
-            position: 'middle', // or 'start', 'insideStart', 'end', 'insideEnd'
-            formatter: '{b}: {c}',
-        }
-    },
-    backgroundColor: '#fff',
-    animation: 0
-};
diff --git a/public/data/bar-polar-real-estate.js b/public/data/bar-polar-real-estate.js
deleted file mode 100644
index 31fc51d..0000000
--- a/public/data/bar-polar-real-estate.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-title: Bar Chart on Polar
-category: bar
-difficulty: 7
-shotWidth: 800
-*/
-
-var data = [
-    [5000, 10000, 6785.71],
-    [4000, 10000, 6825],
-    [3000, 6500, 4463.33],
-    [2500, 5600, 3793.83],
-    [2000, 4000, 3060],
-    [2000, 4000, 3222.33],
-    [2500, 4000, 3133.33],
-    [1800, 4000, 3100],
-    [2000, 3500, 2750],
-    [2000, 3000, 2500],
-    [1800, 3000, 2433.33],
-    [2000, 2700, 2375],
-    [1500, 2800, 2150],
-    [1500, 2300, 2100],
-    [1600, 3500, 2057.14],
-    [1500, 2600, 2037.5],
-    [1500, 2417.54, 1905.85],
-    [1500, 2000, 1775],
-    [1500, 1800, 1650]
-];
-var cities = ['北京', '上海', '深圳', '广州', '苏州', '杭州', '南京', '福州', '青岛', '济南', '长春', '大连', '温州', '郑州', '武汉', '成都', '东莞', '沈阳', '烟台'];
-var barHeight = 50;
-
-option = {
-    title: {
-        text: '在中国租个房子有多贵?',
-        subtext: '市中心一室月租费(数据来源:https://www.numbeo.com)'
-    },
-    legend: {
-        show: true,
-        data: ['价格范围', '均值']
-    },
-    grid: {
-        top: 100
-    },
-    angleAxis: {
-        type: 'category',
-        data: cities
-    },
-    tooltip: {
-        show: true,
-        formatter: function (params) {
-            var id = params.dataIndex;
-            return cities[id] + '<br>最低:' + data[id][0] + '<br>最高:' + data[id][1] + '<br>平均:' + data[id][2];
-        }
-    },
-    radiusAxis: {
-    },
-    polar: {
-    },
-    series: [{
-        type: 'bar',
-        itemStyle: {
-            color: 'transparent'
-        },
-        data: data.map(function (d) {
-            return d[0];
-        }),
-        coordinateSystem: 'polar',
-        stack: '最大最小值',
-        silent: true
-    }, {
-        type: 'bar',
-        data: data.map(function (d) {
-            return d[1] - d[0];
-        }),
-        coordinateSystem: 'polar',
-        name: '价格范围',
-        stack: '最大最小值'
-    }, {
-        type: 'bar',
-        itemStyle: {
-            color: 'transparent'
-        },
-        data: data.map(function (d) {
-            return d[2] - barHeight;
-        }),
-        coordinateSystem: 'polar',
-        stack: '均值',
-        silent: true,
-        z: 10
-    }, {
-        type: 'bar',
-        data: data.map(function (d) {
-            return barHeight * 2;
-        }),
-        coordinateSystem: 'polar',
-        name: '均值',
-        stack: '均值',
-        barGap: '-100%',
-        z: 10
-    }]
-};
diff --git a/public/data/bar-polar-stack-radial.js b/public/data/bar-polar-stack-radial.js
deleted file mode 100644
index f076e6f..0000000
--- a/public/data/bar-polar-stack-radial.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-title: Stacked Bar Chart on Polar(Radial)
-titleCN: 极坐标系下的堆叠柱状图
-category: bar
-difficulty: 7
-*/
-
-option = {
-    angleAxis: {
-        type: 'category',
-        data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
-    },
-    radiusAxis: {
-    },
-    polar: {
-    },
-    series: [{
-        type: 'bar',
-        data: [1, 2, 3, 4, 3, 5, 1],
-        coordinateSystem: 'polar',
-        name: 'A',
-        stack: 'a',
-        emphasis: {
-            focus: 'series'
-        }
-    }, {
-        type: 'bar',
-        data: [2, 4, 6, 1, 3, 2, 1],
-        coordinateSystem: 'polar',
-        name: 'B',
-        stack: 'a',
-        emphasis: {
-            focus: 'series'
-        }
-    }, {
-        type: 'bar',
-        data: [1, 2, 3, 4, 1, 2, 5],
-        coordinateSystem: 'polar',
-        name: 'C',
-        stack: 'a',
-        emphasis: {
-            focus: 'series'
-        }
-    }],
-    legend: {
-        show: true,
-        data: ['A', 'B', 'C']
-    }
-};
diff --git a/public/data/bar-polar-stack.js b/public/data/bar-polar-stack.js
deleted file mode 100644
index 8812346..0000000
--- a/public/data/bar-polar-stack.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-title: Stacked Bar Chart on Polar
-titleCN: 极坐标系下的堆叠柱状图
-category: bar
-difficulty: 7
-*/
-
-option = {
-    angleAxis: {
-    },
-    radiusAxis: {
-        type: 'category',
-        data: ['周一', '周二', '周三', '周四'],
-        z: 10
-    },
-    polar: {
-    },
-    series: [{
-        type: 'bar',
-        data: [1, 2, 3, 4],
-        coordinateSystem: 'polar',
-        name: 'A',
-        stack: 'a',
-        emphasis: {
-            focus: 'series'
-        }
-    }, {
-        type: 'bar',
-        data: [2, 4, 6, 8],
-        coordinateSystem: 'polar',
-        name: 'B',
-        stack: 'a',
-        emphasis: {
-            focus: 'series'
-        }
-    }, {
-        type: 'bar',
-        data: [1, 2, 3, 4],
-        coordinateSystem: 'polar',
-        name: 'C',
-        stack: 'a',
-        emphasis: {
-            focus: 'series'
-        }
-    }],
-    legend: {
-        show: true,
-        data: ['A', 'B', 'C']
-    }
-};
diff --git a/public/data/bar-race-country.js b/public/data/bar-race-country.js
deleted file mode 100644
index 1dcc988..0000000
--- a/public/data/bar-race-country.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-title: Bar Race
-titleCN: 动态排序柱状图 - 人均收入
-category: bar
-difficulty: 6
-videoStart: 1000
-videoEnd: 6000
-*/
-
-
-var updateFrequency = 2000;
-var dimension = 0;
-
-var countryColors = {"Australia":"#00008b","Canada":"#f00","China":"#ffde00","Cuba":"#002a8f","Finland":"#003580","France":"#ed2939","Germany":"#000","Iceland":"#003897","India":"#f93","Japan":"#bc002d","North Korea":"#024fa2","South Korea":"#000","New Zealand":"#00247d","Norway":"#ef2b2d","Poland":"#dc143c","Russia":"#d52b1e","Turkey":"#e30a17","United Kingdom":"#00247d","United States":"#b22234"};
-
-$.when(
-    $.getJSON('https://cdn.jsdelivr.net/npm/emoji-flags@1.3.0/data.json'),
-    $.getJSON(ROOT_PATH + '/data/asset/data/life-expectancy-table.json')
-).done(function (res0, res1) {
-    var flags = res0[0];
-    var data = res1[0];
-    var years = [];
-    for (var i = 0; i < data.length; ++i) {
-        if (years.length === 0 || years[years.length - 1] !== data[i][4]) {
-            years.push(data[i][4]);
-        }
-    }
-
-    function getFlag(countryName) {
-        if (!countryName) {
-            return '';
-        }
-        return (flags.find(function (item) {
-            return item.name === countryName;
-        }) || {}).emoji;
-    }
-    var startIndex = 10;
-    var startYear = years[startIndex];
-
-    var option = {
-        grid: {
-            top: 10,
-            bottom: 30,
-            left: 150,
-            right: 80
-        },
-        xAxis: {
-            max: 'dataMax',
-            label: {
-                formatter: function (n) {
-                    return Math.round(n);
-                }
-            }
-        },
-        dataset: {
-            source: data.slice(1).filter(function (d) {
-                return d[4] === startYear;
-            })
-        },
-        yAxis: {
-            type: 'category',
-            inverse: true,
-            max: 10,
-            axisLabel: {
-                show: true,
-                textStyle: {
-                    fontSize: 14
-                },
-                formatter: function (value) {
-                    return value + '{flag|' + getFlag(value) + '}';
-                },
-                rich: {
-                    flag: {
-                        fontSize: 25,
-                        padding: 5
-                    }
-                }
-            },
-            animationDuration: 300,
-            animationDurationUpdate: 300
-        },
-        series: [{
-            realtimeSort: true,
-            seriesLayoutBy: 'column',
-            type: 'bar',
-            itemStyle: {
-                color: function (param) {
-                    return countryColors[param.value[3]] || '#5470c6';
-                }
-            },
-            encode: {
-                x: dimension,
-                y: 3
-            },
-            label: {
-                show: true,
-                precision: 1,
-                position: 'right',
-                valueAnimation: true,
-                fontFamily: 'monospace'
-            }
-        }],
-        // Disable init animation.
-        animationDuration: 0,
-        animationDurationUpdate: updateFrequency,
-        animationEasing: 'linear',
-        animationEasingUpdate: 'linear',
-        graphic: {
-            elements: [{
-                type: 'text',
-                right: 160,
-                bottom: 60,
-                style: {
-                    text: startYear,
-                    font: 'bolder 80px monospace',
-                    fill: 'rgba(100, 100, 100, 0.25)'
-                },
-                z: 100
-            }]
-        }
-    };
-
-    // console.log(option);
-    myChart.setOption(option);
-
-    for (var i = startIndex; i < years.length - 1; ++i) {
-        (function (i) {
-            setTimeout(function () {
-                updateYear(years[i + 1]);
-            }, (i - startIndex) * updateFrequency);
-        })(i);
-    }
-
-    function updateYear(year) {
-        var source = data.slice(1).filter(function (d) {
-            return d[4] === year;
-        });
-        option.series[0].data = source;
-        option.graphic.elements[0].style.text = year;
-        myChart.setOption(option);
-    }
-})
\ No newline at end of file
diff --git a/public/data/bar-race.js b/public/data/bar-race.js
deleted file mode 100644
index 21f76bf..0000000
--- a/public/data/bar-race.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-title: Bar Race
-titleCN: 动态排序柱状图
-category: bar
-difficulty: 5
-videoStart: 1000
-videoEnd: 6000
-*/
-
-var data = [];
-for (let i = 0; i < 5; ++i) {
-    data.push(Math.round(Math.random() * 200));
-}
-
-option = {
-    xAxis: {
-        max: 'dataMax',
-    },
-    yAxis: {
-        type: 'category',
-        data: ['A', 'B', 'C', 'D', 'E'],
-        inverse: true,
-        animationDuration: 300,
-        animationDurationUpdate: 300,
-        max: 2 // only the largest 3 bars will be displayed
-    },
-    series: [{
-        realtimeSort: true,
-        name: 'X',
-        type: 'bar',
-        data: data,
-        label: {
-            show: true,
-            position: 'right',
-            valueAnimation: true
-        }
-    }],
-    legend: {
-        show: true
-    },
-    animationDuration: 0,
-    animationDurationUpdate: 3000,
-    animationEasing: 'linear',
-    animationEasingUpdate: 'linear'
-};
-
-function run () {
-    var data = option.series[0].data;
-    for (var i = 0; i < data.length; ++i) {
-        if (Math.random() > 0.9) {
-            data[i] += Math.round(Math.random() * 2000);
-        }
-        else {
-            data[i] += Math.round(Math.random() * 200);
-        }
-    }
-    myChart.setOption(option);
-}
-
-setTimeout(function() {
-    run();
-}, 0);
-setInterval(function () {
-    run();
-}, 3000);
diff --git a/public/data/bar-rich-text.js b/public/data/bar-rich-text.js
deleted file mode 100644
index d0c35d4..0000000
--- a/public/data/bar-rich-text.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-title: Wheater Statistics
-category: 'bar, rich'
-titleCN: 天气统计(富文本)
-difficulty: 6
-*/
-
-
-var weatherIcons = {
-    'Sunny': ROOT_PATH + '/data/asset/img/weather/sunny_128.png',
-    'Cloudy': ROOT_PATH + '/data/asset/img/weather/cloudy_128.png',
-    'Showers': ROOT_PATH + '/data/asset/img/weather/showers_128.png'
-};
-
-var seriesLabel = {
-    show: true
-}
-
-option = {
-    title: {
-        text: 'Weather Statistics'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    legend: {
-        data: ['City Alpha', 'City Beta', 'City Gamma']
-    },
-    grid: {
-        left: 100
-    },
-    toolbox: {
-        show: true,
-        feature: {
-            saveAsImage: {}
-        }
-    },
-    xAxis: {
-        type: 'value',
-        name: 'Days',
-        axisLabel: {
-            formatter: '{value}'
-        }
-    },
-    yAxis: {
-        type: 'category',
-        inverse: true,
-        data: ['Sunny', 'Cloudy', 'Showers'],
-        axisLabel: {
-            formatter: function (value) {
-                return '{' + value + '| }\n{value|' + value + '}';
-            },
-            margin: 20,
-            rich: {
-                value: {
-                    lineHeight: 30,
-                    align: 'center'
-                },
-                Sunny: {
-                    height: 40,
-                    align: 'center',
-                    backgroundColor: {
-                        image: weatherIcons.Sunny
-                    }
-                },
-                Cloudy: {
-                    height: 40,
-                    align: 'center',
-                    backgroundColor: {
-                        image: weatherIcons.Cloudy
-                    }
-                },
-                Showers: {
-                    height: 40,
-                    align: 'center',
-                    backgroundColor: {
-                        image: weatherIcons.Showers
-                    }
-                }
-            }
-        }
-    },
-    series: [
-        {
-            name: 'City Alpha',
-            type: 'bar',
-            data: [165, 170, 30],
-            label: seriesLabel,
-            markPoint: {
-                symbolSize: 1,
-                symbolOffset: [0, '50%'],
-                label: {
-                    formatter: '{a|{a}\n}{b|{b} }{c|{c}}',
-                    backgroundColor: 'rgb(242,242,242)',
-                    borderColor: '#aaa',
-                    borderWidth: 1,
-                    borderRadius: 4,
-                    padding: [4, 10],
-                    lineHeight: 26,
-                    // shadowBlur: 5,
-                    // shadowColor: '#000',
-                    // shadowOffsetX: 0,
-                    // shadowOffsetY: 1,
-                    position: 'right',
-                    distance: 20,
-                    rich: {
-                        a: {
-                            align: 'center',
-                            color: '#fff',
-                            fontSize: 18,
-                            textShadowBlur: 2,
-                            textShadowColor: '#000',
-                            textShadowOffsetX: 0,
-                            textShadowOffsetY: 1,
-                            textBorderColor: '#333',
-                            textBorderWidth: 2
-                        },
-                        b: {
-                            color: '#333'
-                        },
-                        c: {
-                            color: '#ff8811',
-                            textBorderColor: '#000',
-                            textBorderWidth: 1,
-                            fontSize: 22
-                        }
-                    }
-                },
-                data: [
-                    {type: 'max', name: 'max days: '},
-                    {type: 'min', name: 'min days: '}
-                ]
-            }
-        },
-        {
-            name: 'City Beta',
-            type: 'bar',
-            label: seriesLabel,
-            data: [150, 105, 110]
-        },
-        {
-            name: 'City Gamma',
-            type: 'bar',
-            label: seriesLabel,
-            data: [220, 82, 63]
-        }
-    ]
-};
diff --git a/public/data/bar-simple.js b/public/data/bar-simple.js
deleted file mode 100644
index 6a584f3..0000000
--- a/public/data/bar-simple.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-title: Basic Bar
-category: bar
-titleCN: 基础柱状图
-difficulty: 0
-*/
-
-option = {
-    xAxis: {
-        type: 'category',
-        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-    },
-    yAxis: {
-        type: 'value'
-    },
-    series: [{
-        data: [120, 200, 150, 80, 70, 110, 130],
-        type: 'bar'
-    }]
-};
diff --git a/public/data/bar-stack.js b/public/data/bar-stack.js
deleted file mode 100644
index 8d87101..0000000
--- a/public/data/bar-stack.js
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-title: Stacked Column Chart
-titleCN: 堆叠柱状图
-category: bar
-difficulty: 3
-*/
-
-option = {
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-        }
-    },
-    legend: {
-        data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎', '百度', '谷歌', '必应', '其他']
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: [
-        {
-            type: 'category',
-            data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    series: [
-        {
-            name: '直接访问',
-            type: 'bar',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [320, 332, 301, 334, 390, 330, 320]
-        },
-        {
-            name: '邮件营销',
-            type: 'bar',
-            stack: '广告',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [120, 132, 101, 134, 90, 230, 210]
-        },
-        {
-            name: '联盟广告',
-            type: 'bar',
-            stack: '广告',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [220, 182, 191, 234, 290, 330, 310]
-        },
-        {
-            name: '视频广告',
-            type: 'bar',
-            stack: '广告',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [150, 232, 201, 154, 190, 330, 410]
-        },
-        {
-            name: '搜索引擎',
-            type: 'bar',
-            data: [862, 1018, 964, 1026, 1679, 1600, 1570],
-            emphasis: {
-                focus: 'series'
-            },
-            markLine: {
-                lineStyle: {
-                    type: 'dashed'
-                },
-                data: [
-                    [{type: 'min'}, {type: 'max'}]
-                ]
-            }
-        },
-        {
-            name: '百度',
-            type: 'bar',
-            barWidth: 5,
-            stack: '搜索引擎',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [620, 732, 701, 734, 1090, 1130, 1120]
-        },
-        {
-            name: '谷歌',
-            type: 'bar',
-            stack: '搜索引擎',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [120, 132, 101, 134, 290, 230, 220]
-        },
-        {
-            name: '必应',
-            type: 'bar',
-            stack: '搜索引擎',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [60, 72, 71, 74, 190, 130, 110]
-        },
-        {
-            name: '其他',
-            type: 'bar',
-            stack: '搜索引擎',
-            emphasis: {
-                focus: 'series'
-            },
-            data: [62, 82, 91, 84, 109, 110, 120]
-        }
-    ]
-};
diff --git a/public/data/bar-tick-align.js b/public/data/bar-tick-align.js
deleted file mode 100644
index 7707cd0..0000000
--- a/public/data/bar-tick-align.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-title: Axis Align with Tick
-titleCN: 坐标轴刻度与标签对齐
-category: bar
-difficulty: 0
-*/
-
-option = {
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-        }
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: [
-        {
-            type: 'category',
-            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-            axisTick: {
-                alignWithLabel: true
-            }
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    series: [
-        {
-            name: '直接访问',
-            type: 'bar',
-            barWidth: '60%',
-            data: [10, 52, 200, 334, 390, 330, 220]
-        }
-    ]
-};
diff --git a/public/data/bar-waterfall.js b/public/data/bar-waterfall.js
deleted file mode 100644
index 5e03b5c..0000000
--- a/public/data/bar-waterfall.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-title: Waterfall Chart
-titleCN: 瀑布图(柱状图模拟)
-category: bar
-difficulty: 1
-*/
-
-option = {
-    title: {
-        text: '深圳月最低生活费组成(单位:元)',
-        subtext: 'From ExcelHome',
-        sublink: 'http://e.weibo.com/1341556070/AjQH99che'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-        },
-        formatter: function (params) {
-            var tar = params[1];
-            return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
-        }
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: {
-        type: 'category',
-        splitLine: {show: false},
-        data: ['总费用', '房租', '水电费', '交通费', '伙食费', '日用品数']
-    },
-    yAxis: {
-        type: 'value'
-    },
-    series: [
-        {
-            name: '辅助',
-            type: 'bar',
-            stack: '总量',
-            itemStyle: {
-                barBorderColor: 'rgba(0,0,0,0)',
-                color: 'rgba(0,0,0,0)'
-            },
-            emphasis: {
-                itemStyle: {
-                    barBorderColor: 'rgba(0,0,0,0)',
-                    color: 'rgba(0,0,0,0)'
-                }
-            },
-            data: [0, 1700, 1400, 1200, 300, 0]
-        },
-        {
-            name: '生活费',
-            type: 'bar',
-            stack: '总量',
-            label: {
-                show: true,
-                position: 'inside'
-            },
-            data: [2900, 1200, 300, 200, 900, 300]
-        }
-    ]
-};
diff --git a/public/data/bar-waterfall2.js b/public/data/bar-waterfall2.js
deleted file mode 100644
index d661a64..0000000
--- a/public/data/bar-waterfall2.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-title: Waterfall Chart
-titleCN: 阶梯瀑布图(柱状图模拟)
-category: bar
-difficulty: 3
-*/
-
-option = {
-    title: {
-        text: '阶梯瀑布图',
-        subtext: 'From ExcelHome',
-        sublink: 'http://e.weibo.com/1341556070/Aj1J2x5a5'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
-        },
-        formatter: function (params) {
-            var tar;
-            if (params[1].value !== '-') {
-                tar = params[1];
-            }
-            else {
-                tar = params[0];
-            }
-            return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
-        }
-    },
-    legend: {
-        data: ['支出', '收入']
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: {
-        type: 'category',
-        splitLine: {show: false},
-        data: function () {
-            var list = [];
-            for (var i = 1; i <= 11; i++) {
-                list.push('11月' + i + '日');
-            }
-            return list;
-        }()
-    },
-    yAxis: {
-        type: 'value'
-    },
-    series: [
-        {
-            name: '辅助',
-            type: 'bar',
-            stack: '总量',
-            itemStyle: {
-                barBorderColor: 'rgba(0,0,0,0)',
-                color: 'rgba(0,0,0,0)'
-            },
-            emphasis: {
-                itemStyle: {
-                    barBorderColor: 'rgba(0,0,0,0)',
-                    color: 'rgba(0,0,0,0)'
-                }
-            },
-            data: [0, 900, 1245, 1530, 1376, 1376, 1511, 1689, 1856, 1495, 1292]
-        },
-        {
-            name: '收入',
-            type: 'bar',
-            stack: '总量',
-            label: {
-                show: true,
-                position: 'top'
-            },
-            data: [900, 345, 393, '-', '-', 135, 178, 286, '-', '-', '-']
-        },
-        {
-            name: '支出',
-            type: 'bar',
-            stack: '总量',
-            label: {
-                show: true,
-                position: 'bottom'
-            },
-            data: ['-', '-', '-', 108, 154, '-', '-', '-', 119, 361, 203]
-        }
-    ]
-};
diff --git a/public/data/bar-y-category-stack.js b/public/data/bar-y-category-stack.js
deleted file mode 100644
index 9bc05e6..0000000
--- a/public/data/bar-y-category-stack.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-title: Stacked Horizontal Bar
-titleCN: 堆叠条形图
-category: bar
-difficulty: 3
-*/
-option = {
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // Use axis to trigger tooltip
-            type: 'shadow'        // 'shadow' as default; can also be 'line' or 'shadow'
-        }
-    },
-    legend: {
-        data: ['Direct', 'Mail Ad', 'Affiliate Ad', 'Video Ad', 'Search Engine']
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: {
-        type: 'value'
-    },
-    yAxis: {
-        type: 'category',
-        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-    },
-    series: [
-        {
-            name: 'Direct',
-            type: 'bar',
-            stack: 'total',
-            label: {
-                show: true
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [320, 302, 301, 334, 390, 330, 320]
-        },
-        {
-            name: 'Mail Ad',
-            type: 'bar',
-            stack: 'total',
-            label: {
-                show: true
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [120, 132, 101, 134, 90, 230, 210]
-        },
-        {
-            name: 'Affiliate Ad',
-            type: 'bar',
-            stack: 'total',
-            label: {
-                show: true
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [220, 182, 191, 234, 290, 330, 310]
-        },
-        {
-            name: 'Video Ad',
-            type: 'bar',
-            stack: 'total',
-            label: {
-                show: true
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [150, 212, 201, 154, 190, 330, 410]
-        },
-        {
-            name: 'Search Engine',
-            type: 'bar',
-            stack: 'total',
-            label: {
-                show: true
-            },
-            emphasis: {
-                focus: 'series'
-            },
-            data: [820, 832, 901, 934, 1290, 1330, 1320]
-        }
-    ]
-};
diff --git a/public/data/bar-y-category.js b/public/data/bar-y-category.js
deleted file mode 100644
index 514c798..0000000
--- a/public/data/bar-y-category.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-title: World Total Population
-category: bar
-titleCN: 世界人口总量 - 条形图
-difficulty: 2
-*/
-
-option = {
-    title: {
-        text: '世界人口总量',
-        subtext: '数据来自网络'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    legend: {
-        data: ['2011年', '2012年']
-    },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
-    },
-    xAxis: {
-        type: 'value',
-        boundaryGap: [0, 0.01]
-    },
-    yAxis: {
-        type: 'category',
-        data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)']
-    },
-    series: [
-        {
-            name: '2011年',
-            type: 'bar',
-            data: [18203, 23489, 29034, 104970, 131744, 630230]
-        },
-        {
-            name: '2012年',
-            type: 'bar',
-            data: [19325, 23438, 31000, 121594, 134141, 681807]
-        }
-    ]
-};
diff --git a/public/data/bar1.js b/public/data/bar1.js
deleted file mode 100644
index a4fd5f4..0000000
--- a/public/data/bar1.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-title: Rainfall and Evaporation
-category: bar
-titleCN: 某地区蒸发量和降水量
-difficulty: 4
-*/
-
-option = {
-    title: {
-        text: '某地区蒸发量和降水量',
-        subtext: '纯属虚构'
-    },
-    tooltip: {
-        trigger: 'axis'
-    },
-    legend: {
-        data: ['蒸发量', '降水量']
-    },
-    toolbox: {
-        show: true,
-        feature: {
-            dataView: {show: true, readOnly: false},
-            magicType: {show: true, type: ['line', 'bar']},
-            restore: {show: true},
-            saveAsImage: {show: true}
-        }
-    },
-    calculable: true,
-    xAxis: [
-        {
-            type: 'category',
-            data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value'
-        }
-    ],
-    series: [
-        {
-            name: '蒸发量',
-            type: 'bar',
-            data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3],
-            markPoint: {
-                data: [
-                    {type: 'max', name: '最大值'},
-                    {type: 'min', name: '最小值'}
-                ]
-            },
-            markLine: {
-                data: [
-                    {type: 'average', name: '平均值'}
-                ]
-            }
-        },
-        {
-            name: '降水量',
-            type: 'bar',
-            data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3],
-            markPoint: {
-                data: [
-                    {name: '年最高', value: 182.2, xAxis: 7, yAxis: 183},
-                    {name: '年最低', value: 2.3, xAxis: 11, yAxis: 3}
-                ]
-            },
-            markLine: {
-                data: [
-                    {type: 'average', name: '平均值'}
-                ]
-            }
-        }
-    ]
-};
diff --git a/public/data/boxplot-light-velocity.js b/public/data/boxplot-light-velocity.js
deleted file mode 100644
index e475ca3..0000000
--- a/public/data/boxplot-light-velocity.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-title: Boxplot Light Velocity
-category: boxplot
-titleCN: 基础盒须图
-*/
-
-option = {
-    title: [
-        {
-            text: 'Michelson-Morley Experiment',
-            left: 'center'
-        },
-        {
-            text: 'upper: Q3 + 1.5 * IQR \nlower: Q1 - 1.5 * IQR',
-            borderColor: '#999',
-            borderWidth: 1,
-            textStyle: {
-                fontWeight: 'normal',
-                fontSize: 14,
-                lineHeight: 20
-            },
-            left: '10%',
-            top: '90%'
-        }
-    ],
-    dataset: [{
-        source: [
-            [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
-            [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
-            [880, 880, 880, 860, 720, 720, 620, 860, 970, 950, 880, 910, 850, 870, 840, 840, 850, 840, 840, 840],
-            [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920, 890, 860, 880, 720, 840, 850, 850, 780],
-            [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870, 810, 740, 810, 940, 950, 800, 810, 870]
-        ]
-    }, {
-        transform: {
-            type: 'boxplot',
-            config: { itemNameFormatter: 'expr {value}' }
-        }
-    }, {
-        fromDatasetIndex: 1,
-        fromTransformResult: 1
-    }],
-    tooltip: {
-        trigger: 'item',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    grid: {
-        left: '10%',
-        right: '10%',
-        bottom: '15%'
-    },
-    xAxis: {
-        type: 'category',
-        boundaryGap: true,
-        nameGap: 30,
-        splitArea: {
-            show: false
-        },
-        splitLine: {
-            show: false
-        }
-    },
-    yAxis: {
-        type: 'value',
-        name: 'km/s minus 299,000',
-        splitArea: {
-            show: true
-        }
-    },
-    series: [
-        {
-            name: 'boxplot',
-            type: 'boxplot',
-            datasetIndex: 1
-        },
-        {
-            name: 'outlier',
-            type: 'scatter',
-            datasetIndex: 2
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/boxplot-light-velocity2.js b/public/data/boxplot-light-velocity2.js
deleted file mode 100644
index a4af14d..0000000
--- a/public/data/boxplot-light-velocity2.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-title: Boxplot Light Velocity2
-category: boxplot
-titleCN: 垂直方向盒须图
-*/
-
-option = {
-    title: [
-        {
-            text: 'Michelson-Morley Experiment',
-            left: 'center'
-        },
-        {
-            text: 'upper: Q3 + 1.5 * IRQ \nlower: Q1 - 1.5 * IRQ',
-            borderColor: '#999',
-            borderWidth: 1,
-            textStyle: {
-                fontSize: 14
-            },
-            left: '10%',
-            top: '90%'
-        }
-    ],
-    dataset: [{
-        source: [
-            [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980, 930, 650, 760, 810, 1000, 1000, 960, 960],
-            [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790, 810, 880, 880, 830, 800, 790, 760, 800],
-            [880, 880, 880, 860, 720, 720, 620, 860, 970, 950, 880, 910, 850, 870, 840, 840, 850, 840, 840, 840],
-            [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920, 890, 860, 880, 720, 840, 850, 850, 780],
-            [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870, 810, 740, 810, 940, 950, 800, 810, 870]
-        ]
-    }, {
-        transform: {
-            type: 'boxplot',
-            config: {
-                itemNameFormatter: function (params) {
-                    return 'expr ' + params.value;
-                }
-            }
-        }
-    }, {
-        fromDatasetIndex: 1,
-        fromTransformResult: 1
-    }],
-    tooltip: {
-        trigger: 'item',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    grid: {
-        left: '10%',
-        right: '10%',
-        bottom: '15%'
-    },
-    yAxis: {
-        type: 'category',
-        boundaryGap: true,
-        nameGap: 30,
-        splitArea: {
-            show: false
-        },
-        splitLine: {
-            show: false
-        }
-    },
-    xAxis: {
-        type: 'value',
-        name: 'km/s minus 299,000',
-        splitArea: {
-            show: true
-        }
-    },
-    series: [
-        {
-            name: 'boxplot',
-            type: 'boxplot',
-            datasetIndex: 1
-        },
-        {
-            name: 'outlier',
-            type: 'scatter',
-            encode: { x: 1, y: 0 },
-            datasetIndex: 2
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/boxplot-multi.js b/public/data/boxplot-multi.js
deleted file mode 100644
index 44e6177..0000000
--- a/public/data/boxplot-multi.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-title: Multiple Categories
-category: boxplot
-titleCN: 多系列盒须图
-*/
-
-
-// Generate data.
-function makeData() {
-    var data = [];
-    for (var i = 0; i < 18; i++) {
-        var cate = [];
-        for (var j = 0; j < 100; j++) {
-            cate.push(Math.random() * 200);
-        }
-        data.push(cate);
-    }
-    return data;
-}
-var data0 = makeData();
-var data1 = makeData();
-var data2 = makeData();
-
-
-option = {
-    title: {
-        text: 'Multiple Categories',
-        left: 'center'
-    },
-    dataset: [{
-        source: data0
-    }, {
-        source: data1
-    }, {
-        source: data2
-    }, {
-        fromDatasetIndex: 0,
-        transform: { type: 'boxplot' }
-    }, {
-        fromDatasetIndex: 1,
-        transform: { type: 'boxplot' }
-    }, {
-        fromDatasetIndex: 2,
-        transform: { type: 'boxplot' }
-    }],
-    legend: {
-        top: '10%'
-    },
-    tooltip: {
-        trigger: 'item',
-        axisPointer: {
-            type: 'shadow'
-        }
-    },
-    grid: {
-        left: '10%',
-        top: '20%',
-        right: '10%',
-        bottom: '15%'
-    },
-    xAxis: {
-        type: 'category',
-        boundaryGap: true,
-        nameGap: 30,
-        splitArea: {
-            show: true
-        },
-        splitLine: {
-            show: false
-        }
-    },
-    yAxis: {
-        type: 'value',
-        name: 'Value',
-        min: -400,
-        max: 600,
-        splitArea: {
-            show: false
-        }
-    },
-    dataZoom: [{
-        type: 'inside',
-        start: 0,
-        end: 20
-    }, {
-        show: true,
-        type: 'slider',
-        top: '90%',
-        xAxisIndex: [0],
-        start: 0,
-        end: 20
-    }],
-    series: [{
-        name: 'category0',
-        type: 'boxplot',
-        datasetIndex: 3
-    }, {
-        name: 'category1',
-        type: 'boxplot',
-        datasetIndex: 4
-    }, {
-        name: 'category2',
-        type: 'boxplot',
-        datasetIndex: 5
-    }]
-};
diff --git a/public/data/bubble-gradient.js b/public/data/bubble-gradient.js
deleted file mode 100644
index 9ab5549..0000000
--- a/public/data/bubble-gradient.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-title: Bubble Chart
-category: scatter
-titleCN: 气泡图
-difficulty: 6
-*/
-
-var data = [
-    [[28604,77,17096869,'Australia',1990],[31163,77.4,27662440,'Canada',1990],[1516,68,1154605773,'China',1990],[13670,74.7,10582082,'Cuba',1990],[28599,75,4986705,'Finland',1990],[29476,77.1,56943299,'France',1990],[31476,75.4,78958237,'Germany',1990],[28666,78.1,254830,'Iceland',1990],[1777,57.7,870601776,'India',1990],[29550,79.1,122249285,'Japan',1990],[2076,67.9,20194354,'North Korea',1990],[12087,72,42972254,'South Korea',1990],[24021,75.4,3397534,'New Zealand',1990],[43296,76.8,42 [...]
-    [[44056,81.8,23968973,'Australia',2015],[43294,81.7,35939927,'Canada',2015],[13334,76.9,1376048943,'China',2015],[21291,78.5,11389562,'Cuba',2015],[38923,80.8,5503457,'Finland',2015],[37599,81.9,64395345,'France',2015],[44053,81.1,80688545,'Germany',2015],[42182,82.8,329425,'Iceland',2015],[5903,66.8,1311050527,'India',2015],[36162,83.5,126573481,'Japan',2015],[1390,71.4,25155317,'North Korea',2015],[34644,80.7,50293439,'South Korea',2015],[34186,80.6,4528526,'New Zealand',2015],[643 [...]
-];
-
-option = {
-    backgroundColor: new echarts.graphic.RadialGradient(0.3, 0.3, 0.8, [{
-        offset: 0,
-        color: '#f7f8fa'
-    }, {
-        offset: 1,
-        color: '#cdd0d5'
-    }]),
-    title: {
-        text: '1990 与 2015 年各国家人均寿命与 GDP' ,
-        left: '5%',
-        top: '3%'
-    },
-    legend: {
-        right: '10%',
-        top: '3%',
-        data: ['1990', '2015']
-    },
-    grid: {
-        left: '8%',
-        top: '10%'
-    },
-    xAxis: {
-        splitLine: {
-            lineStyle: {
-                type: 'dashed'
-            }
-        }
-    },
-    yAxis: {
-        splitLine: {
-            lineStyle: {
-                type: 'dashed'
-            }
-        },
-        scale: true
-    },
-    series: [{
-        name: '1990',
-        data: data[0],
-        type: 'scatter',
-        symbolSize: function (data) {
-            return Math.sqrt(data[2]) / 5e2;
-        },
-        emphasis: {
-            focus: 'series',
-            label: {
-                show: true,
-                formatter: function (param) {
-                    return param.data[3];
-                },
-                position: 'top'
-            }
-        },
-        itemStyle: {
-            shadowBlur: 10,
-            shadowColor: 'rgba(120, 36, 50, 0.5)',
-            shadowOffsetY: 5,
-            color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
-                offset: 0,
-                color: 'rgb(251, 118, 123)'
-            }, {
-                offset: 1,
-                color: 'rgb(204, 46, 72)'
-            }])
-        }
-    }, {
-        name: '2015',
-        data: data[1],
-        type: 'scatter',
-        symbolSize: function (data) {
-            return Math.sqrt(data[2]) / 5e2;
-        },
-        emphasis: {
-            focus: 'series',
-            label: {
-                show: true,
-                formatter: function (param) {
-                    return param.data[3];
-                },
-                position: 'top'
-            }
-        },
-        itemStyle: {
-            shadowBlur: 10,
-            shadowColor: 'rgba(25, 100, 150, 0.5)',
-            shadowOffsetY: 5,
-            color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{
-                offset: 0,
-                color: 'rgb(129, 227, 238)'
-            }, {
-                offset: 1,
-                color: 'rgb(25, 183, 207)'
-            }])
-        }
-    }]
-};
\ No newline at end of file
diff --git a/public/data/calendar-charts.js b/public/data/calendar-charts.js
deleted file mode 100644
index 9b0cbd2..0000000
--- a/public/data/calendar-charts.js
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-title: Calendar Charts
-category: 'calendar, scatter'
-titleCN: 日历图
-shotWidth: 1000
-difficulty: 11
-*/
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 1000)
-        ]);
-    }
-    console.log(data[data.length - 1]);
-    return data;
-}
-
-
-
-var graphData = [
-    [
-       '2017-02-01',
-        260
-    ],
-    [
-        '2017-02-04',
-        200
-    ],
-    [
-        '2017-02-09',
-        279
-    ],
-    [
-        '2017-02-13',
-        847
-    ],
-    [
-        '2017-02-18',
-        241
-    ],
-    [
-        '2017-02-23',
-        411
-    ],
-    [
-        '2017-02-27',
-        985
-    ]
-];
-
-var links = graphData.map(function (item, idx) {
-    return {
-        source: idx,
-        target: idx + 1
-    };
-});
-links.pop();
-
-option = {
-    tooltip: {
-        position: 'top'
-    },
-
-    visualMap: [{
-        min: 0,
-        max: 1000,
-        calculable: true,
-        seriesIndex: [2, 3, 4],
-        orient: 'horizontal',
-        left: '55%',
-        bottom: 20
-    }, {
-        min: 0,
-        max: 1000,
-        inRange: {
-            color: ['grey'],
-            opacity: [0, 0.3]
-        },
-        controller: {
-            inRange: {
-                opacity: [0.3, 0.6]
-            },
-            outOfRange: {
-                color: '#ccc'
-            }
-        },
-        seriesIndex: [1],
-        orient: 'horizontal',
-        left: '10%',
-        bottom: 20
-    }],
-
-    calendar: [{
-        orient: 'vertical',
-        yearLabel: {
-            margin: 40
-        },
-        monthLabel: {
-            nameMap: 'cn',
-            margin: 20
-        },
-        dayLabel: {
-            firstDay: 1,
-            nameMap: 'cn'
-        },
-        cellSize: 40,
-        range: '2017-02'
-    },
-    {
-        orient: 'vertical',
-        yearLabel: {
-            margin: 40
-        },
-        monthLabel: {
-            margin: 20
-        },
-        cellSize: 40,
-        left: 460,
-        range: '2017-01'
-    },
-    {
-        orient: 'vertical',
-        yearLabel: {
-            margin: 40
-        },
-        monthLabel: {
-            margin: 20
-        },
-        cellSize: 40,
-        top: 350,
-        range: '2017-03'
-    },
-    {
-        orient: 'vertical',
-        yearLabel: {
-            margin: 40
-        },
-        dayLabel: {
-            firstDay: 1,
-            nameMap: ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
-        },
-        monthLabel: {
-            nameMap: 'cn',
-            margin: 20
-        },
-        cellSize: 40,
-        top: 350,
-        left: 460,
-        range: '2017-04'
-    }],
-
-    series: [{
-        type: 'graph',
-        edgeSymbol: ['none', 'arrow'],
-        coordinateSystem: 'calendar',
-        links: links,
-        symbolSize: 10,
-        calendarIndex: 0,
-        data: graphData
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        data: getVirtulData(2017)
-    }, {
-        type: 'effectScatter',
-        coordinateSystem: 'calendar',
-        calendarIndex: 1,
-        symbolSize: function (val) {
-            return val[1] / 40;
-        },
-        data: getVirtulData(2017)
-    }, {
-        type: 'scatter',
-        coordinateSystem: 'calendar',
-        calendarIndex: 2,
-        symbolSize: function (val) {
-            return val[1] / 60;
-        },
-        data: getVirtulData(2017)
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 3,
-        data: getVirtulData(2017)
-    }]
-};
diff --git a/public/data/calendar-effectscatter.js b/public/data/calendar-effectscatter.js
deleted file mode 100644
index df84192..0000000
--- a/public/data/calendar-effectscatter.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-title: Calendar Effectscatter
-category: calendar
-titleCN: 热力特效散点图
-difficulty:3
-*/
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 10000)
-        ]);
-    }
-    return data;
-}
-
-var data = getVirtulData(2016);
-
-option = {
-    backgroundColor: '#404a59',
-
-    title: {
-        top: 30,
-        text: '2016年某人每天的步数',
-        subtext: '数据纯属虚构',
-        left: 'center',
-        textStyle: {
-            color: '#fff'
-        }
-    },
-    tooltip: {
-        trigger: 'item'
-    },
-    legend: {
-        top: '30',
-        left: '100',
-        data: ['步数', 'Top 12'],
-        textStyle: {
-            color: '#fff'
-        }
-    },
-    calendar: [{
-        top: 100,
-        left: 'center',
-        range: ['2016-01-01', '2016-06-30'],
-        splitLine: {
-            show: true,
-            lineStyle: {
-                color: '#000',
-                width: 4,
-                type: 'solid'
-            }
-        },
-        yearLabel: {
-            formatter: '{start}  1st',
-            textStyle: {
-                color: '#fff'
-            }
-        },
-        itemStyle: {
-            color: '#323c48',
-            borderWidth: 1,
-            borderColor: '#111'
-        }
-    }, {
-        top: 340,
-        left: 'center',
-        range: ['2016-07-01', '2016-12-31'],
-        splitLine: {
-            show: true,
-            lineStyle: {
-                color: '#000',
-                width: 4,
-                type: 'solid'
-            }
-        },
-        yearLabel: {
-            formatter: '{start}  2nd',
-            textStyle: {
-                color: '#fff'
-            }
-        },
-        itemStyle: {
-            color: '#323c48',
-            borderWidth: 1,
-            borderColor: '#111'
-        }
-    }],
-    series: [
-        {
-            name: '步数',
-            type: 'scatter',
-            coordinateSystem: 'calendar',
-            data: data,
-            symbolSize: function (val) {
-                return val[1] / 500;
-            },
-            itemStyle: {
-                color: '#ddb926'
-            }
-        },
-        {
-            name: '步数',
-            type: 'scatter',
-            coordinateSystem: 'calendar',
-            calendarIndex: 1,
-            data: data,
-            symbolSize: function (val) {
-                return val[1] / 500;
-            },
-            itemStyle: {
-                color: '#ddb926'
-            }
-        },
-        {
-            name: 'Top 12',
-            type: 'effectScatter',
-            coordinateSystem: 'calendar',
-            calendarIndex: 1,
-            data: data.sort(function (a, b) {
-                return b[1] - a[1];
-            }).slice(0, 12),
-            symbolSize: function (val) {
-                return val[1] / 500;
-            },
-            showEffectOn: 'render',
-            rippleEffect: {
-                brushType: 'stroke'
-            },
-            hoverAnimation: true,
-            itemStyle: {
-                color: '#f4e925',
-                shadowBlur: 10,
-                shadowColor: '#333'
-            },
-            zlevel: 1
-        },
-        {
-            name: 'Top 12',
-            type: 'effectScatter',
-            coordinateSystem: 'calendar',
-            data: data.sort(function (a, b) {
-                return b[1] - a[1];
-            }).slice(0, 12),
-            symbolSize: function (val) {
-                return val[1] / 500;
-            },
-            showEffectOn: 'render',
-            rippleEffect: {
-                brushType: 'stroke'
-            },
-            hoverAnimation: true,
-            itemStyle: {
-                color: '#f4e925',
-                shadowBlur: 10,
-                shadowColor: '#333'
-            },
-            zlevel: 1
-        }
-    ]
-};
diff --git a/public/data/calendar-graph.js b/public/data/calendar-graph.js
deleted file mode 100644
index 7dd07ab..0000000
--- a/public/data/calendar-graph.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-title: Calendar Graph
-category: 'calendar, graph'
-titleCN: 日历关系图
-difficulty: 4
-*/
-
-var graphData = [
-    [
-       '2017-02-01',
-        260
-    ],
-    [
-        '2017-02-04',
-        200
-    ],
-    [
-        '2017-02-09',
-        279
-    ],
-    [
-        '2017-02-13',
-        847
-    ],
-    [
-        '2017-02-18',
-        241
-    ],
-    [
-        '2017-02-23',
-        411
-    ],
-    [
-        '2017-03-14',
-        985
-    ]
-];
-
-var links = graphData.map(function (item, idx) {
-    return {
-        source: idx,
-        target: idx + 1
-    };
-});
-links.pop();
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 1000)
-        ]);
-    }
-    return data;
-}
-
-
-option = {
-    tooltip: {},
-    calendar: {
-        top: 'middle',
-        left: 'center',
-        orient: 'vertical',
-        cellSize: 40,
-        yearLabel: {
-            margin: 50,
-            textStyle: {
-                fontSize: 30
-            }
-        },
-        dayLabel: {
-            firstDay: 1,
-            nameMap: 'cn'
-        },
-        monthLabel: {
-            nameMap: 'cn',
-            margin: 15,
-            fontSize: 20,
-            color: '#999'
-        },
-        range: ['2017-02', '2017-03-31']
-    },
-    visualMap: {
-        min: 0,
-        max: 1000,
-        type: 'piecewise',
-        left: 'center',
-        bottom: 20,
-        inRange: {
-            color: ['#5291FF', '#C7DBFF']
-        },
-        seriesIndex: [1],
-        orient: 'horizontal'
-    },
-    series: [{
-        type: 'graph',
-        edgeSymbol: ['none', 'arrow'],
-        coordinateSystem: 'calendar',
-        links: links,
-        symbolSize: 15,
-        calendarIndex: 0,
-        itemStyle: {
-            color: 'yellow',
-            shadowBlur: 9,
-            shadowOffsetX: 1.5,
-            shadowOffsetY: 3,
-            shadowColor: '#555'
-        },
-        lineStyle: {
-            color: '#D10E00',
-            width: 1,
-            opacity: 1
-        },
-        data: graphData,
-        z: 20
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        data: getVirtulData(2017)
-    }]
-};
diff --git a/public/data/calendar-heatmap.js b/public/data/calendar-heatmap.js
deleted file mode 100644
index 4540da6..0000000
--- a/public/data/calendar-heatmap.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-title: Calendar Heatmap
-category: 'calendar, heatmap'
-titleCN: 日历热力图
-difficulty: 1
-*/
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 10000)
-        ]);
-    }
-    return data;
-}
-
-option = {
-    title: {
-        top: 30,
-        left: 'center',
-        text: '2016年某人每天的步数'
-    },
-    tooltip: {},
-    visualMap: {
-        min: 0,
-        max: 10000,
-        type: 'piecewise',
-        orient: 'horizontal',
-        left: 'center',
-        top: 65
-    },
-    calendar: {
-        top: 120,
-        left: 30,
-        right: 30,
-        cellSize: ['auto', 13],
-        range: '2016',
-        itemStyle: {
-            borderWidth: 0.5
-        },
-        yearLabel: {show: false}
-    },
-    series: {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        data: getVirtulData(2016)
-    }
-};
diff --git a/public/data/calendar-horizontal.js b/public/data/calendar-horizontal.js
deleted file mode 100644
index c9d9015..0000000
--- a/public/data/calendar-horizontal.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-title: Calendar Heatmap Horizontal
-category: calendar
-titleCN: 横向日历图
-shotWidth: 900
-difficulty: 2
-*/
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 1000)
-        ]);
-    }
-    return data;
-}
-
-
-
-option = {
-    tooltip: {
-        position: 'top'
-    },
-    visualMap: {
-        min: 0,
-        max: 1000,
-        calculable: true,
-        orient: 'horizontal',
-        left: 'center',
-        top: 'top'
-    },
-
-    calendar: [{
-        range: '2017',
-        cellSize: ['auto', 20]
-    },
-    {
-        top: 260,
-        range: '2016',
-        cellSize: ['auto', 20]
-    },
-    {
-        top: 450,
-        range: '2015',
-        cellSize: ['auto', 20],
-        right: 5
-    }],
-
-    series: [{
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 0,
-        data: getVirtulData(2017)
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 1,
-        data: getVirtulData(2016)
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 2,
-        data: getVirtulData(2015)
-    }]
-
-};
diff --git a/public/data/calendar-lunar.js b/public/data/calendar-lunar.js
deleted file mode 100644
index 16856cd..0000000
--- a/public/data/calendar-lunar.js
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
-title: Calendar Lunar
-category: calendar
-titleCN: 农历日历图
-difficulty: 4
-*/
-
-var dateList = [
-    ['2017-1-1', '初四'],
-    ['2017-1-2', '初五'],
-    ['2017-1-3', '初六'],
-    ['2017-1-4', '初七'],
-    ['2017-1-5', '初八', '小寒'],
-    ['2017-1-6', '初九'],
-    ['2017-1-7', '初十'],
-    ['2017-1-8', '十一'],
-    ['2017-1-9', '十二'],
-    ['2017-1-10', '十三'],
-    ['2017-1-11', '十四'],
-    ['2017-1-12', '十五'],
-    ['2017-1-13', '十六'],
-    ['2017-1-14', '十七'],
-    ['2017-1-15', '十八'],
-    ['2017-1-16', '十九'],
-    ['2017-1-17', '二十'],
-    ['2017-1-18', '廿一'],
-    ['2017-1-19', '廿二'],
-    ['2017-1-20', '廿三', '大寒'],
-    ['2017-1-21', '廿四'],
-    ['2017-1-22', '廿五'],
-    ['2017-1-23', '廿六'],
-    ['2017-1-24', '廿七'],
-    ['2017-1-25', '廿八'],
-    ['2017-1-26', '廿九'],
-    ['2017-1-27', '三十'],
-    ['2017-1-28', '正月'],
-    ['2017-1-29', '初二'],
-    ['2017-1-30', '初三'],
-    ['2017-1-31', '初四'],
-    ['2017-2-1', '初五'],
-    ['2017-2-2', '初六'],
-    ['2017-2-3', '初七', '立春'],
-    ['2017-2-4', '初八'],
-    ['2017-2-5', '初九'],
-    ['2017-2-6', '初十'],
-    ['2017-2-7', '十一'],
-    ['2017-2-8', '十二'],
-    ['2017-2-9', '十三'],
-    ['2017-2-10', '十四'],
-    ['2017-2-11', '十五'],
-    ['2017-2-12', '十六'],
-    ['2017-2-13', '十七'],
-    ['2017-2-14', '十八'],
-    ['2017-2-15', '十九'],
-    ['2017-2-16', '二十'],
-    ['2017-2-17', '廿一'],
-    ['2017-2-18', '廿二', '雨水'],
-    ['2017-2-19', '廿三'],
-    ['2017-2-20', '廿四'],
-    ['2017-2-21', '廿五'],
-    ['2017-2-22', '廿六'],
-    ['2017-2-23', '廿七'],
-    ['2017-2-24', '廿八'],
-    ['2017-2-25', '廿九'],
-    ['2017-2-26', '二月'],
-    ['2017-2-27', '初二'],
-    ['2017-2-28', '初三'],
-    ['2017-3-1', '初四'],
-    ['2017-3-2', '初五'],
-    ['2017-3-3', '初六'],
-    ['2017-3-4', '初七'],
-    ['2017-3-5', '初八', '驚蟄'],
-    ['2017-3-6', '初九'],
-    ['2017-3-7', '初十'],
-    ['2017-3-8', '十一'],
-    ['2017-3-9', '十二'],
-    ['2017-3-10', '十三'],
-    ['2017-3-11', '十四'],
-    ['2017-3-12', '十五'],
-    ['2017-3-13', '十六'],
-    ['2017-3-14', '十七'],
-    ['2017-3-15', '十八'],
-    ['2017-3-16', '十九'],
-    ['2017-3-17', '二十'],
-    ['2017-3-18', '廿一'],
-    ['2017-3-19', '廿二'],
-    ['2017-3-20', '廿三', '春分'],
-    ['2017-3-21', '廿四'],
-    ['2017-3-22', '廿五'],
-    ['2017-3-23', '廿六'],
-    ['2017-3-24', '廿七'],
-    ['2017-3-25', '廿八'],
-    ['2017-3-26', '廿九'],
-    ['2017-3-27', '三十'],
-    ['2017-3-28', '三月'],
-    ['2017-3-29', '初二'],
-    ['2017-3-30', '初三'],
-    ['2017-3-31', '初四'],
-    ['2017-4-1', '初五'],
-    ['2017-4-2', '初六'],
-    ['2017-4-3', '初七'],
-    ['2017-4-4', '初八', '清明'],
-    ['2017-4-5', '初九'],
-    ['2017-4-6', '初十'],
-    ['2017-4-7', '十一'],
-    ['2017-4-8', '十二'],
-    ['2017-4-9', '十三'],
-    ['2017-4-10', '十四'],
-    ['2017-4-11', '十五'],
-    ['2017-4-12', '十六'],
-    ['2017-4-13', '十七'],
-    ['2017-4-14', '十八'],
-    ['2017-4-15', '十九'],
-    ['2017-4-16', '二十'],
-    ['2017-4-17', '廿一'],
-    ['2017-4-18', '廿二'],
-    ['2017-4-19', '廿三'],
-    ['2017-4-20', '廿四', '穀雨'],
-    ['2017-4-21', '廿五'],
-    ['2017-4-22', '廿六'],
-    ['2017-4-23', '廿七'],
-    ['2017-4-24', '廿八'],
-    ['2017-4-25', '廿九'],
-    ['2017-4-26', '四月'],
-    ['2017-4-27', '初二'],
-    ['2017-4-28', '初三'],
-    ['2017-4-29', '初四'],
-    ['2017-4-30', '初五'],
-    ['2017-5-1', '初六'],
-    ['2017-5-2', '初七'],
-    ['2017-5-3', '初八'],
-    ['2017-5-4', '初九'],
-    ['2017-5-5', '初十', '立夏'],
-    ['2017-5-6', '十一'],
-    ['2017-5-7', '十二'],
-    ['2017-5-8', '十三'],
-    ['2017-5-9', '十四'],
-    ['2017-5-10', '十五'],
-    ['2017-5-11', '十六'],
-    ['2017-5-12', '十七'],
-    ['2017-5-13', '十八'],
-    ['2017-5-14', '十九'],
-    ['2017-5-15', '二十'],
-    ['2017-5-16', '廿一'],
-    ['2017-5-17', '廿二'],
-    ['2017-5-18', '廿三'],
-    ['2017-5-19', '廿四'],
-    ['2017-5-20', '廿五'],
-    ['2017-5-21', '廿六', '小滿'],
-    ['2017-5-22', '廿七'],
-    ['2017-5-23', '廿八'],
-    ['2017-5-24', '廿九'],
-    ['2017-5-25', '三十'],
-    ['2017-5-26', '五月'],
-    ['2017-5-27', '初二'],
-    ['2017-5-28', '初三'],
-    ['2017-5-29', '初四'],
-    ['2017-5-30', '初五'],
-    ['2017-5-31', '初六'],
-    ['2017-6-1', '初七'],
-    ['2017-6-2', '初八'],
-    ['2017-6-3', '初九'],
-    ['2017-6-4', '初十'],
-    ['2017-6-5', '十一', '芒種'],
-    ['2017-6-6', '十二'],
-    ['2017-6-7', '十三'],
-    ['2017-6-8', '十四'],
-    ['2017-6-9', '十五'],
-    ['2017-6-10', '十六'],
-    ['2017-6-11', '十七'],
-    ['2017-6-12', '十八'],
-    ['2017-6-13', '十九'],
-    ['2017-6-14', '二十'],
-    ['2017-6-15', '廿一'],
-    ['2017-6-16', '廿二'],
-    ['2017-6-17', '廿三'],
-    ['2017-6-18', '廿四'],
-    ['2017-6-19', '廿五'],
-    ['2017-6-20', '廿六'],
-    ['2017-6-21', '廿七', '夏至'],
-    ['2017-6-22', '廿八'],
-    ['2017-6-23', '廿九'],
-    ['2017-6-24', '六月'],
-    ['2017-6-25', '初二'],
-    ['2017-6-26', '初三'],
-    ['2017-6-27', '初四'],
-    ['2017-6-28', '初五'],
-    ['2017-6-29', '初六'],
-    ['2017-6-30', '初七'],
-    ['2017-7-1', '初八'],
-    ['2017-7-2', '初九'],
-    ['2017-7-3', '初十'],
-    ['2017-7-4', '十一'],
-    ['2017-7-5', '十二'],
-    ['2017-7-6', '十三'],
-    ['2017-7-7', '十四', '小暑'],
-    ['2017-7-8', '十五'],
-    ['2017-7-9', '十六'],
-    ['2017-7-10', '十七'],
-    ['2017-7-11', '十八'],
-    ['2017-7-12', '十九'],
-    ['2017-7-13', '二十'],
-    ['2017-7-14', '廿一'],
-    ['2017-7-15', '廿二'],
-    ['2017-7-16', '廿三'],
-    ['2017-7-17', '廿四'],
-    ['2017-7-18', '廿五'],
-    ['2017-7-19', '廿六'],
-    ['2017-7-20', '廿七'],
-    ['2017-7-21', '廿八'],
-    ['2017-7-22', '廿九', '大暑'],
-    ['2017-7-23', '閏六',],
-    ['2017-7-24', '初二'],
-    ['2017-7-25', '初三'],
-    ['2017-7-26', '初四'],
-    ['2017-7-27', '初五'],
-    ['2017-7-28', '初六'],
-    ['2017-7-29', '初七'],
-    ['2017-7-30', '初八'],
-    ['2017-7-31', '初九'],
-    ['2017-8-1', '初十'],
-    ['2017-8-2', '十一'],
-    ['2017-8-3', '十二'],
-    ['2017-8-4', '十三'],
-    ['2017-8-5', '十四'],
-    ['2017-8-6', '十五'],
-    ['2017-8-7', '十六', '立秋'],
-    ['2017-8-8', '十七'],
-    ['2017-8-9', '十八'],
-    ['2017-8-10', '十九'],
-    ['2017-8-11', '二十'],
-    ['2017-8-12', '廿一'],
-    ['2017-8-13', '廿二'],
-    ['2017-8-14', '廿三'],
-    ['2017-8-15', '廿四'],
-    ['2017-8-16', '廿五'],
-    ['2017-8-17', '廿六'],
-    ['2017-8-18', '廿七'],
-    ['2017-8-19', '廿八'],
-    ['2017-8-20', '廿九'],
-    ['2017-8-21', '三十'],
-    ['2017-8-22', '七月'],
-    ['2017-8-23', '初二', '處暑'],
-    ['2017-8-24', '初三'],
-    ['2017-8-25', '初四'],
-    ['2017-8-26', '初五'],
-    ['2017-8-27', '初六'],
-    ['2017-8-28', '初七'],
-    ['2017-8-29', '初八'],
-    ['2017-8-30', '初九'],
-    ['2017-8-31', '初十'],
-    ['2017-9-1', '十一'],
-    ['2017-9-2', '十二'],
-    ['2017-9-3', '十三'],
-    ['2017-9-4', '十四'],
-    ['2017-9-5', '十五'],
-    ['2017-9-6', '十六'],
-    ['2017-9-7', '十七', '白露'],
-    ['2017-9-8', '十八'],
-    ['2017-9-9', '十九'],
-    ['2017-9-10', '二十'],
-    ['2017-9-11', '廿一'],
-    ['2017-9-12', '廿二'],
-    ['2017-9-13', '廿三'],
-    ['2017-9-14', '廿四'],
-    ['2017-9-15', '廿五'],
-    ['2017-9-16', '廿六'],
-    ['2017-9-17', '廿七'],
-    ['2017-9-18', '廿八'],
-    ['2017-9-19', '廿九'],
-    ['2017-9-20', '八月'],
-    ['2017-9-21', '初二'],
-    ['2017-9-22', '初三'],
-    ['2017-9-23', '初四', '秋分'],
-    ['2017-9-24', '初五'],
-    ['2017-9-25', '初六'],
-    ['2017-9-26', '初七'],
-    ['2017-9-27', '初八'],
-    ['2017-9-28', '初九'],
-    ['2017-9-29', '初十'],
-    ['2017-9-30', '十一'],
-    ['2017-10-1', '十二'],
-    ['2017-10-2', '十三'],
-    ['2017-10-3', '十四'],
-    ['2017-10-4', '十五'],
-    ['2017-10-5', '十六'],
-    ['2017-10-6', '十七'],
-    ['2017-10-7', '十八'],
-    ['2017-10-8', '十九', '寒露'],
-    ['2017-10-9', '二十'],
-    ['2017-10-10', '廿一'],
-    ['2017-10-11', '廿二'],
-    ['2017-10-12', '廿三'],
-    ['2017-10-13', '廿四'],
-    ['2017-10-14', '廿五'],
-    ['2017-10-15', '廿六'],
-    ['2017-10-16', '廿七'],
-    ['2017-10-17', '廿八'],
-    ['2017-10-18', '廿九'],
-    ['2017-10-19', '三十'],
-    ['2017-10-20', '九月'],
-    ['2017-10-21', '初二'],
-    ['2017-10-22', '初三'],
-    ['2017-10-23', '初四', '霜降'],
-    ['2017-10-24', '初五'],
-    ['2017-10-25', '初六'],
-    ['2017-10-26', '初七'],
-    ['2017-10-27', '初八'],
-    ['2017-10-28', '初九'],
-    ['2017-10-29', '初十'],
-    ['2017-10-30', '十一'],
-    ['2017-10-31', '十二'],
-    ['2017-11-1', '十三'],
-    ['2017-11-2', '十四'],
-    ['2017-11-3', '十五'],
-    ['2017-11-4', '十六'],
-    ['2017-11-5', '十七'],
-    ['2017-11-6', '十八'],
-    ['2017-11-7', '十九', '立冬'],
-    ['2017-11-8', '二十'],
-    ['2017-11-9', '廿一'],
-    ['2017-11-10', '廿二'],
-    ['2017-11-11', '廿三'],
-    ['2017-11-12', '廿四'],
-    ['2017-11-13', '廿五'],
-    ['2017-11-14', '廿六'],
-    ['2017-11-15', '廿七'],
-    ['2017-11-16', '廿八'],
-    ['2017-11-17', '廿九'],
-    ['2017-11-18', '十月'],
-    ['2017-11-19', '初二'],
-    ['2017-11-20', '初三'],
-    ['2017-11-21', '初四'],
-    ['2017-11-22', '初五', '小雪'],
-    ['2017-11-23', '初六'],
-    ['2017-11-24', '初七'],
-    ['2017-11-25', '初八'],
-    ['2017-11-26', '初九'],
-    ['2017-11-27', '初十'],
-    ['2017-11-28', '十一'],
-    ['2017-11-29', '十二'],
-    ['2017-11-30', '十三'],
-    ['2017-12-1', '十四'],
-    ['2017-12-2', '十五'],
-    ['2017-12-3', '十六'],
-    ['2017-12-4', '十七'],
-    ['2017-12-5', '十八'],
-    ['2017-12-6', '十九'],
-    ['2017-12-7', '二十', '大雪'],
-    ['2017-12-8', '廿一'],
-    ['2017-12-9', '廿二'],
-    ['2017-12-10', '廿三'],
-    ['2017-12-11', '廿四'],
-    ['2017-12-12', '廿五'],
-    ['2017-12-13', '廿六'],
-    ['2017-12-14', '廿七'],
-    ['2017-12-15', '廿八'],
-    ['2017-12-16', '廿九'],
-    ['2017-12-17', '三十'],
-    ['2017-12-18', '十一月'],
-    ['2017-12-19', '初二'],
-    ['2017-12-20', '初三'],
-    ['2017-12-21', '初四'],
-    ['2017-12-22', '初五', '冬至'],
-    ['2017-12-23', '初六'],
-    ['2017-12-24', '初七'],
-    ['2017-12-25', '初八'],
-    ['2017-12-26', '初九'],
-    ['2017-12-27', '初十'],
-    ['2017-12-28', '十一'],
-    ['2017-12-29', '十二'],
-    ['2017-12-30', '十三'],
-    ['2017-12-31', '十四']
-];
-
-var heatmapData = [];
-var lunarData = [];
-for (var i = 0; i < dateList.length; i++) {
-    heatmapData.push([
-        dateList[i][0],
-        Math.random() * 300
-    ]);
-    lunarData.push([
-        dateList[i][0],
-        1,
-        dateList[i][1],
-        dateList[i][2]
-    ]);
-}
-
-
-option = {
-    tooltip: {
-        formatter: function (params) {
-            return '降雨量: ' + params.value[1].toFixed(2);
-        }
-    },
-
-    visualMap: {
-        show: false,
-        min: 0,
-        max: 300,
-        calculable: true,
-        seriesIndex: [2],
-        orient: 'horizontal',
-        left: 'center',
-        bottom: 20,
-        inRange: {
-            color: ['#e0ffff', '#006edd'],
-            opacity: 0.3
-        },
-        controller: {
-            inRange: {
-                opacity: 0.5
-            }
-        }
-    },
-
-    calendar: [{
-        left: 'center',
-        top: 'middle',
-        cellSize: [70, 70],
-        yearLabel: {show: false},
-        orient: 'vertical',
-        dayLabel: {
-            firstDay: 1,
-            nameMap: 'cn'
-        },
-        monthLabel: {
-            show: false
-        },
-        range: '2017-03'
-    }],
-
-    series: [{
-        type: 'scatter',
-        coordinateSystem: 'calendar',
-        symbolSize: 1,
-        label: {
-            show: true,
-            formatter: function (params) {
-                var d = echarts.number.parseDate(params.value[0]);
-                return d.getDate() + '\n\n' + params.value[2] + '\n\n';
-            },
-            color: '#000'
-        },
-        data: lunarData
-    }, {
-        type: 'scatter',
-        coordinateSystem: 'calendar',
-        symbolSize: 1,
-        label: {
-            show: true,
-            formatter: function (params) {
-                return '\n\n\n' + (params.value[3] || '');
-            },
-            fontSize: 14,
-            fontWeight: 700,
-            color: '#a00'
-        },
-        data: lunarData
-    }, {
-        name: '降雨量',
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        data: heatmapData
-    }]
-};
\ No newline at end of file
diff --git a/public/data/calendar-pie.js b/public/data/calendar-pie.js
deleted file mode 100644
index 6097b0c..0000000
--- a/public/data/calendar-pie.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-title: Calendar Pie
-category: 'calendar, pie'
-titleCN: 日历饼图
-difficulty: 6
-*/
-
-var cellSize = [80, 80];
-var pieRadius = 30;
-
-function getVirtulData() {
-    var date = +echarts.number.parseDate('2017-02-01');
-    var end = +echarts.number.parseDate('2017-03-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 10000)
-        ]);
-    }
-    return data;
-}
-
-function getPieSeries(scatterData, chart) {
-    return scatterData.map(function (item, index) {
-        var center = chart.convertToPixel('calendar', item);
-        return {
-            id: index + 'pie',
-            type: 'pie',
-            center: center,
-            label: {
-                normal: {
-                    formatter: '{c}',
-                    position: 'inside'
-                }
-            },
-            radius: pieRadius,
-            data: [
-                {name: '工作', value: Math.round(Math.random() * 24)},
-                {name: '娱乐', value: Math.round(Math.random() * 24)},
-                {name: '睡觉', value: Math.round(Math.random() * 24)}
-            ]
-        };
-    });
-}
-
-function getPieSeriesUpdate(scatterData, chart) {
-    return scatterData.map(function (item, index) {
-        var center = chart.convertToPixel('calendar', item);
-        return {
-            id: index + 'pie',
-            center: center
-        };
-    });
-}
-
-var scatterData = getVirtulData();
-
-option = {
-    tooltip : {},
-    legend: {
-        data: ['工作', '娱乐', '睡觉'],
-        bottom: 20
-    },
-    calendar: {
-        top: 'middle',
-        left: 'center',
-        orient: 'vertical',
-        cellSize: cellSize,
-        yearLabel: {
-            show: false,
-            fontSize: 30
-        },
-        dayLabel: {
-            margin: 20,
-            firstDay: 1,
-            nameMap: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
-        },
-        monthLabel: {
-            show: false
-        },
-        range: ['2017-02']
-    },
-    series: [{
-        id: 'label',
-        type: 'scatter',
-        coordinateSystem: 'calendar',
-        symbolSize: 1,
-        label: {
-            show: true,
-            formatter: function (params) {
-                return echarts.format.formatTime('dd', params.value[0]);
-            },
-            offset: [-cellSize[0] / 2 + 10, -cellSize[1] / 2 + 10],
-            fontSize: 14
-        },
-        data: scatterData
-    }]
-};
-
-var pieInitialized;
-setTimeout(function () {
-    pieInitialized = true;
-    myChart.setOption({
-        series: getPieSeries(scatterData, myChart)
-    });
-}, 10);
-
-app.onresize = function () {
-    if (pieInitialized) {
-        myChart.setOption({
-            series: getPieSeriesUpdate(scatterData, myChart)
-        });
-    }
-};
\ No newline at end of file
diff --git a/public/data/calendar-simple.js b/public/data/calendar-simple.js
deleted file mode 100644
index 0d628bb..0000000
--- a/public/data/calendar-simple.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-title: Simple Calendar
-titleCN: 基础日历图
-category: calendar
-difficulty: 0
-*/
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate(year + '-12-31');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time <= end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 10000)
-        ]);
-    }
-    return data;
-}
-
-option = {
-    visualMap: {
-        show: false,
-        min: 0,
-        max: 10000
-    },
-    calendar: {
-        range: '2017'
-    },
-    series: {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        data: getVirtulData(2017)
-    }
-};
diff --git a/public/data/calendar-vertical.js b/public/data/calendar-vertical.js
deleted file mode 100644
index 3b27d7a..0000000
--- a/public/data/calendar-vertical.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-title: Calendar Heatmap Vertical
-category: 'calendar, heatmap'
-titleCN: 纵向日历图
-shotWidth: 900
-difficulty: 1
-*/
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            Math.floor(Math.random() * 1000)
-        ]);
-    }
-    return data;
-}
-
-
-option = {
-    tooltip: {
-        position: 'top',
-        formatter: function (p) {
-            var format = echarts.format.formatTime('yyyy-MM-dd', p.data[0]);
-            return format + ': ' + p.data[1];
-        }
-    },
-    visualMap: {
-        min: 0,
-        max: 1000,
-        calculable: true,
-        orient: 'vertical',
-        left: '670',
-        top: 'center'
-    },
-
-    calendar: [{
-        orient: 'vertical',
-        range: '2015'
-    },
-    {
-        left: 300,
-        orient: 'vertical',
-        range: '2016'
-    },
-    {
-        left: 520,
-        cellSize: [20, 'auto'],
-        bottom: 10,
-        orient: 'vertical',
-        range: '2017',
-        dayLabel: {
-            margin: 5
-        }
-    }],
-
-    series: [{
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 0,
-        data: getVirtulData(2015)
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 1,
-        data: getVirtulData(2016)
-    }, {
-        type: 'heatmap',
-        coordinateSystem: 'calendar',
-        calendarIndex: 2,
-        data: getVirtulData(2017)
-    }]
-};
diff --git a/public/data/candlestick-brush.js b/public/data/candlestick-brush.js
deleted file mode 100644
index 36c4da7..0000000
--- a/public/data/candlestick-brush.js
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-title: Candlestick Brush
-category: candlestick
-titleCN: 日历图刷选
-*/
-
-var upColor = '#00da3c';
-var downColor = '#ec0000';
-
-
-function splitData(rawData) {
-    var categoryData = [];
-    var values = [];
-    var volumes = [];
-    for (var i = 0; i < rawData.length; i++) {
-        categoryData.push(rawData[i].splice(0, 1)[0]);
-        values.push(rawData[i]);
-        volumes.push([i, rawData[i][4], rawData[i][0] > rawData[i][1] ? 1 : -1]);
-    }
-
-    return {
-        categoryData: categoryData,
-        values: values,
-        volumes: volumes
-    };
-}
-
-function calculateMA(dayCount, data) {
-    var result = [];
-    for (var i = 0, len = data.values.length; i < len; i++) {
-        if (i < dayCount) {
-            result.push('-');
-            continue;
-        }
-        var sum = 0;
-        for (var j = 0; j < dayCount; j++) {
-            sum += data.values[i - j][1];
-        }
-        result.push(+(sum / dayCount).toFixed(3));
-    }
-    return result;
-}
-
-$.get(ROOT_PATH + '/data/asset/data/stock-DJI.json', function (rawData) {
-
-    var data = splitData(rawData);
-
-    myChart.setOption(option = {
-        animation: false,
-        legend: {
-            bottom: 10,
-            left: 'center',
-            data: ['Dow-Jones index', 'MA5', 'MA10', 'MA20', 'MA30']
-        },
-        tooltip: {
-            trigger: 'axis',
-            axisPointer: {
-                type: 'cross'
-            },
-            borderWidth: 1,
-            borderColor: '#ccc',
-            padding: 10,
-            textStyle: {
-                color: '#000'
-            },
-            position: function (pos, params, el, elRect, size) {
-                var obj = {top: 10};
-                obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
-                return obj;
-            }
-            // extraCssText: 'width: 170px'
-        },
-        axisPointer: {
-            link: {xAxisIndex: 'all'},
-            label: {
-                backgroundColor: '#777'
-            }
-        },
-        toolbox: {
-            feature: {
-                dataZoom: {
-                    yAxisIndex: false
-                },
-                brush: {
-                    type: ['lineX', 'clear']
-                }
-            }
-        },
-        brush: {
-            xAxisIndex: 'all',
-            brushLink: 'all',
-            outOfBrush: {
-                colorAlpha: 0.1
-            }
-        },
-        visualMap: {
-            show: false,
-            seriesIndex: 5,
-            dimension: 2,
-            pieces: [{
-                value: 1,
-                color: downColor
-            }, {
-                value: -1,
-                color: upColor
-            }]
-        },
-        grid: [
-            {
-                left: '10%',
-                right: '8%',
-                height: '50%'
-            },
-            {
-                left: '10%',
-                right: '8%',
-                top: '63%',
-                height: '16%'
-            }
-        ],
-        xAxis: [
-            {
-                type: 'category',
-                data: data.categoryData,
-                scale: true,
-                boundaryGap: false,
-                axisLine: {onZero: false},
-                splitLine: {show: false},
-                splitNumber: 20,
-                min: 'dataMin',
-                max: 'dataMax',
-                axisPointer: {
-                    z: 100
-                }
-            },
-            {
-                type: 'category',
-                gridIndex: 1,
-                data: data.categoryData,
-                scale: true,
-                boundaryGap: false,
-                axisLine: {onZero: false},
-                axisTick: {show: false},
-                splitLine: {show: false},
-                axisLabel: {show: false},
-                splitNumber: 20,
-                min: 'dataMin',
-                max: 'dataMax'
-            }
-        ],
-        yAxis: [
-            {
-                scale: true,
-                splitArea: {
-                    show: true
-                }
-            },
-            {
-                scale: true,
-                gridIndex: 1,
-                splitNumber: 2,
-                axisLabel: {show: false},
-                axisLine: {show: false},
-                axisTick: {show: false},
-                splitLine: {show: false}
-            }
-        ],
-        dataZoom: [
-            {
-                type: 'inside',
-                xAxisIndex: [0, 1],
-                start: 98,
-                end: 100
-            },
-            {
-                show: true,
-                xAxisIndex: [0, 1],
-                type: 'slider',
-                top: '85%',
-                start: 98,
-                end: 100
-            }
-        ],
-        series: [
-            {
-                name: 'Dow-Jones index',
-                type: 'candlestick',
-                data: data.values,
-                itemStyle: {
-                    color: upColor,
-                    color0: downColor,
-                    borderColor: null,
-                    borderColor0: null
-                },
-                tooltip: {
-                    formatter: function (param) {
-                        param = param[0];
-                        return [
-                            'Date: ' + param.name + '<hr size=1 style="margin: 3px 0">',
-                            'Open: ' + param.data[0] + '<br/>',
-                            'Close: ' + param.data[1] + '<br/>',
-                            'Lowest: ' + param.data[2] + '<br/>',
-                            'Highest: ' + param.data[3] + '<br/>'
-                        ].join('');
-                    }
-                }
-            },
-            {
-                name: 'MA5',
-                type: 'line',
-                data: calculateMA(5, data),
-                smooth: true,
-                lineStyle: {
-                    opacity: 0.5
-                }
-            },
-            {
-                name: 'MA10',
-                type: 'line',
-                data: calculateMA(10, data),
-                smooth: true,
-                lineStyle: {
-                    opacity: 0.5
-                }
-            },
-            {
-                name: 'MA20',
-                type: 'line',
-                data: calculateMA(20, data),
-                smooth: true,
-                lineStyle: {
-                    opacity: 0.5
-                }
-            },
-            {
-                name: 'MA30',
-                type: 'line',
-                data: calculateMA(30, data),
-                smooth: true,
-                lineStyle: {
-                    opacity: 0.5
-                }
-            },
-            {
-                name: 'Volume',
-                type: 'bar',
-                xAxisIndex: 1,
-                yAxisIndex: 1,
-                data: data.volumes
-            }
-        ]
-    }, true);
-
-    myChart.dispatchAction({
-        type: 'brush',
-        areas: [
-            {
-                brushType: 'lineX',
-                coordRange: ['2016-06-02', '2016-06-20'],
-                xAxisIndex: 0
-            }
-        ]
-    });
-});
\ No newline at end of file
diff --git a/public/data/candlestick-large.js b/public/data/candlestick-large.js
deleted file mode 100644
index b1c942f..0000000
--- a/public/data/candlestick-large.js
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-title: Large Scale Candlestick
-category: candlestick
-titleCN: 大数据量K线图
-difficulty: 3
-*/
-
-var upColor = '#ec0000';
-var upBorderColor = '#8A0000';
-var downColor = '#00da3c';
-var downBorderColor = '#008F28';
-
-var dataCount = 2e5;
-var data = generateOHLC(dataCount);
-
-var option = {
-    dataset: {
-        source: data
-    },
-    title: {
-        text: 'Data Amount: ' + echarts.format.addCommas(dataCount)
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'line'
-        }
-    },
-    toolbox: {
-        feature: {
-            dataZoom: {
-                yAxisIndex: false
-            },
-        }
-    },
-    grid: [
-        {
-            left: '10%',
-            right: '10%',
-            bottom: 200
-        },
-        {
-            left: '10%',
-            right: '10%',
-            height: 80,
-            bottom: 80
-        }
-    ],
-    xAxis: [
-        {
-            type: 'category',
-            scale: true,
-            boundaryGap: false,
-            // inverse: true,
-            axisLine: {onZero: false},
-            splitLine: {show: false},
-            splitNumber: 20,
-            min: 'dataMin',
-            max: 'dataMax'
-        },
-        {
-            type: 'category',
-            gridIndex: 1,
-            scale: true,
-            boundaryGap: false,
-            axisLine: {onZero: false},
-            axisTick: {show: false},
-            splitLine: {show: false},
-            axisLabel: {show: false},
-            splitNumber: 20,
-            min: 'dataMin',
-            max: 'dataMax'
-        }
-    ],
-    yAxis: [
-        {
-            scale: true,
-            splitArea: {
-                show: true
-            }
-        },
-        {
-            scale: true,
-            gridIndex: 1,
-            splitNumber: 2,
-            axisLabel: {show: false},
-            axisLine: {show: false},
-            axisTick: {show: false},
-            splitLine: {show: false}
-        }
-    ],
-    dataZoom: [
-        {
-            type: 'inside',
-            xAxisIndex: [0, 1],
-            start: 10,
-            end: 100
-        },
-        {
-            show: true,
-            xAxisIndex: [0, 1],
-            type: 'slider',
-            bottom: 10,
-            start: 10,
-            end: 100
-        }
-    ],
-    visualMap: {
-        show: false,
-        seriesIndex: 1,
-        dimension: 6,
-        pieces: [{
-            value: 1,
-            color: upColor
-        }, {
-            value: -1,
-            color: downColor
-        }]
-    },
-    series: [
-        {
-            type: 'candlestick',
-            itemStyle: {
-                color: upColor,
-                color0: downColor,
-                borderColor: upBorderColor,
-                borderColor0: downBorderColor
-            },
-            encode: {
-                x: 0,
-                y: [1, 4, 3, 2]
-            }
-        },
-        {
-            name: 'Volumn',
-            type: 'bar',
-            xAxisIndex: 1,
-            yAxisIndex: 1,
-            itemStyle: {
-                color: '#7fbe9e'
-            },
-            large: true,
-            encode: {
-                x: 0,
-                y: 5
-            }
-        }
-    ]
-};
-
-function generateOHLC(count) {
-    var data = [];
-
-    var xValue = +new Date(2011, 0, 1);
-    var minute = 60 * 1000;
-    var baseValue = Math.random() * 12000;
-    var boxVals = new Array(4);
-    var dayRange = 12;
-
-    for (var i = 0; i < count; i++) {
-        baseValue = baseValue + Math.random() * 20 - 10;
-
-        for (var j = 0; j < 4; j++) {
-            boxVals[j] = (Math.random() - 0.5) * dayRange + baseValue;
-        }
-        boxVals.sort();
-
-        var openIdx = Math.round(Math.random() * 3);
-        var closeIdx = Math.round(Math.random() * 2);
-        if (closeIdx === openIdx) {
-            closeIdx++;
-        }
-        var volumn = boxVals[3] * (1000 + Math.random() * 500);
-
-        // ['open', 'close', 'lowest', 'highest', 'volumn']
-        // [1, 4, 3, 2]
-        data[i] = [
-            echarts.format.formatTime('yyyy-MM-dd\nhh:mm:ss', xValue += minute),
-            +boxVals[openIdx].toFixed(2), // open
-            +boxVals[3].toFixed(2), // highest
-            +boxVals[0].toFixed(2), // lowest
-            +boxVals[closeIdx].toFixed(2),  // close
-            volumn.toFixed(0),
-            getSign(data, i, +boxVals[openIdx], +boxVals[closeIdx], 4) // sign
-        ];
-    }
-
-    return data;
-
-    function getSign(data, dataIndex, openVal, closeVal, closeDimIdx) {
-        var sign;
-        if (openVal > closeVal) {
-            sign = -1;
-        }
-        else if (openVal < closeVal) {
-            sign = 1;
-        }
-        else {
-            sign = dataIndex > 0
-                // If close === open, compare with close of last record
-                ? (data[dataIndex - 1][closeDimIdx] <= closeVal ? 1 : -1)
-                // No record of previous, set to be positive
-                : 1;
-        }
-
-        return sign;
-    }
-}
diff --git a/public/data/candlestick-sh-2015.js b/public/data/candlestick-sh-2015.js
deleted file mode 100644
index 7dec204..0000000
--- a/public/data/candlestick-sh-2015.js
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-title: 'ShangHai Index, 2015'
-category: candlestick
-titleCN: 2015 年上证指数
-*/
-
-var rawData = [['2015/12/31','3570.47','3539.18','-33.69','-0.94%','3538.35','3580.6','176963664','25403106','-'],['2015/12/30','3566.73','3572.88','9.14','0.26%','3538.11','3573.68','187889600','26778766','-'],['2015/12/29','3528.4','3563.74','29.96','0.85%','3515.52','3564.17','182551920','25093890','-'],['2015/12/28','3635.77','3533.78','-94.13','-2.59%','3533.78','3641.59','269983264','36904280','-'],['2015/12/25','3614.05','3627.91','15.43','0.43%','3601.74','3635.26','198451120','2 [...]
-
-function calculateMA(dayCount, data) {
-    var result = [];
-    for (var i = 0, len = data.length; i < len; i++) {
-        if (i < dayCount) {
-            result.push('-');
-            continue;
-        }
-        var sum = 0;
-        for (var j = 0; j < dayCount; j++) {
-            sum += data[i - j][1];
-        }
-        result.push(sum / dayCount);
-    }
-    return result;
-}
-
-
-var dates = rawData.map(function (item) {
-    return item[0];
-});
-
-var data = rawData.map(function (item) {
-    return [+item[1], +item[2], +item[5], +item[6]];
-});
-var option = {
-    legend: {
-        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30'],
-        inactiveColor: '#777',
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            animation: false,
-            type: 'cross',
-            lineStyle: {
-                color: '#376df4',
-                width: 2,
-                opacity: 1
-            }
-        }
-    },
-    xAxis: {
-        type: 'category',
-        data: dates,
-        axisLine: { lineStyle: { color: '#8392A5' } }
-    },
-    yAxis: {
-        scale: true,
-        axisLine: { lineStyle: { color: '#8392A5' } },
-        splitLine: { show: false }
-    },
-    grid: {
-        bottom: 80
-    },
-    dataZoom: [{
-        textStyle: {
-            color: '#8392A5'
-        },
-        handleIcon: 'path://M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
-        dataBackground: {
-            areaStyle: {
-                color: '#8392A5'
-            },
-            lineStyle: {
-                opacity: 0.8,
-                color: '#8392A5'
-            }
-        },
-        brushSelect: true
-    }, {
-        type: 'inside'
-    }],
-    series: [
-        {
-            type: 'candlestick',
-            name: '日K',
-            data: data,
-            itemStyle: {
-                color: '#FD1050',
-                color0: '#0CF49B',
-                borderColor: '#FD1050',
-                borderColor0: '#0CF49B'
-            }
-        },
-        {
-            name: 'MA5',
-            type: 'line',
-            data: calculateMA(5, data),
-            smooth: true,
-            showSymbol: false,
-            lineStyle: {
-                width: 1
-            }
-        },
-        {
-            name: 'MA10',
-            type: 'line',
-            data: calculateMA(10, data),
-            smooth: true,
-            showSymbol: false,
-            lineStyle: {
-                width: 1
-            }
-        },
-        {
-            name: 'MA20',
-            type: 'line',
-            data: calculateMA(20, data),
-            smooth: true,
-            showSymbol: false,
-            lineStyle: {
-                width: 1
-            }
-        },
-        {
-            name: 'MA30',
-            type: 'line',
-            data: calculateMA(30, data),
-            smooth: true,
-            showSymbol: false,
-            lineStyle: {
-                width: 1
-            }
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/candlestick-sh.js b/public/data/candlestick-sh.js
deleted file mode 100644
index 3563bd4..0000000
--- a/public/data/candlestick-sh.js
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
-title: ShangHai Index
-category: candlestick
-titleCN: 上证指数
-difficulty: 2
-*/
-
-var upColor = '#ec0000';
-var upBorderColor = '#8A0000';
-var downColor = '#00da3c';
-var downBorderColor = '#008F28';
-
-
-// 数据意义:开盘(open),收盘(close),最低(lowest),最高(highest)
-var data0 = splitData([
-    ['2013/1/24', 2320.26,2320.26,2287.3,2362.94],
-    ['2013/1/25', 2300,2291.3,2288.26,2308.38],
-    ['2013/1/28', 2295.35,2346.5,2295.35,2346.92],
-    ['2013/1/29', 2347.22,2358.98,2337.35,2363.8],
-    ['2013/1/30', 2360.75,2382.48,2347.89,2383.76],
-    ['2013/1/31', 2383.43,2385.42,2371.23,2391.82],
-    ['2013/2/1', 2377.41,2419.02,2369.57,2421.15],
-    ['2013/2/4', 2425.92,2428.15,2417.58,2440.38],
-    ['2013/2/5', 2411,2433.13,2403.3,2437.42],
-    ['2013/2/6', 2432.68,2434.48,2427.7,2441.73],
-    ['2013/2/7', 2430.69,2418.53,2394.22,2433.89],
-    ['2013/2/8', 2416.62,2432.4,2414.4,2443.03],
-    ['2013/2/18', 2441.91,2421.56,2415.43,2444.8],
-    ['2013/2/19', 2420.26,2382.91,2373.53,2427.07],
-    ['2013/2/20', 2383.49,2397.18,2370.61,2397.94],
-    ['2013/2/21', 2378.82,2325.95,2309.17,2378.82],
-    ['2013/2/22', 2322.94,2314.16,2308.76,2330.88],
-    ['2013/2/25', 2320.62,2325.82,2315.01,2338.78],
-    ['2013/2/26', 2313.74,2293.34,2289.89,2340.71],
-    ['2013/2/27', 2297.77,2313.22,2292.03,2324.63],
-    ['2013/2/28', 2322.32,2365.59,2308.92,2366.16],
-    ['2013/3/1', 2364.54,2359.51,2330.86,2369.65],
-    ['2013/3/4', 2332.08,2273.4,2259.25,2333.54],
-    ['2013/3/5', 2274.81,2326.31,2270.1,2328.14],
-    ['2013/3/6', 2333.61,2347.18,2321.6,2351.44],
-    ['2013/3/7', 2340.44,2324.29,2304.27,2352.02],
-    ['2013/3/8', 2326.42,2318.61,2314.59,2333.67],
-    ['2013/3/11', 2314.68,2310.59,2296.58,2320.96],
-    ['2013/3/12', 2309.16,2286.6,2264.83,2333.29],
-    ['2013/3/13', 2282.17,2263.97,2253.25,2286.33],
-    ['2013/3/14', 2255.77,2270.28,2253.31,2276.22],
-    ['2013/3/15', 2269.31,2278.4,2250,2312.08],
-    ['2013/3/18', 2267.29,2240.02,2239.21,2276.05],
-    ['2013/3/19', 2244.26,2257.43,2232.02,2261.31],
-    ['2013/3/20', 2257.74,2317.37,2257.42,2317.86],
-    ['2013/3/21', 2318.21,2324.24,2311.6,2330.81],
-    ['2013/3/22', 2321.4,2328.28,2314.97,2332],
-    ['2013/3/25', 2334.74,2326.72,2319.91,2344.89],
-    ['2013/3/26', 2318.58,2297.67,2281.12,2319.99],
-    ['2013/3/27', 2299.38,2301.26,2289,2323.48],
-    ['2013/3/28', 2273.55,2236.3,2232.91,2273.55],
-    ['2013/3/29', 2238.49,2236.62,2228.81,2246.87],
-    ['2013/4/1', 2229.46,2234.4,2227.31,2243.95],
-    ['2013/4/2', 2234.9,2227.74,2220.44,2253.42],
-    ['2013/4/3', 2232.69,2225.29,2217.25,2241.34],
-    ['2013/4/8', 2196.24,2211.59,2180.67,2212.59],
-    ['2013/4/9', 2215.47,2225.77,2215.47,2234.73],
-    ['2013/4/10', 2224.93,2226.13,2212.56,2233.04],
-    ['2013/4/11', 2236.98,2219.55,2217.26,2242.48],
-    ['2013/4/12', 2218.09,2206.78,2204.44,2226.26],
-    ['2013/4/15', 2199.91,2181.94,2177.39,2204.99],
-    ['2013/4/16', 2169.63,2194.85,2165.78,2196.43],
-    ['2013/4/17', 2195.03,2193.8,2178.47,2197.51],
-    ['2013/4/18', 2181.82,2197.6,2175.44,2206.03],
-    ['2013/4/19', 2201.12,2244.64,2200.58,2250.11],
-    ['2013/4/22', 2236.4,2242.17,2232.26,2245.12],
-    ['2013/4/23', 2242.62,2184.54,2182.81,2242.62],
-    ['2013/4/24', 2187.35,2218.32,2184.11,2226.12],
-    ['2013/4/25', 2213.19,2199.31,2191.85,2224.63],
-    ['2013/4/26', 2203.89,2177.91,2173.86,2210.58],
-    ['2013/5/2', 2170.78,2174.12,2161.14,2179.65],
-    ['2013/5/3', 2179.05,2205.5,2179.05,2222.81],
-    ['2013/5/6', 2212.5,2231.17,2212.5,2236.07],
-    ['2013/5/7', 2227.86,2235.57,2219.44,2240.26],
-    ['2013/5/8', 2242.39,2246.3,2235.42,2255.21],
-    ['2013/5/9', 2246.96,2232.97,2221.38,2247.86],
-    ['2013/5/10', 2228.82,2246.83,2225.81,2247.67],
-    ['2013/5/13', 2247.68,2241.92,2231.36,2250.85],
-    ['2013/5/14', 2238.9,2217.01,2205.87,2239.93],
-    ['2013/5/15', 2217.09,2224.8,2213.58,2225.19],
-    ['2013/5/16', 2221.34,2251.81,2210.77,2252.87],
-    ['2013/5/17', 2249.81,2282.87,2248.41,2288.09],
-    ['2013/5/20', 2286.33,2299.99,2281.9,2309.39],
-    ['2013/5/21', 2297.11,2305.11,2290.12,2305.3],
-    ['2013/5/22', 2303.75,2302.4,2292.43,2314.18],
-    ['2013/5/23', 2293.81,2275.67,2274.1,2304.95],
-    ['2013/5/24', 2281.45,2288.53,2270.25,2292.59],
-    ['2013/5/27', 2286.66,2293.08,2283.94,2301.7],
-    ['2013/5/28', 2293.4,2321.32,2281.47,2322.1],
-    ['2013/5/29', 2323.54,2324.02,2321.17,2334.33],
-    ['2013/5/30', 2316.25,2317.75,2310.49,2325.72],
-    ['2013/5/31', 2320.74,2300.59,2299.37,2325.53],
-    ['2013/6/3', 2300.21,2299.25,2294.11,2313.43],
-    ['2013/6/4', 2297.1,2272.42,2264.76,2297.1],
-    ['2013/6/5', 2270.71,2270.93,2260.87,2276.86],
-    ['2013/6/6', 2264.43,2242.11,2240.07,2266.69],
-    ['2013/6/7', 2242.26,2210.9,2205.07,2250.63],
-    ['2013/6/13', 2190.1,2148.35,2126.22,2190.1]
-]);
-
-
-function splitData(rawData) {
-    var categoryData = [];
-    var values = []
-    for (var i = 0; i < rawData.length; i++) {
-        categoryData.push(rawData[i].splice(0, 1)[0]);
-        values.push(rawData[i])
-    }
-    return {
-        categoryData: categoryData,
-        values: values
-    };
-}
-
-function calculateMA(dayCount) {
-    var result = [];
-    for (var i = 0, len = data0.values.length; i < len; i++) {
-        if (i < dayCount) {
-            result.push('-');
-            continue;
-        }
-        var sum = 0;
-        for (var j = 0; j < dayCount; j++) {
-            sum += data0.values[i - j][1];
-        }
-        result.push(sum / dayCount);
-    }
-    return result;
-}
-
-
-
-option = {
-    title: {
-        text: '上证指数',
-        left: 0
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'cross'
-        }
-    },
-    legend: {
-        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']
-    },
-    grid: {
-        left: '10%',
-        right: '10%',
-        bottom: '15%'
-    },
-    xAxis: {
-        type: 'category',
-        data: data0.categoryData,
-        scale: true,
-        boundaryGap: false,
-        axisLine: {onZero: false},
-        splitLine: {show: false},
-        splitNumber: 20,
-        min: 'dataMin',
-        max: 'dataMax'
-    },
-    yAxis: {
-        scale: true,
-        splitArea: {
-            show: true
-        }
-    },
-    dataZoom: [
-        {
-            type: 'inside',
-            start: 50,
-            end: 100
-        },
-        {
-            show: true,
-            type: 'slider',
-            top: '90%',
-            start: 50,
-            end: 100
-        }
-    ],
-    series: [
-        {
-            name: '日K',
-            type: 'candlestick',
-            data: data0.values,
-            itemStyle: {
-                color: upColor,
-                color0: downColor,
-                borderColor: upBorderColor,
-                borderColor0: downBorderColor
-            },
-            markPoint: {
-                label: {
-                    normal: {
-                        formatter: function (param) {
-                            return param != null ? Math.round(param.value) : '';
-                        }
-                    }
-                },
-                data: [
-                    {
-                        name: 'XX标点',
-                        coord: ['2013/5/31', 2300],
-                        value: 2300,
-                        itemStyle: {
-                            color: 'rgb(41,60,85)'
-                        }
-                    },
-                    {
-                        name: 'highest value',
-                        type: 'max',
-                        valueDim: 'highest'
-                    },
-                    {
-                        name: 'lowest value',
-                        type: 'min',
-                        valueDim: 'lowest'
-                    },
-                    {
-                        name: 'average value on close',
-                        type: 'average',
-                        valueDim: 'close'
-                    }
-                ],
-                tooltip: {
-                    formatter: function (param) {
-                        return param.name + '<br>' + (param.data.coord || '');
-                    }
-                }
-            },
-            markLine: {
-                symbol: ['none', 'none'],
-                data: [
-                    [
-                        {
-                            name: 'from lowest to highest',
-                            type: 'min',
-                            valueDim: 'lowest',
-                            symbol: 'circle',
-                            symbolSize: 10,
-                            label: {
-                                show: false
-                            },
-                            emphasis: {
-                                label: {
-                                    show: false
-                                }
-                            }
-                        },
-                        {
-                            type: 'max',
-                            valueDim: 'highest',
-                            symbol: 'circle',
-                            symbolSize: 10,
-                            label: {
-                                show: false
-                            },
-                            emphasis: {
-                                label: {
-                                    show: false
-                                }
-                            }
-                        }
-                    ],
-                    {
-                        name: 'min line on close',
-                        type: 'min',
-                        valueDim: 'close'
-                    },
-                    {
-                        name: 'max line on close',
-                        type: 'max',
-                        valueDim: 'close'
-                    }
-                ]
-            }
-        },
-        {
-            name: 'MA5',
-            type: 'line',
-            data: calculateMA(5),
-            smooth: true,
-            lineStyle: {
-                opacity: 0.5
-            }
-        },
-        {
-            name: 'MA10',
-            type: 'line',
-            data: calculateMA(10),
-            smooth: true,
-            lineStyle: {
-                opacity: 0.5
-            }
-        },
-        {
-            name: 'MA20',
-            type: 'line',
-            data: calculateMA(20),
-            smooth: true,
-            lineStyle: {
-                opacity: 0.5
-            }
-        },
-        {
-            name: 'MA30',
-            type: 'line',
-            data: calculateMA(30),
-            smooth: true,
-            lineStyle: {
-                opacity: 0.5
-            }
-        },
-
-    ]
-};
-
diff --git a/public/data/candlestick-simple.js b/public/data/candlestick-simple.js
deleted file mode 100644
index a5dbdff..0000000
--- a/public/data/candlestick-simple.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-title: Basic Candlestick
-category: candlestick
-titleCN: 基础 K 线图
-difficulty: 0
-*/
-
-option = {
-    xAxis: {
-        data: ['2017-10-24', '2017-10-25', '2017-10-26', '2017-10-27']
-    },
-    yAxis: {},
-    series: [{
-        type: 'k',
-        data: [
-            [20, 34, 10,38],
-            [40, 35, 30, 50],
-            [31, 38, 33, 44],
-            [38, 15, 5, 42]
-        ]
-    }]
-};
diff --git a/public/data/candlestick-touch.js b/public/data/candlestick-touch.js
deleted file mode 100644
index 70c338f..0000000
--- a/public/data/candlestick-touch.js
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-title: Axis Pointer Link and Touch
-category: candlestick
-titleCN: 触屏上的坐标轴指示器
-difficulty: 4
-*/
-
-
-var rawData = [["2015/1/5","3258.63","3350.52","115.84","3.58%","3253.88","3369.28","531352384","54976008","-"],["2015/1/6","3330.8","3351.45","0.93","0.03%","3303.18","3394.22","501661696","53239848","-"],["2015/1/7","3326.65","3373.95","22.51","0.67%","3312.21","3374.9","391918880","43641672","-"],["2015/1/8","3371.96","3293.46","-80.5","-2.39%","3285.09","3381.57","371131200","39923032","-"],["2015/1/9","3276.97","3285.41","-8.04","-0.24%","3267.51","3404.83","410240864","45864804","- [...]
-var colorList = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83',  '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'];
-var labelFont = 'bold 12px Sans-serif';
-
-function calculateMA(dayCount, data) {
-    var result = [];
-    for (var i = 0, len = data.length; i < len; i++) {
-        if (i < dayCount) {
-            result.push('-');
-            continue;
-        }
-        var sum = 0;
-        for (var j = 0; j < dayCount; j++) {
-            sum += data[i - j][1];
-        }
-        result.push((sum / dayCount).toFixed(2));
-    }
-    return result;
-}
-
-
-var dates = ["2016-03-29", "2016-03-30", "2016-03-31", "2016-04-01", "2016-04-04", "2016-04-05", "2016-04-06", "2016-04-07", "2016-04-08", "2016-04-11", "2016-04-12", "2016-04-13", "2016-04-14", "2016-04-15", "2016-04-18", "2016-04-19", "2016-04-20", "2016-04-21", "2016-04-22", "2016-04-25", "2016-04-26", "2016-04-27", "2016-04-28", "2016-04-29", "2016-05-02", "2016-05-03", "2016-05-04", "2016-05-05", "2016-05-06", "2016-05-09", "2016-05-10", "2016-05-11", "2016-05-12", "2016-05-13", "20 [...]
-var data = [[17512.58,17633.11,17434.27,17642.81,86160000],[17652.36,17716.66,17652.36,17790.11,79330000],[17716.05,17685.09,17669.72,17755.7,102600000],[17661.74,17792.75,17568.02,17811.48,104890000],[17799.39,17737,17710.67,17806.38,85230000],[17718.03,17603.32,17579.56,17718.03,115230000],[17605.45,17716.05,17542.54,17723.55,99410000],[17687.28,17541.96,17484.23,17687.28,90120000],[17555.39,17576.96,17528.16,17694.51,79990000],[17586.48,17556.41,17555.9,17731.63,107100000],[17571.34,1 [...]
-var volumes = [86160000,79330000,102600000,104890000,85230000,115230000,99410000,90120000,79990000,107100000,81020000,91710000,84510000,118160000,89390000,89820000,100210000,102720000,134120000,83770000,92570000,109090000,100920000,136670000,80100000,97060000,95020000,81530000,80020000,85590000,75790000,87390000,88560000,86640000,88440000,103260000,79120000,95530000,111990000,87790000,86480000,79180000,68940000,73190000,147390000,78530000,75560000,82270000,71870000,78750000,71260000,6969 [...]
-
-var dataMA5 = calculateMA(5, data);
-var dataMA10 = calculateMA(10, data);
-var dataMA20 = calculateMA(20, data);
-
-
-option = {
-    animation: false,
-    color: colorList,
-    title: {
-        left: 'center',
-        text: '移动端 K线图'
-    },
-    legend: {
-        top: 30,
-        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']
-    },
-    tooltip: {
-        triggerOn: 'none',
-        transitionDuration: 0,
-        confine: true,
-        borderRadius: 4,
-        borderWidth: 1,
-        borderColor: '#333',
-        backgroundColor: 'rgba(255,255,255,0.9)',
-        textStyle: {
-            fontSize: 12,
-            color: '#333'
-        },
-        position: function (pos, params, el, elRect, size) {
-            var obj = {
-                top: 60
-            };
-            obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 5;
-            return obj;
-        }
-    },
-    axisPointer: {
-        link: [{
-            xAxisIndex: [0, 1]
-        }]
-    },
-    dataZoom: [{
-        type: 'slider',
-        xAxisIndex: [0, 1],
-        realtime: false,
-        start: 20,
-        end: 70,
-        top: 65,
-        height: 20,
-        handleIcon: 'path://M10.7,11.9H9.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
-        handleSize: '120%'
-    }, {
-        type: 'inside',
-        xAxisIndex: [0, 1],
-        start: 40,
-        end: 70,
-        top: 30,
-        height: 20
-    }],
-    xAxis: [{
-        type: 'category',
-        data: dates,
-        boundaryGap : false,
-        axisLine: { lineStyle: { color: '#777' } },
-        axisLabel: {
-            formatter: function (value) {
-                return echarts.format.formatTime('MM-dd', value);
-            }
-        },
-        min: 'dataMin',
-        max: 'dataMax',
-        axisPointer: {
-            show: true
-        }
-    }, {
-        type: 'category',
-        gridIndex: 1,
-        data: dates,
-        scale: true,
-        boundaryGap : false,
-        splitLine: {show: false},
-        axisLabel: {show: false},
-        axisTick: {show: false},
-        axisLine: { lineStyle: { color: '#777' } },
-        splitNumber: 20,
-        min: 'dataMin',
-        max: 'dataMax',
-        axisPointer: {
-            type: 'shadow',
-            label: {show: false},
-            triggerTooltip: true,
-            handle: {
-                show: true,
-                margin: 30,
-                color: '#B80C00'
-            }
-        }
-    }],
-    yAxis: [{
-        scale: true,
-        splitNumber: 2,
-        axisLine: { lineStyle: { color: '#777' } },
-        splitLine: { show: true },
-        axisTick: { show: false },
-        axisLabel: {
-            inside: true,
-            formatter: '{value}\n'
-        }
-    }, {
-        scale: true,
-        gridIndex: 1,
-        splitNumber: 2,
-        axisLabel: {show: false},
-        axisLine: {show: false},
-        axisTick: {show: false},
-        splitLine: {show: false}
-    }],
-    grid: [{
-        left: 20,
-        right: 20,
-        top: 110,
-        height: 120
-    }, {
-        left: 20,
-        right: 20,
-        height: 40,
-        top: 260
-    }],
-    graphic: [{
-        type: 'group',
-        left: 'center',
-        top: 70,
-        width: 300,
-        bounding: 'raw',
-        children: [{
-            id: 'MA5',
-            type: 'text',
-            style: {fill: colorList[1], font: labelFont},
-            left: 0
-        }, {
-            id: 'MA10',
-            type: 'text',
-            style: {fill: colorList[2], font: labelFont},
-            left: 'center'
-        }, {
-            id: 'MA20',
-            type: 'text',
-            style: {fill: colorList[3], font: labelFont},
-            right: 0
-        }]
-    }],
-    series: [{
-        name: 'Volume',
-        type: 'bar',
-        xAxisIndex: 1,
-        yAxisIndex: 1,
-        itemStyle: {
-            color: '#7fbe9e'
-        },
-        emphasis: {
-            itemStyle: {
-                color: '#140'
-            }
-        },
-        data: volumes
-    }, {
-        type: 'candlestick',
-        name: '日K',
-        data: data,
-        itemStyle: {
-            color: '#ef232a',
-            color0: '#14b143',
-            borderColor: '#ef232a',
-            borderColor0: '#14b143'
-        },
-        emphasis: {
-            itemStyle: {
-                color: 'black',
-                color0: '#444',
-                borderColor: 'black',
-                borderColor0: '#444'
-            }
-        }
-    }, {
-        name: 'MA5',
-        type: 'line',
-        data: dataMA5,
-        smooth: true,
-        showSymbol: false,
-        lineStyle: {
-            width: 1
-        }
-    }, {
-        name: 'MA10',
-        type: 'line',
-        data: dataMA10,
-        smooth: true,
-        showSymbol: false,
-        lineStyle: {
-            width: 1
-        }
-    }, {
-        name: 'MA20',
-        type: 'line',
-        data: dataMA20,
-        smooth: true,
-        showSymbol: false,
-        lineStyle: {
-            width: 1
-        }
-    }]
-};
diff --git a/public/data/circle-packing-with-d3.js b/public/data/circle-packing-with-d3.js
deleted file mode 100644
index 4cedb94..0000000
--- a/public/data/circle-packing-with-d3.js
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-title: Circle Packing with d3
-category: custom
-titleCN: Circle Packing with d3
-difficulty: 11
-*/
-
-$.when(
-    $.get(ROOT_PATH + '/data/asset/data/option-view.json'),
-    $.getScript('https://cdn.jsdelivr.net/npm/d3-hierarchy@2.0.0/dist/d3-hierarchy.min.js')
-).done(function (res) {
-    run(res[0]);
-});
-
-function run(rawData) {
-
-    var dataWrap = prepareData(rawData);
-
-    initChart(dataWrap.seriesData, dataWrap.maxDepth);
-}
-
-function prepareData(rawData) {
-    var seriesData = [];
-    var maxDepth = 0;
-
-    function convert(source, basePath, depth) {
-        if (source == null) {
-            return;
-        }
-        if (maxDepth > 5) {
-            return;
-        }
-        maxDepth = Math.max(depth, maxDepth);
-
-        seriesData.push({
-            id: basePath,
-            value: source.$count,
-            depth: depth,
-            index: seriesData.length
-        });
-
-        for (var key in source) {
-            if (source.hasOwnProperty(key) && !key.match(/^\$/)) {
-                var path = basePath + '.' + key;
-                convert(source[key], path, depth + 1);
-            }
-        }
-    }
-
-    convert(rawData, 'option', 0);
-
-    return {
-        seriesData: seriesData,
-        maxDepth: maxDepth
-    };
-}
-
-function initChart(seriesData, maxDepth) {
-    var displayRoot = stratify();
-
-    function stratify() {
-        return d3.stratify()
-            .parentId(function (d) {
-                return d.id.substring(0, d.id.lastIndexOf('.'));
-            })(
-                seriesData
-            )
-            .sum(function (d) {
-                return d.value || 0;
-            })
-            .sort(function (a, b) {
-                return b.value - a.value;
-            });
-    }
-
-    function overallLayout(params, api) {
-        var context = params.context;
-        d3.pack()
-            .size([api.getWidth() - 2, api.getHeight() - 2])
-            .padding(3)(displayRoot);
-
-        context.nodes = {};
-        displayRoot.descendants().forEach(function (node, index) {
-            context.nodes[node.id] = node;
-        });
-    }
-
-    function renderItem(params, api) {
-        var context = params.context;
-
-        // Only do that layout once in each time `setOption` called.
-        if (!context.layout) {
-            context.layout = true;
-            overallLayout(params, api);
-        }
-
-        var nodePath = api.value('id');
-        var node = context.nodes[nodePath];
-
-        if (!node) {
-            // Reder nothing.
-            return;
-        }
-
-        var isLeaf = !node.children || !node.children.length;
-
-        var focus = new Uint32Array(node.descendants().map(function (node) {
-            return node.data.index;
-        }));
-
-        var nodeName = isLeaf
-            ? nodePath.slice(nodePath.lastIndexOf('.') + 1).split(/(?=[A-Z][^A-Z])/g).join('\n')
-            : '';
-
-        var z2 = api.value('depth') * 2;
-
-        return {
-            type: 'circle',
-            focus: focus,
-            shape: {
-                cx: node.x,
-                cy: node.y,
-                r: node.r
-            },
-            transition: ['shape'],
-            z2: z2,
-            textContent: {
-                type: 'text',
-                style: {
-                    // transition: isLeaf ? 'fontSize' : null,
-                    text: nodeName,
-                    fontFamily: 'Arial',
-                    width: node.r * 1.3,
-                    overflow: 'truncate',
-                    fontSize: node.r / 3
-                },
-                emphasis: {
-                    style: {
-                        overflow: null,
-                        fontSize: Math.max(node.r / 3, 12)
-                    }
-                }
-            },
-            textConfig: {
-                position: 'inside'
-            },
-            style: {
-                fill: api.visual('color')
-            },
-            emphasis: {
-                style: {
-                    fontFamily: 'Arial',
-                    fontSize: 12,
-                    shadowBlur: 20,
-                    shadowOffsetX: 3,
-                    shadowOffsetY: 5,
-                    shadowColor: 'rgba(0,0,0,0.3)'
-                }
-            }
-        };
-    }
-
-    var option = {
-        dataset: {
-            source: seriesData
-        },
-        tooltip: {},
-        visualMap: {
-            show: false,
-            min: 0,
-            max: maxDepth,
-            dimension: 'depth',
-            inRange: {
-                color: ['#006edd', '#e0ffff']
-            }
-        },
-        hoverLayerThreshold: Infinity,
-        series: {
-            type: 'custom',
-            renderItem: renderItem,
-            progressive: 0,
-            coordinateSystem: 'none',
-            encode: {
-                tooltip: 'value',
-                itemName: 'id'
-            }
-        }
-    };
-
-    myChart.setOption(option);
-
-    myChart.on('click', { seriesIndex: 0 }, function (params) {
-        drillDown(params.data.id);
-    });
-
-    function drillDown(targetNodeId) {
-        displayRoot = stratify();
-        if (targetNodeId != null) {
-            displayRoot = displayRoot.descendants().find(function (node) {
-                return node.data.id === targetNodeId;
-            });
-        }
-        // A trick to prevent d3-hierarchy from visiting parents in this algorithm.
-        displayRoot.parent = null;
-
-        myChart.setOption({
-            dataset: {
-                source: seriesData
-            }
-        });
-    }
-
-    // Reset: click on the blank area.
-    myChart.getZr().on('click', function (event) {
-        if (!event.target) {
-            drillDown();
-        }
-    });
-}
diff --git a/public/data/confidence-band.js b/public/data/confidence-band.js
deleted file mode 100644
index 1cf5bb7..0000000
--- a/public/data/confidence-band.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-title: Confidence Band
-category: line
-titleCN: Confidence Band
-difficulty: 4
-*/
-
-myChart.showLoading();
-$.get(ROOT_PATH + '/data/asset/data/confidence-band.json', function (data) {
-    myChart.hideLoading();
-
-    var base = -data.reduce(function (min, val) {
-        return Math.floor(Math.min(min, val.l));
-    }, Infinity);
-    myChart.setOption(option = {
-        title: {
-            text: 'Confidence Band',
-            subtext: 'Example in MetricsGraphics.js',
-            left: 'center'
-        },
-        tooltip: {
-            trigger: 'axis',
-            axisPointer: {
-                type: 'cross',
-                animation: false,
-                label: {
-                    backgroundColor: '#ccc',
-                    borderColor: '#aaa',
-                    borderWidth: 1,
-                    shadowBlur: 0,
-                    shadowOffsetX: 0,
-                    shadowOffsetY: 0,
-
-                    color: '#222'
-                }
-            },
-            formatter: function (params) {
-                return params[2].name + '<br />' + ((params[2].value - base) * 100).toFixed(1) + '%';
-            }
-        },
-        grid: {
-            left: '3%',
-            right: '4%',
-            bottom: '3%',
-            containLabel: true
-        },
-        xAxis: {
-            type: 'category',
-            data: data.map(function (item) {
-                return item.date;
-            }),
-            axisLabel: {
-                formatter: function (value, idx) {
-                    var date = new Date(value);
-                    return idx === 0 ? value : [date.getMonth() + 1, date.getDate()].join('-');
-                }
-            },
-            boundaryGap: false
-        },
-        yAxis: {
-            axisLabel: {
-                formatter: function (val) {
-                    return (val - base) * 100 + '%';
-                }
-            },
-            axisPointer: {
-                label: {
-                    formatter: function (params) {
-                        return ((params.value - base) * 100).toFixed(1) + '%';
-                    }
-                }
-            },
-            splitNumber: 3
-        },
-        series: [{
-            name: 'L',
-            type: 'line',
-            data: data.map(function (item) {
-                return item.l + base;
-            }),
-            lineStyle: {
-                opacity: 0
-            },
-            stack: 'confidence-band',
-            symbol: 'none'
-        }, {
-            name: 'U',
-            type: 'line',
-            data: data.map(function (item) {
-                return item.u - item.l;
-            }),
-            lineStyle: {
-                opacity: 0
-            },
-            areaStyle: {
-                color: '#ccc'
-            },
-            stack: 'confidence-band',
-            symbol: 'none'
-        }, {
-            type: 'line',
-            data: data.map(function (item) {
-                return item.value + base;
-            }),
-            hoverAnimation: false,
-            symbolSize: 6,
-            itemStyle: {
-                color: '#333'
-            },
-            showSymbol: false
-        }]
-    });
-});
diff --git a/public/data/covid-america.js b/public/data/covid-america.js
deleted file mode 100644
index 27d2049..0000000
--- a/public/data/covid-america.js
+++ /dev/null
@@ -1,404 +0,0 @@
-// https://www.makeapie.com/editor.html?c=x02yMqYpqC
-// 作品源于社区作者: 电***n
-
-// Do not prepared to expose.
-
-
-var _timelineDuration = 500;
-var _barDurationUpdate = 490;
-var _axisDurationUpdate = null;
-// var _timelineDuration = 5500;
-// var _barDurationUpdate = 5490;
-// var _axisDurationUpdate = 5000;
-
-$.get(ROOT_PATH + '/data/asset/geo/USA.json', function (usaJson) {
-
-    echarts.registerMap('USA', usaJson, {
-        'Alaska': {
-            left: -123,
-            top: 20,
-            width: 15
-        },
-        'Hawaii': {
-            left: -95,
-            top: 20,
-            width: 5
-        },
-        'Puerto Rico': {
-            left: -85,
-            top: 22,
-            width: 2
-        }
-    });
-
-    run();
-
-});
-
-
-function run() {
-
-    var days = ['1/22/20', '1/23/20', '1/24/20', '1/25/20', '1/26/20', '1/27/20', '1/28/20', '1/29/20', '1/30/20', '1/31/20', '2/1/20', '2/2/20', '2/3/20', '2/4/20', '2/5/20', '2/6/20', '2/7/20', '2/8/20', '2/9/20', '2/10/20', '2/11/20', '2/12/20', '2/13/20', '2/14/20', '2/15/20', '2/16/20', '2/17/20', '2/18/20', '2/19/20', '2/20/20', '2/21/20', '2/22/20', '2/23/20', '2/24/20', '2/25/20', '2/26/20', '2/27/20', '2/28/20', '2/29/20', '3/1/20', '3/2/20', '3/3/20', '3/4/20', '3/5/20', '3/6/2 [...]
-
-    var _country = ['Alabama', 'Alaska', 'American Samoa', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Diamond Princess', 'District of Columbia', 'Florida', 'Georgia', 'Grand Princess', 'Guam', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York',  [...]
-
-    var rawData = [
-        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 10, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 10, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 11, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 11, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
-        [0, 0, 0, 1, 0, 12, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0],
-        [0, 0, 0, 1, 0, 12, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0],
-        [0, 0, 0, 1, 0, 21, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0],
-        [0, 0, 0, 1, 0, 25, 0, 0, 0, 45, 0, 2, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0],
-        [0, 0, 0, 1, 0, 35, 0, 0, 0, 45, 0, 2, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 11, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0],
-        [0, 0, 0, 1, 0, 51, 0, 0, 0, 45, 0, 3, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 23, 1, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 1, 3, 0, 0, 0, 0, 70, 0, 0, 0],
-        [0, 0, 0, 2, 0, 59, 3, 0, 0, 45, 0, 3, 3, 0, 0, 0, 0, 5, 1, 0, 0, 1, 0, 0, 3, 6, 0, 1, 0, 0, 0, 1, 2, 2, 2, 0, 31, 2, 0, 0, 0, 0, 3, 2, 0, 2, 0, 0, 1, 4, 0, 0, 0, 0, 78, 0, 0, 0],
-        [0, 0, 0, 4, 0, 81, 7, 0, 0, 45, 0, 7, 5, 21, 0, 1, 0, 6, 1, 0, 0, 1, 0, 0, 3, 6, 0, 1, 0, 0, 0, 1, 2, 2, 4, 0, 76, 2, 0, 0, 0, 1, 6, 2, 0, 3, 2, 0, 1, 8, 1, 0, 0, 0, 102, 0, 0, 0],
-        [0, 0, 0, 4, 0, 95, 7, 0, 0, 45, 2, 10, 5, 21, 0, 1, 0, 7, 2, 0, 1, 1, 0, 0, 5, 22, 0, 1, 0, 1, 0, 1, 4, 4, 5, 0, 106, 2, 0, 0, 0, 1, 14, 6, 0, 3, 2, 0, 3, 11, 1, 1, 0, 2, 122, 0, 0, 0],
-        [0, 0, 0, 4, 0, 101, 7, 0, 0, 45, 2, 13, 10, 21, 0, 1, 0, 7, 3, 3, 1, 4, 1, 0, 5, 22, 0, 2, 0, 1, 0, 3, 4, 4, 5, 0, 142, 2, 0, 0, 0, 1, 14, 7, 0, 3, 3, 0, 3, 13, 1, 1, 0, 2, 122, 0, 0, 0],
-        [0, 0, 0, 6, 0, 144, 15, 2, 0, 46, 5, 15, 17, 21, 0, 2, 0, 12, 6, 8, 1, 6, 1, 0, 8, 92, 0, 3, 0, 1, 0, 3, 4, 4, 15, 0, 173, 7, 0, 0, 3, 2, 15, 12, 0, 3, 7, 0, 7, 13, 2, 1, 0, 7, 267, 0, 3, 0],
-        [0, 0, 0, 9, 1, 177, 34, 3, 1, 46, 10, 28, 23, 21, 0, 2, 0, 25, 11, 13, 1, 8, 6, 0, 9, 95, 2, 5, 0, 1, 1, 5, 7, 5, 23, 3, 220, 7, 0, 0, 4, 2, 19, 16, 0, 5, 10, 8, 9, 21, 3, 1, 0, 9, 366, 0, 6, 0],
-        [0, 0, 0, 9, 6, 221, 45, 5, 1, 46, 10, 35, 31, 21, 0, 2, 0, 32, 13, 16, 1, 10, 19, 0, 12, 108, 2, 9, 1, 1, 1, 10, 14, 6, 29, 5, 328, 15, 1, 0, 5, 2, 24, 22, 0, 5, 12, 8, 18, 27, 5, 2, 0, 17, 442, 0, 8, 1],
-        [5, 1, 0, 9, 6, 282, 49, 11, 4, 46, 10, 50, 42, 21, 0, 2, 1, 46, 13, 17, 5, 14, 36, 1, 18, 123, 16, 14, 1, 2, 1, 13, 17, 6, 29, 10, 421, 17, 1, 0, 13, 2, 30, 41, 0, 14, 13, 8, 26, 43, 9, 2, 0, 30, 568, 0, 19, 1],
-        [6, 1, 0, 12, 12, 340, 101, 22, 6, 46, 10, 76, 66, 21, 0, 4, 2, 64, 16, 17, 8, 14, 77, 3, 26, 138, 25, 21, 6, 4, 5, 14, 21, 7, 69, 10, 525, 24, 1, 0, 26, 4, 32, 47, 3, 20, 19, 9, 32, 57, 10, 5, 1, 41, 572, 0, 27, 2],
-        [12, 1, 0, 13, 16, 426, 131, 24, 7, 46, 16, 115, 99, 21, 3, 6, 5, 93, 20, 18, 8, 20, 91, 12, 32, 164, 33, 35, 10, 5, 7, 17, 24, 13, 98, 13, 732, 33, 1, 0, 37, 7, 36, 66, 5, 20, 28, 9, 39, 72, 28, 8, 1, 45, 643, 0, 32, 3],
-        [29, 1, 0, 18, 22, 557, 160, 30, 8, 47, 22, 155, 121, 20, 3, 7, 5, 105, 25, 23, 11, 21, 136, 17, 41, 197, 53, 54, 13, 6, 7, 18, 45, 17, 178, 17, 967, 38, 1, 0, 50, 10, 39, 77, 5, 21, 33, 10, 52, 85, 39, 12, 1, 49, 904, 0, 47, 3],
-        [39, 3, 0, 20, 22, 698, 160, 68, 16, 47, 22, 216, 146, 21, 3, 10, 8, 161, 30, 23, 18, 26, 196, 32, 60, 218, 65, 60, 21, 11, 9, 21, 56, 26, 267, 23, 1706, 64, 3, 0, 67, 19, 66, 112, 5, 23, 47, 11, 74, 110, 51, 12, 2, 67, 1076, 1, 72, 11],
-        [46, 6, 0, 27, 33, 751, 184, 68, 19, 47, 31, 314, 199, 21, 5, 14, 9, 162, 39, 29, 18, 27, 257, 42, 85, 218, 83, 77, 34, 18, 11, 24, 55, 26, 267, 23, 2495, 70, 6, 0, 86, 19, 68, 152, 5, 33, 47, 11, 79, 173, 51, 18, 2, 77, 1014, 1, 92, 15],
-        [78, 9, 0, 45, 62, 952, 277, 159, 30, 47, 40, 417, 287, 22, 12, 16, 11, 422, 60, 44, 34, 37, 392, 52, 107, 328, 334, 89, 50, 31, 11, 29, 95, 44, 742, 35, 5365, 123, 18, 0, 119, 44, 88, 206, 5, 44, 81, 11, 154, 260, 80, 22, 3, 99, 1376, 2, 159, 18],
-        [83, 12, 0, 78, 96, 1177, 363, 194, 38, 49, 71, 563, 420, 23, 14, 26, 23, 585, 86, 45, 44, 47, 538, 56, 149, 413, 552, 115, 80, 53, 15, 37, 114, 44, 890, 43, 8310, 172, 19, 0, 173, 49, 114, 303, 14, 54, 126, 14, 233, 394, 78, 29, 3, 122, 1524, 7, 207, 19],
-        [131, 15, 0, 118, 122, 1364, 390, 194, 45, 49, 77, 659, 507, 23, 15, 37, 36, 753, 128, 68, 57, 87, 585, 70, 193, 525, 788, 138, 140, 74, 21, 38, 161, 55, 1327, 43, 11710, 253, 28, 0, 248, 53, 114, 396, 21, 66, 171, 14, 371, 581, 136, 29, 3, 156, 1793, 8, 282, 23],
-        [157, 20, 0, 152, 165, 1646, 591, 327, 56, 49, 204, 1004, 621, 30, 27, 53, 42, 1049, 204, 90, 65, 103, 837, 89, 244, 646, 1035, 167, 207, 87, 34, 51, 190, 74, 1914, 57, 15800, 305, 28, 0, 356, 67, 161, 509, 23, 83, 196, 21, 505, 643, 162, 52, 6, 220, 1997, 16, 381, 26],
-        [196, 30, 0, 235, 192, 2108, 704, 415, 68, 49, 120, 1227, 772, 28, 29, 56, 68, 1285, 270, 105, 84, 123, 1172, 107, 290, 777, 1329, 234, 249, 187, 34, 51, 245, 101, 2844, 83, 20884, 353, 30, 0, 443, 81, 191, 698, 31, 106, 298, 28, 614, 758, 257, 75, 7, 254, 2221, 16, 425, 26],
-        [242, 34, 0, 326, 219, 2538, 723, 618, 104, 49, 141, 1412, 1026, 28, 32, 90, 81, 1537, 368, 124, 100, 162, 1388, 118, 349, 1159, 1793, 261, 320, 257, 51, 66, 278, 101, 3675, 100, 25681, 495, 36, 0, 567, 106, 210, 946, 39, 124, 342, 30, 772, 955, 298, 95, 17, 293, 2328, 22, 481, 29],
-        [381, 41, 0, 401, 280, 2998, 1021, 875, 119, 49, 187, 1682, 1247, 28, 37, 91, 91, 1865, 477, 146, 134, 197, 1795, 142, 425, 1838, 2296, 286, 377, 354, 65, 71, 323, 108, 4402, 113, 30841, 590, 45, 0, 704, 164, 266, 1260, 51, 132, 424, 41, 916, 1229, 340, 125, 17, 396, 2591, 39, 621, 44],
-        [517, 56, 0, 508, 335, 3899, 1430, 1012, 130, 49, 231, 2357, 1525, 28, 45, 95, 146, 2538, 645, 179, 172, 247, 2304, 155, 583, 2417, 2845, 344, 485, 520, 90, 74, 420, 137, 6876, 113, 37877, 738, 51, 0, 868, 248, 316, 1795, 64, 165, 424, 46, 1097, 1563, 396, 158, 17, 466, 3207, 52, 728, 53],
-        [587, 58, 0, 665, 381, 4657, 1433, 1291, 163, 49, 271, 2900, 2000, 28, 51, 106, 205, 3024, 979, 235, 206, 301, 2744, 168, 775, 3240, 3634, 396, 579, 666, 109, 82, 536, 158, 8825, 136, 44876, 887, 68, 0, 1137, 322, 416, 2345, 79, 203, 542, 58, 1318, 1937, 472, 184, 19, 607, 3477, 76, 926, 70],
-        [694, 85, 0, 773, 409, 5095, 1740, 1524, 214, 49, 304, 3763, 2366, 103, 55, 149, 234, 3491, 1233, 298, 266, 380, 3315, 211, 995, 4257, 4650, 441, 663, 836, 129, 96, 626, 187, 11124, 208, 52410, 1020, 94, 0, 1406, 377, 479, 2845, 100, 239, 660, 68, 1511, 2455, 602, 211, 22, 740, 4030, 96, 1055, 82],
-        [825, 102, 0, 919, 426, 5852, 2307, 1993, 232, 49, 342, 4246, 2651, 103, 56, 149, 281, 4596, 1513, 336, 330, 438, 3540, 253, 1239, 4955, 5488, 503, 759, 915, 154, 108, 920, 214, 13386, 237, 59648, 1191, 98, 0, 1653, 429, 548, 3432, 127, 294, 774, 90, 1720, 2792, 720, 235, 23, 890, 4465, 113, 1164, 86],
-        [899, 114, 0, 1157, 473, 7138, 2311, 2571, 264, 49, 401, 5473, 2808, 103, 58, 175, 340, 5056, 1786, 424, 372, 479, 4025, 275, 1413, 5752, 6498, 576, 847, 1051, 171, 145, 1012, 314, 16636, 237, 66663, 1313, 109, 0, 1933, 481, 606, 4155, 174, 408, 925, 101, 1917, 3147, 798, 256, 30, 1020, 4923, 145, 1230, 94],
-        [987, 119, 0, 1289, 523, 8210, 2966, 3128, 319, 49, 495, 6741, 3929, 103, 69, 204, 515, 5994, 2158, 497, 434, 628, 5237, 303, 1660, 6620, 7615, 629, 937, 1357, 198, 172, 1114, 357, 18696, 315, 75833, 1535, 122, 2, 2199, 568, 690, 4963, 239, 488, 1083, 108, 2391, 3809, 888, 293, 30, 1249, 5432, 162, 1412, 109],
-        [1060, 132, 0, 1530, 584, 9399, 2982, 3557, 368, 49, 586, 6956, 4638, 103, 77, 224, 566, 6980, 2564, 547, 485, 632, 6424, 303, 1986, 7738, 9315, 689, 1073, 1613, 208, 210, 1279, 367, 22255, 340, 83948, 1675, 142, 6, 2547, 721, 736, 6009, 286, 566, 1293, 129, 2933, 4355, 888, 321, 30, 1483, 5608, 191, 1556, 130],
-        [1233, 143, 0, 1715, 643, 10773, 3342, 3824, 393, 49, 653, 9008, 5348, 103, 82, 256, 776, 7695, 3038, 614, 553, 770, 9149, 376, 2331, 8966, 10791, 742, 1177, 1857, 241, 246, 1463, 316, 25590, 388, 92506, 1977, 159, 6, 2901, 881, 826, 7268, 316, 645, 1554, 165, 3013, 5069, 1092, 338, 30, 1706, 6389, 216, 1748, 150],
-        [1495, 157, 0, 1937, 704, 12004, 3742, 4914, 450, 49, 757, 10268, 5831, 103, 84, 319, 891, 8904, 3437, 699, 629, 770, 10297, 432, 2758, 10402, 12744, 788, 1358, 1864, 243, 279, 1514, 479, 29895, 534, 102987, 2251, 173, 8, 3312, 990, 899, 8570, 316, 711, 1700, 187, 3067, 5734, 1255, 389, 37, 2012, 6846, 237, 2012, 162],
-        [1614, 171, 0, 2187, 743, 12837, 4188, 5276, 593, 49, 902, 11537, 6160, 103, 93, 351, 1022, 10357, 3953, 787, 698, 917, 12496, 456, 3125, 11736, 14225, 865, 1455, 2310, 265, 321, 1742, 540, 34124, 534, 113833, 2486, 186, 8, 3739, 1161, 899, 10444, 452, 806, 1917, 212, 3322, 6567, 1435, 461, 40, 2407, 7247, 282, 2030, 187],
-        [1765, 185, 0, 2486, 837, 15034, 4950, 5675, 673, 49, 1002, 12350, 6647, 103, 112, 371, 1078, 11259, 4411, 869, 751, 955, 13010, 470, 3617, 12500, 15718, 935, 1638, 2347, 286, 364, 1855, 621, 37505, 670, 123160, 2649, 207, 8, 4043, 1254, 1068, 11589, 475, 922, 2049, 240, 3633, 7209, 1608, 512, 42, 2640, 7825, 324, 2320, 197],
-        [1952, 190, 0, 2732, 875, 16019, 5183, 6906, 783, 49, 1097, 13324, 7314, 103, 113, 387, 1101, 12262, 4956, 946, 849, 955, 14867, 499, 4045, 13837, 17221, 986, 1738, 2736, 299, 417, 1953, 715, 41090, 757, 131815, 2962, 225, 8, 4453, 1329, 1068, 13127, 513, 1082, 2232, 288, 3802, 8043, 1685, 543, 43, 2878, 8311, 345, 2449, 210],
-        [2169, 213, 0, 2870, 946, 17351, 5429, 7781, 928, 49, 1211, 14545, 8822, 103, 121, 410, 1170, 12271, 5510, 1046, 912, 1149, 16284, 519, 4371, 15202, 18970, 1069, 1915, 3130, 319, 447, 2124, 715, 44416, 876, 139875, 3299, 237, 8, 4782, 1474, 1132, 14853, 573, 1229, 2417, 320, 4139, 8925, 1746, 575, 43, 3335, 8692, 412, 2578, 216],
-        [2328, 226, 0, 3036, 1000, 18897, 5655, 7781, 1116, 49, 1440, 15456, 9901, 103, 121, 410, 1210, 15078, 5943, 1145, 1046, 1149, 17030, 537, 5529, 16790, 20346, 1154, 2003, 3209, 332, 519, 2259, 747, 47437, 902, 151061, 3499, 251, 11, 5148, 1526, 1181, 16631, 620, 1450, 2417, 393, 4363, 9777, 1855, 605, 45, 3645, 9276, 483, 2710, 221],
-        [2703, 235, 0, 3018, 1119, 19710, 5655, 9784, 1209, 49, 1523, 16364, 10566, 103, 128, 442, 1232, 15079, 6351, 1270, 1116, 1341, 18283, 560, 6185, 18941, 21504, 1240, 2260, 3432, 354, 568, 2456, 819, 51027, 865, 161779, 3736, 269, 11, 5512, 1686, 1321, 18300, 683, 1727, 2793, 447, 4634, 11208, 1856, 628, 45, 4042, 9639, 514, 2886, 230],
-        [2947, 246, 0, 3112, 1171, 21081, 6202, 10538, 1326, 49, 1660, 17531, 11485, 103, 130, 442, 1354, 17887, 6907, 1388, 1117, 1693, 19253, 586, 6968, 20974, 22434, 1336, 2469, 3897, 365, 635, 2722, 819, 54588, 1081, 172348, 3965, 278, 11, 5878, 1794, 1322, 20051, 725, 1727, 3067, 536, 4891, 12105, 2103, 679, 50, 4509, 10119, 574, 3068, 239],
-        [3217, 257, 0, 3393, 1228, 21706, 6513, 11510, 1479, 49, 1778, 18494, 12159, 103, 133, 465, 1396, 19180, 7435, 1510, 1275, 1693, 20014, 616, 7694, 22860, 23605, 1427, 2642, 4108, 377, 699, 2702, 885, 58151, 1091, 181026, 4354, 293, 11, 6250, 1868, 1371, 21719, 788, 2349, 3211, 626, 5132, 13023, 2207, 711, 51, 5077, 10434, 577, 3213, 261],
-        [3563, 272, 0, 3542, 1280, 22795, 7307, 12035, 1625, 49, 1875, 19895, 12452, 103, 133, 499, 1407, 20852, 7928, 1587, 1344, 1963, 20595, 633, 8225, 25475, 24244, 1621, 2781, 4269, 387, 791, 2836, 929, 61850, 1245, 189033, 4570, 308, 11, 6604, 1970, 1527, 22938, 897, 2665, 3320, 730, 5508, 13677, 2303, 727, 51, 5274, 10609, 593, 3341, 270],
-        [3734, 277, 0, 3705, 1410, 23931, 7691, 13381, 1758, 49, 1955, 21019, 13315, 103, 133, 504, 1426, 22025, 8359, 1710, 1390, 2018, 21016, 698, 8936, 26867, 25635, 1621, 2942, 4515, 394, 814, 2990, 985, 64584, 1262, 195749, 4886, 331, 11, 6975, 2069, 1584, 24292, 903, 2665, 3391, 868, 5610, 14275, 2363, 748, 51, 5747, 10635, 611, 3428, 275],
-        [3953, 285, 0, 3809, 1498, 25356, 7950, 13989, 1926, 49, 2058, 21628, 14578, 103, 133, 511, 1464, 23248, 8527, 1899, 1441, 2048, 21518, 735, 9472, 28164, 27001, 1695, 3087, 4746, 399, 897, 3134, 922, 68824, 1345, 203020, 5113, 341, 11, 7285, 2184, 1633, 25465, 923, 3251, 3553, 988, 5827, 15006, 2417, 752, 51, 6182, 10799, 640, 3555, 282],
-        [4075, 293, 0, 3964, 1569, 26686, 7956, 14755, 2014, 49, 2197, 22511, 14987, 103, 135, 524, 1473, 24593, 8960, 1995, 1504, 2210, 21951, 770, 10032, 29918, 28059, 1809, 3360, 4791, 404, 901, 3211, 1139, 71030, 1484, 214454, 5340, 365, 13, 7794, 2263, 1663, 26753, 974, 3251, 3656, 1168, 5827, 15907, 2548, 759, 51, 6500, 10942, 702, 3721, 287],
-        [4345, 300, 0, 4237, 1620, 27677, 8286, 15884, 2070, 49, 2350, 23343, 15669, 103, 135, 530, 1587, 25734, 9542, 2141, 1615, 2435, 22532, 796, 10784, 32181, 28809, 1809, 3624, 5174, 415, 952, 3214, 1139, 75317, 1484, 223691, 5639, 393, 13, 8414, 2357, 1736, 28258, 1043, 3529, 3931, 1311, 6375, 16876, 2683, 774, 51, 6889, 11057, 728, 3875, 296],
-        [4571, 309, 0, 4511, 1695, 29157, 8691, 16809, 2317, 49, 2476, 24759, 17194, 103, 136, 541, 1609, 27578, 10154, 2332, 1730, 2522, 23118, 827, 11572, 34402, 30023, 2070, 3793, 5371, 422, 1066, 3524, 1287, 78467, 1597, 230597, 6045, 393, 13, 9107, 2465, 1785, 29888, 1068, 4177, 4099, 1411, 6263, 17849, 2793, 779, 51, 7491, 11517, 775, 4053, 305],
-        [4712, 314, 0, 4724, 1744, 30491, 9047, 17550, 2538, 49, 2666, 25492, 17669, 103, 136, 574, 1655, 29160, 10641, 2513, 1821, 2707, 23580, 847, 12326, 36372, 30791, 2209, 3974, 5579, 426, 1249, 3626, 1342, 81420, 1798, 241712, 6328, 528, 14, 10222, 2465, 1844, 31652, 1118, 4491, 4248, 1542, 6589, 18704, 2917, 803, 53, 8053, 11776, 785, 4199, 309],
-        [4888, 319, 0, 4933, 1781, 31431, 9730, 17962, 2538, 49, 2793, 26314, 18301, 103, 136, 580, 1668, 30357, 11211, 2902, 1905, 2960, 23928, 867, 12847, 38077, 31424, 2356, 4274, 5743, 433, 1474, 3728, 1390, 85301, 1845, 247815, 6601, 585, 14, 11602, 2567, 1910, 32902, 1213, 4706, 4377, 1635, 7070, 19260, 3069, 813, 53, 8542, 12255, 890, 4346, 313],
-        [5079, 321, 0, 5068, 1973, 33686, 9730, 19815, 2745, 49, 2927, 27059, 19407, 103, 136, 584, 1672, 31513, 11688, 3159, 2048, 3050, 24523, 875, 13684, 38077, 32000, 2470, 4512, 5890, 433, 1648, 3830, 1447, 88722, 1971, 253060, 6895, 627, 14, 12919, 2680, 1957, 33914, 1252, 5090, 4446, 1685, 7238, 19751, 3213, 816, 53, 8990, 12114, 902, 4499, 317],
-        [5317, 329, 0, 5256, 1990, 35465, 10473, 20360, 2931, 49, 3098, 27869, 19881, 103, 136, 586, 1736, 33059, 12097, 3641, 2164, 3204, 24854, 888, 14193, 41199, 32667, 2567, 4716, 6066, 437, 1685, 3937, 1490, 92387, 1971, 258361, 7134, 644, 14, 13725, 2807, 2004, 35249, 1298, 5500, 4439, 1755, 7394, 20574, 3297, 818, 53, 9630, 12392, 908, 4625, 443],
-        [5593, 335, 0, 5473, 2276, 37344, 10891, 22469, 3200, 49, 3206, 28309, 21214, 103, 136, 592, 1766, 35107, 12438, 3748, 2331, 3378, 25258, 907, 14775, 42944, 33966, 2722, 4894, 6277, 439, 1813, 4081, 1588, 95914, 2210, 263292, 7495, 679, 14, 14117, 2894, 2059, 36082, 1252, 5841, 4761, 1858, 7394, 21321, 3445, 823, 54, 10266, 12596, 939, 4845, 447],
-        [5832, 337, 0, 5772, 2599, 39561, 11278, 23100, 3308, 49, 3361, 29648, 21883, 103, 139, 596, 1836, 36937, 13039, 3924, 2721, 3479, 25739, 937, 15737, 46023, 35296, 2942, 5153, 6506, 442, 2202, 4208, 1670, 100025, 2379, 263460, 7820, 709, 14, 14694, 3017, 2127, 38379, 1416, 6256, 4917, 1956, 8266, 22650, 3612, 825, 54, 10998, 12753, 981, 5052, 453],
-        [6026, 339, 0, 6045, 2810, 41355, 12256, 23936, 3442, 49, 3528, 30533, 22491, 103, 141, 601, 1870, 39658, 13681, 4445, 2959, 3779, 26140, 965, 16616, 50969, 36641, 3185, 5434, 6788, 444, 2424, 4398, 1720, 102196, 2521, 271590, 8290, 748, 14, 15169, 3121, 2177, 40208, 1276, 6699, 5070, 2040, 8728, 23642, 3782, 827, 54, 11594, 12977, 1010, 5356, 473],
-        [6026, 339, 0, 6286, 2911, 42368, 12968, 24583, 3576, 49, 3699, 30839, 23222, 103, 141, 605, 1887, 41777, 14399, 5092, 3135, 3915, 26512, 965, 17766, 53348, 37074, 3446, 5718, 6935, 445, 2719, 4539, 1797, 105498, 2660, 282143, 8768, 803, 14, 15587, 3194, 2253, 41153, 1307, 7129, 5253, 2147, 9189, 24153, 3948, 843, 55, 12366, 13319, 1010, 5687, 491],
-        [6421, 340, 0, 6534, 3001, 43558, 13441, 25269, 4034, 49, 3841, 31532, 23486, 103, 141, 606, 1897, 43903, 15012, 5476, 3277, 4085, 26773, 1015, 18581, 54938, 37778, 3602, 5911, 7120, 448, 3028, 4734, 1864, 109038, 2726, 288045, 8997, 867, 14, 15972, 3254, 2311, 42616, 1371, 7439, 5498, 2212, 9667, 24967, 4123, 851, 57, 12970, 13521, 1055, 5912, 502],
-        [6539, 345, 0, 6725, 3069, 44966, 13879, 25997, 4162, 49, 3892, 32138, 24302, 103, 141, 607, 1897, 45883, 15961, 5868, 3473, 4156, 27068, 1023, 19487, 56462, 38210, 3811, 6094, 7305, 449, 3358, 4700, 1938, 111188, 2825, 291996, 9428, 942, 14, 16325, 3281, 2354, 43558, 1389, 7708, 5613, 2244, 9918, 25321, 4236, 855, 57, 13538, 13686, 1063, 6081, 520],
-        [6750, 351, 0, 6955, 3127, 46164, 14316, 26312, 4575, 49, 3994, 32848, 24922, 103, 141, 609, 1952, 48102, 16588, 6376, 3652, 4375, 27286, 1040, 20113, 58302, 39262, 4181, 6342, 7450, 451, 3517, 4821, 2010, 113856, 2974, 295106, 9755, 991, 14, 16769, 3410, 2385, 45137, 1400, 7927, 5735, 2313, 10052, 26357, 4345, 862, 57, 14339, 13842, 1095, 6289, 536],
-        [6912, 355, 0, 7209, 3193, 48747, 14758, 26767, 4655, 49, 4106, 33193, 25775, 103, 141, 613, 1952, 50358, 17182, 6843, 3839, 4537, 27660, 1056, 20849, 60265, 40399, 4644, 6569, 7660, 451, 3851, 4934, 2058, 116365, 3213, 299691, 10180, 1033, 14, 17303, 3473, 2446, 46327, 1433, 8247, 5882, 2373, 10366, 27257, 4497, 862, 57, 14962, 14070, 1110, 6520, 545],
-        [7088, 355, 0, 7655, 3281, 50130, 15284, 27700, 4734, 49, 4323, 33690, 26264, 103, 145, 618, 1984, 52918, 17835, 7145, 4413, 4708, 28001, 1095, 21742, 62205, 41379, 5136, 6815, 7818, 453, 4281, 5053, 2146, 118652, 3411, 304372, 10754, 1067, 14, 18027, 3618, 2510, 47971, 1539, 8621, 6095, 2449, 10735, 28727, 4672, 866, 66, 15847, 14327, 1125, 6854, 559],
-        [7294, 364, 0, 7969, 3337, 52026, 15793, 28764, 4918, 49, 4658, 34728, 27489, 103, 145, 619, 2015, 56055, 18630, 7884, 4634, 4882, 28711, 1123, 23472, 64311, 42356, 5730, 7212, 8067, 453, 5008, 5248, 2310, 121190, 3513, 308314, 11070, 1107, 14, 18743, 3748, 2579, 49579, 1575, 8962, 6258, 2525, 11891, 29692, 4828, 879, 66, 16902, 14637, 1152, 7314, 566],
-        [7611, 365, 0, 8364, 3372, 53347, 16225, 29287, 5038, 49, 4797, 35463, 28331, 103, 145, 620, 2061, 58505, 19295, 8643, 4885, 4879, 29140, 1153, 24473, 66263, 43207, 6232, 7441, 8356, 455, 5317, 5389, 2429, 123717, 3732, 312977, 11588, 1153, 14, 19335, 3851, 2635, 50494, 1757, 9289, 6489, 2588, 12661, 30917, 4985, 886, 66, 17738, 15003, 1185, 7660, 579],
-        [7888, 368, 0, 8640, 3437, 54903, 16635, 29287, 5208, 49, 5016, 36078, 28665, 103, 145, 620, 2061, 61499, 19933, 9175, 5156, 5130, 29340, 1185, 25462, 68087, 43801, 6663, 7550, 8618, 455, 5661, 5472, 2518, 126744, 3850, 316415, 11770, 1191, 14, 19914, 3972, 2680, 51225, 1808, 9477, 6626, 2631, 13177, 31998, 5175, 897, 66, 18672, 15185, 1195, 7964, 586],
-        [8112, 370, 0, 8924, 3491, 55884, 16918, 29973, 5288, 49, 5170, 36897, 29451, 103, 145, 621, 2106, 63777, 20507, 9703, 5383, 5245, 29673, 1205, 26408, 69087, 43990, 7234, 7877, 8946, 457, 6037, 5630, 2588, 128269, 4031, 318953, 11971, 1225, 14, 20474, 4044, 2759, 52816, 1843, 9652, 6757, 2668, 13571, 32783, 5317, 902, 66, 19493, 15462, 1224, 8236, 596],
-        [8437, 371, 0, 9305, 3525, 58456, 17367, 30621, 5371, 49, 5322, 37439, 29998, 103, 145, 625, 2127, 65889, 21033, 10111, 5648, 5822, 29996, 1226, 27117, 70271, 44451, 7851, 8207, 9121, 456, 6373, 5660, 2636, 130593, 4138, 321192, 12510, 1266, 14, 20969, 4127, 2839, 53864, 1924, 9933, 6841, 2721, 13690, 33912, 5449, 907, 66, 20257, 15594, 1246, 8566, 604],
-        [8691, 372, 0, 9707, 3611, 60616, 17832, 30995, 5778, 49, 5461, 38002, 30743, 103, 149, 626, 2158, 68232, 21870, 10404, 5993, 5934, 30399, 1254, 28163, 72025, 45179, 8579, 8424, 9323, 456, 6689, 5741, 2741, 131890, 4291, 323978, 13053, 1323, 15, 21576, 4202, 2916, 54800, 1968, 10205, 6936, 2780, 13938, 34928, 5595, 908, 66, 20257, 15905, 1242, 8901, 631],
-        [9046, 374, 0, 9945, 3703, 62148, 18370, 31784, 5939, 49, 5654, 38828, 31618, 103, 149, 629, 2178, 70871, 22503, 11059, 6332, 6129, 30652, 1330, 29374, 73721, 45745, 9365, 8686, 9581, 456, 7334, 5855, 2843, 133991, 4493, 327469, 13540, 1371, 15, 22131, 4330, 2989, 55956, 2031, 10530, 7142, 2906, 14096, 36036, 5724, 916, 66, 21570, 16231, 1287, 9215, 635],
-        [9385, 377, 0, 10526, 3747, 63779, 18827, 32411, 6111, 49, 5899, 39199, 32181, 103, 151, 629, 2178, 73760, 23146, 11457, 6667, 6288, 30855, 1374, 30485, 75333, 46386, 10088, 9090, 9733, 458, 7818, 5920, 2947, 135840, 4673, 330407, 14006, 1425, 15, 23016, 4424, 3068, 57371, 2156, 10779, 7367, 3145, 14441, 37246, 5919, 919, 68, 22342, 16388, 1323, 9590, 644],
-        [9668, 378, 0, 10960, 3747, 66558, 19375, 32984, 6277, 49, 6102, 40001, 32588, 103, 151, 631, 2205, 76085, 23732, 11671, 6829, 6440, 31417, 1408, 31534, 76743, 46815, 10790, 9378, 9911, 458, 8093, 6171, 3011, 137397, 4778, 333122, 14478, 1464, 16, 23697, 4490, 3160, 58560, 2173, 10989, 7531, 3393, 14768, 38394, 6103, 921, 68, 23196, 16674, 1323, 9939, 653],
-        [9889, 379, 0, 11119, 4012, 67600, 19703, 33554, 6277, 49, 6272, 40596, 33580, 103, 151, 632, 2230, 77741, 24126, 11959, 6951, 6440, 31600, 1436, 32587, 77793, 47182, 11271, 9501, 10068, 458, 8171, 6120, 3071, 138754, 4863, 335395, 14938, 1491, 16, 24081, 4589, 3228, 59939, 2198, 11274, 7653, 3517, 14985, 39258, 6251, 927, 69, 24081, 16891, 1360, 10219, 662],
-        [10164, 379, 0, 11383, 4043, 69329, 19879, 33765, 6565, 49, 6389, 40982, 34002, 103, 151, 634, 2260, 79007, 24627, 12373, 7159, 6677, 31815, 1462, 33373, 78462, 47552, 11799, 9674, 10157, 459, 8407, 6152, 3160, 140206, 5069, 337055, 15274, 1518, 19, 24777, 4613, 3286, 60459, 2256, 11450, 7792, 3614, 15544, 40555, 6362, 926, 69, 25070, 17122, 1366, 10418, 669],
-        [10464, 383, 0, 11736, 4164, 70978, 20157, 34333, 6741, 49, 6485, 41923, 34924, 103, 152, 635, 2293, 83021, 25127, 12912, 7240, 6853, 32050, 1477, 34061, 79332, 48021, 12494, 9908, 10269, 461, 8532, 6313, 3239, 140917, 5212, 338485, 15622, 1571, 19, 25250, 4732, 3358, 61310, 2299, 11614, 7927, 3663, 16111, 41432, 6432, 927, 69, 25800, 17330, 1378, 10611, 675],
-        [10700, 383, 0, 12216, 4236, 72798, 20475, 34855, 6952, 49, 6584, 42402, 35427, 103, 152, 638, 2293, 84694, 25473, 13289, 7518, 6853, 32662, 1515, 34812, 80497, 48391, 12917, 10090, 10404, 462, 8912, 6476, 3299, 141560, 5364, 340661, 16352, 1647, 19, 25721, 4858, 3416, 62101, 2329, 11835, 8030, 3732, 16370, 43020, 6620, 929, 69, 26746, 17512, 1398, 10902, 688],
-        [11101, 383, 0, 12674, 4366, 74871, 20838, 35464, 7223, 49, 6736, 43210, 35977, 103, 152, 637, 2351, 87937, 26053, 13675, 7705, 7225, 33489, 1565, 35903, 82182, 49582, 13435, 10483, 10594, 462, 9260, 6504, 3382, 142704, 5503, 343051, 16968, 1712, 19, 26357, 4963, 3479, 63105, 2427, 12016, 8189, 3792, 16699, 44480, 6749, 932, 69, 27813, 17773, 1427, 11275, 701],
-        [11373, 388, 0, 13169, 4463, 76693, 21232, 36085, 7373, 49, 6871, 44138, 36772, 103, 154, 638, 2351, 90369, 26656, 14049, 7886, 7444, 33837, 1603, 36986, 83421, 50079, 14240, 10801, 10766, 466, 9610, 6733, 3453, 143984, 5662, 345813, 17494, 1761, 19, 26954, 5087, 3541, 64136, 2542, 12219, 8407, 3887, 16960, 45721, 6913, 933, 69, 28672, 17951, 1447, 11685, 716],
-        [11674, 388, 0, 13666, 4578, 78725, 21633, 36703, 7547, 49, 7042, 44811, 37212, 103, 154, 639, 2419, 92457, 27280, 14328, 7939, 7688, 34117, 1648, 37968, 84933, 50538, 14969, 11123, 10959, 468, 10220, 6813, 3556, 145089, 5847, 348232, 18130, 1848, 21, 27474, 5237, 3612, 65185, 2589, 12434, 8661, 3959, 17263, 47452, 7068, 934, 69, 29683, 18288, 1470, 12187, 741],
-        [11771, 388, 0, 13945, 4759, 80166, 21938, 37419, 7670, 49, 7123, 45588, 37579, 103, 154, 640, 2419, 94191, 27778, 14651, 7953, 7688, 34432, 1687, 38804, 86010, 51142, 15668, 11296, 11108, 468, 10177, 6949, 3596, 146504, 5938, 350121, 18673, 1900, 21, 27923, 5310, 3623, 65700, 2646, 12674, 8816, 3987, 17359, 48396, 7238, 940, 69, 30388, 18433, 1492, 12543, 754],
-        [12086, 388, 0, 14208, 4813, 81457, 22202, 38116, 7869, 49, 7270, 46442, 38283, 103, 154, 640, 2455, 96485, 28255, 14955, 8303, 7935, 34709, 1713, 39762, 87052, 51915, 16372, 11432, 11242, 470, 10625, 7061, 3652, 148240, 6096, 351371, 19207, 1931, 21, 28454, 5398, 3687, 66669, 2710, 12795, 8942, 4027, 18011, 49177, 7384, 940, 69, 31140, 18611, 1502, 12687, 766],
-        [12376, 400, 0, 14576, 4923, 83752, 22482, 38430, 8037, 49, 7434, 46944, 38855, 103, 154, 641, 2455, 98030, 28705, 15296, 8353, 8069, 35038, 1741, 41546, 87925, 52350, 17029, 11704, 11393, 471, 10854, 7096, 3721, 149356, 6192, 352845, 19239, 1994, 21, 28952, 5489, 3726, 67311, 2805, 12951, 9056, 4085, 18412, 50552, 7518, 944, 69, 32145, 18811, 1502, 12885, 776],
-        [13052, 401, 0, 14906, 5003, 85997, 22797, 39017, 8194, 49, 7551, 47471, 39801, 103, 154, 643, 2506, 100418, 29274, 15620, 8507, 8167, 35316, 1819, 42323, 88970, 53009, 17670, 11967, 11528, 478, 11122, 7388, 3868, 150776, 6317, 354370, 20262, 2095, 21, 29436, 5532, 3801, 68126, 2866, 13356, 9175, 4177, 18412, 51673, 7710, 944, 69, 32908, 18971, 1567, 13413, 787],
-        [13288, 401, 0, 15348, 5458, 88031, 23191, 39208, 8386, 49, 7788, 48675, 40663, 103, 165, 647, 2506, 102688, 29936, 16170, 8625, 8286, 36504, 1877, 43531, 90084, 53510, 18200, 12222, 11689, 479, 11427, 7400, 3935, 151586, 6472, 356458, 20512, 2229, 22, 30167, 5680, 3817, 69252, 2913, 13571, 9381, 4177, 18961, 53053, 7874, 950, 69, 34137, 19117, 1593, 13885, 801],
-        [13670, 403, 0, 15624, 5612, 90252, 23487, 39640, 8529, 49, 7893, 49451, 41482, 103, 165, 642, 2595, 105444, 30409, 16492, 8909, 8426, 36925, 1948, 44424, 90889, 53913, 19005, 12625, 11836, 479, 11662, 7525, 4014, 152579, 6625, 358154, 22110, 2317, 22, 30794, 5849, 3864, 70211, 3030, 13736, 9638, 4356, 19394, 53539, 8057, 952, 69, 34950, 19265, 1705, 14396, 803],
-        [14117, 407, 0, 16053, 5775, 92539, 23964, 40022, 8529, 49, 7966, 50127, 42242, 103, 165, 643, 2595, 107796, 30901, 16898, 8946, 8571, 36925, 2013, 45495, 91662, 54365, 19845, 13005, 11966, 479, 11963, 7526, 4089, 153140, 6625, 359926, 22864, 2365, 22, 31408, 5960, 3888, 71009, 3100, 13952, 9895, 4464, 19785, 54776, 8260, 954, 69, 35749, 19265, 1705, 14877, 813],
-        [14478, 407, 0, 16377, 5922, 94020, 24174, 40468, 8809, 49, 8110, 50867, 42902, 103, 166, 643, 2626, 110304, 31376, 17251, 9004, 8571, 37169, 2055, 46313, 92675, 54679, 20573, 13260, 12149, 479, 12134, 7881, 4149, 154154, 6943, 361515, 23365, 2418, 22, 31911, 6037, 3927, 71563, 3189, 14065, 10096, 4563, 20111, 55861, 8392, 956, 69, 36244, 19828, 1759, 15277, 838],
-        [14986, 408, 0, 16575, 6029, 96400, 24256, 40873, 8965, 49, 8225, 51746, 43400, 103, 166, 643, 2626, 112017, 31715, 17557, 9125, 8571, 37809, 2074, 47152, 93271, 54881, 21315, 13458, 12476, 479, 12362, 7956, 4197, 155092, 7026, 362764, 24057, 2457, 22, 32477, 6090, 3949, 71925, 3260, 14065, 10178, 4586, 20535, 56409, 8521, 962, 69, 37727, 20065, 1774, 15584, 843],
-        [15650, 410, 0, 16864, 6180, 99387, 24552, 41303, 9066, 49, 8334, 52255, 43983, 103, 167, 643, 2626, 113195, 32078, 17703, 9199, 8951, 38054, 2109, 47687, 93693, 55104, 21960, 13731, 12579, 479, 12619, 8057, 4231, 155764, 7130, 363836, 24455, 2422, 22, 33006, 6138, 3967, 72778, 3324, 14210, 10416, 4653, 20895, 57230, 8620, 967, 69, 39342, 20181, 1774, 15863, 850],
-        [16032, 411, 0, 17318, 6277, 101050, 24754, 41288, 9096, 49, 8406, 52634, 44638, 103, 170, 644, 2699, 114306, 32437, 18369, 9291, 9077, 38497, 2137, 48423, 94220, 55608, 22464, 14044, 12816, 481, 12984, 8150, 4286, 156628, 7252, 364965, 24916, 2439, 22, 33439, 6229, 4038, 73557, 3397, 14353, 10623, 4710, 21285, 58542, 8706, 971, 69, 40249, 20406, 1899, 16462, 860],
-        [16530, 424, 0, 17877, 6538, 103813, 25107, 41559, 9171, 49, 8492, 53285, 45266, 103, 171, 647, 2770, 115833, 33068, 18586, 9371, 9185, 38802, 2189, 49709, 94895, 56014, 22947, 14372, 12981, 485, 13249, 8248, 4389, 157185, 7364, 366733, 25800, 2481, 22, 33915, 6273, 4086, 74220, 3486, 14494, 10788, 4793, 21679, 60395, 8921, 974, 69, 41401, 20764, 1935, 16974, 876],
-        [17031, 429, 0, 18472, 6777, 106622, 25598, 41762, 9236, 49, 8538, 54497, 45881, 103, 172, 649, 2770, 117455, 33558, 18957, 9662, 9464, 38802, 2226, 50988, 95512, 56621, 23531, 14793, 13084, 493, 13648, 8376, 4492, 158844, 7493, 368284, 26885, 2520, 22, 34566, 6338, 4131, 74984, 3647, 14635, 11131, 4866, 22063, 60901, 9264, 975, 69, 42533, 21071, 1951, 17707, 891],
-        [17359, 433, 0, 19258, 7013, 109895, 26084, 42022, 9422, 49, 8717, 55424, 46331, 103, 172, 651, 2803, 118917, 34211, 19244, 9690, 9704, 39577, 2282, 52015, 96301, 56969, 24190, 15229, 13298, 505, 13905, 8517, 4492, 159608, 7624, 369660, 27794, 2554, 22, 35033, 6418, 4185, 75697, 3718, 14819, 11394, 4960, 22566, 62675, 9533, 977, 69, 43611, 21349, 1989, 18230, 898],
-        [17952, 459, 0, 19936, 7253, 111951, 26364, 42201, 9498, 49, 8801, 56163, 47063, 103, 172, 652, 2839, 120260, 34574, 19552, 9700, 9704, 39916, 2325, 52778, 96965, 57397, 24850, 15523, 13438, 515, 14101, 8628, 4651, 160445, 7689, 370770, 28785, 2577, 22, 35513, 6418, 4243, 76129, 3776, 14928, 11861, 4993, 22566, 64652, 9797, 981, 69, 44607, 21702, 2010, 18403, 903],
-        [18630, 466, 0, 20129, 7443, 114733, 26563, 42740, 9605, 49, 8857, 56830, 47902, 103, 175, 652, 2839, 121234, 34830, 19699, 9920, 10046, 40341, 2349, 53327, 100805, 57532, 25208, 15752, 13724, 519, 14345, 8702, 4685, 160918, 7800, 371711, 29592, 2625, 22, 35984, 6573, 4302, 76646, 3873, 14991, 12148, 5034, 22566, 65593, 9999, 983, 70, 45398, 21977, 2028, 18543, 910],
-        [18766, 486, 0, 21264, 7818, 117215, 26774, 42979, 9685, 49, 8886, 57447, 48207, 103, 175, 653, 2933, 122848, 35237, 20019, 9965, 10185, 40746, 2377, 54175, 101163, 57731, 25508, 16041, 14015, 523, 14616, 8858, 4749, 161545, 8024, 373040, 30023, 2646, 23, 36350, 6692, 4335, 77225, 3935, 15112, 12415, 5067, 24342, 67310, 10202, 988, 70, 46239, 22157, 2056, 18917, 912],
-        [18851, 504, 0, 22356, 8067, 119348, 27046, 43091, 9712, 49, 9016, 58764, 48894, 103, 177, 653, 2933, 123830, 35712, 20300, 10092, 10410, 41133, 2418, 54982, 101592, 58035, 25870, 16322, 14189, 525, 14885, 8951, 4795, 162068, 8140, 374085, 31276, 2679, 24, 36792, 6805, 4399, 77780, 4023, 15219, 12415, 5162, 24833, 68877, 10497, 990, 70, 46905, 22484, 2077, 19400, 915],
-        [19072, 512, 0, 22886, 8425, 122168, 27346, 43239, 9746, 49, 9120, 60183, 49859, 103, 179, 655, 2990, 124759, 36096, 20806, 10167, 10705, 41562, 2446, 55858, 102063, 58241, 26273, 16560, 14438, 539, 15139, 9129, 4876, 162530, 8353, 375133, 32075, 2706, 26, 37282, 6907, 4474, 78335, 4508, 15325, 12415, 5247, 25190, 70555, 10813, 1026, 71, 47856, 22729, 2102, 19892, 921],
-        [19387, 523, 0, 24439, 8651, 125738, 27601, 43460, 9773, 49, 9199, 61488, 50621, 103, 179, 664, 3111, 125915, 36578, 21154, 10306, 10977, 41989, 2482, 56770, 102557, 63777, 26980, 16769, 14572, 541, 15406, 9309, 4953, 163336, 8672, 376208, 33295, 2745, 26, 37758, 7007, 4570, 78815, 4620, 15441, 13453, 5277, 25664, 72548, 11252, 1027, 71, 48532, 22993, 2119, 20249, 933],
-        [20043, 535, 0, 25451, 9101, 128593, 27834, 43818, 9845, 49, 9269, 62758, 51359, 103, 179, 673, 3139, 126890, 36997, 21478, 10361, 11287, 42486, 2524, 57482, 103132, 64229, 27501, 17039, 14951, 540, 15572, 9491, 5019, 163893, 8800, 377316, 34718, 2816, 26, 38111, 7059, 4570, 79505, 4915, 15441, 13453, 5367, 26177, 74470, 11798, 1046, 71, 49397, 23442, 2136, 20571, 939],
-        [20500, 543, 0, 26989, 9426, 130615, 27987, 43968, 9942, 49, 9332, 63938, 51898, 103, 179, 675, 3139, 127757, 37397, 21712, 10406, 11287, 42816, 2570, 57973, 103436, 64648, 27886, 17270, 15023, 545, 15664, 9669, 5043, 164164, 8940, 378097, 35625, 2861, 27, 38476, 7150, 4662, 79908, 4985, 15441, 14286, 5438, 26493, 75408, 12066, 1063, 71, 50679, 23729, 2144, 20835, 947],
-        [20925, 562, 0, 27678, 9740, 133816, 28169, 44092, 9972, 49, 9389, 64904, 52497, 103, 179, 676, 3189, 128415, 37623, 22007, 10544, 11476, 43050, 2588, 58404, 103626, 64944, 28224, 17768, 15158, 548, 15786, 9816, 5079, 164497, 9062, 378799, 36517, 2880, 28, 38837, 7205, 4922, 80339, 5046, 15642, 14800, 5471, 27005, 76463, 12322, 1075, 71, 51251, 24041, 2161, 21038, 960],
-        [21422, 572, 0, 28296, 10080, 136641, 28333, 44179, 10020, 49, 9474, 66000, 53249, 103, 180, 682, 3221, 129212, 38033, 22237, 10609, 11707, 43612, 2606, 58904, 103889, 64998, 28523, 18123, 15352, 554, 15918, 10045, 5079, 164796, 9105, 379482, 37227, 2901, 30, 39162, 7363, 4988, 80870, 5185, 15691, 15228, 5523, 27575, 78208, 12559, 1084, 71, 51738, 24354, 2169, 21308, 970],
-        [21989, 592, 0, 29852, 10368, 139715, 28484, 44347, 10056, 49, 9537, 67371, 53980, 103, 180, 685, 3260, 129837, 38337, 22626, 10750, 11883, 44030, 2637, 59465, 104156, 65182, 28869, 18483, 15512, 561, 16058, 10218, 5178, 165346, 9250, 380156, 38473, 2941, 30, 39575, 7483, 5060, 81316, 5329, 15756, 15759, 5604, 27930, 80777, 12864, 1095, 72, 52177, 24354, 2194, 21593, 980],
-        [22845, 609, 0, 31267, 10816, 143377, 28632, 44461, 10106, 49, 9589, 69069, 54973, 103, 183, 692, 3260, 130603, 38748, 22973, 10823, 11945, 44472, 2667, 60197, 104667, 65449, 29316, 18483, 15699, 563, 16315, 10473, 5209, 165816, 9367, 380892, 39584, 2980, 30, 40004, 7626, 5237, 81848, 5352, 15862, 16441, 5665, 28340, 82658, 13252, 1110, 72, 52647, 24779, 2217, 21926, 1009],
-        [23710, 624, 0, 33039, 11547, 146659, 28807, 44689, 10173, 49, 9654, 70971, 55783, 103, 183, 706, 3353, 131198, 39146, 23350, 10973, 12166, 44995, 2721, 60613, 105059, 65672, 29795, 19091, 15997, 573, 16522, 10704, 5251, 166164, 9526, 381714, 41417, 3016, 30, 40424, 7849, 5377, 82481, 5536, 15947, 17170, 5742, 29118, 84927, 13577, 1119, 72, 53211, 25171, 2249, 22246, 1027],
-        [24601, 653, 0, 34660, 12095, 150018, 29002, 44994, 10229, 49, 9709, 73552, 56804, 103, 183, 723, 3353, 131871, 39543, 23717, 11020, 12445, 46283, 2757, 61305, 105395, 65836, 30172, 19348, 16232, 588, 16640, 10997, 5299, 166605, 9621, 382630, 42845, 3058, 30, 40851, 8073, 5377, 82944, 5690, 15947, 17955, 5833, 29549, 86915, 13981, 1125, 72, 53869, 25538, 2274, 22518, 1050],
-        [25615, 660, 0, 35706, 12501, 152300, 29115, 45088, 10264, 49, 9767, 75568, 57681, 103, 183, 728, 3399, 132543, 39909, 23926, 11101, 12445, 46619, 2793, 61701, 105603, 66054, 30471, 19516, 16262, 601, 16730, 11201, 5318, 166881, 9723, 383324, 44264, 3080, 30, 41148, 8231, 5377, 83203, 5811, 15947, 18795, 5898, 30343, 88523, 14313, 1127, 72, 54506, 25834, 2290, 22758, 1060],
-        [26272, 663, 0, 36844, 12917, 155726, 29284, 45235, 10340, 49, 9799, 77326, 58414, 103, 185, 736, 3399, 133016, 40430, 24082, 11319, 12647, 47172, 2810, 62032, 105690, 66085, 30693, 19799, 16611, 609, 16851, 11315, 5345, 167103, 9845, 383944, 45114, 3101, 30, 41576, 8417, 5820, 83589, 5890, 16093, 19378, 5928, 31004, 90211, 14608, 1128, 72, 54886, 26158, 2322, 22932, 1079],
-        [26912, 675, 0, 39185, 13191, 158961, 29427, 45349, 10403, 49, 9818, 80109, 59078, 103, 186, 736, 3462, 133639, 40786, 24179, 11411, 12647, 47706, 2819, 62409, 105885, 66269, 30882, 20152, 16857, 614, 17038, 11683, 5364, 167426, 9933, 384575, 45907, 3124, 30, 42010, 8645, 6098, 83978, 5951, 16164, 19990, 5966, 31751, 93569, 14937, 1131, 72, 55331, 26531, 2341, 23198, 1089],
-        [27312, 695, 0, 40937, 13606, 162798, 29656, 45429, 10444, 49, 9847, 82719, 60030, 103, 188, 744, 3632, 134185, 41013, 24460, 11644, 12995, 48634, 2836, 62969, 106151, 66497, 31296, 20641, 17069, 630, 17231, 11854, 5436, 167703, 10065, 385142, 46934, 3166, 30, 42422, 8904, 6218, 84289, 6003, 16213, 20556, 6050, 32114, 97699, 15344, 1130, 73, 55775, 26784, 2376, 23456, 1114]
-    ];
-
-    var option = {
-        baseOption: {
-            timeline: {
-                axisType: 'category',
-                // realtime: false,
-                // loop: false,
-                autoPlay: true,
-                playInterval: _timelineDuration,
-                symbolSize: 1,
-                left: '5%',
-                right: '5%',
-                bottom: '0%',
-                width: '90%',
-                controlStyle: {
-                    show: false
-                },
-                data: days,
-                tooltip: {
-                    formatter: days
-                }
-            },
-
-            tooltip: {
-                show: true,
-                formatter: function(params) {
-                    return params.name + ':' + params.value
-                },
-            },
-            visualMap: {
-                type: 'piecewise',
-                pieces: [{
-                    min: 100001,
-                    color: '#BB0000'
-                }, {
-                    min: 50001,
-                    max: 100000,
-                    color: '#C62B2B'
-                }, {
-                    min: 25001,
-                    max: 50000,
-                    color: '#D25555'
-                }, {
-                    min: 1001,
-                    max: 25000,
-                    color: '#DD8080'
-                }, {
-                    min: 11,
-                    max: 1000,
-                    color: '#E8AAAA'
-                }, {
-                    min: 1,
-                    max: 10,
-                    color: '#F4D5D5'
-                }, {
-                    value: 0,
-                    color: '#eee'
-                }],
-                orient: 'vertical',
-                itemWidth: 25,
-                itemHeight: 15,
-                showLabel: true,
-                seriesIndex: [0, 1],
-                textStyle: {
-                    color: '#999'
-                },
-                bottom: '10%',
-                left: '5%',
-            },
-            grid: {
-                right: '5%',
-                top: '17%',
-                bottom: '10%',
-                width: '32%'
-            },
-            xAxis: {
-                show: false
-            },
-            yAxis: [{
-                inverse: true,
-                type: 'category',
-                max: 9,
-                nameTextStyle: {
-                    color: '#fff'
-                },
-                animationDurationUpdate: _axisDurationUpdate,
-                axisTick: {
-                    show: false,
-                },
-                axisLabel: {
-                    textStyle: {
-                        fontSize: 14,
-                        color: '#000000',
-                    },
-                    interval: 0
-                },
-                axisLine: {
-                    show: false,
-                    lineStyle: {
-                        color: '#333'
-                    },
-                },
-                splitLine: {
-                    show: false,
-                    lineStyle: {
-                        color: '#333'
-                    }
-                },
-            }],
-            geo: {
-                map: 'USA',
-                top: '28%',
-                right: '50%',
-                left: '5%',
-                emphasis: {
-                    show: false,
-                    itemStyle: {
-                        areaColor: '#90EE90'
-                    }
-                }
-            },
-            series: [{
-                type: 'map',
-                map: 'USA',
-                roam: false,
-                geoIndex: 0,
-                datasetIndex: 0,
-                label: {
-                    show: false,
-                },
-            }, {
-                type: 'bar',
-                realtimeSort: true,
-                barWidth: '40%',
-                datasetIndex: 0,
-                animationDurationUpdate: _barDurationUpdate,
-                animationEasingUpdate: 'linear',
-                label: {
-                    valueAnimation: true,
-                    show: true,
-                    fontSize: 14,
-                    position: 'right',
-                    formatter: '{@[1]}'
-                },
-            }],
-
-        },
-        animationDurationUpdate: 3000,
-        animationEasingUpdate: 'quinticInOut',
-        options: []
-    };
-
-    for (var n = 0; n < days.length; n++) {
-
-        var res = [];
-        for (var j = 0; j < rawData[n].length; j++) {
-            res.push([
-                _country[j],
-                rawData[n][j]
-            ]);
-        }
-
-        option.options.push({
-            dataset: {
-                source: res
-            },
-            title: [{
-                text: '美国疫情地图',
-                textStyle: {
-                    color: '#2D3E53',
-                    fontSize: 28
-                },
-                // https://www.makeapie.com/editor.html?c=x02yMqYpqC
-                subtext: '作品源于社区作者: 电***n',
-                subtextStyle: {
-                    color: '#aaa',
-                    fontSize: 16
-                },
-                left: 20,
-                top: 20,
-            }, {
-                show: true,
-                text: '感染人数前十地区',
-                textStyle: {
-                    color: '#2D3E53',
-                    fontSize: 18
-                },
-                right: '20%',
-                top: '13%'
-            }],
-            series: [{
-                type: 'map',
-                datasetIndex: 0,
-                encode: {
-                    itemName: 0,
-                    value: 1
-                }
-            }, {
-                type: 'bar',
-                datasetIndex: 0,
-                encode: {
-                    x: 1,
-                    y: 0
-                }
-            }]
-        });
-    }
-
-    myChart.setOption(option);
-}
diff --git a/public/data/custom-bar-trend.js b/public/data/custom-bar-trend.js
deleted file mode 100644
index 11b6d75..0000000
--- a/public/data/custom-bar-trend.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-title: Custom Bar Trend
-category: custom
-titleCN: 使用自定义系列添加柱状图趋势
-difficulty: 3
-*/
-
-
-var yearCount = 7;
-var categoryCount = 30;
-
-var xAxisData = [];
-var customData = [];
-var legendData = [];
-var dataList = [];
-
-legendData.push('trend');
-var encodeY = [];
-for (var i = 0; i < yearCount; i++) {
-    legendData.push((2010 + i) + '');
-    dataList.push([]);
-    encodeY.push(1 + i);
-}
-
-for (var i = 0; i < categoryCount; i++) {
-    var val = Math.random() * 1000;
-    xAxisData.push('category' + i);
-    var customVal = [i];
-    customData.push(customVal);
-
-    for (var j = 0; j < dataList.length; j++) {
-        var value = j === 0
-            ? echarts.number.round(val, 2)
-            : echarts.number.round(Math.max(0, dataList[j - 1][i] + (Math.random() - 0.5) * 200), 2);
-        dataList[j].push(value);
-        customVal.push(value);
-    }
-}
-
-function renderItem(params, api) {
-    var xValue = api.value(0);
-    var currentSeriesIndices = api.currentSeriesIndices();
-    var barLayout = api.barLayout({
-        barGap: '30%', barCategoryGap: '20%', count: currentSeriesIndices.length - 1
-    });
-
-    var points = [];
-    for (var i = 0; i < currentSeriesIndices.length; i++) {
-        var seriesIndex = currentSeriesIndices[i];
-        if (seriesIndex !== params.seriesIndex) {
-            var point = api.coord([xValue, api.value(seriesIndex)]);
-            point[0] += barLayout[i - 1].offsetCenter;
-            point[1] -= 20;
-            points.push(point);
-        }
-    }
-    var style = api.style({
-        stroke: api.visual('color'),
-        fill: null
-    });
-
-    return {
-        type: 'polyline',
-        shape: {
-            points: points
-        },
-        style: style
-    };
-}
-
-option = {
-    tooltip: {
-        trigger: 'axis'
-    },
-    legend: {
-        data: legendData
-    },
-    dataZoom: [{
-        type: 'slider',
-        start: 50,
-        end: 70
-    }, {
-        type: 'inside',
-        start: 50,
-        end: 70
-    }],
-    xAxis: {
-        data: xAxisData
-    },
-    yAxis: {},
-    series: [{
-        type: 'custom',
-        name: 'trend',
-        renderItem: renderItem,
-        itemStyle: {
-            borderWidth: 2
-        },
-        encode: {
-            x: 0,
-            y: encodeY
-        },
-        data: customData,
-        z: 100
-    }].concat(dataList.map(function (data, index) {
-        return {
-            type: 'bar',
-            animation: false,
-            name: legendData[index + 1],
-            itemStyle: {
-                opacity: 0.5
-            },
-            data: data
-        };
-    }))
-};
\ No newline at end of file
diff --git a/public/data/custom-calendar-icon.js b/public/data/custom-calendar-icon.js
deleted file mode 100644
index 0841e44..0000000
--- a/public/data/custom-calendar-icon.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-title: Custom Calendar Icon
-category: 'custom, calendar'
-titleCN: 日历图自定义图标
-difficulty: 7
-*/
-
-
-var layouts = [
-    [[0, 0]],
-    [[-0.25, 0], [0.25, 0]],
-    [[0, -0.2], [-0.2, 0.2], [0.2, 0.2]],
-    [[-0.25, -0.25], [-0.25, 0.25], [0.25, -0.25], [0.25, 0.25]]
-];
-var pathes = [
-    'M936.857805 523.431322c0 0-42.065715-68.89513-88.786739-68.89513-46.68416 0-95.732122 71.223091-95.732122 71.223091s-44.28544-72.503296-93.440922-71.152538c-35.565466 0.977306-62.89705 30.882406-79.124275 64.06615L579.773747 790.800797c-3.253248 37.391565-5.677568 50.904371-12.002816 69.63497-6.651802 19.698688-19.544883 35.227341-31.650099 45.909606-14.30231 12.621414-29.59831 22.066586-45.854208 27.424563-16.28969 5.362074-30.098739 6.496973-51.536794 6.496973-19.498906 0-36.95104 [...]
-    'M533.504 268.288q33.792-41.984 71.68-75.776 32.768-27.648 74.24-50.176t86.528-19.456q63.488 5.12 105.984 30.208t67.584 63.488 34.304 87.04 6.144 99.84-17.92 97.792-36.864 87.04-48.64 74.752-53.248 61.952q-40.96 41.984-85.504 78.336t-84.992 62.464-73.728 41.472-51.712 15.36q-20.48 1.024-52.224-14.336t-69.632-41.472-79.872-61.952-82.944-75.776q-26.624-25.6-57.344-59.392t-57.856-74.24-46.592-87.552-21.504-100.352 11.264-99.84 39.936-83.456 65.536-61.952 88.064-35.328q24.576-5.12 49.152 [...]
-    'M741.06368 733.310464c8.075264-29.262438 20.615373-40.632422 14.64105-162.810061C966.089728 361.789952 967.93897 72.37847 967.855002 54.693683c0.279347-0.279347 0.418509-0.419533 0.418509-0.419533s-0.17705-0.00512-0.428749-0.00512c0-0.251699 0-0.428749 0-0.428749s-0.139162 0.14633-0.418509 0.425677c-17.695744-0.083866-307.10784 1.760051-515.833958 212.142592-122.181632-5.984256-133.55305 6.563533-162.815693 14.644531C235.35063 295.798886 103.552614 436.975309 90.630758 486.076621c-1 [...]
-    'M848.794624 939.156685 571.780416 939.156685 571.780416 653.17123l341.897539 0 0 221.100654C913.677926 909.960704 884.482867 939.156685 848.794624 939.156685zM571.780403 318.743552c-11.861606-3.210138-31.443354-8.36864-39.829709-16.176435-0.596582-0.561766-1.016218-1.246413-1.613824-1.841971-0.560845 0.596582-1.016218 1.280205-1.613824 1.841971-8.386355 7.807795-15.96631 12.965274-27.827917 16.176435l0 263.544325L141.030675 582.287877 141.030675 355.202884c0-35.687834 29.195059-64.8 [...]
-];
-var colors = [
-    '#c4332b', '#16B644', '#6862FD', '#FDC763'
-];
-
-function getVirtulData(year) {
-    year = year || '2017';
-    var date = +echarts.number.parseDate(year + '-01-01');
-    var end = +echarts.number.parseDate((+year + 1) + '-01-01');
-    var dayTime = 3600 * 24 * 1000;
-    var data = [];
-    for (var time = date; time < end; time += dayTime) {
-        var items = [];
-        var eventCount = Math.round(Math.random() * pathes.length);
-        for (var i = 0; i < eventCount; i++) {
-            items.push(Math.round(Math.random() * (pathes.length - 1)));
-        }
-        data.push([
-            echarts.format.formatTime('yyyy-MM-dd', time),
-            items.join('|')
-        ]);
-    }
-    return data;
-}
-
-function renderItem(params, api) {
-    var cellPoint = api.coord(api.value(0));
-    var cellWidth = params.coordSys.cellWidth;
-    var cellHeight = params.coordSys.cellHeight;
-
-    var value = api.value(1);
-    var events = value && value.split('|');
-
-    if (isNaN(cellPoint[0]) || isNaN(cellPoint[1])) {
-        return;
-    }
-
-    var group = {
-        type: 'group',
-        children: (layouts[events.length - 1] || []).map(function (itemLayout, index) {
-            return {
-                type: 'path',
-                shape: {
-                    pathData: pathes[events[index]],
-                    x: -8,
-                    y: -8,
-                    width: 16,
-                    height: 16
-                },
-                position: [
-                    cellPoint[0] + echarts.number.linearMap(itemLayout[0], [-0.5, 0.5], [-cellWidth / 2, cellWidth / 2]),
-                    cellPoint[1] + echarts.number.linearMap(itemLayout[1], [-0.5, 0.5], [-cellHeight / 2 + 20, cellHeight / 2])
-                ],
-                style: api.style({
-                    fill: colors[events[index]]
-                })
-            };
-        }) || []
-    };
-
-    group.children.push({
-        type: 'text',
-        style: {
-            x: cellPoint[0],
-            y: cellPoint[1] - cellHeight / 2 + 15,
-            text: echarts.format.formatTime('dd', api.value(0)),
-            fill: '#777',
-            textFont: api.font({fontSize: 14})
-        }
-    });
-
-    return group;
-}
-
-option = {
-    tooltip: {
-    },
-    calendar: [{
-        left: 'center',
-        top: 'middle',
-        cellSize: [70, 70],
-        yearLabel: {show: false},
-        orient: 'vertical',
-        dayLabel: {
-            firstDay: 1,
-            nameMap: 'cn'
-        },
-        monthLabel: {
-            show: false
-        },
-        range: '2017-03'
-    }],
-    series: [{
-        type: 'custom',
-        coordinateSystem: 'calendar',
-        renderItem: renderItem,
-        dimensions: [null, {type: 'ordinal'}],
-        data: getVirtulData(2017)
-    }]
-};
diff --git a/public/data/data-transform-filter.js b/public/data/data-transform-filter.js
deleted file mode 100644
index 219a99f..0000000
--- a/public/data/data-transform-filter.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-title: Data Transform Fitler
-category: line
-titleCN: 数据过滤
-difficulty: 3
-*/
-
-$.get(ROOT_PATH + '/data/asset/data/life-expectancy-table.json', function (_rawData) {
-    run(_rawData);
-});
-
-function run(_rawData) {
-
-    option = {
-        dataset: [{
-            id: 'dataset_raw',
-            source: _rawData
-        }, {
-            id: 'dataset_since_1950_of_germany',
-            fromDatasetId: 'dataset_raw',
-            transform: {
-                type: 'filter',
-                config: {
-                    and: [
-                        { dimension: 'Year', gte: 1950 },
-                        { dimension: 'Country', '=': 'Germany' }
-                    ]
-                }
-            }
-        }, {
-            id: 'dataset_since_1950_of_france',
-            fromDatasetId: 'dataset_raw',
-            transform: {
-                type: 'filter',
-                config: {
-                    and: [
-                        { dimension: 'Year', gte: 1950 },
-                        { dimension: 'Country', '=': 'France' }
-                    ]
-                }
-            }
-        }],
-        title: {
-            text: 'Income of Germany and France since 1950'
-        },
-        tooltip: {
-            trigger: 'axis'
-        },
-        xAxis: {
-            type: 'category',
-            nameLocation: 'middle'
-        },
-        yAxis: {
-            name: 'Income'
-        },
-        series: [{
-            type: 'line',
-            datasetId: 'dataset_since_1950_of_germany',
-            showSymbol: false,
-            encode: {
-                x: 'Year',
-                y: 'Income',
-                itemName: 'Year',
-                tooltip: ['Income'],
-            }
-        }, {
-            type: 'line',
-            datasetId: 'dataset_since_1950_of_france',
-            showSymbol: false,
-            encode: {
-                x: 'Year',
-                y: 'Income',
-                itemName: 'Year',
-                tooltip: ['Income'],
-            }
-        }]
-    };
-
-    myChart.setOption(option);
-
-}
diff --git a/public/data/data-transform-multiple-pie.js b/public/data/data-transform-multiple-pie.js
deleted file mode 100644
index bcf3630..0000000
--- a/public/data/data-transform-multiple-pie.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-title: Partition Data to Pies
-category: dataset, pie, transform
-titleCN: 分割数据到数个饼图
-difficulty: 3
-*/
-
-option = {
-    dataset: [{
-        source: [
-            ['Product', 'Sales', 'Price', 'Year'],
-            ['Cake', 123, 32, 2011],
-            ['Cereal', 231, 14, 2011],
-            ['Tofu', 235, 5, 2011],
-            ['Dumpling', 341, 25, 2011],
-            ['Biscuit', 122, 29, 2011],
-            ['Cake', 143, 30, 2012],
-            ['Cereal', 201, 19, 2012],
-            ['Tofu', 255, 7, 2012],
-            ['Dumpling', 241, 27, 2012],
-            ['Biscuit', 102, 34, 2012],
-            ['Cake', 153, 28, 2013],
-            ['Cereal', 181, 21, 2013],
-            ['Tofu', 395, 4, 2013],
-            ['Dumpling', 281, 31, 2013],
-            ['Biscuit', 92, 39, 2013],
-            ['Cake', 223, 29, 2014],
-            ['Cereal', 211, 17, 2014],
-            ['Tofu', 345, 3, 2014],
-            ['Dumpling', 211, 35, 2014],
-            ['Biscuit', 72, 24, 2014],
-        ],
-    }, {
-        transform: {
-            type: 'filter',
-            config: { dimension: 'Year', value: 2011 }
-        },
-    }, {
-        transform: {
-            type: 'filter',
-            config: { dimension: 'Year', value: 2012 }
-        }
-    }, {
-        transform: {
-            type: 'filter',
-            config: { dimension: 'Year', value: 2013 }
-        }
-    }],
-    series: [{
-        type: 'pie', radius: 50, center: ['50%', '25%'],
-        datasetIndex: 1
-    }, {
-        type: 'pie', radius: 50, center: ['50%', '50%'],
-        datasetIndex: 2
-    }, {
-        type: 'pie', radius: 50, center: ['50%', '75%'],
-        datasetIndex: 3
-    }],
-
-
-    // Optional. Only for responsive layout:
-    media: [{
-        query: { minAspectRatio: 1 },
-        option: {
-            series: [
-                { center: ['25%', '50%'] },
-                { center: ['50%', '50%'] },
-                { center: ['75%', '50%'] }
-            ]
-        }
-    }, {
-        option: {
-            series: [
-                { center: ['50%', '25%'] },
-                { center: ['50%', '50%'] },
-                { center: ['50%', '75%'] }
-            ]
-        }
-    }]
-};
diff --git a/public/data/data-transform-sort-bar.js b/public/data/data-transform-sort-bar.js
deleted file mode 100644
index b62ffee..0000000
--- a/public/data/data-transform-sort-bar.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-title: Sort Data in Bar Chart
-category: dataset, bar, transform
-titleCN: 柱状图排序
-difficulty: 0
-*/
-
-option = {
-    dataset: [{
-        dimensions: ['name', 'age', 'profession', 'score', 'date'],
-        source: [
-            [' Hannah Krause ', 41, 'Engineer', 314, '2011-02-12'],
-            ['Zhao Qian ', 20, 'Teacher', 351, '2011-03-01'],
-            [' Jasmin Krause ', 52, 'Musician', 287, '2011-02-14'],
-            ['Li Lei', 37, 'Teacher', 219, '2011-02-18'],
-            [' Karle Neumann ', 25, 'Engineer', 253, '2011-04-02'],
-            [' Adrian Groß', 19, 'Teacher', null, '2011-01-16'],
-            ['Mia Neumann', 71, 'Engineer', 165, '2011-03-19'],
-            [' Böhm Fuchs', 36, 'Musician', 318, '2011-02-24'],
-            ['Han Meimei ', 67, 'Engineer', 366, '2011-03-12'],
-        ]
-    }, {
-        transform: {
-            type: 'sort',
-            config: { dimension: 'score', order: 'desc' }
-        }
-    }],
-    xAxis: {
-        type: 'category',
-        axisLabel: { interval: 0, rotate: 30 },
-    },
-    yAxis: {},
-    series: {
-        type: 'bar',
-        encode: { x: 'name', y: 'score' },
-        datasetIndex: 1
-    }
-};
diff --git a/public/data/dataset-default.js b/public/data/dataset-default.js
deleted file mode 100644
index 054c50e..0000000
--- a/public/data/dataset-default.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-title: Default arrangement
-category: 'dataset, pie'
-titleCN: 默认 encode 设置
-difficulty: 3
-*/
-
-var option = {
-    legend: {},
-    tooltip: {},
-    dataset: {
-        source: [
-            ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
-            ['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
-            ['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
-            ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
-            ['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
-        ]
-    },
-    series: [{
-        type: 'pie',
-        radius: '20%',
-        center: ['25%', '30%']
-        // No encode specified, by default, it is '2012'.
-    }, {
-        type: 'pie',
-        radius: '20%',
-        center: ['75%', '30%'],
-        encode: {
-            itemName: 'product',
-            value: '2013'
-        }
-    }, {
-        type: 'pie',
-        radius: '20%',
-        center: ['25%', '75%'],
-        encode: {
-            itemName: 'product',
-            value: '2014'
-        }
-    }, {
-        type: 'pie',
-        radius: '20%',
-        center: ['75%', '75%'],
-        encode: {
-            itemName: 'product',
-            value: '2015'
-        }
-    }]
-};
\ No newline at end of file
diff --git a/public/data/dataset-encode0.js b/public/data/dataset-encode0.js
deleted file mode 100644
index 4bf8921..0000000
--- a/public/data/dataset-encode0.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-title: Simple Encode
-category: 'dataset, bar'
-titleCN: 指定数据到坐标轴的映射
-difficulty: 1
-*/
-
-option = {
-    dataset: {
-        source: [
-            ['score', 'amount', 'product'],
-            [89.3, 58212, 'Matcha Latte'],
-            [57.1, 78254, 'Milk Tea'],
-            [74.4, 41032, 'Cheese Cocoa'],
-            [50.1, 12755, 'Cheese Brownie'],
-            [89.7, 20145, 'Matcha Cocoa'],
-            [68.1, 79146, 'Tea'],
-            [19.6, 91852, 'Orange Juice'],
-            [10.6, 101852, 'Lemon Juice'],
-            [32.7, 20112, 'Walnut Brownie']
-        ]
-    },
-    grid: {containLabel: true},
-    xAxis: {name: 'amount'},
-    yAxis: {type: 'category'},
-    visualMap: {
-        orient: 'horizontal',
-        left: 'center',
-        min: 10,
-        max: 100,
-        text: ['High Score', 'Low Score'],
-        // Map the score column to color
-        dimension: 0,
-        inRange: {
-            color: ['#65B581', '#FFCE34', '#FD665F']
-        }
-    },
-    series: [
-        {
-            type: 'bar',
-            encode: {
-                // Map the "amount" column to X axis.
-                x: 'amount',
-                // Map the "product" column to Y axis
-                y: 'product'
-            }
-        }
-    ]
-};
diff --git a/public/data/dataset-encode1.js b/public/data/dataset-encode1.js
deleted file mode 100644
index 483f771..0000000
--- a/public/data/dataset-encode1.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-title: Encode and Matrix
-category: dataset
-titleCN: 指定数据到坐标轴的映射
-difficulty: 3
-*/
-
-$.get(ROOT_PATH + '/data/asset/data/life-expectancy-table.json', function (data) {
-
-    var sizeValue = '57%';
-    var symbolSize = 2.5;
-    option = {
-        legend: {},
-        tooltip: {},
-        toolbox: {
-            left: 'center',
-            feature: {
-                dataZoom: {}
-            }
-        },
-        grid: [
-            {right: sizeValue, bottom: sizeValue},
-            {left: sizeValue, bottom: sizeValue},
-            {right: sizeValue, top: sizeValue},
-            {left: sizeValue, top: sizeValue}
-        ],
-        xAxis: [
-            {type: 'value', gridIndex: 0, name: 'Income', axisLabel: {rotate: 50, interval: 0}},
-            {type: 'category', gridIndex: 1, name: 'Country', boundaryGap: false, axisLabel: {rotate: 50, interval: 0}},
-            {type: 'value', gridIndex: 2, name: 'Income', axisLabel: {rotate: 50, interval: 0}},
-            {type: 'value', gridIndex: 3, name: 'Life Expectancy', axisLabel: {rotate: 50, interval: 0}}
-        ],
-        yAxis: [
-            {type: 'value', gridIndex: 0, name: 'Life Expectancy'},
-            {type: 'value', gridIndex: 1, name: 'Income'},
-            {type: 'value', gridIndex: 2, name: 'Population'},
-            {type: 'value', gridIndex: 3, name: 'Population'}
-        ],
-        dataset: {
-            dimensions: [
-                'Income',
-                'Life Expectancy',
-                'Population',
-                'Country',
-                {name: 'Year', type: 'ordinal'}
-            ],
-            source: data
-        },
-        series: [
-            {
-                type: 'scatter',
-                symbolSize: symbolSize,
-                xAxisIndex: 0,
-                yAxisIndex: 0,
-                encode: {
-                    x: 'Income',
-                    y: 'Life Expectancy',
-                    tooltip: [0, 1, 2, 3, 4]
-                }
-            },
-            {
-                type: 'scatter',
-                symbolSize: symbolSize,
-                xAxisIndex: 1,
-                yAxisIndex: 1,
-                encode: {
-                    x: 'Country',
-                    y: 'Income',
-                    tooltip: [0, 1, 2, 3, 4]
-                }
-            },
-            {
-                type: 'scatter',
-                symbolSize: symbolSize,
-                xAxisIndex: 2,
-                yAxisIndex: 2,
-                encode: {
-                    x: 'Income',
-                    y: 'Population',
-                    tooltip: [0, 1, 2, 3, 4]
-                }
-            },
-            {
-                type: 'scatter',
-                symbolSize: symbolSize,
-                xAxisIndex: 3,
-                yAxisIndex: 3,
-                encode: {
-                    x: 'Life Expectancy',
-                    y: 'Population',
-                    tooltip: [0, 1, 2, 3, 4]
-                }
-            }
-        ]
-    };
-
-    myChart.setOption(option);
-});
\ No newline at end of file
diff --git a/public/data/dataset-link.js b/public/data/dataset-link.js
deleted file mode 100644
index 029dea2..0000000
--- a/public/data/dataset-link.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-title: Share Dataset
-category: 'dataset, line, pie'
-titleCN: 联动和共享数据集
-difficulty: 5
-*/
-
-
-setTimeout(function () {
-
-    option = {
-        legend: {},
-        tooltip: {
-            trigger: 'axis',
-            showContent: false
-        },
-        dataset: {
-            source: [
-                ['product', '2012', '2013', '2014', '2015', '2016', '2017'],
-                ['Milk Tea', 56.5, 82.1, 88.7, 70.1, 53.4, 85.1],
-                ['Matcha Latte', 51.1, 51.4, 55.1, 53.3, 73.8, 68.7],
-                ['Cheese Cocoa', 40.1, 62.2, 69.5, 36.4, 45.2, 32.5],
-                ['Walnut Brownie', 25.2, 37.1, 41.2, 18, 33.9, 49.1]
-            ]
-        },
-        xAxis: {type: 'category'},
-        yAxis: {gridIndex: 0},
-        grid: {top: '55%'},
-        series: [
-            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
-            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
-            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
-            {type: 'line', smooth: true, seriesLayoutBy: 'row', emphasis: {focus: 'series'}},
-            {
-                type: 'pie',
-                id: 'pie',
-                radius: '30%',
-                center: ['50%', '25%'],
-                emphasis: {focus: 'data'},
-                label: {
-                    formatter: '{b}: {@2012} ({d}%)'
-                },
-                encode: {
-                    itemName: 'product',
-                    value: '2012',
-                    tooltip: '2012'
-                }
-            }
-        ]
-    };
-
-    myChart.on('updateAxisPointer', function (event) {
-        var xAxisInfo = event.axesInfo[0];
-        if (xAxisInfo) {
-            var dimension = xAxisInfo.value + 1;
-            myChart.setOption({
-                series: {
-                    id: 'pie',
-                    label: {
-                        formatter: '{b}: {@[' + dimension + ']} ({d}%)'
-                    },
-                    encode: {
-                        value: dimension,
-                        tooltip: dimension
-                    }
-                }
-            });
-        }
-    });
-
-    myChart.setOption(option);
-
-});
\ No newline at end of file
diff --git a/public/data/dataset-series-layout-by.js b/public/data/dataset-series-layout-by.js
deleted file mode 100644
index 20cbdda..0000000
--- a/public/data/dataset-series-layout-by.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-title: Series Layout By Column or Row
-category: 'dataset, bar'
-titleCN: 系列按行和按列排布
-difficulty: 5
-*/
-
-option = {
-    legend: {},
-    tooltip: {},
-    dataset: {
-        source: [
-            ['product', '2012', '2013', '2014', '2015'],
-            ['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
-            ['Milk Tea', 86.5, 92.1, 85.7, 83.1],
-            ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
-        ]
-    },
-    xAxis: [
-        {type: 'category', gridIndex: 0},
-        {type: 'category', gridIndex: 1}
-    ],
-    yAxis: [
-        {gridIndex: 0},
-        {gridIndex: 1}
-    ],
-    grid: [
-        {bottom: '55%'},
-        {top: '55%'}
-    ],
-    series: [
-        // These series are in the first grid.
-        {type: 'bar', seriesLayoutBy: 'row'},
-        {type: 'bar', seriesLayoutBy: 'row'},
-        {type: 'bar', seriesLayoutBy: 'row'},
-        // These series are in the second grid.
-        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
-        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
-        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
-        {type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
-    ]
-};
diff --git a/public/data/dataset-simple0.js b/public/data/dataset-simple0.js
deleted file mode 100644
index 5585358..0000000
--- a/public/data/dataset-simple0.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-title: Simple Example of Dataset
-category: 'dataset, bar'
-titleCN: 最简单的数据集(dataset)
-difficulty: 5
-*/
-
-option = {
-    legend: {},
-    tooltip: {},
-    dataset: {
-        source: [
-            ['product', '2015', '2016', '2017'],
-            ['Matcha Latte', 43.3, 85.8, 93.7],
-            ['Milk Tea', 83.1, 73.4, 55.1],
-            ['Cheese Cocoa', 86.4, 65.2, 82.5],
-            ['Walnut Brownie', 72.4, 53.9, 39.1]
-        ]
-    },
-    xAxis: {type: 'category'},
-    yAxis: {},
-    // Declare several bar series, each will be mapped
-    // to a column of dataset.source by default.
-    series: [
-        {type: 'bar'},
-        {type: 'bar'},
-        {type: 'bar'}
-    ]
-};
diff --git a/public/data/dataset-simple1.js b/public/data/dataset-simple1.js
deleted file mode 100644
index 4af4f39..0000000
--- a/public/data/dataset-simple1.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-title: Dataset in Object Array
-category: 'dataset, bar'
-titleCN: 对象数组的输入格式
-difficulty: 5
-*/
-
-option = {
-    legend: {},
-    tooltip: {},
-    dataset: {
-        dimensions: ['product', '2015', '2016', '2017'],
-        source: [
-            {product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7},
-            {product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1},
-            {product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5},
-            {product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1}
-        ]
-    },
-    xAxis: {type: 'category'},
-    yAxis: {},
-    // Declare several bar series, each will be mapped
-    // to a column of dataset.source by default.
-    series: [
-        {type: 'bar'},
-        {type: 'bar'},
-        {type: 'bar'}
-    ]
-};
diff --git a/public/data/dynamic-data.js b/public/data/dynamic-data.js
deleted file mode 100644
index d7c9e49..0000000
--- a/public/data/dynamic-data.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-title: Dynamic Data
-category: bar
-titleCN: 动态数据
-difficulty: 6
-*/
-
-option = {
-    title: {
-        text: '动态数据',
-        subtext: '纯属虚构'
-    },
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {
-            type: 'cross',
-            label: {
-                backgroundColor: '#283b56'
-            }
-        }
-    },
-    legend: {
-        data:['最新成交价', '预购队列']
-    },
-    toolbox: {
-        show: true,
-        feature: {
-            dataView: {readOnly: false},
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    dataZoom: {
-        show: false,
-        start: 0,
-        end: 100
-    },
-    xAxis: [
-        {
-            type: 'category',
-            boundaryGap: true,
-            data: (function (){
-                var now = new Date();
-                var res = [];
-                var len = 10;
-                while (len--) {
-                    res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
-                    now = new Date(now - 2000);
-                }
-                return res;
-            })()
-        },
-        {
-            type: 'category',
-            boundaryGap: true,
-            data: (function (){
-                var res = [];
-                var len = 10;
-                while (len--) {
-                    res.push(10 - len - 1);
-                }
-                return res;
-            })()
-        }
-    ],
-    yAxis: [
-        {
-            type: 'value',
-            scale: true,
-            name: '价格',
-            max: 30,
-            min: 0,
-            boundaryGap: [0.2, 0.2]
-        },
-        {
-            type: 'value',
-            scale: true,
-            name: '预购量',
-            max: 1200,
-            min: 0,
-            boundaryGap: [0.2, 0.2]
-        }
-    ],
-    series: [
-        {
-            name: '预购队列',
-            type: 'bar',
-            xAxisIndex: 1,
-            yAxisIndex: 1,
-            data: (function (){
-                var res = [];
-                var len = 10;
-                while (len--) {
-                    res.push(Math.round(Math.random() * 1000));
-                }
-                return res;
-            })()
-        },
-        {
-            name: '最新成交价',
-            type: 'line',
-            data: (function (){
-                var res = [];
-                var len = 0;
-                while (len < 10) {
-                    res.push((Math.random()*10 + 5).toFixed(1) - 0);
-                    len++;
-                }
-                return res;
-            })()
-        }
-    ]
-};
-
-app.count = 11;
-setInterval(function (){
-    var axisData = (new Date()).toLocaleTimeString().replace(/^\D*/, '');
-
-    var data0 = option.series[0].data;
-    var data1 = option.series[1].data;
-    data0.shift();
-    data0.push(Math.round(Math.random() * 1000));
-    data1.shift();
-    data1.push((Math.random() * 10 + 5).toFixed(1) - 0);
-
-    option.xAxis[0].data.shift();
-    option.xAxis[0].data.push(axisData);
-    option.xAxis[1].data.shift();
-    option.xAxis[1].data.push(app.count++);
-
-    myChart.setOption(option);
-}, 2100);
diff --git a/public/data/dynamic-data2.js b/public/data/dynamic-data2.js
deleted file mode 100644
index 23ad102..0000000
--- a/public/data/dynamic-data2.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-title: Dynamic Data + Time Axis
-category: line
-titleCN: 动态数据 + 时间坐标轴
-difficulty: 5
-*/
-
-function randomData() {
-    now = new Date(+now + oneDay);
-    value = value + Math.random() * 21 - 10;
-    return {
-        name: now.toString(),
-        value: [
-            [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'),
-            Math.round(value)
-        ]
-    };
-}
-
-var data = [];
-var now = +new Date(1997, 9, 3);
-var oneDay = 24 * 3600 * 1000;
-var value = Math.random() * 1000;
-for (var i = 0; i < 1000; i++) {
-    data.push(randomData());
-}
-
-option = {
-    title: {
-        text: '动态数据 + 时间坐标轴'
-    },
-    tooltip: {
-        trigger: 'axis',
-        formatter: function (params) {
-            params = params[0];
-            var date = new Date(params.name);
-            return date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + params.value[1];
-        },
-        axisPointer: {
-            animation: false
-        }
-    },
-    xAxis: {
-        type: 'time',
-        splitLine: {
-            show: false
-        }
-    },
-    yAxis: {
-        type: 'value',
-        boundaryGap: [0, '100%'],
-        splitLine: {
-            show: false
-        }
-    },
-    series: [{
-        name: '模拟数据',
-        type: 'line',
-        showSymbol: false,
-        hoverAnimation: false,
-        data: data
-    }]
-};
-
-setInterval(function () {
-
-    for (var i = 0; i < 5; i++) {
-        data.shift();
-        data.push(randomData());
-    }
-
-    myChart.setOption({
-        series: [{
-            data: data
-        }]
-    });
-}, 1000);
\ No newline at end of file
diff --git a/public/data/effectScatter-bmap.js b/public/data/effectScatter-bmap.js
deleted file mode 100644
index 850df19..0000000
--- a/public/data/effectScatter-bmap.js
+++ /dev/null
@@ -1,575 +0,0 @@
-/*
-title: Air Quality - Baidu Map
-category: 'scatter, map'
-tags: bmap
-titleCN: 全国主要城市空气质量 - 百度地图
-difficulty: 10
-*/
-
-var data = [
-     {name: '海门', value: 9},
-     {name: '鄂尔多斯', value: 12},
-     {name: '招远', value: 12},
-     {name: '舟山', value: 12},
-     {name: '齐齐哈尔', value: 14},
-     {name: '盐城', value: 15},
-     {name: '赤峰', value: 16},
-     {name: '青岛', value: 18},
-     {name: '乳山', value: 18},
-     {name: '金昌', value: 19},
-     {name: '泉州', value: 21},
-     {name: '莱西', value: 21},
-     {name: '日照', value: 21},
-     {name: '胶南', value: 22},
-     {name: '南通', value: 23},
-     {name: '拉萨', value: 24},
-     {name: '云浮', value: 24},
-     {name: '梅州', value: 25},
-     {name: '文登', value: 25},
-     {name: '上海', value: 25},
-     {name: '攀枝花', value: 25},
-     {name: '威海', value: 25},
-     {name: '承德', value: 25},
-     {name: '厦门', value: 26},
-     {name: '汕尾', value: 26},
-     {name: '潮州', value: 26},
-     {name: '丹东', value: 27},
-     {name: '太仓', value: 27},
-     {name: '曲靖', value: 27},
-     {name: '烟台', value: 28},
-     {name: '福州', value: 29},
-     {name: '瓦房店', value: 30},
-     {name: '即墨', value: 30},
-     {name: '抚顺', value: 31},
-     {name: '玉溪', value: 31},
-     {name: '张家口', value: 31},
-     {name: '阳泉', value: 31},
-     {name: '莱州', value: 32},
-     {name: '湖州', value: 32},
-     {name: '汕头', value: 32},
-     {name: '昆山', value: 33},
-     {name: '宁波', value: 33},
-     {name: '湛江', value: 33},
-     {name: '揭阳', value: 34},
-     {name: '荣成', value: 34},
-     {name: '连云港', value: 35},
-     {name: '葫芦岛', value: 35},
-     {name: '常熟', value: 36},
-     {name: '东莞', value: 36},
-     {name: '河源', value: 36},
-     {name: '淮安', value: 36},
-     {name: '泰州', value: 36},
-     {name: '南宁', value: 37},
-     {name: '营口', value: 37},
-     {name: '惠州', value: 37},
-     {name: '江阴', value: 37},
-     {name: '蓬莱', value: 37},
-     {name: '韶关', value: 38},
-     {name: '嘉峪关', value: 38},
-     {name: '广州', value: 38},
-     {name: '延安', value: 38},
-     {name: '太原', value: 39},
-     {name: '清远', value: 39},
-     {name: '中山', value: 39},
-     {name: '昆明', value: 39},
-     {name: '寿光', value: 40},
-     {name: '盘锦', value: 40},
-     {name: '长治', value: 41},
-     {name: '深圳', value: 41},
-     {name: '珠海', value: 42},
-     {name: '宿迁', value: 43},
-     {name: '咸阳', value: 43},
-     {name: '铜川', value: 44},
-     {name: '平度', value: 44},
-     {name: '佛山', value: 44},
-     {name: '海口', value: 44},
-     {name: '江门', value: 45},
-     {name: '章丘', value: 45},
-     {name: '肇庆', value: 46},
-     {name: '大连', value: 47},
-     {name: '临汾', value: 47},
-     {name: '吴江', value: 47},
-     {name: '石嘴山', value: 49},
-     {name: '沈阳', value: 50},
-     {name: '苏州', value: 50},
-     {name: '茂名', value: 50},
-     {name: '嘉兴', value: 51},
-     {name: '长春', value: 51},
-     {name: '胶州', value: 52},
-     {name: '银川', value: 52},
-     {name: '张家港', value: 52},
-     {name: '三门峡', value: 53},
-     {name: '锦州', value: 54},
-     {name: '南昌', value: 54},
-     {name: '柳州', value: 54},
-     {name: '三亚', value: 54},
-     {name: '自贡', value: 56},
-     {name: '吉林', value: 56},
-     {name: '阳江', value: 57},
-     {name: '泸州', value: 57},
-     {name: '西宁', value: 57},
-     {name: '宜宾', value: 58},
-     {name: '呼和浩特', value: 58},
-     {name: '成都', value: 58},
-     {name: '大同', value: 58},
-     {name: '镇江', value: 59},
-     {name: '桂林', value: 59},
-     {name: '张家界', value: 59},
-     {name: '宜兴', value: 59},
-     {name: '北海', value: 60},
-     {name: '西安', value: 61},
-     {name: '金坛', value: 62},
-     {name: '东营', value: 62},
-     {name: '牡丹江', value: 63},
-     {name: '遵义', value: 63},
-     {name: '绍兴', value: 63},
-     {name: '扬州', value: 64},
-     {name: '常州', value: 64},
-     {name: '潍坊', value: 65},
-     {name: '重庆', value: 66},
-     {name: '台州', value: 67},
-     {name: '南京', value: 67},
-     {name: '滨州', value: 70},
-     {name: '贵阳', value: 71},
-     {name: '无锡', value: 71},
-     {name: '本溪', value: 71},
-     {name: '克拉玛依', value: 72},
-     {name: '渭南', value: 72},
-     {name: '马鞍山', value: 72},
-     {name: '宝鸡', value: 72},
-     {name: '焦作', value: 75},
-     {name: '句容', value: 75},
-     {name: '北京', value: 79},
-     {name: '徐州', value: 79},
-     {name: '衡水', value: 80},
-     {name: '包头', value: 80},
-     {name: '绵阳', value: 80},
-     {name: '乌鲁木齐', value: 84},
-     {name: '枣庄', value: 84},
-     {name: '杭州', value: 84},
-     {name: '淄博', value: 85},
-     {name: '鞍山', value: 86},
-     {name: '溧阳', value: 86},
-     {name: '库尔勒', value: 86},
-     {name: '安阳', value: 90},
-     {name: '开封', value: 90},
-     {name: '济南', value: 92},
-     {name: '德阳', value: 93},
-     {name: '温州', value: 95},
-     {name: '九江', value: 96},
-     {name: '邯郸', value: 98},
-     {name: '临安', value: 99},
-     {name: '兰州', value: 99},
-     {name: '沧州', value: 100},
-     {name: '临沂', value: 103},
-     {name: '南充', value: 104},
-     {name: '天津', value: 105},
-     {name: '富阳', value: 106},
-     {name: '泰安', value: 112},
-     {name: '诸暨', value: 112},
-     {name: '郑州', value: 113},
-     {name: '哈尔滨', value: 114},
-     {name: '聊城', value: 116},
-     {name: '芜湖', value: 117},
-     {name: '唐山', value: 119},
-     {name: '平顶山', value: 119},
-     {name: '邢台', value: 119},
-     {name: '德州', value: 120},
-     {name: '济宁', value: 120},
-     {name: '荆州', value: 127},
-     {name: '宜昌', value: 130},
-     {name: '义乌', value: 132},
-     {name: '丽水', value: 133},
-     {name: '洛阳', value: 134},
-     {name: '秦皇岛', value: 136},
-     {name: '株洲', value: 143},
-     {name: '石家庄', value: 147},
-     {name: '莱芜', value: 148},
-     {name: '常德', value: 152},
-     {name: '保定', value: 153},
-     {name: '湘潭', value: 154},
-     {name: '金华', value: 157},
-     {name: '岳阳', value: 169},
-     {name: '长沙', value: 175},
-     {name: '衢州', value: 177},
-     {name: '廊坊', value: 193},
-     {name: '菏泽', value: 194},
-     {name: '合肥', value: 229},
-     {name: '武汉', value: 273},
-     {name: '大庆', value: 279}
-];
-var geoCoordMap = {
-    '海门':[121.15,31.89],
-    '鄂尔多斯':[109.781327,39.608266],
-    '招远':[120.38,37.35],
-    '舟山':[122.207216,29.985295],
-    '齐齐哈尔':[123.97,47.33],
-    '盐城':[120.13,33.38],
-    '赤峰':[118.87,42.28],
-    '青岛':[120.33,36.07],
-    '乳山':[121.52,36.89],
-    '金昌':[102.188043,38.520089],
-    '泉州':[118.58,24.93],
-    '莱西':[120.53,36.86],
-    '日照':[119.46,35.42],
-    '胶南':[119.97,35.88],
-    '南通':[121.05,32.08],
-    '拉萨':[91.11,29.97],
-    '云浮':[112.02,22.93],
-    '梅州':[116.1,24.55],
-    '文登':[122.05,37.2],
-    '上海':[121.48,31.22],
-    '攀枝花':[101.718637,26.582347],
-    '威海':[122.1,37.5],
-    '承德':[117.93,40.97],
-    '厦门':[118.1,24.46],
-    '汕尾':[115.375279,22.786211],
-    '潮州':[116.63,23.68],
-    '丹东':[124.37,40.13],
-    '太仓':[121.1,31.45],
-    '曲靖':[103.79,25.51],
-    '烟台':[121.39,37.52],
-    '福州':[119.3,26.08],
-    '瓦房店':[121.979603,39.627114],
-    '即墨':[120.45,36.38],
-    '抚顺':[123.97,41.97],
-    '玉溪':[102.52,24.35],
-    '张家口':[114.87,40.82],
-    '阳泉':[113.57,37.85],
-    '莱州':[119.942327,37.177017],
-    '湖州':[120.1,30.86],
-    '汕头':[116.69,23.39],
-    '昆山':[120.95,31.39],
-    '宁波':[121.56,29.86],
-    '湛江':[110.359377,21.270708],
-    '揭阳':[116.35,23.55],
-    '荣成':[122.41,37.16],
-    '连云港':[119.16,34.59],
-    '葫芦岛':[120.836932,40.711052],
-    '常熟':[120.74,31.64],
-    '东莞':[113.75,23.04],
-    '河源':[114.68,23.73],
-    '淮安':[119.15,33.5],
-    '泰州':[119.9,32.49],
-    '南宁':[108.33,22.84],
-    '营口':[122.18,40.65],
-    '惠州':[114.4,23.09],
-    '江阴':[120.26,31.91],
-    '蓬莱':[120.75,37.8],
-    '韶关':[113.62,24.84],
-    '嘉峪关':[98.289152,39.77313],
-    '广州':[113.23,23.16],
-    '延安':[109.47,36.6],
-    '太原':[112.53,37.87],
-    '清远':[113.01,23.7],
-    '中山':[113.38,22.52],
-    '昆明':[102.73,25.04],
-    '寿光':[118.73,36.86],
-    '盘锦':[122.070714,41.119997],
-    '长治':[113.08,36.18],
-    '深圳':[114.07,22.62],
-    '珠海':[113.52,22.3],
-    '宿迁':[118.3,33.96],
-    '咸阳':[108.72,34.36],
-    '铜川':[109.11,35.09],
-    '平度':[119.97,36.77],
-    '佛山':[113.11,23.05],
-    '海口':[110.35,20.02],
-    '江门':[113.06,22.61],
-    '章丘':[117.53,36.72],
-    '肇庆':[112.44,23.05],
-    '大连':[121.62,38.92],
-    '临汾':[111.5,36.08],
-    '吴江':[120.63,31.16],
-    '石嘴山':[106.39,39.04],
-    '沈阳':[123.38,41.8],
-    '苏州':[120.62,31.32],
-    '茂名':[110.88,21.68],
-    '嘉兴':[120.76,30.77],
-    '长春':[125.35,43.88],
-    '胶州':[120.03336,36.264622],
-    '银川':[106.27,38.47],
-    '张家港':[120.555821,31.875428],
-    '三门峡':[111.19,34.76],
-    '锦州':[121.15,41.13],
-    '南昌':[115.89,28.68],
-    '柳州':[109.4,24.33],
-    '三亚':[109.511909,18.252847],
-    '自贡':[104.778442,29.33903],
-    '吉林':[126.57,43.87],
-    '阳江':[111.95,21.85],
-    '泸州':[105.39,28.91],
-    '西宁':[101.74,36.56],
-    '宜宾':[104.56,29.77],
-    '呼和浩特':[111.65,40.82],
-    '成都':[104.06,30.67],
-    '大同':[113.3,40.12],
-    '镇江':[119.44,32.2],
-    '桂林':[110.28,25.29],
-    '张家界':[110.479191,29.117096],
-    '宜兴':[119.82,31.36],
-    '北海':[109.12,21.49],
-    '西安':[108.95,34.27],
-    '金坛':[119.56,31.74],
-    '东营':[118.49,37.46],
-    '牡丹江':[129.58,44.6],
-    '遵义':[106.9,27.7],
-    '绍兴':[120.58,30.01],
-    '扬州':[119.42,32.39],
-    '常州':[119.95,31.79],
-    '潍坊':[119.1,36.62],
-    '重庆':[106.54,29.59],
-    '台州':[121.420757,28.656386],
-    '南京':[118.78,32.04],
-    '滨州':[118.03,37.36],
-    '贵阳':[106.71,26.57],
-    '无锡':[120.29,31.59],
-    '本溪':[123.73,41.3],
-    '克拉玛依':[84.77,45.59],
-    '渭南':[109.5,34.52],
-    '马鞍山':[118.48,31.56],
-    '宝鸡':[107.15,34.38],
-    '焦作':[113.21,35.24],
-    '句容':[119.16,31.95],
-    '北京':[116.46,39.92],
-    '徐州':[117.2,34.26],
-    '衡水':[115.72,37.72],
-    '包头':[110,40.58],
-    '绵阳':[104.73,31.48],
-    '乌鲁木齐':[87.68,43.77],
-    '枣庄':[117.57,34.86],
-    '杭州':[120.19,30.26],
-    '淄博':[118.05,36.78],
-    '鞍山':[122.85,41.12],
-    '溧阳':[119.48,31.43],
-    '库尔勒':[86.06,41.68],
-    '安阳':[114.35,36.1],
-    '开封':[114.35,34.79],
-    '济南':[117,36.65],
-    '德阳':[104.37,31.13],
-    '温州':[120.65,28.01],
-    '九江':[115.97,29.71],
-    '邯郸':[114.47,36.6],
-    '临安':[119.72,30.23],
-    '兰州':[103.73,36.03],
-    '沧州':[116.83,38.33],
-    '临沂':[118.35,35.05],
-    '南充':[106.110698,30.837793],
-    '天津':[117.2,39.13],
-    '富阳':[119.95,30.07],
-    '泰安':[117.13,36.18],
-    '诸暨':[120.23,29.71],
-    '郑州':[113.65,34.76],
-    '哈尔滨':[126.63,45.75],
-    '聊城':[115.97,36.45],
-    '芜湖':[118.38,31.33],
-    '唐山':[118.02,39.63],
-    '平顶山':[113.29,33.75],
-    '邢台':[114.48,37.05],
-    '德州':[116.29,37.45],
-    '济宁':[116.59,35.38],
-    '荆州':[112.239741,30.335165],
-    '宜昌':[111.3,30.7],
-    '义乌':[120.06,29.32],
-    '丽水':[119.92,28.45],
-    '洛阳':[112.44,34.7],
-    '秦皇岛':[119.57,39.95],
-    '株洲':[113.16,27.83],
-    '石家庄':[114.48,38.03],
-    '莱芜':[117.67,36.19],
-    '常德':[111.69,29.05],
-    '保定':[115.48,38.85],
-    '湘潭':[112.91,27.87],
-    '金华':[119.64,29.12],
-    '岳阳':[113.09,29.37],
-    '长沙':[113,28.21],
-    '衢州':[118.88,28.97],
-    '廊坊':[116.7,39.53],
-    '菏泽':[115.480656,35.23375],
-    '合肥':[117.27,31.86],
-    '武汉':[114.31,30.52],
-    '大庆':[125.03,46.58]
-};
-
-var convertData = function (data) {
-    var res = [];
-    for (var i = 0; i < data.length; i++) {
-        var geoCoord = geoCoordMap[data[i].name];
-        if (geoCoord) {
-            res.push({
-                name: data[i].name,
-                value: geoCoord.concat(data[i].value)
-            });
-        }
-    }
-    return res;
-};
-
-option = {
-    title: {
-        text: '全国主要城市空气质量 - 百度地图',
-        subtext: 'data from PM25.in',
-        sublink: 'http://www.pm25.in',
-        left: 'center'
-    },
-    tooltip : {
-        trigger: 'item'
-    },
-    bmap: {
-        center: [104.114129, 37.550339],
-        zoom: 5,
-        roam: true,
-        mapStyle: {
-            styleJson: [{
-                'featureType': 'water',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#d1d1d1'
-                }
-            }, {
-                'featureType': 'land',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#f3f3f3'
-                }
-            }, {
-                'featureType': 'railway',
-                'elementType': 'all',
-                'stylers': {
-                    'visibility': 'off'
-                }
-            }, {
-                'featureType': 'highway',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#fdfdfd'
-                }
-            }, {
-                'featureType': 'highway',
-                'elementType': 'labels',
-                'stylers': {
-                    'visibility': 'off'
-                }
-            }, {
-                'featureType': 'arterial',
-                'elementType': 'geometry',
-                'stylers': {
-                    'color': '#fefefe'
-                }
-            }, {
-                'featureType': 'arterial',
-                'elementType': 'geometry.fill',
-                'stylers': {
-                    'color': '#fefefe'
-                }
-            }, {
-                'featureType': 'poi',
-                'elementType': 'all',
-                'stylers': {
-                    'visibility': 'off'
-                }
-            }, {
-                'featureType': 'green',
-                'elementType': 'all',
-                'stylers': {
-                    'visibility': 'off'
-                }
-            }, {
-                'featureType': 'subway',
-                'elementType': 'all',
-                'stylers': {
-                    'visibility': 'off'
-                }
-            }, {
-                'featureType': 'manmade',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#d1d1d1'
-                }
-            }, {
-                'featureType': 'local',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#d1d1d1'
-                }
-            }, {
-                'featureType': 'arterial',
-                'elementType': 'labels',
-                'stylers': {
-                    'visibility': 'off'
-                }
-            }, {
-                'featureType': 'boundary',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#fefefe'
-                }
-            }, {
-                'featureType': 'building',
-                'elementType': 'all',
-                'stylers': {
-                    'color': '#d1d1d1'
-                }
-            }, {
-                'featureType': 'label',
-                'elementType': 'labels.text.fill',
-                'stylers': {
-                    'color': '#999999'
-                }
-            }]
-        }
-    },
-    series : [
-        {
-            name: 'pm2.5',
-            type: 'scatter',
-            coordinateSystem: 'bmap',
-            data: convertData(data),
-            symbolSize: function (val) {
-                return val[2] / 10;
-            },
-            encode: {
-                value: 2
-            },
-            label: {
-                formatter: '{b}',
-                position: 'right',
-                show: false
-            },
-            emphasis: {
-                label: {
-                    show: true
-                }
-            }
-        },
-        {
-            name: 'Top 5',
-            type: 'effectScatter',
-            coordinateSystem: 'bmap',
-            data: convertData(data.sort(function (a, b) {
-                return b.value - a.value;
-            }).slice(0, 6)),
-            symbolSize: function (val) {
-                return val[2] / 10;
-            },
-            encode: {
-                value: 2
-            },
-            showEffectOn: 'render',
-            rippleEffect: {
-                brushType: 'stroke'
-            },
-            hoverAnimation: true,
-            label: {
-                formatter: '{b}',
-                position: 'right',
-                show: true
-            },
-            itemStyle: {
-                shadowBlur: 10,
-                shadowColor: '#333'
-            },
-            zlevel: 1
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/effectScatter-map.js b/public/data/effectScatter-map.js
deleted file mode 100644
index 8509c87..0000000
--- a/public/data/effectScatter-map.js
+++ /dev/null
@@ -1,503 +0,0 @@
-/*
-title: Air Quality
-category: scatter
-titleCN: 全国主要城市空气质量
-difficulty: 2
-*/
-
-var data = [
-     {name: '海门', value: 9},
-     {name: '鄂尔多斯', value: 12},
-     {name: '招远', value: 12},
-     {name: '舟山', value: 12},
-     {name: '齐齐哈尔', value: 14},
-     {name: '盐城', value: 15},
-     {name: '赤峰', value: 16},
-     {name: '青岛', value: 18},
-     {name: '乳山', value: 18},
-     {name: '金昌', value: 19},
-     {name: '泉州', value: 21},
-     {name: '莱西', value: 21},
-     {name: '日照', value: 21},
-     {name: '胶南', value: 22},
-     {name: '南通', value: 23},
-     {name: '拉萨', value: 24},
-     {name: '云浮', value: 24},
-     {name: '梅州', value: 25},
-     {name: '文登', value: 25},
-     {name: '上海', value: 25},
-     {name: '攀枝花', value: 25},
-     {name: '威海', value: 25},
-     {name: '承德', value: 25},
-     {name: '厦门', value: 26},
-     {name: '汕尾', value: 26},
-     {name: '潮州', value: 26},
-     {name: '丹东', value: 27},
-     {name: '太仓', value: 27},
-     {name: '曲靖', value: 27},
-     {name: '烟台', value: 28},
-     {name: '福州', value: 29},
-     {name: '瓦房店', value: 30},
-     {name: '即墨', value: 30},
-     {name: '抚顺', value: 31},
-     {name: '玉溪', value: 31},
-     {name: '张家口', value: 31},
-     {name: '阳泉', value: 31},
-     {name: '莱州', value: 32},
-     {name: '湖州', value: 32},
-     {name: '汕头', value: 32},
-     {name: '昆山', value: 33},
-     {name: '宁波', value: 33},
-     {name: '湛江', value: 33},
-     {name: '揭阳', value: 34},
-     {name: '荣成', value: 34},
-     {name: '连云港', value: 35},
-     {name: '葫芦岛', value: 35},
-     {name: '常熟', value: 36},
-     {name: '东莞', value: 36},
-     {name: '河源', value: 36},
-     {name: '淮安', value: 36},
-     {name: '泰州', value: 36},
-     {name: '南宁', value: 37},
-     {name: '营口', value: 37},
-     {name: '惠州', value: 37},
-     {name: '江阴', value: 37},
-     {name: '蓬莱', value: 37},
-     {name: '韶关', value: 38},
-     {name: '嘉峪关', value: 38},
-     {name: '广州', value: 38},
-     {name: '延安', value: 38},
-     {name: '太原', value: 39},
-     {name: '清远', value: 39},
-     {name: '中山', value: 39},
-     {name: '昆明', value: 39},
-     {name: '寿光', value: 40},
-     {name: '盘锦', value: 40},
-     {name: '长治', value: 41},
-     {name: '深圳', value: 41},
-     {name: '珠海', value: 42},
-     {name: '宿迁', value: 43},
-     {name: '咸阳', value: 43},
-     {name: '铜川', value: 44},
-     {name: '平度', value: 44},
-     {name: '佛山', value: 44},
-     {name: '海口', value: 44},
-     {name: '江门', value: 45},
-     {name: '章丘', value: 45},
-     {name: '肇庆', value: 46},
-     {name: '大连', value: 47},
-     {name: '临汾', value: 47},
-     {name: '吴江', value: 47},
-     {name: '石嘴山', value: 49},
-     {name: '沈阳', value: 50},
-     {name: '苏州', value: 50},
-     {name: '茂名', value: 50},
-     {name: '嘉兴', value: 51},
-     {name: '长春', value: 51},
-     {name: '胶州', value: 52},
-     {name: '银川', value: 52},
-     {name: '张家港', value: 52},
-     {name: '三门峡', value: 53},
-     {name: '锦州', value: 54},
-     {name: '南昌', value: 54},
-     {name: '柳州', value: 54},
-     {name: '三亚', value: 54},
-     {name: '自贡', value: 56},
-     {name: '吉林', value: 56},
-     {name: '阳江', value: 57},
-     {name: '泸州', value: 57},
-     {name: '西宁', value: 57},
-     {name: '宜宾', value: 58},
-     {name: '呼和浩特', value: 58},
-     {name: '成都', value: 58},
-     {name: '大同', value: 58},
-     {name: '镇江', value: 59},
-     {name: '桂林', value: 59},
-     {name: '张家界', value: 59},
-     {name: '宜兴', value: 59},
-     {name: '北海', value: 60},
-     {name: '西安', value: 61},
-     {name: '金坛', value: 62},
-     {name: '东营', value: 62},
-     {name: '牡丹江', value: 63},
-     {name: '遵义', value: 63},
-     {name: '绍兴', value: 63},
-     {name: '扬州', value: 64},
-     {name: '常州', value: 64},
-     {name: '潍坊', value: 65},
-     {name: '重庆', value: 66},
-     {name: '台州', value: 67},
-     {name: '南京', value: 67},
-     {name: '滨州', value: 70},
-     {name: '贵阳', value: 71},
-     {name: '无锡', value: 71},
-     {name: '本溪', value: 71},
-     {name: '克拉玛依', value: 72},
-     {name: '渭南', value: 72},
-     {name: '马鞍山', value: 72},
-     {name: '宝鸡', value: 72},
-     {name: '焦作', value: 75},
-     {name: '句容', value: 75},
-     {name: '北京', value: 79},
-     {name: '徐州', value: 79},
-     {name: '衡水', value: 80},
-     {name: '包头', value: 80},
-     {name: '绵阳', value: 80},
-     {name: '乌鲁木齐', value: 84},
-     {name: '枣庄', value: 84},
-     {name: '杭州', value: 84},
-     {name: '淄博', value: 85},
-     {name: '鞍山', value: 86},
-     {name: '溧阳', value: 86},
-     {name: '库尔勒', value: 86},
-     {name: '安阳', value: 90},
-     {name: '开封', value: 90},
-     {name: '济南', value: 92},
-     {name: '德阳', value: 93},
-     {name: '温州', value: 95},
-     {name: '九江', value: 96},
-     {name: '邯郸', value: 98},
-     {name: '临安', value: 99},
-     {name: '兰州', value: 99},
-     {name: '沧州', value: 100},
-     {name: '临沂', value: 103},
-     {name: '南充', value: 104},
-     {name: '天津', value: 105},
-     {name: '富阳', value: 106},
-     {name: '泰安', value: 112},
-     {name: '诸暨', value: 112},
-     {name: '郑州', value: 113},
-     {name: '哈尔滨', value: 114},
-     {name: '聊城', value: 116},
-     {name: '芜湖', value: 117},
-     {name: '唐山', value: 119},
-     {name: '平顶山', value: 119},
-     {name: '邢台', value: 119},
-     {name: '德州', value: 120},
-     {name: '济宁', value: 120},
-     {name: '荆州', value: 127},
-     {name: '宜昌', value: 130},
-     {name: '义乌', value: 132},
-     {name: '丽水', value: 133},
-     {name: '洛阳', value: 134},
-     {name: '秦皇岛', value: 136},
-     {name: '株洲', value: 143},
-     {name: '石家庄', value: 147},
-     {name: '莱芜', value: 148},
-     {name: '常德', value: 152},
-     {name: '保定', value: 153},
-     {name: '湘潭', value: 154},
-     {name: '金华', value: 157},
-     {name: '岳阳', value: 169},
-     {name: '长沙', value: 175},
-     {name: '衢州', value: 177},
-     {name: '廊坊', value: 193},
-     {name: '菏泽', value: 194},
-     {name: '合肥', value: 229},
-     {name: '武汉', value: 273},
-     {name: '大庆', value: 279}
-];
-var geoCoordMap = {
-    '海门':[121.15,31.89],
-    '鄂尔多斯':[109.781327,39.608266],
-    '招远':[120.38,37.35],
-    '舟山':[122.207216,29.985295],
-    '齐齐哈尔':[123.97,47.33],
-    '盐城':[120.13,33.38],
-    '赤峰':[118.87,42.28],
-    '青岛':[120.33,36.07],
-    '乳山':[121.52,36.89],
-    '金昌':[102.188043,38.520089],
-    '泉州':[118.58,24.93],
-    '莱西':[120.53,36.86],
-    '日照':[119.46,35.42],
-    '胶南':[119.97,35.88],
-    '南通':[121.05,32.08],
-    '拉萨':[91.11,29.97],
-    '云浮':[112.02,22.93],
-    '梅州':[116.1,24.55],
-    '文登':[122.05,37.2],
-    '上海':[121.48,31.22],
-    '攀枝花':[101.718637,26.582347],
-    '威海':[122.1,37.5],
-    '承德':[117.93,40.97],
-    '厦门':[118.1,24.46],
-    '汕尾':[115.375279,22.786211],
-    '潮州':[116.63,23.68],
-    '丹东':[124.37,40.13],
-    '太仓':[121.1,31.45],
-    '曲靖':[103.79,25.51],
-    '烟台':[121.39,37.52],
-    '福州':[119.3,26.08],
-    '瓦房店':[121.979603,39.627114],
-    '即墨':[120.45,36.38],
-    '抚顺':[123.97,41.97],
-    '玉溪':[102.52,24.35],
-    '张家口':[114.87,40.82],
-    '阳泉':[113.57,37.85],
-    '莱州':[119.942327,37.177017],
-    '湖州':[120.1,30.86],
-    '汕头':[116.69,23.39],
-    '昆山':[120.95,31.39],
-    '宁波':[121.56,29.86],
-    '湛江':[110.359377,21.270708],
-    '揭阳':[116.35,23.55],
-    '荣成':[122.41,37.16],
-    '连云港':[119.16,34.59],
-    '葫芦岛':[120.836932,40.711052],
-    '常熟':[120.74,31.64],
-    '东莞':[113.75,23.04],
-    '河源':[114.68,23.73],
-    '淮安':[119.15,33.5],
-    '泰州':[119.9,32.49],
-    '南宁':[108.33,22.84],
-    '营口':[122.18,40.65],
-    '惠州':[114.4,23.09],
-    '江阴':[120.26,31.91],
-    '蓬莱':[120.75,37.8],
-    '韶关':[113.62,24.84],
-    '嘉峪关':[98.289152,39.77313],
-    '广州':[113.23,23.16],
-    '延安':[109.47,36.6],
-    '太原':[112.53,37.87],
-    '清远':[113.01,23.7],
-    '中山':[113.38,22.52],
-    '昆明':[102.73,25.04],
-    '寿光':[118.73,36.86],
-    '盘锦':[122.070714,41.119997],
-    '长治':[113.08,36.18],
-    '深圳':[114.07,22.62],
-    '珠海':[113.52,22.3],
-    '宿迁':[118.3,33.96],
-    '咸阳':[108.72,34.36],
-    '铜川':[109.11,35.09],
-    '平度':[119.97,36.77],
-    '佛山':[113.11,23.05],
-    '海口':[110.35,20.02],
-    '江门':[113.06,22.61],
-    '章丘':[117.53,36.72],
-    '肇庆':[112.44,23.05],
-    '大连':[121.62,38.92],
-    '临汾':[111.5,36.08],
-    '吴江':[120.63,31.16],
-    '石嘴山':[106.39,39.04],
-    '沈阳':[123.38,41.8],
-    '苏州':[120.62,31.32],
-    '茂名':[110.88,21.68],
-    '嘉兴':[120.76,30.77],
-    '长春':[125.35,43.88],
-    '胶州':[120.03336,36.264622],
-    '银川':[106.27,38.47],
-    '张家港':[120.555821,31.875428],
-    '三门峡':[111.19,34.76],
-    '锦州':[121.15,41.13],
-    '南昌':[115.89,28.68],
-    '柳州':[109.4,24.33],
-    '三亚':[109.511909,18.252847],
-    '自贡':[104.778442,29.33903],
-    '吉林':[126.57,43.87],
-    '阳江':[111.95,21.85],
-    '泸州':[105.39,28.91],
-    '西宁':[101.74,36.56],
-    '宜宾':[104.56,29.77],
-    '呼和浩特':[111.65,40.82],
-    '成都':[104.06,30.67],
-    '大同':[113.3,40.12],
-    '镇江':[119.44,32.2],
-    '桂林':[110.28,25.29],
-    '张家界':[110.479191,29.117096],
-    '宜兴':[119.82,31.36],
-    '北海':[109.12,21.49],
-    '西安':[108.95,34.27],
-    '金坛':[119.56,31.74],
-    '东营':[118.49,37.46],
-    '牡丹江':[129.58,44.6],
-    '遵义':[106.9,27.7],
-    '绍兴':[120.58,30.01],
-    '扬州':[119.42,32.39],
-    '常州':[119.95,31.79],
-    '潍坊':[119.1,36.62],
-    '重庆':[106.54,29.59],
-    '台州':[121.420757,28.656386],
-    '南京':[118.78,32.04],
-    '滨州':[118.03,37.36],
-    '贵阳':[106.71,26.57],
-    '无锡':[120.29,31.59],
-    '本溪':[123.73,41.3],
-    '克拉玛依':[84.77,45.59],
-    '渭南':[109.5,34.52],
-    '马鞍山':[118.48,31.56],
-    '宝鸡':[107.15,34.38],
-    '焦作':[113.21,35.24],
-    '句容':[119.16,31.95],
-    '北京':[116.46,39.92],
-    '徐州':[117.2,34.26],
-    '衡水':[115.72,37.72],
-    '包头':[110,40.58],
-    '绵阳':[104.73,31.48],
-    '乌鲁木齐':[87.68,43.77],
-    '枣庄':[117.57,34.86],
-    '杭州':[120.19,30.26],
-    '淄博':[118.05,36.78],
-    '鞍山':[122.85,41.12],
-    '溧阳':[119.48,31.43],
-    '库尔勒':[86.06,41.68],
-    '安阳':[114.35,36.1],
-    '开封':[114.35,34.79],
-    '济南':[117,36.65],
-    '德阳':[104.37,31.13],
-    '温州':[120.65,28.01],
-    '九江':[115.97,29.71],
-    '邯郸':[114.47,36.6],
-    '临安':[119.72,30.23],
-    '兰州':[103.73,36.03],
-    '沧州':[116.83,38.33],
-    '临沂':[118.35,35.05],
-    '南充':[106.110698,30.837793],
-    '天津':[117.2,39.13],
-    '富阳':[119.95,30.07],
-    '泰安':[117.13,36.18],
-    '诸暨':[120.23,29.71],
-    '郑州':[113.65,34.76],
-    '哈尔滨':[126.63,45.75],
-    '聊城':[115.97,36.45],
-    '芜湖':[118.38,31.33],
-    '唐山':[118.02,39.63],
-    '平顶山':[113.29,33.75],
-    '邢台':[114.48,37.05],
-    '德州':[116.29,37.45],
-    '济宁':[116.59,35.38],
-    '荆州':[112.239741,30.335165],
-    '宜昌':[111.3,30.7],
-    '义乌':[120.06,29.32],
-    '丽水':[119.92,28.45],
-    '洛阳':[112.44,34.7],
-    '秦皇岛':[119.57,39.95],
-    '株洲':[113.16,27.83],
-    '石家庄':[114.48,38.03],
-    '莱芜':[117.67,36.19],
-    '常德':[111.69,29.05],
-    '保定':[115.48,38.85],
-    '湘潭':[112.91,27.87],
-    '金华':[119.64,29.12],
-    '岳阳':[113.09,29.37],
-    '长沙':[113,28.21],
-    '衢州':[118.88,28.97],
-    '廊坊':[116.7,39.53],
-    '菏泽':[115.480656,35.23375],
-    '合肥':[117.27,31.86],
-    '武汉':[114.31,30.52],
-    '大庆':[125.03,46.58]
-};
-
-var convertData = function (data) {
-    var res = [];
-    for (var i = 0; i < data.length; i++) {
-        var geoCoord = geoCoordMap[data[i].name];
-        if (geoCoord) {
-            res.push({
-                name: data[i].name,
-                value: geoCoord.concat(data[i].value)
-            });
-        }
-    }
-    return res;
-};
-
-option = {
-    backgroundColor: '#404a59',
-    title: {
-        text: '全国主要城市空气质量',
-        subtext: 'data from PM25.in',
-        sublink: 'http://www.pm25.in',
-        left: 'center',
-        textStyle: {
-            color: '#fff'
-        }
-    },
-    tooltip : {
-        trigger: 'item'
-    },
-    legend: {
-        orient: 'vertical',
-        top: 'bottom',
-        left: 'right',
-        data:['pm2.5'],
-        textStyle: {
-            color: '#fff'
-        }
-    },
-    geo: {
-        map: 'china',
-        roam: true,
-        label: {
-            show: false
-        },
-        itemStyle: {
-            areaColor: '#323c48',
-            borderColor: '#111'
-        },
-        emphasis: {
-            itemStyle: {
-                areaColor: '#2a333d'
-            }
-        }
-    },
-    series : [
-        {
-            name: 'pm2.5',
-            type: 'scatter',
-            coordinateSystem: 'geo',
-            data: convertData(data),
-            encode: {
-                value: 2
-            },
-            symbolSize: function (val) {
-                return val[2] / 10;
-            },
-            label: {
-                formatter: '{b}',
-                position: 'right',
-                show: false
-            },
-            itemStyle: {
-                color: '#ddb926'
-            },
-            emphasis: {
-                label: {
-                    show: true
-                }
-            }
-        },
-        {
-            name: 'Top 5',
-            type: 'effectScatter',
-            coordinateSystem: 'geo',
-            data: convertData(data.sort(function (a, b) {
-                return b.value - a.value;
-            }).slice(0, 6)),
-            encode: {
-                value: 2
-            },
-            symbolSize: function (val) {
-                return val[2] / 10;
-            },
-            showEffectOn: 'render',
-            rippleEffect: {
-                brushType: 'stroke'
-            },
-            hoverAnimation: true,
-            label: {
-                formatter: '{b}',
-                position: 'right',
-                show: true
-            },
-            itemStyle: {
-                color: '#f4e925',
-                shadowBlur: 10,
-                shadowColor: '#333'
-            },
-            zlevel: 1
-        }
-    ]
-};
\ No newline at end of file
diff --git a/public/data/funnel-align.js b/public/data/funnel-align.js
deleted file mode 100644
index 6c84bf8..0000000
--- a/public/data/funnel-align.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-title: Funnel (align)
-category: funnel
-titleCN: 漏斗图(对比)
-*/
-
-option = {
-    title: {
-        text: '漏斗图(对比)',
-        subtext: '纯属虚构',
-        left: 'left',
-        top: 'bottom'
-    },
-    tooltip: {
-        trigger: 'item',
-        formatter: '{a} <br/>{b} : {c}%'
-    },
-    toolbox: {
-        show: true,
-        orient: 'vertical',
-        top: 'center',
-        feature: {
-            dataView: {readOnly: false},
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    legend: {
-        orient: 'vertical',
-        left: 'left',
-        data: ['产品A', '产品B', '产品C', '产品D', '产品E']
-    },
-
-    series: [
-        {
-            name: '漏斗图',
-            type: 'funnel',
-            width: '40%',
-            height: '45%',
-            left: '5%',
-            top: '50%',
-            funnelAlign: 'right',
-
-            center: ['25%', '25%'],  // for pie
-
-            data: [
-                {value: 60, name: '产品C'},
-                {value: 30, name: '产品D'},
-                {value: 10, name: '产品E'},
-                {value: 80, name: '产品B'},
-                {value: 100, name: '产品A'}
-            ]
-        },
-        {
-            name: '金字塔',
-            type: 'funnel',
-            width: '40%',
-            height: '45%',
-            left: '5%',
-            top: '5%',
-            sort: 'ascending',
-            funnelAlign: 'right',
-
-            center: ['25%', '75%'],  // for pie
-
-            data: [
-                {value: 60, name: '产品C'},
-                {value: 30, name: '产品D'},
-                {value: 10, name: '产品E'},
-                {value: 80, name: '产品B'},
-                {value: 100, name: '产品A'}
-            ]
-        },
-        {
-            name: '漏斗图',
-            type: 'funnel',
-            width: '40%',
-            height: '45%',
-            left: '55%',
-            top: '5%',
-            funnelAlign: 'left',
-
-            center: ['75%', '25%'],  // for pie
-
-            data: [
-                {value: 60, name: '产品C'},
-                {value: 30, name: '产品D'},
-                {value: 10, name: '产品E'},
-                {value: 80, name: '产品B'},
-                {value: 100, name: '产品A'}
-            ]
-        },
-        {
-            name: '金字塔',
-            type: 'funnel',
-            width: '40%',
-            height: '45%',
-            left: '55%',
-            top: '50%',
-            sort: 'ascending',
-            funnelAlign: 'left',
-
-            center: ['75%', '75%'],  // for pie
-
-            data: [
-                {value: 60, name: '产品C'},
-                {value: 30, name: '产品D'},
-                {value: 10, name: '产品E'},
-                {value: 80, name: '产品B'},
-                {value: 100, name: '产品A'}
-            ]
-        }
-    ]
-};
diff --git a/public/data/funnel-customize.js b/public/data/funnel-customize.js
deleted file mode 100644
index 38d49f9..0000000
--- a/public/data/funnel-customize.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-title: Customized Funnel
-category: funnel
-titleCN: 漏斗图
-*/
-
-option = {
-    title: {
-        text: '漏斗图',
-        subtext: '纯属虚构'
-    },
-    tooltip: {
-        trigger: 'item',
-        formatter: "{a} <br/>{b} : {c}%"
-    },
-    toolbox: {
-        feature: {
-            dataView: {readOnly: false},
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    legend: {
-        data: ['展现','点击','访问','咨询','订单']
-    },
-    series: [
-        {
-            name: '预期',
-            type: 'funnel',
-            left: '10%',
-            width: '80%',
-            label: {
-                formatter: '{b}预期'
-            },
-            labelLine: {
-                show: false
-            },
-            itemStyle: {
-                opacity: 0.7
-            },
-            emphasis: {
-                label: {
-                    position: 'inside',
-                    formatter: '{b}预期: {c}%'
-                }
-            },
-            data: [
-                {value: 60, name: '访问'},
-                {value: 40, name: '咨询'},
-                {value: 20, name: '订单'},
-                {value: 80, name: '点击'},
-                {value: 100, name: '展现'}
-            ]
-        },
-        {
-            name: '实际',
-            type: 'funnel',
-            left: '10%',
-            width: '80%',
-            maxSize: '80%',
-            label: {
-                position: 'inside',
-                formatter: '{c}%',
-                color: '#fff'
-            },
-            itemStyle: {
-                opacity: 0.5,
-                borderColor: '#fff',
-                borderWidth: 2
-            },
-            emphasis: {
-                label: {
-                    position: 'inside',
-                    formatter: '{b}实际: {c}%'
-                }
-            },
-            data: [
-                {value: 30, name: '访问'},
-                {value: 10, name: '咨询'},
-                {value: 5, name: '订单'},
-                {value: 50, name: '点击'},
-                {value: 80, name: '展现'}
-            ],
-            // Ensure outer shape will not be over inner shape when hover.
-            z: 100
-        }
-    ]
-};
diff --git a/public/data/funnel-mutiple.js b/public/data/funnel-mutiple.js
deleted file mode 100644
index eeb802d..0000000
--- a/public/data/funnel-mutiple.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-title: Multiple Funnels
-category: funnel
-titleCN: 漏斗图
-*/
-
-option = {
-    title: {
-        text: '漏斗图',
-        subtext: '纯属虚构',
-        left: 'left',
-        top: 'bottom'
-    },
-    tooltip: {
-        trigger: 'item',
-        formatter: '{a} <br/>{b} : {c}%'
-    },
-    toolbox: {
-        orient: 'vertical',
-        top: 'center',
-        feature: {
-            dataView: {readOnly: false},
-            restore: {},
-            saveAsImage: {}
-        }
-    },
-    legend: {
-        orient: 'vertical',
-        left: 'left',
-        data: ['展现', '点击', '访问', '咨询', '订单']
-    },
-
-    series: [
-        {
-            name: '漏斗图',
-            type: 'funnel',
-            width: '40%',
-            height: '45%',
-            left: '5%',
-            top: '50%',
-            data: [
-                {value: 60, name: '访问'},
-                {value: 30, name: '咨询'},
-                {value: 10, name: '订单'},
-                {value: 80, name: '点击'},
-                {value: 100, name: '展现'}
-            ]
-        },
-        {
-            name: '金字塔',
-            type: 'funnel',
-            width: '40%',
-            height: '45%',
-            left: '5%',
-            top: '5%',
-            sort: 'ascending',
-            data: [
-                {value: 60, name: '访问'},
-                {value: 30, name: '咨询'},
-                {value: 10, name: '订单'},
... 20132 lines suppressed ...

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org