diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa715ed --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +simul_data + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..20d15cb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.linting.pylintEnabled": false +} \ No newline at end of file diff --git a/FlaskTest/.app.py.swp b/FlaskTest/.app.py.swp new file mode 100644 index 0000000..9974f81 Binary files /dev/null and b/FlaskTest/.app.py.swp differ diff --git a/FlaskTest/app.py b/FlaskTest/app.py new file mode 100644 index 0000000..0eccd45 --- /dev/null +++ b/FlaskTest/app.py @@ -0,0 +1,167 @@ +from flask import Flask, render_template +app = Flask (__name__) + + +data= { + "main_repo" : + [{ + "name" : "Simul-scan", + "summary" : "Summary: This project is about making Zebra really fast and efficient", + "description" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "visualizations" : + [ + { + "heatmap" : { + "divID" : "heatmap", + "title" : "Commits by Hour of Week - dummy data", + # NOTE these paths are relative to where the script.js file is + "data_path1" :'data/test_repo/data_dummy.tsv', + "data_path2" : 'data/test_repo/data_dummy2.tsv', + "summary" : "This data shows cool stuff", + "description" : "As you van see, this data focuses on business hours", + "timestamp" : "System last updated at 11:34am" + }, + "barchart" : { + "divID" : "day_of_week", + "title" : "# Commits by day - real data", + "data_path" : "data/test_repo/day_of_week_copy.tsv", + "summary" : "Bar Chart", + "description" : "What week is this from? Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "timestamp" : "System last updated at 11:34am" + }, + "linegraph1" : { + "divID" : "lineChart1", + "title" : "Commits per Author - real data", + "data_path" : "data/test_repo/commits_by_author_copy.tsv", + "summary" : "Multi Series Line Chart", + "description" : "Theres a few authors on this project but 1 stands out", + "timestamp" : "System last updated at 11:34am" + }, + "linegraph2" : { + "divID" : "lineChart2", + "title" : "Commits per Author - real data", + "data_path" : "data/test_repo/lines_of_code_by_author_copy.tsv", + "summary" : "Multi Series Line Chart", + "description" : "Theres a few authors on this project but 1 stands out", + "timestamp" : "System last updated at 11:34am" + } + } + ] + }], + + "sub_repos" : + [ + # each of these is going to be a sub-repo + { + "name" : "sub-1", + "summary" : "Test Summary1", + "description" : "Test Description 1", + "visualizations" : + [ + { + "heatmap" : { + "divID" : "heatmap", + "title" : "Commits by Hour of Week - dummy data", + # NOTE these paths are relative to where the script.js file is + "data_path1" : "data/test_repo/data_dummy.tsv", + "data_path2" : "data/test_repo/data2_dummy.tsv", + "summary" : "This data shows cool stuff", + "description" : "As you van see, this data focuses on business hours", + "timestamp" : "System last updated at 11:34am" + }, + "barchart" : { + "divID" : "day_of_week", + "title" : "# Commits by day - real data", + "data_path" : "data/test_repo/day_of_week_copy.tsv", + "summary" : "Bar Chart", + "description" : "What week is this from? Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "timestamp" : "System last updated at 11:34am" + }, + "linegraph1" : { + "divID" : "lineChart1", + "title" : "Commits per Author - real data", + "data_path" : "data/test_repo/commits_by_author_copy.tsv", + "summary" : "Multi Series Line Chart", + "description" : "Theres a few authors on this project but 1 stands out", + "timestamp" : "System last updated at 11:34am" + }, + "linegraph2" : { + "divID" : "lineChart2", + "title" : "Commits per Author - real data", + "data_path" : "data/test_repo/lines_of_code_by_author_copy.tsv", + "summary" : "Multi Series Line Chart", + "description" : "Theres a few authors on this project but 1 stands out", + "timestamp" : "System last updated at 11:34am" + } + } + ] + }, + { + "name" : "sub-2", + "summary" : "Test Summary 2", + "description" : "Test Description 2", + "visualizations" : + [ + { + "heatmap" : { + "divID" : "heatmap", + "title" : "Commits by Hour of Week - dummy data", + # NOTE these paths are relative to where the script.js file is + "data_path1" : "data/test_repo/data_dummy.tsv", + "data_path2" : "data/test_repo/data2_dummy.tsv", + "summary" : "This data shows cool stuff", + "description" : "As you van see, this data focuses on business hours", + "timestamp" : "System last updated at 11:34am" + }, + "barchart" : { + "divID" : "day_of_week", + "title" : "# Commits by day - real data", + "data_path" : "data/test_repo/day_of_week_copy.tsv", + "summary" : "Bar Chart", + "description" : "What week is this from? Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", + "timestamp" : "System last updated at 11:34am" + }, + "linegraph1" : { + "divID" : "lineChart1", + "title" : "Commits per Author - real data", + "data_path" : "data/test_repo/commits_by_author_copy.tsv", + "summary" : "Multi Series Line Chart", + "description" : "Theres a few authors on this project but 1 stands out", + "timestamp" : "System last updated at 11:34am" + }, + "linegraph2" : { + "divID" : "lineChart2", + "title" : "Commits per Author - real data", + "data_path" : "data/test_repo/lines_of_code_by_author_copy.tsv", + "summary" : "Multi Series Line Chart", + "description" : "Theres a few authors on this project but 1 stands out", + "timestamp" : "System last updated at 11:34am" + } + } + ] + } + ] +} + +@app.route('/dashboard/') +def sub_repo(repo): + global data + sub_repo_data= None + for sub_repo in data['sub_repos']: + if sub_repo['name'] == repo: + #this should happen in one case, else this isnt a valid sub repo... + sub_repo_data=sub_repo + return render_template("dashboard.html", sub=sub_repo_data, nav=data) + +@app.route("/dashboard") +def dashboard(): + global data + main_repo=data['main_repo'][0] + return render_template("dashboard.html", sub=main_repo, nav=data ) + + + + +if __name__ == "__main__": + app.run() + diff --git a/FlaskTest/bash.exe.stackdump b/FlaskTest/bash.exe.stackdump new file mode 100644 index 0000000..a0f4283 --- /dev/null +++ b/FlaskTest/bash.exe.stackdump @@ -0,0 +1,19 @@ +Stack trace: +Frame Function Args +000FFFF5B20 0018005D14C (000FFFFE3F4, 0000000F7D4, 00000000F14, 000FFFFDE50) +000FFFF5BC0 0018005E74B (001800A9B05, 00000000000, 00000000CA8, 00000000000) +000FFFF5E10 00180121F60 (001801FEA40, 00000000068, 00000000000, 006FFFFFFB7) +000FFFF6070 00180122549 (000FFFF5FF0, 00000000001, 00000000001, 00180361338) +000FFFF6070 001800AAC8C (000FFFF6320, 000FFFF656C, 000FFFF62A8, 00000000000) +000FFFF6270 0018011A60B (000FFFF6320, 000FFFF656C, 000FFFF62A8, 00000000000) +000FFFF6270 00100428FB2 (000000015F0, 00000000000, 001005F1F98, 00000000000) +00000000001 0010043257E (00600149670, 00600051000, 001800BA52C, 00000000000) +0060004AAE0 00100437B8A (00600051000, 0060021FA97, 00000000076, 000FFFF6578) +00600051000 00100438BE4 (00000000001, 00600000000, 000FFFF66B8, 00000000000) +00600220250 00100439A7C (00000000000, 00000000000, 00000000000, 00000000000) +001005F6B74 0010043A3E6 (00000000083, 00000000009, 0060021F220, 0060021FA20) +001005F6B74 0010043A53F (001800F2D60, 03000000000, 000801FE8D0, 0060021F220) +001005F6B74 001004337B1 (00100000000, 0010043A4E0, 006002124C0, 006002124C0) +0060021F220 00100433C41 (00000000000, 000FFFFFF01, 00000000000, 001004DB7B8) +0060021F380 0010043C2C7 (0000000001F, 0000000012C, 00000000000, 000FFFFFFFF) +End of stack trace (more stack frames may be present) diff --git a/FlaskTest/static/css/style.css b/FlaskTest/static/css/style.css new file mode 100644 index 0000000..dec1db3 --- /dev/null +++ b/FlaskTest/static/css/style.css @@ -0,0 +1,197 @@ +@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400,700'); +@import url('//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css'); + +/*side bar menu*/ +.sidebar-toggle { + margin-left: -240px; +} +.sidebar { + width: 240px; + height: 100%; + + /*background: #293949;*/ + + background: #000; + background: -moz-linear-gradient(-45deg,#000 0,#ffff00 100%); + background: -webkit-linear-gradient(-45deg,#000 0,#ffff00 100%); + background: linear-gradient(135deg,#000 0,#ffff00 100%); + + + position: fixed; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + z-index: 100; + /*top:80px;*/ +} +.sidebar #leftside-navigation ul, +.sidebar #leftside-navigation ul ul { + margin: -2px 0 0; + padding: 0; +} +.sidebar #leftside-navigation ul li { + list-style-type: none; + border-bottom: 1px solid rgba(255, 255, 255, 0.05); +} +.sidebar #leftside-navigation ul li.active > a { + color: #1abc9c; +} +.sidebar #leftside-navigation ul li.active ul { + display: block; +} +.sidebar #leftside-navigation ul li a { + color: #FFD200; + text-decoration: none; + display: block; + padding: 18px 0 18px 25px; + font-size: 12px; + outline: 0; + -webkit-transition: all 200ms ease-in; + -moz-transition: all 200ms ease-in; + -o-transition: all 200ms ease-in; + -ms-transition: all 200ms ease-in; + transition: all 200ms ease-in; +} +.sidebar #leftside-navigation ul li a:hover { + color: #1abc9c; +} +.sidebar #leftside-navigation ul li a span { + display: inline-block; +} +.sidebar #leftside-navigation ul li a i { + width: 20px; +} +.sidebar #leftside-navigation ul li a i .fa-angle-left, +.sidebar #leftside-navigation ul li a i .fa-angle-right { + padding-top: 3px; +} +.sidebar #leftside-navigation ul ul { + display: none; +} +.sidebar #leftside-navigation ul ul li { + /*background: #23313f;*/ + margin-bottom: 0; + margin-left: 0; + margin-right: 0; + border-bottom: none; +} +.sidebar #leftside-navigation ul ul li a { + font-size: 12px; + padding-top: 13px; + padding-bottom: 13px; + /*color: #aeb2b7;*/ + color: #eee; +} + +/*end menu*/ + + +/*tile SVG */ + +rect.bordered { + stroke: #E6E6E6; + stroke-width:2px; +} + +text.mono { + font-size: 9pt; + font-family: Consolas, courier; + fill: #aaa; +} + +text.axis-workweek { + fill: #000; +} + +text.axis-worktime { + fill: #000; +} +div.tooltip { + position: absolute; + text-align: center; + width: 80px; + height: 50px; + padding: 2px; + font: 12px sans-serif; + background: lightsteelblue; + border: 0px; + border-radius: 8px; + pointer-events: none; +} + +/*day_of_week svg*/ +div.rect_tooltip { + position: absolute; + text-align: center; + width: 80px; + height: 35px; + padding: 2px; + font: 12px sans-serif; + background: orange; + border: 0px; + border-radius: 8px; + pointer-events: none; +} + + + + + + +/*end svg + + +/*dashboard styling*/ + +.main_dash{ + padding-left: 250px; + padding-top: 30px; +} + +.zebra_img{ + width:100px; + height:30px; +} +.black{ + background-color: #222; + border-color: #080808; + position: fixed; +} +.top_spacer{ + margin-top:2%; +} +.details_spacer{ + padding: 25px 0 0 0; + border-top:1px solid #cecece; +} +.text_content{ + padding: 10px 0px; +} +.metric{ + height: 400px; +} +.drop-shadow{ + box-shadow: 1px 1px 5px #888888; +} + + + +/*line chart*/ +.axis--x path { + display: none; +} + +.line { + fill: none; + stroke-width: 1.5px; +} +.grid line { + stroke: lightgrey; + stroke-opacity: 0.7; + shape-rendering: crispEdges; +} +.grid path { + stroke-width: 0; +} \ No newline at end of file diff --git a/FlaskTest/static/data/commits_by_author.dat b/FlaskTest/static/data/commits_by_author.dat new file mode 100644 index 0000000..2081ef2 --- /dev/null +++ b/FlaskTest/static/data/commits_by_author.dat @@ -0,0 +1,616 @@ +1392392111 16 0 0 0 0 0 0 +1392397527 17 0 0 0 0 0 0 +1392830779 18 0 0 0 0 0 0 +1392841719 19 0 0 0 0 0 0 +1392844458 20 0 0 0 0 0 0 +1392852040 21 0 0 0 0 0 0 +1392933375 22 0 0 0 0 0 0 +1393016220 23 0 0 0 0 0 0 +1393018032 24 0 0 0 0 0 0 +1393272179 25 0 0 0 0 0 0 +1393356877 26 0 0 0 0 0 0 +1393357414 27 0 0 0 0 0 0 +1393437911 28 0 0 0 0 0 0 +1393442422 29 0 0 0 0 0 0 +1393515175 30 0 0 0 0 0 0 +1393531146 31 0 0 0 0 0 0 +1393532869 32 0 0 0 0 0 0 +1393534919 33 0 0 0 0 0 0 +1393540722 34 0 0 0 0 0 0 +1393861723 35 0 0 0 0 0 0 +1394035569 36 0 0 0 0 0 0 +1394039661 37 0 0 0 0 0 0 +1394054732 38 0 0 0 0 0 0 +1394055920 39 0 0 0 0 0 0 +1394056588 40 0 0 0 0 0 0 +1394119672 41 0 0 0 0 0 0 +1394125181 42 0 0 0 0 0 0 +1394145913 43 0 0 0 0 0 0 +1394460626 44 0 0 0 0 0 0 +1394465228 45 0 0 0 0 0 0 +1394467610 46 0 0 0 0 0 0 +1394470538 47 0 0 0 0 0 0 +1394478517 48 0 0 0 0 0 0 +1394487470 49 0 0 0 0 0 0 +1394546208 50 0 0 0 0 0 0 +1394549933 51 0 0 0 0 0 0 +1394573638 52 0 0 0 0 0 0 +1394730184 53 0 0 0 0 0 0 +1394732727 55 0 0 0 0 0 0 +1395071699 56 0 0 0 0 0 0 +1395080218 57 0 0 0 0 0 0 +1395084092 58 0 0 0 0 0 0 +1395243935 59 0 0 0 0 0 0 +1395261876 60 0 0 0 0 0 0 +1395324514 61 0 0 0 0 0 0 +1395347240 62 0 0 0 0 0 0 +1395418555 63 0 0 0 0 0 0 +1395675797 64 0 0 0 0 0 0 +1395682889 65 0 0 0 0 0 0 +1395687258 66 0 0 0 0 0 0 +1395687758 67 0 0 0 0 0 0 +1395695371 68 0 0 0 0 0 0 +1395759924 69 0 0 0 0 0 0 +1395781761 70 0 0 0 0 0 0 +1395931149 71 0 0 0 0 0 0 +1395955619 72 0 0 0 0 0 0 +1396017083 73 0 0 0 0 0 0 +1396018452 74 0 0 0 0 0 0 +1396033193 78 0 0 0 0 0 0 +1396034898 79 0 0 0 0 0 0 +1396036712 80 0 0 0 0 0 0 +1396293025 81 0 0 0 0 0 0 +1396379166 82 0 0 0 0 0 0 +1396379379 83 0 0 0 0 0 0 +1396469103 84 0 0 0 0 0 0 +1396469896 85 0 0 0 0 0 0 +1396472129 86 0 0 0 0 0 0 +1396474065 87 0 0 0 0 0 0 +1396541016 88 0 0 0 0 0 0 +1396638448 89 0 0 0 0 0 0 +1396639995 90 0 0 0 0 0 0 +1396885855 91 0 0 0 0 0 0 +1396899853 92 0 0 0 0 0 0 +1396984335 94 0 0 0 0 0 0 +1397247297 95 0 0 0 0 0 0 +1397248748 96 0 0 0 0 0 0 +1397484607 97 0 0 0 0 0 0 +1397491609 98 0 0 0 0 0 0 +1397501654 99 0 0 0 0 0 0 +1397502552 100 0 0 0 0 0 0 +1397508171 101 0 0 0 0 0 0 +1397593977 102 0 0 0 0 0 0 +1397596834 103 0 0 0 0 0 0 +1397681905 104 0 0 0 0 0 0 +1397747221 105 0 0 0 0 0 0 +1397751241 106 0 0 0 0 0 0 +1397754140 107 0 0 0 0 0 0 +1398106573 108 0 0 0 0 0 0 +1398190593 109 0 0 0 0 0 0 +1398265425 110 0 0 0 0 0 0 +1398265460 111 0 0 0 0 0 0 +1398268479 112 0 0 0 0 0 0 +1398271735 113 0 0 0 0 0 0 +1398278671 114 0 0 0 0 0 0 +1398282984 115 0 0 0 0 0 0 +1398373748 116 0 0 0 0 0 0 +1398434861 117 0 0 0 0 0 0 +1398437720 118 0 0 0 0 0 0 +1398697019 119 0 0 0 0 0 0 +1398699790 120 0 0 0 0 0 0 +1398715690 121 0 0 0 0 0 0 +1398716189 122 0 0 0 0 0 0 +1398718090 123 0 0 0 0 0 0 +1398797186 124 0 0 0 0 0 0 +1398799360 125 0 0 0 0 0 0 +1398800327 129 0 0 0 0 0 0 +1399305448 130 0 0 0 0 0 0 +1399315892 131 0 0 0 0 0 0 +1399315910 132 0 0 0 0 0 0 +1399316102 133 0 0 0 0 0 0 +1399387116 134 0 0 0 0 0 0 +1399388283 135 0 0 0 0 0 0 +1399389375 136 0 0 0 0 0 0 +1399564137 137 0 0 0 0 0 0 +1399666061 138 0 0 0 0 0 0 +1399905905 140 0 0 0 0 0 0 +1399991114 141 0 0 0 0 0 0 +1400189261 142 0 0 0 0 0 0 +1400529215 144 0 0 0 0 0 0 +1401293283 145 0 0 0 0 0 0 +1401296335 146 0 0 0 0 0 0 +1401386785 147 0 0 0 0 0 0 +1402341065 148 0 0 0 0 0 0 +1402342238 149 0 0 0 0 0 0 +1402428124 150 0 0 0 0 0 0 +1402431333 151 0 0 0 0 0 0 +1402511788 152 0 0 0 0 0 0 +1402512041 153 0 0 0 0 0 0 +1402595862 154 0 0 0 0 0 0 +1403192924 155 0 0 0 0 0 0 +1403206094 157 0 0 0 0 0 0 +1403280442 158 0 0 0 0 0 0 +1403535284 159 0 0 0 0 0 0 +1403541811 160 0 0 0 0 0 0 +1403636781 161 0 0 0 0 0 0 +1403637528 162 0 0 0 0 0 0 +1403724192 163 0 0 0 0 0 0 +1403732386 164 0 0 0 0 0 0 +1404142813 165 0 0 0 0 0 0 +1404248505 166 0 0 0 0 0 0 +1404915912 167 0 0 0 0 0 0 +1404923241 168 0 0 0 0 0 0 +1404923409 169 0 0 0 0 0 0 +1405002584 170 0 0 0 0 0 0 +1405003854 171 0 0 0 0 0 0 +1405021172 172 0 0 0 0 0 0 +1405023400 173 0 0 0 0 0 0 +1405113290 174 0 0 0 0 0 0 +1405348976 175 0 0 0 0 0 0 +1405361989 176 0 0 0 0 0 0 +1405364123 177 0 0 0 0 0 0 +1405447703 178 0 0 0 0 0 0 +1405540116 179 0 0 0 0 0 0 +1406040988 180 0 0 0 0 0 0 +1406041836 181 0 0 0 0 0 0 +1406052691 182 0 0 0 0 0 0 +1406055617 183 0 0 0 0 0 0 +1406055678 184 0 0 0 0 0 0 +1406225786 185 0 0 0 0 0 0 +1406231654 186 0 0 0 0 0 0 +1406235975 191 0 0 0 0 0 0 +1406297884 192 0 0 0 0 0 0 +1406312943 194 0 0 0 0 0 0 +1406325886 195 0 0 0 0 0 0 +1406563924 196 0 0 0 0 0 0 +1406564839 197 0 0 0 0 0 0 +1406670247 198 0 0 0 0 0 0 +1406734781 199 0 0 0 0 0 0 +1406754307 200 0 0 0 0 0 0 +1406834212 201 0 0 0 0 0 0 +1407185931 202 0 0 0 0 0 0 +1407255136 203 0 0 0 0 0 0 +1407268137 204 0 0 0 0 0 0 +1408040736 205 0 0 0 0 0 0 +1408138667 206 0 0 0 0 0 0 +1408481183 207 0 0 0 0 0 0 +1408976252 208 0 0 0 0 0 0 +1408976366 209 0 0 0 0 0 0 +1408976476 210 0 0 0 0 0 0 +1408983121 211 0 0 0 0 0 0 +1409078217 212 0 0 0 0 0 0 +1409244667 213 0 0 0 0 0 0 +1409253116 215 0 0 0 0 0 0 +1409259944 216 0 0 0 0 0 0 +1409672806 218 0 0 0 0 0 0 +1410206464 219 0 0 0 0 0 0 +1410207080 220 0 0 0 0 0 0 +1410287098 221 0 0 0 0 0 0 +1410551535 222 0 0 0 0 0 0 +1411486906 223 0 0 0 0 0 0 +1411658801 226 0 0 0 0 0 0 +1412085855 227 0 0 0 0 0 0 +1412093603 229 0 0 0 0 0 0 +1412103242 230 0 0 0 0 0 0 +1412103800 231 0 0 0 0 0 0 +1412106592 232 0 0 0 0 0 0 +1412110451 233 0 0 0 0 0 0 +1412110505 234 0 0 0 0 0 0 +1412110521 235 0 0 0 0 0 0 +1412171582 236 0 0 0 0 0 0 +1412178008 237 0 0 0 0 0 0 +1412182838 238 0 0 0 0 0 0 +1412265983 239 0 0 0 0 0 0 +1412275768 240 0 0 0 0 0 0 +1412369691 241 0 0 0 0 0 0 +1412625476 242 0 0 0 0 0 0 +1412715931 243 0 0 0 0 0 0 +1413222749 245 0 0 0 0 0 0 +1414522504 247 0 0 0 0 0 0 +1415144579 248 0 0 0 0 0 0 +1415218924 249 0 0 0 0 0 0 +1415219022 250 0 0 0 0 0 0 +1415220994 252 0 0 0 0 0 0 +1415319788 253 0 0 0 0 0 0 +1415319862 254 0 0 0 0 0 0 +1415321087 255 0 0 0 0 0 0 +1415395231 256 0 0 0 0 0 0 +1415649515 257 0 0 0 0 0 0 +1415652685 258 0 0 0 0 0 0 +1415717488 259 0 0 0 0 0 0 +1415724534 260 0 0 0 0 0 0 +1415726692 261 0 0 0 0 0 0 +1415728253 262 0 0 0 0 0 0 +1415734870 263 0 0 0 0 0 0 +1415736053 264 0 0 0 0 0 0 +1415738826 265 0 0 0 0 0 0 +1415742817 266 0 0 0 0 0 0 +1415745888 267 0 0 0 0 0 0 +1415823605 268 0 0 0 0 0 0 +1415832007 269 0 0 0 0 0 0 +1416239521 270 0 0 0 0 0 0 +1416245778 271 0 0 0 0 0 0 +1416350686 272 0 0 0 0 0 0 +1416612373 273 0 0 0 0 0 0 +1417464052 274 0 0 0 0 0 0 +1417464390 275 0 0 0 0 0 0 +1417534843 276 0 0 0 0 0 0 +1417549520 277 0 0 0 0 0 0 +1417553492 278 0 0 0 0 0 0 +1417564577 279 0 0 0 0 0 0 +1417640760 280 0 0 0 0 0 0 +1418053512 281 0 0 0 0 0 0 +1418318204 282 0 0 0 0 0 0 +1418318222 283 0 0 0 0 0 0 +1418318240 284 0 0 0 0 0 0 +1418318297 285 0 0 0 0 0 0 +1418318361 286 0 0 0 0 0 0 +1418318417 287 0 0 0 0 0 0 +1418318440 288 0 0 0 0 0 0 +1418318684 290 0 0 0 0 0 0 +1418421690 291 0 0 0 0 0 0 +1418421802 294 0 0 0 0 0 0 +1418746234 295 0 0 0 0 0 0 +1418746500 296 0 0 0 0 0 0 +1418752434 297 0 0 0 0 0 0 +1418755439 298 0 0 0 0 0 0 +1418849653 299 0 0 0 0 0 0 +1418918217 300 0 0 0 0 0 0 +1418940694 301 0 0 0 0 0 0 +1418941834 302 0 0 0 0 0 0 +1419356537 308 0 0 0 0 0 0 +1421161999 309 0 0 0 0 0 0 +1421164187 310 0 0 0 0 0 0 +1421170472 311 0 0 0 0 0 0 +1421182429 312 0 0 0 0 0 0 +1421186075 313 0 0 0 0 0 0 +1421333600 314 0 0 0 0 0 0 +1421362394 315 0 0 0 0 0 0 +1421781546 316 0 0 0 0 0 0 +1421794398 317 0 0 0 0 0 0 +1421858140 318 0 0 0 0 0 0 +1421861618 319 0 0 0 0 0 0 +1421865987 320 0 0 0 0 0 0 +1421870518 321 0 0 0 0 0 0 +1421942808 322 0 0 0 0 0 0 +1421965255 323 0 0 0 0 0 0 +1421965286 324 0 0 0 0 0 0 +1421966627 325 0 0 0 0 0 0 +1422288635 326 0 0 0 0 0 0 +1422288804 327 0 0 0 0 0 0 +1422289212 328 0 0 0 0 0 0 +1422289952 329 0 0 0 0 0 0 +1422290748 330 0 0 0 0 0 0 +1422291553 331 0 0 0 0 0 0 +1422310926 332 0 0 0 0 0 0 +1422372141 333 0 0 0 0 0 0 +1422375118 334 0 0 0 0 0 0 +1422384120 335 0 0 0 0 0 0 +1422386950 336 0 0 0 0 0 0 +1422387963 337 0 0 0 0 0 0 +1422463984 338 0 0 0 0 0 0 +1422478361 339 0 0 0 0 0 0 +1422481852 340 0 0 0 0 0 0 +1422544534 341 0 0 0 0 0 0 +1422565449 342 0 0 0 0 0 0 +1422569286 343 0 0 0 0 0 0 +1422569372 344 0 0 0 0 0 0 +1422861179 344 0 0 0 1 0 0 +1422894999 346 0 0 0 1 0 0 +1422989658 347 0 0 0 1 0 0 +1423167301 348 0 0 0 1 0 0 +1423585125 349 0 0 0 1 0 0 +1423590234 350 0 0 0 1 0 0 +1423596075 351 0 0 0 1 0 0 +1423603626 352 0 0 0 1 0 0 +1423672020 353 0 0 0 1 0 0 +1423753966 354 0 0 0 1 0 0 +1424114643 355 0 0 0 1 0 0 +1424188717 356 0 0 0 1 0 0 +1424193093 357 0 0 0 1 0 0 +1424201771 358 0 0 0 1 0 0 +1424273633 359 0 0 0 1 0 0 +1424279063 360 0 0 0 1 0 0 +1424280071 361 0 0 0 1 0 0 +1424281679 362 0 0 0 1 0 0 +1424288424 363 0 0 0 1 0 0 +1424288546 364 0 0 0 1 0 0 +1424295016 365 0 0 0 1 0 0 +1424465722 366 0 0 0 1 0 0 +1424466815 367 0 0 0 1 0 0 +1424467415 368 0 0 0 1 0 0 +1424712442 369 0 0 0 1 0 0 +1424716942 370 0 0 0 1 0 0 +1424721680 371 0 0 0 1 0 0 +1424791974 372 0 0 0 1 0 0 +1424796525 373 0 0 0 1 0 0 +1424798803 374 0 0 0 1 0 0 +1424798945 375 0 0 0 1 0 0 +1424803751 376 0 0 0 1 0 0 +1424810387 377 0 0 0 1 0 0 +1424810657 378 0 0 0 1 0 0 +1424816551 379 0 0 0 1 0 0 +1424818066 380 0 0 0 1 0 0 +1424878655 381 0 0 0 1 0 0 +1424884467 382 0 0 0 1 0 0 +1424884849 383 0 0 0 1 0 0 +1424892815 384 0 0 0 1 0 0 +1424898072 385 0 0 0 1 0 0 +1425051573 386 0 0 0 1 0 0 +1425067581 387 0 0 0 1 0 0 +1425067690 388 0 0 0 1 0 0 +1425077014 389 0 0 0 1 0 0 +1425309326 390 0 0 0 1 0 0 +1425313422 391 0 0 0 1 0 0 +1425329531 392 0 0 0 1 0 0 +1425337212 393 0 0 0 1 0 0 +1425342674 394 0 0 0 1 0 0 +1425914337 395 0 0 0 1 0 0 +1425917461 396 0 0 0 1 0 0 +1425999980 397 0 0 0 1 0 0 +1426267819 398 0 0 0 1 0 0 +1426273408 399 0 0 0 1 0 0 +1426280545 400 0 0 0 1 0 0 +1426628250 402 0 0 0 1 0 0 +1426778183 403 0 0 0 1 0 0 +1426791438 404 0 0 0 1 0 0 +1426803375 405 0 0 0 1 0 0 +1426804222 406 0 0 0 1 0 0 +1426890119 407 0 0 0 1 0 0 +1427129667 408 0 0 0 1 0 0 +1427133177 409 0 0 0 1 0 0 +1427135813 410 0 0 0 1 0 0 +1427137830 411 0 0 0 1 0 0 +1427139221 412 0 0 0 1 0 0 +1427141290 413 0 0 0 1 0 0 +1427141834 414 0 0 0 1 0 0 +1427206811 415 0 0 0 1 0 0 +1427225995 416 0 0 0 1 0 0 +1427226516 417 0 0 0 1 0 0 +1427228366 419 0 0 0 1 0 0 +1427267795 419 0 0 0 2 0 0 +1427267837 419 0 0 0 3 0 0 +1427294459 420 0 0 0 3 0 0 +1427317966 421 0 0 0 3 0 0 +1427335799 422 0 0 0 3 0 0 +1427349002 422 0 0 0 4 0 0 +1427349639 422 0 0 0 5 0 0 +1427362185 422 0 0 0 6 0 0 +1427362305 422 0 0 0 7 0 0 +1427426891 424 0 0 0 8 0 0 +1427488267 425 0 0 0 8 0 0 +1427789357 425 0 0 0 9 0 0 +1427789410 426 0 0 0 10 0 0 +1427833035 427 0 0 0 10 0 0 +1427917146 428 0 0 0 10 0 0 +1427997681 429 0 0 0 10 0 0 +1428443057 430 0 0 0 10 0 0 +1428513842 431 0 0 0 10 0 0 +1428521668 432 0 0 0 10 0 0 +1428934715 433 0 0 0 10 0 0 +1429112004 434 0 0 0 10 0 0 +1429284766 435 0 0 0 10 0 0 +1429304949 436 0 0 0 10 0 0 +1429310422 437 0 0 0 10 0 0 +1430403827 438 0 0 0 10 0 0 +1431109116 438 1 0 0 10 0 0 +1431110062 439 2 0 0 10 0 0 +1431398393 439 3 0 0 10 0 0 +1432310614 439 4 0 0 10 0 0 +1432310966 439 5 0 0 10 0 0 +1432311075 439 6 0 0 10 0 0 +1432311088 439 7 0 0 10 0 0 +1432311100 439 8 0 0 10 0 0 +1432312050 439 9 0 0 10 0 0 +1432588799 439 9 1 0 10 0 0 +1432588896 439 9 2 0 10 0 0 +1432588954 439 9 3 0 10 0 0 +1432831392 439 10 3 0 10 0 0 +1432831427 439 11 3 0 10 0 0 +1432907636 439 12 3 0 10 0 0 +1432929105 439 13 3 0 10 0 0 +1433175771 439 14 3 0 10 0 0 +1433464018 439 14 4 0 10 0 0 +1433464310 439 14 5 0 10 0 0 +1434132785 439 15 5 0 10 0 0 +1434134581 439 16 5 0 10 0 0 +1434138920 439 17 5 0 10 0 0 +1434138982 439 18 5 0 10 0 0 +1434139189 439 19 5 0 10 0 0 +1434376340 439 20 5 0 10 0 0 +1435836687 439 21 5 0 10 0 0 +1435843824 439 22 5 0 10 0 0 +1436849943 439 22 5 0 10 1 0 +1438269784 439 23 5 0 10 1 0 +1438269918 439 24 5 0 10 1 0 +1438271263 439 25 5 0 10 1 0 +1438273348 439 26 5 0 10 1 0 +1438282294 439 27 5 0 10 1 0 +1438303550 439 28 5 0 10 1 0 +1439397263 439 29 5 0 10 1 0 +1439399146 439 30 5 0 10 1 0 +1441737290 439 31 5 0 10 1 0 +1442267605 439 32 5 0 10 1 0 +1442597513 439 34 5 0 10 1 0 +1442954764 439 35 5 0 10 1 0 +1443018794 439 36 5 0 10 1 0 +1443031570 439 37 5 0 10 1 0 +1443032056 439 38 5 0 10 1 0 +1443119585 439 39 5 0 10 1 0 +1443711951 439 40 5 0 10 1 0 +1443798856 439 41 5 0 10 1 0 +1449685453 439 42 5 0 10 1 0 +1450283272 439 43 5 0 10 1 0 +1450664183 439 44 5 0 10 1 0 +1450666600 439 45 5 0 10 1 0 +1452027169 439 45 6 0 10 1 0 +1452028386 439 45 7 0 10 1 0 +1452200566 439 45 8 0 10 1 0 +1452207430 439 45 9 0 10 1 0 +1452207602 439 47 10 0 10 1 0 +1452212539 439 48 10 0 10 1 0 +1452280833 439 48 11 0 10 1 0 +1452793688 439 49 11 0 10 1 0 +1453224499 439 50 11 0 10 1 0 +1453225168 439 52 11 0 10 1 0 +1453230613 439 53 11 0 10 1 0 +1453323055 439 54 11 0 10 1 0 +1453493571 439 55 11 0 10 1 0 +1453704637 439 55 11 0 10 1 1 +1453825100 439 56 11 0 10 1 1 +1453837575 439 60 11 0 10 1 1 +1453848840 439 61 11 0 10 1 1 +1453953447 439 63 12 0 10 1 1 +1454689867 439 63 13 0 10 1 1 +1455057770 439 63 14 0 10 1 1 +1455660753 439 64 14 0 10 1 1 +1455830872 439 65 14 0 10 1 1 +1455831309 439 66 14 0 10 1 1 +1455831437 439 67 14 0 10 1 1 +1455894228 439 67 15 0 10 1 1 +1455897059 439 67 16 0 10 1 1 +1456110772 439 68 16 0 10 1 1 +1456266997 439 68 17 0 10 1 1 +1456267705 439 68 18 0 10 1 1 +1456269047 439 69 18 0 10 1 1 +1456506668 439 69 19 0 10 1 1 +1456806554 439 70 19 0 10 1 1 +1457141043 439 71 19 0 10 1 1 +1457452520 439 71 20 0 10 1 1 +1457488422 439 71 21 0 10 1 1 +1457563999 439 71 22 0 10 1 1 +1457644085 439 71 23 0 10 1 1 +1457644884 439 71 24 0 10 1 1 +1457646092 439 71 25 0 10 1 1 +1457987370 439 72 25 0 10 1 1 +1457991490 439 72 26 0 10 1 1 +1458004818 439 73 26 0 10 1 1 +1458593314 439 74 26 0 10 1 1 +1458765547 439 75 26 0 10 1 1 +1458914088 439 76 26 0 10 1 1 +1458991612 439 77 26 0 10 1 1 +1459133960 439 78 26 0 10 1 1 +1460047216 439 79 26 0 10 1 1 +1460047380 439 81 27 0 10 1 1 +1460375644 439 83 28 0 10 1 1 +1460380408 439 85 30 0 10 1 1 +1460407428 439 86 30 0 10 1 1 +1460569764 439 86 31 0 10 1 1 +1461074070 439 87 31 0 10 1 1 +1461270656 439 88 32 0 10 1 1 +1461354039 439 88 33 0 10 1 1 +1461551595 439 89 33 0 10 1 1 +1461552637 439 90 33 0 10 1 1 +1462227334 439 91 33 0 10 1 1 +1463152815 439 91 34 0 10 1 1 +1463157617 439 91 35 0 10 1 1 +1463451445 439 91 36 0 10 1 1 +1463451804 439 91 37 0 10 1 1 +1463680867 439 92 37 0 10 1 1 +1463758054 439 93 37 0 10 1 1 +1464031184 439 94 37 0 10 1 1 +1464096601 439 95 37 0 10 1 1 +1464208709 439 96 37 0 10 1 1 +1464237088 439 97 37 0 10 1 1 +1464237194 439 98 37 0 10 1 1 +1464293889 439 99 37 0 10 1 1 +1464793340 439 100 38 0 10 1 1 +1464880180 439 101 38 0 10 1 1 +1464895801 439 102 38 0 10 1 1 +1464902654 439 103 38 0 10 1 1 +1465319220 439 104 39 0 10 1 1 +1465424498 439 105 39 0 10 1 1 +1466648922 439 106 39 0 10 1 1 +1466649684 439 107 39 0 10 1 1 +1466650102 439 108 39 0 10 1 1 +1466701155 439 109 39 0 10 1 1 +1466735347 439 110 39 0 10 1 1 +1466736165 439 111 40 0 10 1 1 +1468180054 439 114 41 0 10 1 1 +1468292316 439 114 42 0 10 1 1 +1468876762 439 114 43 0 10 1 1 +1468876920 439 114 44 0 10 1 1 +1469121939 439 114 45 0 10 1 1 +1469157573 439 115 45 0 10 1 1 +1469552934 439 115 46 0 10 1 1 +1469589171 439 116 47 0 10 1 1 +1469640240 439 117 47 0 10 1 1 +1469723242 439 117 48 0 10 1 1 +1469725928 439 118 48 0 10 1 1 +1469780404 439 119 48 0 10 1 1 +1475506438 439 120 48 0 10 1 1 +1475508328 439 122 48 0 10 1 1 +1475605531 439 124 48 0 10 1 1 +1475759454 439 125 48 0 10 1 1 +1476301940 439 125 49 0 10 1 1 +1477421556 439 126 50 0 10 1 1 +1477427877 439 127 52 0 10 1 1 +1477433230 439 127 53 0 10 1 1 +1477694191 439 127 54 0 10 1 1 +1477939269 439 127 55 0 10 1 1 +1477941012 439 127 56 0 10 1 1 +1478115005 439 127 57 0 10 1 1 +1478288605 439 127 58 0 10 1 1 +1478551645 439 127 59 0 10 1 1 +1478792001 439 127 60 0 10 1 1 +1478814382 439 127 61 0 10 1 1 +1478816505 439 127 62 0 10 1 1 +1478878515 439 127 63 0 10 1 1 +1479419832 439 127 64 0 10 1 1 +1479846967 439 127 65 0 10 1 1 +1480530088 439 127 66 0 10 1 1 +1481670500 439 127 67 0 10 1 1 +1482181507 439 127 68 1 10 1 1 +1482336682 439 127 69 1 10 1 1 +1482340119 439 127 70 1 10 1 1 +1482353511 439 127 71 2 10 1 1 +1482359008 439 127 71 3 10 1 1 +1483455272 439 127 72 4 10 1 1 +1484342644 439 127 72 5 10 1 1 +1484684949 439 127 72 7 10 1 1 +1484772851 439 127 73 8 10 1 1 +1485799035 439 127 75 9 10 1 1 +1485877540 439 127 76 9 10 1 1 +1485877851 439 127 77 9 10 1 1 +1485877920 439 127 78 9 10 1 1 +1485878121 439 127 79 9 10 1 1 +1486146025 439 127 80 9 10 1 1 +1486412376 439 127 81 9 10 1 1 +1486499625 439 127 82 9 10 1 1 +1486755546 439 127 83 9 10 1 1 +1487109340 439 127 84 9 10 1 1 +1487277883 439 127 84 10 10 1 1 +1487783266 439 127 84 13 10 1 1 +1487946215 439 127 86 14 10 1 1 +1487965862 439 127 86 15 10 1 1 +1487966474 439 127 86 16 10 1 1 +1487966964 439 127 86 17 10 1 1 +1488313813 439 127 86 18 10 1 1 +1488406636 439 127 87 18 10 1 1 +1488407109 439 127 88 18 10 1 1 +1488409193 439 127 89 18 10 1 1 +1488560599 439 127 90 18 10 1 1 +1488773682 439 127 90 19 10 1 1 +1488814084 439 127 91 19 10 1 1 +1488815988 439 127 92 19 10 1 1 +1489686589 439 127 93 19 10 1 1 +1490023066 439 127 95 19 10 1 1 +1490035644 439 127 96 19 10 1 1 +1490041875 439 127 97 19 10 1 1 +1490113585 439 127 98 19 10 1 1 +1490120437 439 127 99 19 10 1 1 +1490128257 439 127 100 19 10 1 1 +1490645760 439 127 101 19 10 1 1 +1490725467 439 127 102 19 10 1 1 +1491336954 439 127 103 19 10 1 1 +1491341896 439 127 104 19 10 1 1 +1492026512 439 127 105 19 10 1 1 +1492107919 439 127 106 19 10 1 1 +1492108901 439 127 107 19 10 1 1 +1492435237 439 127 108 19 10 1 1 +1492435982 439 127 109 19 10 1 1 +1492454272 439 127 110 19 10 1 1 +1493052262 439 127 110 20 10 1 1 +1493153070 439 127 111 20 10 1 1 +1493407521 439 127 112 20 10 1 1 +1493412286 439 127 113 20 10 1 1 diff --git a/FlaskTest/static/data/commits_by_author_TEST.tsv b/FlaskTest/static/data/commits_by_author_TEST.tsv new file mode 100644 index 0000000..759ee35 --- /dev/null +++ b/FlaskTest/static/data/commits_by_author_TEST.tsv @@ -0,0 +1,303 @@ +date Heikki Hokkanen Schultz Wulf C. Krueger Matthieu Moy Tobias Gruetzmacher Sven van Haastregt tonylixu@gmail.com Jani Hur Alexander Strasser Tyler Nielsen Sylvain Joyeux Stephen Gordon Shixin Zeng Kirill Chilikin Thomas R. Koll Stephan Kuschel Stefano Mosconi Richard Russon (flatcap) Pekka Enberg Matt Parlane Karel Rank Jan Pieper Greg Schultz Ernesto Jiménez Diomidis Spinellis Craig R. Hughes Ciaran Gultnieks Chris Cormack Bo Ørsted Andresen Andrey Devyatkin Andrew Lazarus Andreas Motl +1185807283 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185808977 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185818707 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185889659 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185891247 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185893895 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185895453 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186056438 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186060740 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186061424 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186075404 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186076583 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186079641 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186080064 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186082479 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186247749 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186249588 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186313656 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186317145 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186317901 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186319152 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186320254 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186321284 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186321473 24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186321571 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186488178 26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186488361 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186489625 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186490927 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186491514 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186492107 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186492274 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186500578 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186500971 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186501365 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186502711 36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186502726 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186502755 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186504178 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186903388 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186912588 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186912602 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186925809 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186935276 44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186942728 45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187091141 46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187091932 47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187092886 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187094179 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187103706 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187103748 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187110904 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187112266 53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187116457 54 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187117020 55 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187262419 56 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187264126 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187264623 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187265574 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187266246 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187266270 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187267448 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187268966 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187269666 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187269687 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187270000 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187284177 67 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187698716 68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187700626 69 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187702069 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187710679 71 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187712076 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187712519 73 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187713375 74 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187721789 75 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187782159 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187782555 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187783627 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187805908 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187950777 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187951029 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187951241 82 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187952472 83 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187954119 84 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187957428 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187957468 86 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188309526 87 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188309604 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188399149 89 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188400278 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188404246 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188407057 92 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188407445 93 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189062176 94 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189063906 95 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189064198 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189064840 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189065000 98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189081957 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189150190 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189150379 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189152390 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189154241 103 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189155681 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189701013 105 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189701649 106 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189701775 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1214633111 107 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 +1214633112 107 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214638725 108 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214638988 109 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214640893 110 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214642323 111 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214642760 112 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214643336 113 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214646567 114 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214715483 115 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214715620 116 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1214715948 117 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1216052596 118 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1216053129 119 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1216053881 120 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1216128834 121 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1221401612 121 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1224364037 121 0 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1224531756 121 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1224597517 122 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1224599013 123 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1227341429 124 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1227341726 125 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1227342734 126 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1227345415 127 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1230016066 128 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1230017076 129 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1230017527 130 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1230018723 131 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1231950023 132 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1231950183 133 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1231950517 134 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 +1242557579 134 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245345947 135 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245347172 136 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245348455 137 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245348998 138 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245484804 139 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245500196 140 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245501876 141 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1245502479 142 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1252521237 143 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1256576008 144 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1256577884 145 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1256580463 146 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1257592281 147 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1260703742 148 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1260703816 149 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1260704572 150 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1260704988 151 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1260803527 152 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261583293 153 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261583622 154 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261583680 155 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261583734 156 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261583916 157 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261585946 158 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261589904 159 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261590596 160 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261597932 161 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261598663 162 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261599918 163 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261642812 164 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261643987 165 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261644398 166 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261645251 167 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261645599 168 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261646604 169 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261731600 170 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261733341 171 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261733487 172 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261734672 173 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261735020 174 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1261815612 175 0 0 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1262962164 175 0 1 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263080045 175 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263231357 176 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263484422 177 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263588014 178 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263588065 179 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263638185 180 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263645722 181 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263647019 182 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263648037 183 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263648098 184 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263650824 185 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263709246 186 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263710902 187 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263713165 188 0 2 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263746341 188 0 3 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1263747379 188 0 4 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1264922589 189 0 4 0 3 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1267226774 189 0 4 0 4 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1 +1269377539 189 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1270213285 190 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1270213584 191 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1270213658 192 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1270213921 193 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1276003631 194 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1276005398 195 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1276145510 196 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1277251503 196 0 4 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1277661324 196 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1279912829 197 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1281164815 198 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1281165936 199 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 0 1 +1285683641 199 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1287336441 200 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1287602087 201 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1294476259 202 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1294477431 203 0 5 0 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1294685092 204 0 5 2 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295074832 205 0 5 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295282151 206 0 5 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295285850 207 0 6 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295287285 208 0 6 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295287320 209 0 6 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295372806 210 0 6 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295450669 211 0 6 5 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1295453271 212 0 6 6 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1298043216 213 0 6 6 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1300729569 214 0 6 6 4 0 0 0 0 2 0 0 2 0 0 0 0 0 1 1 +1302027851 214 0 6 6 4 0 0 0 0 2 0 0 2 0 0 0 1 0 1 1 +1316030600 214 0 6 6 4 0 0 0 0 2 0 0 2 0 0 0 1 0 1 1 +1317151943 214 0 6 6 4 0 0 0 0 2 0 0 2 0 0 0 1 0 1 1 +1319398208 214 0 6 6 4 0 0 0 0 2 0 0 2 1 0 0 1 0 1 1 +1319398261 214 0 6 6 4 0 0 0 0 2 0 0 2 2 0 0 1 0 1 1 +1319552927 215 0 6 6 4 0 0 0 0 2 0 0 2 2 0 0 1 0 1 1 +1319555529 216 0 6 6 4 0 0 0 0 2 0 0 2 2 0 0 1 0 1 1 +1321775428 217 0 6 6 4 0 0 0 0 2 0 0 2 2 0 0 1 0 1 1 +1331239213 217 0 6 6 4 0 0 0 0 2 0 0 2 2 1 0 1 0 1 1 +1337522953 217 0 6 6 4 0 0 0 1 2 0 0 2 2 1 0 1 0 1 1 +1337603789 217 0 6 6 4 0 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1338230534 218 0 6 6 4 0 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1338230600 219 0 6 6 4 0 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342190955 220 0 6 6 4 0 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342192049 221 0 6 6 4 0 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342204925 222 0 6 6 4 0 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342299799 222 0 6 6 4 1 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342300020 222 0 6 6 4 2 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342348798 222 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342514334 223 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342556888 223 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1342692495 224 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1355773460 225 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1359401944 225 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1361690957 226 0 6 6 4 3 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1361691011 227 0 6 6 4 4 0 0 2 2 0 0 2 2 1 0 1 0 1 1 +1374589326 227 0 6 6 4 4 0 0 2 2 0 1 2 2 1 0 1 0 1 1 +1374590549 228 0 6 6 4 4 0 0 2 2 0 1 2 2 1 0 1 0 1 1 +1374866700 229 0 6 6 4 4 0 0 2 2 0 1 2 2 1 0 1 0 1 1 +1375108956 230 0 6 6 4 4 0 0 2 2 0 1 2 2 1 0 1 0 1 1 +1379816331 230 0 6 6 4 4 0 0 3 2 0 1 2 2 1 0 1 0 1 1 +1387631044 231 0 6 6 4 4 0 0 3 2 0 1 2 2 1 0 1 0 1 1 +1387631631 232 0 6 6 4 4 0 0 3 2 0 1 2 2 1 0 1 0 1 1 +1394467712 232 0 6 6 4 4 0 0 3 2 0 1 2 2 1 0 1 1 1 1 +1396097946 233 0 6 6 4 4 0 0 3 2 0 1 2 2 1 0 1 1 1 1 +1401796128 233 0 6 6 4 4 0 0 3 2 0 1 2 2 1 0 1 1 1 1 +1401816059 234 0 6 6 4 4 0 0 3 2 2 1 2 2 1 0 1 1 1 1 +1403019741 235 0 6 6 4 4 0 0 3 2 2 1 2 2 1 0 1 1 1 1 +1410533596 235 0 6 6 4 4 0 1 3 2 2 1 2 2 1 0 1 1 1 1 +1410589701 235 0 6 6 4 4 0 2 3 2 2 1 2 2 1 0 1 1 1 1 +1411191519 235 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1415377120 236 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1415377829 237 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1415378081 238 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1415378292 239 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1415378391 240 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1415379974 241 0 6 6 4 4 0 3 3 2 2 1 2 2 1 0 1 1 1 1 +1418093771 241 0 6 6 4 4 0 3 3 2 2 2 2 2 1 0 1 1 1 1 +1436896884 241 0 6 6 4 4 0 3 3 2 2 2 2 2 1 1 1 1 1 1 +1450893921 241 0 6 6 4 4 0 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496425653 241 1 6 6 4 4 0 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496427348 241 1 6 6 4 4 1 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496428228 241 1 6 6 4 4 2 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496428387 241 1 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496429976 241 1 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496780473 241 2 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496840449 241 3 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496846473 241 4 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496848539 241 5 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496849934 241 6 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496850086 241 7 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496850218 241 8 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496850300 241 9 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496855530 241 10 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496855862 241 11 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496856355 241 12 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496856488 241 13 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496856529 241 14 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496856621 241 15 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496856672 241 16 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496858304 241 17 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496858356 241 18 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 +1496858507 241 19 6 6 4 4 3 3 3 2 2 2 2 2 1 1 1 1 1 1 diff --git a/FlaskTest/static/data/day_of_week_TEST.tsv b/FlaskTest/static/data/day_of_week_TEST.tsv new file mode 100644 index 0000000..0458b8b --- /dev/null +++ b/FlaskTest/static/data/day_of_week_TEST.tsv @@ -0,0 +1,8 @@ +day_number day_name commits +1 Mon 148 +2 Tue 176 +3 Wed 120 +4 Thu 153 +5 Fri 101 +6 Sat 1 +7 Sun 12 diff --git a/FlaskTest/static/data/hour_of_week_TEST.tsv b/FlaskTest/static/data/hour_of_week_TEST.tsv new file mode 100644 index 0000000..a537f19 --- /dev/null +++ b/FlaskTest/static/data/hour_of_week_TEST.tsv @@ -0,0 +1,169 @@ +day hour value +1 0 0 +1 1 1 +1 2 1 +1 3 0 +1 4 0 +1 5 0 +1 6 0 +1 7 1 +1 8 0 +1 9 4 +1 10 19 +1 11 21 +1 12 15 +1 13 8 +1 14 16 +1 15 24 +1 16 16 +1 17 12 +1 18 2 +1 19 1 +1 20 1 +1 21 1 +1 22 4 +1 23 1 +2 0 1 +2 1 0 +2 2 0 +2 3 0 +2 4 2 +2 5 0 +2 6 0 +2 7 0 +2 8 0 +2 9 5 +2 10 20 +2 11 19 +2 12 16 +2 13 7 +2 14 27 +2 15 27 +2 16 23 +2 17 20 +2 18 5 +2 19 0 +2 20 1 +2 21 1 +2 22 0 +2 23 2 +3 0 0 +3 1 0 +3 2 0 +3 3 2 +3 4 0 +3 5 0 +3 6 0 +3 7 0 +3 8 0 +3 9 1 +3 10 5 +3 11 17 +3 12 17 +3 13 10 +3 14 12 +3 15 22 +3 16 17 +3 17 10 +3 18 2 +3 19 0 +3 20 0 +3 21 0 +3 22 5 +3 23 0 +4 0 2 +4 1 1 +4 2 1 +4 3 0 +4 4 0 +4 5 2 +4 6 0 +4 7 1 +4 8 0 +4 9 3 +4 10 11 +4 11 14 +4 12 26 +4 13 7 +4 14 14 +4 15 13 +4 16 21 +4 17 23 +4 18 3 +4 19 4 +4 20 3 +4 21 0 +4 22 2 +4 23 2 +5 0 0 +5 1 0 +5 2 0 +5 3 0 +5 4 1 +5 5 0 +5 6 0 +5 7 0 +5 8 0 +5 9 3 +5 10 10 +5 11 6 +5 12 12 +5 13 8 +5 14 16 +5 15 21 +5 16 11 +5 17 7 +5 18 5 +5 19 0 +5 20 1 +5 21 0 +5 22 0 +5 23 0 +6 0 0 +6 1 0 +6 2 0 +6 3 0 +6 4 0 +6 5 0 +6 6 0 +6 7 1 +6 8 0 +6 9 0 +6 10 0 +6 11 0 +6 12 0 +6 13 0 +6 14 0 +6 15 0 +6 16 0 +6 17 0 +6 18 0 +6 19 0 +6 20 0 +6 21 0 +6 22 0 +6 23 0 +7 0 0 +7 1 0 +7 2 0 +7 3 0 +7 4 0 +7 5 0 +7 6 0 +7 7 1 +7 8 1 +7 9 1 +7 10 0 +7 11 1 +7 12 0 +7 13 0 +7 14 0 +7 15 1 +7 16 0 +7 17 0 +7 18 0 +7 19 0 +7 20 0 +7 21 2 +7 22 4 +7 23 1 diff --git a/FlaskTest/static/data/lines_of_code_by_author.dat b/FlaskTest/static/data/lines_of_code_by_author.dat new file mode 100644 index 0000000..0e0352e --- /dev/null +++ b/FlaskTest/static/data/lines_of_code_by_author.dat @@ -0,0 +1,616 @@ +1392392111 27013 0 0 0 0 0 0 +1392397527 27021 0 0 0 0 0 0 +1392830779 27024 0 0 0 0 0 0 +1392841719 27573 0 0 0 0 0 0 +1392844458 27597 0 0 0 0 0 0 +1392852040 27702 0 0 0 0 0 0 +1392933375 27702 0 0 0 0 0 0 +1393016220 27706 0 0 0 0 0 0 +1393018032 27706 0 0 0 0 0 0 +1393272179 27723 0 0 0 0 0 0 +1393356877 27861 0 0 0 0 0 0 +1393357414 27864 0 0 0 0 0 0 +1393437911 27903 0 0 0 0 0 0 +1393442422 28012 0 0 0 0 0 0 +1393515175 28021 0 0 0 0 0 0 +1393531146 28032 0 0 0 0 0 0 +1393532869 28039 0 0 0 0 0 0 +1393534919 28087 0 0 0 0 0 0 +1393540722 28089 0 0 0 0 0 0 +1393861723 28100 0 0 0 0 0 0 +1394035569 28126 0 0 0 0 0 0 +1394039661 28188 0 0 0 0 0 0 +1394054732 28301 0 0 0 0 0 0 +1394055920 28303 0 0 0 0 0 0 +1394056588 28307 0 0 0 0 0 0 +1394119672 28320 0 0 0 0 0 0 +1394125181 28328 0 0 0 0 0 0 +1394145913 33119 0 0 0 0 0 0 +1394460626 33126 0 0 0 0 0 0 +1394465228 33150 0 0 0 0 0 0 +1394467610 33176 0 0 0 0 0 0 +1394470538 33176 0 0 0 0 0 0 +1394478517 33239 0 0 0 0 0 0 +1394487470 33251 0 0 0 0 0 0 +1394546208 33287 0 0 0 0 0 0 +1394549933 33300 0 0 0 0 0 0 +1394573638 33509 0 0 0 0 0 0 +1394730184 33513 0 0 0 0 0 0 +1394732727 33853 0 0 0 0 0 0 +1395071699 33905 0 0 0 0 0 0 +1395080218 33955 0 0 0 0 0 0 +1395084092 37195 0 0 0 0 0 0 +1395243935 37258 0 0 0 0 0 0 +1395261876 37417 0 0 0 0 0 0 +1395324514 37422 0 0 0 0 0 0 +1395347240 37423 0 0 0 0 0 0 +1395418555 37453 0 0 0 0 0 0 +1395675797 37472 0 0 0 0 0 0 +1395682889 37517 0 0 0 0 0 0 +1395687258 37709 0 0 0 0 0 0 +1395687758 37710 0 0 0 0 0 0 +1395695371 37779 0 0 0 0 0 0 +1395759924 37795 0 0 0 0 0 0 +1395781761 37854 0 0 0 0 0 0 +1395931149 37969 0 0 0 0 0 0 +1395955619 38207 0 0 0 0 0 0 +1396017083 38220 0 0 0 0 0 0 +1396018452 38220 0 0 0 0 0 0 +1396033193 38685 0 0 0 0 0 0 +1396034898 38685 0 0 0 0 0 0 +1396036712 38779 0 0 0 0 0 0 +1396293025 38828 0 0 0 0 0 0 +1396379166 38831 0 0 0 0 0 0 +1396379379 38852 0 0 0 0 0 0 +1396469103 40876 0 0 0 0 0 0 +1396469896 40878 0 0 0 0 0 0 +1396472129 40897 0 0 0 0 0 0 +1396474065 41011 0 0 0 0 0 0 +1396541016 41018 0 0 0 0 0 0 +1396638448 41021 0 0 0 0 0 0 +1396639995 41023 0 0 0 0 0 0 +1396885855 41027 0 0 0 0 0 0 +1396899853 41086 0 0 0 0 0 0 +1396984335 41355 0 0 0 0 0 0 +1397247297 41409 0 0 0 0 0 0 +1397248748 41410 0 0 0 0 0 0 +1397484607 41417 0 0 0 0 0 0 +1397491609 41573 0 0 0 0 0 0 +1397501654 41592 0 0 0 0 0 0 +1397502552 41660 0 0 0 0 0 0 +1397508171 41724 0 0 0 0 0 0 +1397593977 41896 0 0 0 0 0 0 +1397596834 41896 0 0 0 0 0 0 +1397681905 41970 0 0 0 0 0 0 +1397747221 42529 0 0 0 0 0 0 +1397751241 42589 0 0 0 0 0 0 +1397754140 42612 0 0 0 0 0 0 +1398106573 42712 0 0 0 0 0 0 +1398190593 42714 0 0 0 0 0 0 +1398265425 42715 0 0 0 0 0 0 +1398265460 42922 0 0 0 0 0 0 +1398268479 42922 0 0 0 0 0 0 +1398271735 42978 0 0 0 0 0 0 +1398278671 42981 0 0 0 0 0 0 +1398282984 42983 0 0 0 0 0 0 +1398373748 42984 0 0 0 0 0 0 +1398434861 42998 0 0 0 0 0 0 +1398437720 43001 0 0 0 0 0 0 +1398697019 43001 0 0 0 0 0 0 +1398699790 43005 0 0 0 0 0 0 +1398715690 43016 0 0 0 0 0 0 +1398716189 43088 0 0 0 0 0 0 +1398718090 43089 0 0 0 0 0 0 +1398797186 43172 0 0 0 0 0 0 +1398799360 43172 0 0 0 0 0 0 +1398800327 43395 0 0 0 0 0 0 +1399305448 43420 0 0 0 0 0 0 +1399315892 43422 0 0 0 0 0 0 +1399315910 43422 0 0 0 0 0 0 +1399316102 43423 0 0 0 0 0 0 +1399387116 43505 0 0 0 0 0 0 +1399388283 43506 0 0 0 0 0 0 +1399389375 43510 0 0 0 0 0 0 +1399564137 43513 0 0 0 0 0 0 +1399666061 43517 0 0 0 0 0 0 +1399905905 43973 0 0 0 0 0 0 +1399991114 43975 0 0 0 0 0 0 +1400189261 44019 0 0 0 0 0 0 +1400529215 77954 0 0 0 0 0 0 +1401293283 77959 0 0 0 0 0 0 +1401296335 77960 0 0 0 0 0 0 +1401386785 78042 0 0 0 0 0 0 +1402341065 78044 0 0 0 0 0 0 +1402342238 78045 0 0 0 0 0 0 +1402428124 78049 0 0 0 0 0 0 +1402431333 78084 0 0 0 0 0 0 +1402511788 78089 0 0 0 0 0 0 +1402512041 78163 0 0 0 0 0 0 +1402595862 78163 0 0 0 0 0 0 +1403192924 78164 0 0 0 0 0 0 +1403206094 78187 0 0 0 0 0 0 +1403280442 78193 0 0 0 0 0 0 +1403535284 78194 0 0 0 0 0 0 +1403541811 78195 0 0 0 0 0 0 +1403636781 78915 0 0 0 0 0 0 +1403637528 78942 0 0 0 0 0 0 +1403724192 78981 0 0 0 0 0 0 +1403732386 78985 0 0 0 0 0 0 +1404142813 79122 0 0 0 0 0 0 +1404248505 79126 0 0 0 0 0 0 +1404915912 79235 0 0 0 0 0 0 +1404923241 79236 0 0 0 0 0 0 +1404923409 79295 0 0 0 0 0 0 +1405002584 79296 0 0 0 0 0 0 +1405003854 79310 0 0 0 0 0 0 +1405021172 79321 0 0 0 0 0 0 +1405023400 79339 0 0 0 0 0 0 +1405113290 79348 0 0 0 0 0 0 +1405348976 79350 0 0 0 0 0 0 +1405361989 79422 0 0 0 0 0 0 +1405364123 79437 0 0 0 0 0 0 +1405447703 79441 0 0 0 0 0 0 +1405540116 79443 0 0 0 0 0 0 +1406040988 79533 0 0 0 0 0 0 +1406041836 79540 0 0 0 0 0 0 +1406052691 79555 0 0 0 0 0 0 +1406055617 79580 0 0 0 0 0 0 +1406055678 79581 0 0 0 0 0 0 +1406225786 79677 0 0 0 0 0 0 +1406231654 79678 0 0 0 0 0 0 +1406235975 85571 0 0 0 0 0 0 +1406297884 85594 0 0 0 0 0 0 +1406312943 85746 0 0 0 0 0 0 +1406325886 85752 0 0 0 0 0 0 +1406563924 85761 0 0 0 0 0 0 +1406564839 85762 0 0 0 0 0 0 +1406670247 85884 0 0 0 0 0 0 +1406734781 85901 0 0 0 0 0 0 +1406754307 86541 0 0 0 0 0 0 +1406834212 86552 0 0 0 0 0 0 +1407185931 86553 0 0 0 0 0 0 +1407255136 86619 0 0 0 0 0 0 +1407268137 86620 0 0 0 0 0 0 +1408040736 86622 0 0 0 0 0 0 +1408138667 86622 0 0 0 0 0 0 +1408481183 86623 0 0 0 0 0 0 +1408976252 86624 0 0 0 0 0 0 +1408976366 86669 0 0 0 0 0 0 +1408976476 86669 0 0 0 0 0 0 +1408983121 86683 0 0 0 0 0 0 +1409078217 86713 0 0 0 0 0 0 +1409244667 86713 0 0 0 0 0 0 +1409253116 86978 0 0 0 0 0 0 +1409259944 87041 0 0 0 0 0 0 +1409672806 87123 0 0 0 0 0 0 +1410206464 87129 0 0 0 0 0 0 +1410207080 87130 0 0 0 0 0 0 +1410287098 87132 0 0 0 0 0 0 +1410551535 87149 0 0 0 0 0 0 +1411486906 87153 0 0 0 0 0 0 +1411658801 88057 0 0 0 0 0 0 +1412085855 88077 0 0 0 0 0 0 +1412093603 88189 0 0 0 0 0 0 +1412103242 88196 0 0 0 0 0 0 +1412103800 88198 0 0 0 0 0 0 +1412106592 88200 0 0 0 0 0 0 +1412110451 88218 0 0 0 0 0 0 +1412110505 88230 0 0 0 0 0 0 +1412110521 88331 0 0 0 0 0 0 +1412171582 88332 0 0 0 0 0 0 +1412178008 88342 0 0 0 0 0 0 +1412182838 88428 0 0 0 0 0 0 +1412265983 88431 0 0 0 0 0 0 +1412275768 88435 0 0 0 0 0 0 +1412369691 88439 0 0 0 0 0 0 +1412625476 88621 0 0 0 0 0 0 +1412715931 88622 0 0 0 0 0 0 +1413222749 88885 0 0 0 0 0 0 +1414522504 91054 0 0 0 0 0 0 +1415144579 91782 0 0 0 0 0 0 +1415218924 91785 0 0 0 0 0 0 +1415219022 91785 0 0 0 0 0 0 +1415220994 91867 0 0 0 0 0 0 +1415319788 91879 0 0 0 0 0 0 +1415319862 91881 0 0 0 0 0 0 +1415321087 91883 0 0 0 0 0 0 +1415395231 91883 0 0 0 0 0 0 +1415649515 91953 0 0 0 0 0 0 +1415652685 91974 0 0 0 0 0 0 +1415717488 91977 0 0 0 0 0 0 +1415724534 91982 0 0 0 0 0 0 +1415726692 92021 0 0 0 0 0 0 +1415728253 92036 0 0 0 0 0 0 +1415734870 92058 0 0 0 0 0 0 +1415736053 92059 0 0 0 0 0 0 +1415738826 92066 0 0 0 0 0 0 +1415742817 92346 0 0 0 0 0 0 +1415745888 92507 0 0 0 0 0 0 +1415823605 92559 0 0 0 0 0 0 +1415832007 92591 0 0 0 0 0 0 +1416239521 92592 0 0 0 0 0 0 +1416245778 92594 0 0 0 0 0 0 +1416350686 92638 0 0 0 0 0 0 +1416612373 92865 0 0 0 0 0 0 +1417464052 92875 0 0 0 0 0 0 +1417464390 92878 0 0 0 0 0 0 +1417534843 92952 0 0 0 0 0 0 +1417549520 92979 0 0 0 0 0 0 +1417553492 92989 0 0 0 0 0 0 +1417564577 93069 0 0 0 0 0 0 +1417640760 93089 0 0 0 0 0 0 +1418053512 93092 0 0 0 0 0 0 +1418318204 93116 0 0 0 0 0 0 +1418318222 93134 0 0 0 0 0 0 +1418318240 93138 0 0 0 0 0 0 +1418318297 93173 0 0 0 0 0 0 +1418318361 93174 0 0 0 0 0 0 +1418318417 93217 0 0 0 0 0 0 +1418318440 93218 0 0 0 0 0 0 +1418318684 93221 0 0 0 0 0 0 +1418421690 93224 0 0 0 0 0 0 +1418421802 93264 0 0 0 0 0 0 +1418746234 93299 0 0 0 0 0 0 +1418746500 93377 0 0 0 0 0 0 +1418752434 93395 0 0 0 0 0 0 +1418755439 93488 0 0 0 0 0 0 +1418849653 93497 0 0 0 0 0 0 +1418918217 93521 0 0 0 0 0 0 +1418940694 93661 0 0 0 0 0 0 +1418941834 93685 0 0 0 0 0 0 +1419356537 99684 0 0 0 0 0 0 +1421161999 99703 0 0 0 0 0 0 +1421164187 99713 0 0 0 0 0 0 +1421170472 99724 0 0 0 0 0 0 +1421182429 99726 0 0 0 0 0 0 +1421186075 99727 0 0 0 0 0 0 +1421333600 99732 0 0 0 0 0 0 +1421362394 99757 0 0 0 0 0 0 +1421781546 99780 0 0 0 0 0 0 +1421794398 99788 0 0 0 0 0 0 +1421858140 99792 0 0 0 0 0 0 +1421861618 99843 0 0 0 0 0 0 +1421865987 99884 0 0 0 0 0 0 +1421870518 99887 0 0 0 0 0 0 +1421942808 99893 0 0 0 0 0 0 +1421965255 99939 0 0 0 0 0 0 +1421965286 100061 0 0 0 0 0 0 +1421966627 100064 0 0 0 0 0 0 +1422288635 100064 0 0 0 0 0 0 +1422288804 100071 0 0 0 0 0 0 +1422289212 100071 0 0 0 0 0 0 +1422289952 100087 0 0 0 0 0 0 +1422290748 100091 0 0 0 0 0 0 +1422291553 100096 0 0 0 0 0 0 +1422310926 100177 0 0 0 0 0 0 +1422372141 100178 0 0 0 0 0 0 +1422375118 100181 0 0 0 0 0 0 +1422384120 100195 0 0 0 0 0 0 +1422386950 100246 0 0 0 0 0 0 +1422387963 100261 0 0 0 0 0 0 +1422463984 100410 0 0 0 0 0 0 +1422478361 100413 0 0 0 0 0 0 +1422481852 100762 0 0 0 0 0 0 +1422544534 100762 0 0 0 0 0 0 +1422565449 100764 0 0 0 0 0 0 +1422569286 100766 0 0 0 0 0 0 +1422569372 100846 0 0 0 0 0 0 +1422861179 100846 0 0 0 5 0 0 +1422894999 100854 0 0 0 5 0 0 +1422989658 100870 0 0 0 5 0 0 +1423167301 100920 0 0 0 5 0 0 +1423585125 100920 0 0 0 5 0 0 +1423590234 100922 0 0 0 5 0 0 +1423596075 100928 0 0 0 5 0 0 +1423603626 101018 0 0 0 5 0 0 +1423672020 101019 0 0 0 5 0 0 +1423753966 101019 0 0 0 5 0 0 +1424114643 101028 0 0 0 5 0 0 +1424188717 101042 0 0 0 5 0 0 +1424193093 101101 0 0 0 5 0 0 +1424201771 101142 0 0 0 5 0 0 +1424273633 101194 0 0 0 5 0 0 +1424279063 101242 0 0 0 5 0 0 +1424280071 101326 0 0 0 5 0 0 +1424281679 101357 0 0 0 5 0 0 +1424288424 101438 0 0 0 5 0 0 +1424288546 101520 0 0 0 5 0 0 +1424295016 101553 0 0 0 5 0 0 +1424465722 101565 0 0 0 5 0 0 +1424466815 101573 0 0 0 5 0 0 +1424467415 101662 0 0 0 5 0 0 +1424712442 101669 0 0 0 5 0 0 +1424716942 101730 0 0 0 5 0 0 +1424721680 101751 0 0 0 5 0 0 +1424791974 101756 0 0 0 5 0 0 +1424796525 101766 0 0 0 5 0 0 +1424798803 101771 0 0 0 5 0 0 +1424798945 101795 0 0 0 5 0 0 +1424803751 101915 0 0 0 5 0 0 +1424810387 101926 0 0 0 5 0 0 +1424810657 101941 0 0 0 5 0 0 +1424816551 102008 0 0 0 5 0 0 +1424818066 102010 0 0 0 5 0 0 +1424878655 102148 0 0 0 5 0 0 +1424884467 102148 0 0 0 5 0 0 +1424884849 102657 0 0 0 5 0 0 +1424892815 102721 0 0 0 5 0 0 +1424898072 102726 0 0 0 5 0 0 +1425051573 102736 0 0 0 5 0 0 +1425067581 102789 0 0 0 5 0 0 +1425067690 102794 0 0 0 5 0 0 +1425077014 102794 0 0 0 5 0 0 +1425309326 102794 0 0 0 5 0 0 +1425313422 102795 0 0 0 5 0 0 +1425329531 102795 0 0 0 5 0 0 +1425337212 102869 0 0 0 5 0 0 +1425342674 102877 0 0 0 5 0 0 +1425914337 102896 0 0 0 5 0 0 +1425917461 102914 0 0 0 5 0 0 +1425999980 102915 0 0 0 5 0 0 +1426267819 102918 0 0 0 5 0 0 +1426273408 102938 0 0 0 5 0 0 +1426280545 102946 0 0 0 5 0 0 +1426628250 102956 0 0 0 5 0 0 +1426778183 102958 0 0 0 5 0 0 +1426791438 102978 0 0 0 5 0 0 +1426803375 102985 0 0 0 5 0 0 +1426804222 102989 0 0 0 5 0 0 +1426890119 103061 0 0 0 5 0 0 +1427129667 103071 0 0 0 5 0 0 +1427133177 103105 0 0 0 5 0 0 +1427135813 103107 0 0 0 5 0 0 +1427137830 103185 0 0 0 5 0 0 +1427139221 103186 0 0 0 5 0 0 +1427141290 103201 0 0 0 5 0 0 +1427141834 103203 0 0 0 5 0 0 +1427206811 103207 0 0 0 5 0 0 +1427225995 103211 0 0 0 5 0 0 +1427226516 103213 0 0 0 5 0 0 +1427228366 131222 0 0 0 5 0 0 +1427267795 131222 0 0 0 74 0 0 +1427267837 131222 0 0 0 77 0 0 +1427294459 131228 0 0 0 77 0 0 +1427317966 131235 0 0 0 77 0 0 +1427335799 131235 0 0 0 77 0 0 +1427349002 131235 0 0 0 77 0 0 +1427349639 131235 0 0 0 79 0 0 +1427362185 131235 0 0 0 157 0 0 +1427362305 131235 0 0 0 161 0 0 +1427426891 131327 0 0 0 167 0 0 +1427488267 131335 0 0 0 167 0 0 +1427789357 131335 0 0 0 169 0 0 +1427789410 131337 0 0 0 195 0 0 +1427833035 131337 0 0 0 195 0 0 +1427917146 131337 0 0 0 195 0 0 +1427997681 131342 0 0 0 195 0 0 +1428443057 131359 0 0 0 195 0 0 +1428513842 131365 0 0 0 195 0 0 +1428521668 131382 0 0 0 195 0 0 +1428934715 131387 0 0 0 195 0 0 +1429112004 131391 0 0 0 195 0 0 +1429284766 235670 0 0 0 195 0 0 +1429304949 235700 0 0 0 195 0 0 +1429310422 235708 0 0 0 195 0 0 +1430403827 235710 0 0 0 195 0 0 +1431109116 235710 0 0 0 195 0 0 +1431110062 235718 0 0 0 195 0 0 +1431398393 235718 0 0 0 195 0 0 +1432310614 235718 23 0 0 195 0 0 +1432310966 235718 23 0 0 195 0 0 +1432311075 235718 23 0 0 195 0 0 +1432311088 235718 53 0 0 195 0 0 +1432311100 235718 53 0 0 195 0 0 +1432312050 235718 67 0 0 195 0 0 +1432588799 235718 67 1 0 195 0 0 +1432588896 235718 67 15 0 195 0 0 +1432588954 235718 67 17 0 195 0 0 +1432831392 235718 75 17 0 195 0 0 +1432831427 235718 75 17 0 195 0 0 +1432907636 235718 75 17 0 195 0 0 +1432929105 235718 122 17 0 195 0 0 +1433175771 235718 151 17 0 195 0 0 +1433464018 235718 151 75 0 195 0 0 +1433464310 235718 151 90 0 195 0 0 +1434132785 235718 151 90 0 195 0 0 +1434134581 235718 151 90 0 195 0 0 +1434138920 235718 157 90 0 195 0 0 +1434138982 235718 157 90 0 195 0 0 +1434139189 235718 158 90 0 195 0 0 +1434376340 235718 180 90 0 195 0 0 +1435836687 235718 180 90 0 195 0 0 +1435843824 235718 194 90 0 195 0 0 +1436849943 235718 194 90 0 195 8 0 +1438269784 235718 1029 90 0 195 8 0 +1438269918 235718 1029 90 0 195 8 0 +1438271263 235718 1035 90 0 195 8 0 +1438273348 235718 2894 90 0 195 8 0 +1438282294 235718 2894 90 0 195 8 0 +1438303550 235718 2935 90 0 195 8 0 +1439397263 235718 2965 90 0 195 8 0 +1439399146 235718 2982 90 0 195 8 0 +1441737290 235718 5196 90 0 195 8 0 +1442267605 235718 5300 90 0 195 8 0 +1442597513 235718 5308 90 0 195 8 0 +1442954764 235718 5308 90 0 195 8 0 +1443018794 235718 5331 90 0 195 8 0 +1443031570 235718 5370 90 0 195 8 0 +1443032056 235718 5370 90 0 195 8 0 +1443119585 235718 5390 90 0 195 8 0 +1443711951 235718 5465 90 0 195 8 0 +1443798856 235718 5478 90 0 195 8 0 +1449685453 235718 10423 90 0 195 8 0 +1450283272 235718 11105 90 0 195 8 0 +1450664183 235718 11363 90 0 195 8 0 +1450666600 235718 11389 90 0 195 8 0 +1452027169 235718 11389 93 0 195 8 0 +1452028386 235718 11389 1094 0 195 8 0 +1452200566 235718 11389 1143 0 195 8 0 +1452207430 235718 11389 1319 0 195 8 0 +1452207602 235718 11395 1324 0 195 8 0 +1452212539 235718 11420 1324 0 195 8 0 +1452280833 235718 11420 1325 0 195 8 0 +1452793688 235718 11439 1325 0 195 8 0 +1453224499 235718 11448 1325 0 195 8 0 +1453225168 235718 11457 1325 0 195 8 0 +1453230613 235718 11457 1325 0 195 8 0 +1453323055 235718 11525 1325 0 195 8 0 +1453493571 235718 11562 1325 0 195 8 0 +1453704637 235718 11562 1325 0 195 8 24 +1453825100 235718 11590 1325 0 195 8 24 +1453837575 235718 11715 1325 0 195 8 24 +1453848840 235718 11715 1325 0 195 8 24 +1453953447 235718 13364 1380 0 195 8 24 +1454689867 235718 13364 1431 0 195 8 24 +1455057770 235718 13364 1447 0 195 8 24 +1455660753 235718 13423 1447 0 195 8 24 +1455830872 235718 13459 1447 0 195 8 24 +1455831309 235718 13475 1447 0 195 8 24 +1455831437 235718 13502 1447 0 195 8 24 +1455894228 235718 13502 1708 0 195 8 24 +1455897059 235718 13502 1713 0 195 8 24 +1456110772 235718 13525 1713 0 195 8 24 +1456266997 235718 13525 1718 0 195 8 24 +1456267705 235718 13525 1724 0 195 8 24 +1456269047 235718 14252 1724 0 195 8 24 +1456506668 235718 14252 2037 0 195 8 24 +1456806554 235718 14268 2037 0 195 8 24 +1457141043 235718 14273 2037 0 195 8 24 +1457452520 235718 14273 2045 0 195 8 24 +1457488422 235718 14273 2051 0 195 8 24 +1457563999 235718 14273 2249 0 195 8 24 +1457644085 235718 14273 2539 0 195 8 24 +1457644884 235718 14273 2683 0 195 8 24 +1457646092 235718 14273 2684 0 195 8 24 +1457987370 235718 14281 2684 0 195 8 24 +1457991490 235718 14281 2692 0 195 8 24 +1458004818 235718 14303 2692 0 195 8 24 +1458593314 235718 14310 2692 0 195 8 24 +1458765547 235718 14382 2692 0 195 8 24 +1458914088 235718 14390 2692 0 195 8 24 +1458991612 235718 14405 2692 0 195 8 24 +1459133960 235718 14421 2692 0 195 8 24 +1460047216 235718 14429 2692 0 195 8 24 +1460047380 235718 14451 2730 0 195 8 24 +1460375644 235718 14636 2730 0 195 8 24 +1460380408 235718 14685 2764 0 195 8 24 +1460407428 235718 14736 2764 0 195 8 24 +1460569764 235718 14736 2764 0 195 8 24 +1461074070 235718 14755 2764 0 195 8 24 +1461270656 235718 14768 2835 0 195 8 24 +1461354039 235718 14768 2841 0 195 8 24 +1461551595 235718 14768 2841 0 195 8 24 +1461552637 235718 14791 2841 0 195 8 24 +1462227334 235718 14959 2841 0 195 8 24 +1463152815 235718 14959 2906 0 195 8 24 +1463157617 235718 14959 2945 0 195 8 24 +1463451445 235718 14959 2980 0 195 8 24 +1463451804 235718 14959 3031 0 195 8 24 +1463680867 235718 15014 3031 0 195 8 24 +1463758054 235718 15029 3031 0 195 8 24 +1464031184 235718 15037 3031 0 195 8 24 +1464096601 235718 15043 3031 0 195 8 24 +1464208709 235718 15043 3031 0 195 8 24 +1464237088 235718 15084 3031 0 195 8 24 +1464237194 235718 15115 3031 0 195 8 24 +1464293889 235718 15115 3031 0 195 8 24 +1464793340 235718 15120 3102 0 195 8 24 +1464880180 235718 15120 3102 0 195 8 24 +1464895801 235718 15139 3102 0 195 8 24 +1464902654 235718 15155 3102 0 195 8 24 +1465319220 235718 15195 3168 0 195 8 24 +1465424498 235718 15216 3168 0 195 8 24 +1466648922 235718 15263 3168 0 195 8 24 +1466649684 235718 15270 3168 0 195 8 24 +1466650102 235718 15335 3168 0 195 8 24 +1466701155 235718 15352 3168 0 195 8 24 +1466735347 235718 15361 3168 0 195 8 24 +1466736165 235718 15387 3174 0 195 8 24 +1468180054 235718 15459 3240 0 195 8 24 +1468292316 235718 15459 3262 0 195 8 24 +1468876762 235718 15459 3270 0 195 8 24 +1468876920 235718 15459 3277 0 195 8 24 +1469121939 235718 15459 3315 0 195 8 24 +1469157573 235718 15487 3315 0 195 8 24 +1469552934 235718 15487 3346 0 195 8 24 +1469589171 235718 15552 3360 0 195 8 24 +1469640240 235718 15577 3360 0 195 8 24 +1469723242 235718 15577 3362 0 195 8 24 +1469725928 235718 15602 3362 0 195 8 24 +1469780404 235718 15617 3362 0 195 8 24 +1475506438 235718 15618 3362 0 195 8 24 +1475508328 235718 15765 3362 0 195 8 24 +1475605531 235718 15898 3362 0 195 8 24 +1475759454 235718 15918 3362 0 195 8 24 +1476301940 235718 15918 3362 0 195 8 24 +1477421556 235718 15918 3376 0 195 8 24 +1477427877 235718 15970 3439 0 195 8 24 +1477433230 235718 15970 3447 0 195 8 24 +1477694191 235718 15970 3450 0 195 8 24 +1477939269 235718 15970 3497 0 195 8 24 +1477941012 235718 15970 3575 0 195 8 24 +1478115005 235718 15970 3575 0 195 8 24 +1478288605 235718 15970 3627 0 195 8 24 +1478551645 235718 15970 3628 0 195 8 24 +1478792001 235718 15970 3651 0 195 8 24 +1478814382 235718 15970 3651 0 195 8 24 +1478816505 235718 15970 3665 0 195 8 24 +1478878515 235718 15970 3682 0 195 8 24 +1479419832 235718 15970 3685 0 195 8 24 +1479846967 235718 15970 3687 0 195 8 24 +1480530088 235718 15970 3687 0 195 8 24 +1481670500 235718 15970 3740 0 195 8 24 +1482181507 235718 15970 3740 1 195 8 24 +1482336682 235718 15970 3746 1 195 8 24 +1482340119 235718 15970 3753 1 195 8 24 +1482353511 235718 15970 3771 11 195 8 24 +1482359008 235718 15970 3771 32 195 8 24 +1483455272 235718 15970 3796 76 195 8 24 +1484342644 235718 15970 3796 77 195 8 24 +1484684949 235718 15970 3796 99 195 8 24 +1484772851 235718 15970 3800 100 195 8 24 +1485799035 235718 15970 120285 116 195 8 24 +1485877540 235718 15970 120293 116 195 8 24 +1485877851 235718 15970 120317 116 195 8 24 +1485877920 235718 15970 120318 116 195 8 24 +1485878121 235718 15970 120340 116 195 8 24 +1486146025 235718 15970 120354 116 195 8 24 +1486412376 235718 15970 120363 116 195 8 24 +1486499625 235718 15970 120404 116 195 8 24 +1486755546 235718 15970 120405 116 195 8 24 +1487109340 235718 15970 120444 116 195 8 24 +1487277883 235718 15970 120444 1305 195 8 24 +1487783266 235718 15970 120444 1313 195 8 24 +1487946215 235718 15970 120503 1347 195 8 24 +1487965862 235718 15970 120503 1369 195 8 24 +1487966474 235718 15970 120503 1429 195 8 24 +1487966964 235718 15970 120503 1429 195 8 24 +1488313813 235718 15970 120503 1461 195 8 24 +1488406636 235718 15970 120525 1461 195 8 24 +1488407109 235718 15970 120587 1461 195 8 24 +1488409193 235718 15970 120620 1461 195 8 24 +1488560599 235718 15970 120718 1461 195 8 24 +1488773682 235718 15970 120718 1545 195 8 24 +1488814084 235718 15970 120718 1545 195 8 24 +1488815988 235718 15970 120747 1545 195 8 24 +1489686589 235718 15970 120753 1545 195 8 24 +1490023066 235718 15970 120755 1545 195 8 24 +1490035644 235718 15970 120761 1545 195 8 24 +1490041875 235718 15970 120763 1545 195 8 24 +1490113585 235718 15970 120763 1545 195 8 24 +1490120437 235718 15970 120764 1545 195 8 24 +1490128257 235718 15970 120783 1545 195 8 24 +1490645760 235718 15970 120783 1545 195 8 24 +1490725467 235718 15970 120858 1545 195 8 24 +1491336954 235718 15970 120858 1545 195 8 24 +1491341896 235718 15970 120875 1545 195 8 24 +1492026512 235718 15970 120893 1545 195 8 24 +1492107919 235718 15970 120898 1545 195 8 24 +1492108901 235718 15970 120998 1545 195 8 24 +1492435237 235718 15970 120998 1545 195 8 24 +1492435982 235718 15970 120998 1545 195 8 24 +1492454272 235718 15970 121021 1545 195 8 24 +1493052262 235718 15970 121021 1646 195 8 24 +1493153070 235718 15970 121070 1646 195 8 24 +1493407521 235718 15970 121078 1646 195 8 24 +1493412286 235718 15970 121093 1646 195 8 24 diff --git a/FlaskTest/static/data/lines_of_code_by_author_TEST.tsv b/FlaskTest/static/data/lines_of_code_by_author_TEST.tsv new file mode 100644 index 0000000..452c0b9 --- /dev/null +++ b/FlaskTest/static/data/lines_of_code_by_author_TEST.tsv @@ -0,0 +1,303 @@ +date Heikki Hokkanen Schultz Wulf C. Krueger Matthieu Moy Tobias Gruetzmacher Sven van Haastregt tonylixu@gmail.com Jani Hur Alexander Strasser Tyler Nielsen Sylvain Joyeux Stephen Gordon Shixin Zeng Kirill Chilikin Thomas R. Koll Stephan Kuschel Stefano Mosconi Richard Russon (flatcap) Pekka Enberg Matt Parlane Karel Rank Jan Pieper Greg Schultz Ernesto Jiménez Diomidis Spinellis Craig R. Hughes Ciaran Gultnieks Chris Cormack Bo Ørsted Andresen Andrey Devyatkin Andrew Lazarus Andreas Motl +1185807283 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185808977 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185818707 134 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185889659 239 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185891247 259 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185893895 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1185895453 297 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186056438 372 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186060740 447 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186061424 470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186075404 540 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186076583 584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186079641 599 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186080064 621 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186082479 639 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186247749 647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186249588 702 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186313656 703 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186317145 754 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186317901 768 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186319152 769 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186320254 772 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186321284 798 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186321473 800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186321571 801 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186488178 807 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186488361 812 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186489625 866 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186490927 885 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186491514 902 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186492107 924 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186492274 930 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186500578 950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186500971 962 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186501365 970 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186502711 978 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186502726 994 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186502755 1135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186504178 1141 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186903388 1481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186912588 1500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186912602 1501 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186925809 1523 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186935276 1562 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1186942728 1566 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187091141 1567 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187091932 1571 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187092886 1581 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187094179 1612 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187103706 1630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187103748 1647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187110904 1683 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187112266 1692 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187116457 1697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187117020 1702 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187262419 1713 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187264126 2523 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187264623 2531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187265574 2537 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187266246 2541 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187266270 2555 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187267448 2557 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187268966 2588 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187269666 2596 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187269687 2596 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187270000 2602 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187284177 2632 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187698716 2645 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187700626 2673 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187702069 2676 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187710679 2681 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187712076 2686 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187712519 2695 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187713375 2705 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187721789 2705 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187782159 2712 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187782555 2715 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187783627 2719 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187805908 2720 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187950777 2727 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187951029 2728 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187951241 2730 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187952472 2741 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187954119 2742 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187957428 2743 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1187957468 2744 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188309526 2751 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188309604 2756 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188399149 2758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188400278 2759 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188404246 2762 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188407057 2778 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1188407445 2779 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189062176 2782 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189063906 2796 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189064198 2798 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189064840 2806 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189065000 2807 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189081957 2812 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189150190 2818 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189150379 2819 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189152390 2820 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189154241 2827 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189155681 2854 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189701013 2854 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189701649 2859 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1189701775 2860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +1214633111 2860 0 0 0 0 0 0 0 0 0 0 0 51 0 0 0 0 0 0 0 +1214633112 2860 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214638725 2868 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214638988 2870 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214640893 2882 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214642323 2888 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214642760 2890 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214643336 2890 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214646567 2891 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214715483 2901 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214715620 3577 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1214715948 3577 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1216052596 3600 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1216053129 3616 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1216053881 3626 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1216128834 3627 0 0 0 0 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1221401612 3627 0 0 0 1 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1224364037 3627 0 0 0 324 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1224531756 3627 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1224597517 3627 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1224599013 3629 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1227341429 3639 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1227341726 3644 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1227342734 3651 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1227345415 3652 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1230016066 3660 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1230017076 3668 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1230017527 3669 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1230018723 3676 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1231950023 3687 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1231950183 3688 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1231950517 3692 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 0 +1242557579 3692 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245345947 3693 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245347172 3702 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245348455 3728 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245348998 3730 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245484804 3730 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245500196 3731 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245501876 3741 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1245502479 3742 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1252521237 3750 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1256576008 3751 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1256577884 3754 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1256580463 3760 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1257592281 3761 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1260703742 3765 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1260703816 3786 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1260704572 3793 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1260704988 3794 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1260803527 3796 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261583293 3808 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261583622 3819 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261583680 3828 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261583734 3828 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261583916 3828 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261585946 3831 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261589904 3883 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261590596 3901 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261597932 3921 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261598663 3922 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261599918 3932 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261642812 3935 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261643987 3943 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261644398 3948 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261645251 3956 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261645599 3958 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261646604 3959 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261731600 3959 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261733341 3960 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261733487 3966 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261734672 3975 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261735020 3976 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1261815612 3979 0 0 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1262962164 3979 0 1 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263080045 3979 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263231357 4000 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263484422 4007 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263588014 4010 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263588065 4011 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263638185 4012 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263645722 4023 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263647019 4024 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263648037 4026 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263648098 4062 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263650824 4088 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263709246 4092 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263710902 4108 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263713165 4109 0 59 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263746341 4109 0 66 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1263747379 4109 0 67 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1264922589 4111 0 67 0 353 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1267226774 4111 0 67 0 358 0 0 0 0 0 0 0 55 0 0 0 0 0 0 2 +1269377539 4111 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1270213285 4115 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1270213584 4120 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1270213658 4124 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1270213921 4125 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1276003631 4126 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1276005398 4141 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1276145510 4142 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1277251503 4142 0 67 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1277661324 4142 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1279912829 4143 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1281164815 4184 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1281165936 4221 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 0 2 +1285683641 4221 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1287336441 4228 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1287602087 4229 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1294476259 4232 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1294477431 4237 0 68 0 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1294685092 4238 0 68 5 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295074832 4245 0 68 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295282151 4246 0 68 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295285850 4254 0 138 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295287285 4256 0 138 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295287320 4257 0 138 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295372806 4270 0 138 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295450669 4273 0 138 158 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1295453271 4273 0 138 164 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1298043216 4278 0 138 164 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1300729569 4280 0 138 164 358 0 0 0 0 3 0 0 55 0 0 0 0 0 1 2 +1302027851 4280 0 138 164 358 0 0 0 0 3 0 0 55 0 0 0 1 0 1 2 +1316030600 4280 0 138 164 358 0 0 0 0 3 0 0 55 0 0 0 1 0 1 2 +1317151943 4280 0 138 164 358 0 0 0 0 3 0 0 55 0 0 0 1 0 1 2 +1319398208 4280 0 138 164 358 0 0 0 0 3 0 0 55 15 0 0 1 0 1 2 +1319398261 4280 0 138 164 358 0 0 0 0 3 0 0 55 16 0 0 1 0 1 2 +1319552927 4280 0 138 164 358 0 0 0 0 3 0 0 55 16 0 0 1 0 1 2 +1319555529 4285 0 138 164 358 0 0 0 0 3 0 0 55 16 0 0 1 0 1 2 +1321775428 4288 0 138 164 358 0 0 0 0 3 0 0 55 16 0 0 1 0 1 2 +1331239213 4288 0 138 164 358 0 0 0 0 3 0 0 55 16 1 0 1 0 1 2 +1337522953 4288 0 138 164 358 0 0 0 1 3 0 0 55 16 1 0 1 0 1 2 +1337603789 4288 0 138 164 358 0 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1338230534 4290 0 138 164 358 0 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1338230600 4291 0 138 164 358 0 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342190955 4295 0 138 164 358 0 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342192049 4300 0 138 164 358 0 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342204925 4301 0 138 164 358 0 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342299799 4301 0 138 164 358 1 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342300020 4301 0 138 164 358 5 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342348798 4301 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342514334 4301 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342556888 4301 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1342692495 4316 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1355773460 4323 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1359401944 4323 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1361690957 4327 0 138 164 358 8 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1361691011 4340 0 138 164 358 22 0 0 19 3 0 0 55 16 1 0 1 0 1 2 +1374589326 4340 0 138 164 358 22 0 0 19 3 0 16 55 16 1 0 1 0 1 2 +1374590549 4342 0 138 164 358 22 0 0 19 3 0 16 55 16 1 0 1 0 1 2 +1374866700 4343 0 138 164 358 22 0 0 19 3 0 16 55 16 1 0 1 0 1 2 +1375108956 4350 0 138 164 358 22 0 0 19 3 0 16 55 16 1 0 1 0 1 2 +1379816331 4350 0 138 164 358 22 0 0 21 3 0 16 55 16 1 0 1 0 1 2 +1387631044 4354 0 138 164 358 22 0 0 21 3 0 16 55 16 1 0 1 0 1 2 +1387631631 4355 0 138 164 358 22 0 0 21 3 0 16 55 16 1 0 1 0 1 2 +1394467712 4355 0 138 164 358 22 0 0 21 3 0 16 55 16 1 0 1 9 1 2 +1396097946 4356 0 138 164 358 22 0 0 21 3 0 16 55 16 1 0 1 9 1 2 +1401796128 4356 0 138 164 358 22 0 0 21 3 0 16 55 16 1 0 1 9 1 2 +1401816059 4358 0 138 164 358 22 0 0 21 3 26 16 55 16 1 0 1 9 1 2 +1403019741 4362 0 138 164 358 22 0 0 21 3 26 16 55 16 1 0 1 9 1 2 +1410533596 4362 0 138 164 358 22 0 4 21 3 26 16 55 16 1 0 1 9 1 2 +1410589701 4362 0 138 164 358 22 0 4 21 3 26 16 55 16 1 0 1 9 1 2 +1411191519 4362 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1415377120 4363 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1415377829 4378 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1415378081 4379 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1415378292 4381 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1415378391 4382 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1415379974 4383 0 138 164 358 22 0 5 21 3 26 16 55 16 1 0 1 9 1 2 +1418093771 4383 0 138 164 358 22 0 5 21 3 26 17 55 16 1 0 1 9 1 2 +1436896884 4383 0 138 164 358 22 0 5 21 3 26 17 55 16 1 1 1 9 1 2 +1450893921 4383 0 138 164 358 22 0 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496425653 4383 2 138 164 358 22 0 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496427348 4383 2 138 164 358 22 1261 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496428228 4383 2 138 164 358 22 1266 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496428387 4383 2 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496429976 4383 2 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496780473 4383 3862 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496840449 4383 4003 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496846473 4383 5680 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496848539 4383 5682 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496849934 4383 5682 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496850086 4383 5683 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496850218 4383 15290 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496850300 4383 15290 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496855530 4383 15295 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496855862 4383 15297 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496856355 4383 15302 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496856488 4383 15335 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496856529 4383 15353 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496856621 4383 15376 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496856672 4383 15377 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496858304 4383 15408 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496858356 4383 15409 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 +1496858507 4383 15410 138 164 358 22 1267 5 21 3 26 17 55 16 1 1 1 9 1 2 diff --git a/FlaskTest/static/data/test_repo/commits_by_author_copy.tsv b/FlaskTest/static/data/test_repo/commits_by_author_copy.tsv new file mode 100644 index 0000000..1e3fd73 --- /dev/null +++ b/FlaskTest/static/data/test_repo/commits_by_author_copy.tsv @@ -0,0 +1,617 @@ +date author1 author2 author3 author4 author5 author6 author7 +1392392111 16 0 0 0 0 0 0 +1392397527 17 0 0 0 0 0 0 +1392830779 18 0 0 0 0 0 0 +1392841719 19 0 0 0 0 0 0 +1392844458 20 0 0 0 0 0 0 +1392852040 21 0 0 0 0 0 0 +1392933375 22 0 0 0 0 0 0 +1393016220 23 0 0 0 0 0 0 +1393018032 24 0 0 0 0 0 0 +1393272179 25 0 0 0 0 0 0 +1393356877 26 0 0 0 0 0 0 +1393357414 27 0 0 0 0 0 0 +1393437911 28 0 0 0 0 0 0 +1393442422 29 0 0 0 0 0 0 +1393515175 30 0 0 0 0 0 0 +1393531146 31 0 0 0 0 0 0 +1393532869 32 0 0 0 0 0 0 +1393534919 33 0 0 0 0 0 0 +1393540722 34 0 0 0 0 0 0 +1393861723 35 0 0 0 0 0 0 +1394035569 36 0 0 0 0 0 0 +1394039661 37 0 0 0 0 0 0 +1394054732 38 0 0 0 0 0 0 +1394055920 39 0 0 0 0 0 0 +1394056588 40 0 0 0 0 0 0 +1394119672 41 0 0 0 0 0 0 +1394125181 42 0 0 0 0 0 0 +1394145913 43 0 0 0 0 0 0 +1394460626 44 0 0 0 0 0 0 +1394465228 45 0 0 0 0 0 0 +1394467610 46 0 0 0 0 0 0 +1394470538 47 0 0 0 0 0 0 +1394478517 48 0 0 0 0 0 0 +1394487470 49 0 0 0 0 0 0 +1394546208 50 0 0 0 0 0 0 +1394549933 51 0 0 0 0 0 0 +1394573638 52 0 0 0 0 0 0 +1394730184 53 0 0 0 0 0 0 +1394732727 55 0 0 0 0 0 0 +1395071699 56 0 0 0 0 0 0 +1395080218 57 0 0 0 0 0 0 +1395084092 58 0 0 0 0 0 0 +1395243935 59 0 0 0 0 0 0 +1395261876 60 0 0 0 0 0 0 +1395324514 61 0 0 0 0 0 0 +1395347240 62 0 0 0 0 0 0 +1395418555 63 0 0 0 0 0 0 +1395675797 64 0 0 0 0 0 0 +1395682889 65 0 0 0 0 0 0 +1395687258 66 0 0 0 0 0 0 +1395687758 67 0 0 0 0 0 0 +1395695371 68 0 0 0 0 0 0 +1395759924 69 0 0 0 0 0 0 +1395781761 70 0 0 0 0 0 0 +1395931149 71 0 0 0 0 0 0 +1395955619 72 0 0 0 0 0 0 +1396017083 73 0 0 0 0 0 0 +1396018452 74 0 0 0 0 0 0 +1396033193 78 0 0 0 0 0 0 +1396034898 79 0 0 0 0 0 0 +1396036712 80 0 0 0 0 0 0 +1396293025 81 0 0 0 0 0 0 +1396379166 82 0 0 0 0 0 0 +1396379379 83 0 0 0 0 0 0 +1396469103 84 0 0 0 0 0 0 +1396469896 85 0 0 0 0 0 0 +1396472129 86 0 0 0 0 0 0 +1396474065 87 0 0 0 0 0 0 +1396541016 88 0 0 0 0 0 0 +1396638448 89 0 0 0 0 0 0 +1396639995 90 0 0 0 0 0 0 +1396885855 91 0 0 0 0 0 0 +1396899853 92 0 0 0 0 0 0 +1396984335 94 0 0 0 0 0 0 +1397247297 95 0 0 0 0 0 0 +1397248748 96 0 0 0 0 0 0 +1397484607 97 0 0 0 0 0 0 +1397491609 98 0 0 0 0 0 0 +1397501654 99 0 0 0 0 0 0 +1397502552 100 0 0 0 0 0 0 +1397508171 101 0 0 0 0 0 0 +1397593977 102 0 0 0 0 0 0 +1397596834 103 0 0 0 0 0 0 +1397681905 104 0 0 0 0 0 0 +1397747221 105 0 0 0 0 0 0 +1397751241 106 0 0 0 0 0 0 +1397754140 107 0 0 0 0 0 0 +1398106573 108 0 0 0 0 0 0 +1398190593 109 0 0 0 0 0 0 +1398265425 110 0 0 0 0 0 0 +1398265460 111 0 0 0 0 0 0 +1398268479 112 0 0 0 0 0 0 +1398271735 113 0 0 0 0 0 0 +1398278671 114 0 0 0 0 0 0 +1398282984 115 0 0 0 0 0 0 +1398373748 116 0 0 0 0 0 0 +1398434861 117 0 0 0 0 0 0 +1398437720 118 0 0 0 0 0 0 +1398697019 119 0 0 0 0 0 0 +1398699790 120 0 0 0 0 0 0 +1398715690 121 0 0 0 0 0 0 +1398716189 122 0 0 0 0 0 0 +1398718090 123 0 0 0 0 0 0 +1398797186 124 0 0 0 0 0 0 +1398799360 125 0 0 0 0 0 0 +1398800327 129 0 0 0 0 0 0 +1399305448 130 0 0 0 0 0 0 +1399315892 131 0 0 0 0 0 0 +1399315910 132 0 0 0 0 0 0 +1399316102 133 0 0 0 0 0 0 +1399387116 134 0 0 0 0 0 0 +1399388283 135 0 0 0 0 0 0 +1399389375 136 0 0 0 0 0 0 +1399564137 137 0 0 0 0 0 0 +1399666061 138 0 0 0 0 0 0 +1399905905 140 0 0 0 0 0 0 +1399991114 141 0 0 0 0 0 0 +1400189261 142 0 0 0 0 0 0 +1400529215 144 0 0 0 0 0 0 +1401293283 145 0 0 0 0 0 0 +1401296335 146 0 0 0 0 0 0 +1401386785 147 0 0 0 0 0 0 +1402341065 148 0 0 0 0 0 0 +1402342238 149 0 0 0 0 0 0 +1402428124 150 0 0 0 0 0 0 +1402431333 151 0 0 0 0 0 0 +1402511788 152 0 0 0 0 0 0 +1402512041 153 0 0 0 0 0 0 +1402595862 154 0 0 0 0 0 0 +1403192924 155 0 0 0 0 0 0 +1403206094 157 0 0 0 0 0 0 +1403280442 158 0 0 0 0 0 0 +1403535284 159 0 0 0 0 0 0 +1403541811 160 0 0 0 0 0 0 +1403636781 161 0 0 0 0 0 0 +1403637528 162 0 0 0 0 0 0 +1403724192 163 0 0 0 0 0 0 +1403732386 164 0 0 0 0 0 0 +1404142813 165 0 0 0 0 0 0 +1404248505 166 0 0 0 0 0 0 +1404915912 167 0 0 0 0 0 0 +1404923241 168 0 0 0 0 0 0 +1404923409 169 0 0 0 0 0 0 +1405002584 170 0 0 0 0 0 0 +1405003854 171 0 0 0 0 0 0 +1405021172 172 0 0 0 0 0 0 +1405023400 173 0 0 0 0 0 0 +1405113290 174 0 0 0 0 0 0 +1405348976 175 0 0 0 0 0 0 +1405361989 176 0 0 0 0 0 0 +1405364123 177 0 0 0 0 0 0 +1405447703 178 0 0 0 0 0 0 +1405540116 179 0 0 0 0 0 0 +1406040988 180 0 0 0 0 0 0 +1406041836 181 0 0 0 0 0 0 +1406052691 182 0 0 0 0 0 0 +1406055617 183 0 0 0 0 0 0 +1406055678 184 0 0 0 0 0 0 +1406225786 185 0 0 0 0 0 0 +1406231654 186 0 0 0 0 0 0 +1406235975 191 0 0 0 0 0 0 +1406297884 192 0 0 0 0 0 0 +1406312943 194 0 0 0 0 0 0 +1406325886 195 0 0 0 0 0 0 +1406563924 196 0 0 0 0 0 0 +1406564839 197 0 0 0 0 0 0 +1406670247 198 0 0 0 0 0 0 +1406734781 199 0 0 0 0 0 0 +1406754307 200 0 0 0 0 0 0 +1406834212 201 0 0 0 0 0 0 +1407185931 202 0 0 0 0 0 0 +1407255136 203 0 0 0 0 0 0 +1407268137 204 0 0 0 0 0 0 +1408040736 205 0 0 0 0 0 0 +1408138667 206 0 0 0 0 0 0 +1408481183 207 0 0 0 0 0 0 +1408976252 208 0 0 0 0 0 0 +1408976366 209 0 0 0 0 0 0 +1408976476 210 0 0 0 0 0 0 +1408983121 211 0 0 0 0 0 0 +1409078217 212 0 0 0 0 0 0 +1409244667 213 0 0 0 0 0 0 +1409253116 215 0 0 0 0 0 0 +1409259944 216 0 0 0 0 0 0 +1409672806 218 0 0 0 0 0 0 +1410206464 219 0 0 0 0 0 0 +1410207080 220 0 0 0 0 0 0 +1410287098 221 0 0 0 0 0 0 +1410551535 222 0 0 0 0 0 0 +1411486906 223 0 0 0 0 0 0 +1411658801 226 0 0 0 0 0 0 +1412085855 227 0 0 0 0 0 0 +1412093603 229 0 0 0 0 0 0 +1412103242 230 0 0 0 0 0 0 +1412103800 231 0 0 0 0 0 0 +1412106592 232 0 0 0 0 0 0 +1412110451 233 0 0 0 0 0 0 +1412110505 234 0 0 0 0 0 0 +1412110521 235 0 0 0 0 0 0 +1412171582 236 0 0 0 0 0 0 +1412178008 237 0 0 0 0 0 0 +1412182838 238 0 0 0 0 0 0 +1412265983 239 0 0 0 0 0 0 +1412275768 240 0 0 0 0 0 0 +1412369691 241 0 0 0 0 0 0 +1412625476 242 0 0 0 0 0 0 +1412715931 243 0 0 0 0 0 0 +1413222749 245 0 0 0 0 0 0 +1414522504 247 0 0 0 0 0 0 +1415144579 248 0 0 0 0 0 0 +1415218924 249 0 0 0 0 0 0 +1415219022 250 0 0 0 0 0 0 +1415220994 252 0 0 0 0 0 0 +1415319788 253 0 0 0 0 0 0 +1415319862 254 0 0 0 0 0 0 +1415321087 255 0 0 0 0 0 0 +1415395231 256 0 0 0 0 0 0 +1415649515 257 0 0 0 0 0 0 +1415652685 258 0 0 0 0 0 0 +1415717488 259 0 0 0 0 0 0 +1415724534 260 0 0 0 0 0 0 +1415726692 261 0 0 0 0 0 0 +1415728253 262 0 0 0 0 0 0 +1415734870 263 0 0 0 0 0 0 +1415736053 264 0 0 0 0 0 0 +1415738826 265 0 0 0 0 0 0 +1415742817 266 0 0 0 0 0 0 +1415745888 267 0 0 0 0 0 0 +1415823605 268 0 0 0 0 0 0 +1415832007 269 0 0 0 0 0 0 +1416239521 270 0 0 0 0 0 0 +1416245778 271 0 0 0 0 0 0 +1416350686 272 0 0 0 0 0 0 +1416612373 273 0 0 0 0 0 0 +1417464052 274 0 0 0 0 0 0 +1417464390 275 0 0 0 0 0 0 +1417534843 276 0 0 0 0 0 0 +1417549520 277 0 0 0 0 0 0 +1417553492 278 0 0 0 0 0 0 +1417564577 279 0 0 0 0 0 0 +1417640760 280 0 0 0 0 0 0 +1418053512 281 0 0 0 0 0 0 +1418318204 282 0 0 0 0 0 0 +1418318222 283 0 0 0 0 0 0 +1418318240 284 0 0 0 0 0 0 +1418318297 285 0 0 0 0 0 0 +1418318361 286 0 0 0 0 0 0 +1418318417 287 0 0 0 0 0 0 +1418318440 288 0 0 0 0 0 0 +1418318684 290 0 0 0 0 0 0 +1418421690 291 0 0 0 0 0 0 +1418421802 294 0 0 0 0 0 0 +1418746234 295 0 0 0 0 0 0 +1418746500 296 0 0 0 0 0 0 +1418752434 297 0 0 0 0 0 0 +1418755439 298 0 0 0 0 0 0 +1418849653 299 0 0 0 0 0 0 +1418918217 300 0 0 0 0 0 0 +1418940694 301 0 0 0 0 0 0 +1418941834 302 0 0 0 0 0 0 +1419356537 308 0 0 0 0 0 0 +1421161999 309 0 0 0 0 0 0 +1421164187 310 0 0 0 0 0 0 +1421170472 311 0 0 0 0 0 0 +1421182429 312 0 0 0 0 0 0 +1421186075 313 0 0 0 0 0 0 +1421333600 314 0 0 0 0 0 0 +1421362394 315 0 0 0 0 0 0 +1421781546 316 0 0 0 0 0 0 +1421794398 317 0 0 0 0 0 0 +1421858140 318 0 0 0 0 0 0 +1421861618 319 0 0 0 0 0 0 +1421865987 320 0 0 0 0 0 0 +1421870518 321 0 0 0 0 0 0 +1421942808 322 0 0 0 0 0 0 +1421965255 323 0 0 0 0 0 0 +1421965286 324 0 0 0 0 0 0 +1421966627 325 0 0 0 0 0 0 +1422288635 326 0 0 0 0 0 0 +1422288804 327 0 0 0 0 0 0 +1422289212 328 0 0 0 0 0 0 +1422289952 329 0 0 0 0 0 0 +1422290748 330 0 0 0 0 0 0 +1422291553 331 0 0 0 0 0 0 +1422310926 332 0 0 0 0 0 0 +1422372141 333 0 0 0 0 0 0 +1422375118 334 0 0 0 0 0 0 +1422384120 335 0 0 0 0 0 0 +1422386950 336 0 0 0 0 0 0 +1422387963 337 0 0 0 0 0 0 +1422463984 338 0 0 0 0 0 0 +1422478361 339 0 0 0 0 0 0 +1422481852 340 0 0 0 0 0 0 +1422544534 341 0 0 0 0 0 0 +1422565449 342 0 0 0 0 0 0 +1422569286 343 0 0 0 0 0 0 +1422569372 344 0 0 0 0 0 0 +1422861179 344 0 0 0 1 0 0 +1422894999 346 0 0 0 1 0 0 +1422989658 347 0 0 0 1 0 0 +1423167301 348 0 0 0 1 0 0 +1423585125 349 0 0 0 1 0 0 +1423590234 350 0 0 0 1 0 0 +1423596075 351 0 0 0 1 0 0 +1423603626 352 0 0 0 1 0 0 +1423672020 353 0 0 0 1 0 0 +1423753966 354 0 0 0 1 0 0 +1424114643 355 0 0 0 1 0 0 +1424188717 356 0 0 0 1 0 0 +1424193093 357 0 0 0 1 0 0 +1424201771 358 0 0 0 1 0 0 +1424273633 359 0 0 0 1 0 0 +1424279063 360 0 0 0 1 0 0 +1424280071 361 0 0 0 1 0 0 +1424281679 362 0 0 0 1 0 0 +1424288424 363 0 0 0 1 0 0 +1424288546 364 0 0 0 1 0 0 +1424295016 365 0 0 0 1 0 0 +1424465722 366 0 0 0 1 0 0 +1424466815 367 0 0 0 1 0 0 +1424467415 368 0 0 0 1 0 0 +1424712442 369 0 0 0 1 0 0 +1424716942 370 0 0 0 1 0 0 +1424721680 371 0 0 0 1 0 0 +1424791974 372 0 0 0 1 0 0 +1424796525 373 0 0 0 1 0 0 +1424798803 374 0 0 0 1 0 0 +1424798945 375 0 0 0 1 0 0 +1424803751 376 0 0 0 1 0 0 +1424810387 377 0 0 0 1 0 0 +1424810657 378 0 0 0 1 0 0 +1424816551 379 0 0 0 1 0 0 +1424818066 380 0 0 0 1 0 0 +1424878655 381 0 0 0 1 0 0 +1424884467 382 0 0 0 1 0 0 +1424884849 383 0 0 0 1 0 0 +1424892815 384 0 0 0 1 0 0 +1424898072 385 0 0 0 1 0 0 +1425051573 386 0 0 0 1 0 0 +1425067581 387 0 0 0 1 0 0 +1425067690 388 0 0 0 1 0 0 +1425077014 389 0 0 0 1 0 0 +1425309326 390 0 0 0 1 0 0 +1425313422 391 0 0 0 1 0 0 +1425329531 392 0 0 0 1 0 0 +1425337212 393 0 0 0 1 0 0 +1425342674 394 0 0 0 1 0 0 +1425914337 395 0 0 0 1 0 0 +1425917461 396 0 0 0 1 0 0 +1425999980 397 0 0 0 1 0 0 +1426267819 398 0 0 0 1 0 0 +1426273408 399 0 0 0 1 0 0 +1426280545 400 0 0 0 1 0 0 +1426628250 402 0 0 0 1 0 0 +1426778183 403 0 0 0 1 0 0 +1426791438 404 0 0 0 1 0 0 +1426803375 405 0 0 0 1 0 0 +1426804222 406 0 0 0 1 0 0 +1426890119 407 0 0 0 1 0 0 +1427129667 408 0 0 0 1 0 0 +1427133177 409 0 0 0 1 0 0 +1427135813 410 0 0 0 1 0 0 +1427137830 411 0 0 0 1 0 0 +1427139221 412 0 0 0 1 0 0 +1427141290 413 0 0 0 1 0 0 +1427141834 414 0 0 0 1 0 0 +1427206811 415 0 0 0 1 0 0 +1427225995 416 0 0 0 1 0 0 +1427226516 417 0 0 0 1 0 0 +1427228366 419 0 0 0 1 0 0 +1427267795 419 0 0 0 2 0 0 +1427267837 419 0 0 0 3 0 0 +1427294459 420 0 0 0 3 0 0 +1427317966 421 0 0 0 3 0 0 +1427335799 422 0 0 0 3 0 0 +1427349002 422 0 0 0 4 0 0 +1427349639 422 0 0 0 5 0 0 +1427362185 422 0 0 0 6 0 0 +1427362305 422 0 0 0 7 0 0 +1427426891 424 0 0 0 8 0 0 +1427488267 425 0 0 0 8 0 0 +1427789357 425 0 0 0 9 0 0 +1427789410 426 0 0 0 10 0 0 +1427833035 427 0 0 0 10 0 0 +1427917146 428 0 0 0 10 0 0 +1427997681 429 0 0 0 10 0 0 +1428443057 430 0 0 0 10 0 0 +1428513842 431 0 0 0 10 0 0 +1428521668 432 0 0 0 10 0 0 +1428934715 433 0 0 0 10 0 0 +1429112004 434 0 0 0 10 0 0 +1429284766 435 0 0 0 10 0 0 +1429304949 436 0 0 0 10 0 0 +1429310422 437 0 0 0 10 0 0 +1430403827 438 0 0 0 10 0 0 +1431109116 438 1 0 0 10 0 0 +1431110062 439 2 0 0 10 0 0 +1431398393 439 3 0 0 10 0 0 +1432310614 439 4 0 0 10 0 0 +1432310966 439 5 0 0 10 0 0 +1432311075 439 6 0 0 10 0 0 +1432311088 439 7 0 0 10 0 0 +1432311100 439 8 0 0 10 0 0 +1432312050 439 9 0 0 10 0 0 +1432588799 439 9 1 0 10 0 0 +1432588896 439 9 2 0 10 0 0 +1432588954 439 9 3 0 10 0 0 +1432831392 439 10 3 0 10 0 0 +1432831427 439 11 3 0 10 0 0 +1432907636 439 12 3 0 10 0 0 +1432929105 439 13 3 0 10 0 0 +1433175771 439 14 3 0 10 0 0 +1433464018 439 14 4 0 10 0 0 +1433464310 439 14 5 0 10 0 0 +1434132785 439 15 5 0 10 0 0 +1434134581 439 16 5 0 10 0 0 +1434138920 439 17 5 0 10 0 0 +1434138982 439 18 5 0 10 0 0 +1434139189 439 19 5 0 10 0 0 +1434376340 439 20 5 0 10 0 0 +1435836687 439 21 5 0 10 0 0 +1435843824 439 22 5 0 10 0 0 +1436849943 439 22 5 0 10 1 0 +1438269784 439 23 5 0 10 1 0 +1438269918 439 24 5 0 10 1 0 +1438271263 439 25 5 0 10 1 0 +1438273348 439 26 5 0 10 1 0 +1438282294 439 27 5 0 10 1 0 +1438303550 439 28 5 0 10 1 0 +1439397263 439 29 5 0 10 1 0 +1439399146 439 30 5 0 10 1 0 +1441737290 439 31 5 0 10 1 0 +1442267605 439 32 5 0 10 1 0 +1442597513 439 34 5 0 10 1 0 +1442954764 439 35 5 0 10 1 0 +1443018794 439 36 5 0 10 1 0 +1443031570 439 37 5 0 10 1 0 +1443032056 439 38 5 0 10 1 0 +1443119585 439 39 5 0 10 1 0 +1443711951 439 40 5 0 10 1 0 +1443798856 439 41 5 0 10 1 0 +1449685453 439 42 5 0 10 1 0 +1450283272 439 43 5 0 10 1 0 +1450664183 439 44 5 0 10 1 0 +1450666600 439 45 5 0 10 1 0 +1452027169 439 45 6 0 10 1 0 +1452028386 439 45 7 0 10 1 0 +1452200566 439 45 8 0 10 1 0 +1452207430 439 45 9 0 10 1 0 +1452207602 439 47 10 0 10 1 0 +1452212539 439 48 10 0 10 1 0 +1452280833 439 48 11 0 10 1 0 +1452793688 439 49 11 0 10 1 0 +1453224499 439 50 11 0 10 1 0 +1453225168 439 52 11 0 10 1 0 +1453230613 439 53 11 0 10 1 0 +1453323055 439 54 11 0 10 1 0 +1453493571 439 55 11 0 10 1 0 +1453704637 439 55 11 0 10 1 1 +1453825100 439 56 11 0 10 1 1 +1453837575 439 60 11 0 10 1 1 +1453848840 439 61 11 0 10 1 1 +1453953447 439 63 12 0 10 1 1 +1454689867 439 63 13 0 10 1 1 +1455057770 439 63 14 0 10 1 1 +1455660753 439 64 14 0 10 1 1 +1455830872 439 65 14 0 10 1 1 +1455831309 439 66 14 0 10 1 1 +1455831437 439 67 14 0 10 1 1 +1455894228 439 67 15 0 10 1 1 +1455897059 439 67 16 0 10 1 1 +1456110772 439 68 16 0 10 1 1 +1456266997 439 68 17 0 10 1 1 +1456267705 439 68 18 0 10 1 1 +1456269047 439 69 18 0 10 1 1 +1456506668 439 69 19 0 10 1 1 +1456806554 439 70 19 0 10 1 1 +1457141043 439 71 19 0 10 1 1 +1457452520 439 71 20 0 10 1 1 +1457488422 439 71 21 0 10 1 1 +1457563999 439 71 22 0 10 1 1 +1457644085 439 71 23 0 10 1 1 +1457644884 439 71 24 0 10 1 1 +1457646092 439 71 25 0 10 1 1 +1457987370 439 72 25 0 10 1 1 +1457991490 439 72 26 0 10 1 1 +1458004818 439 73 26 0 10 1 1 +1458593314 439 74 26 0 10 1 1 +1458765547 439 75 26 0 10 1 1 +1458914088 439 76 26 0 10 1 1 +1458991612 439 77 26 0 10 1 1 +1459133960 439 78 26 0 10 1 1 +1460047216 439 79 26 0 10 1 1 +1460047380 439 81 27 0 10 1 1 +1460375644 439 83 28 0 10 1 1 +1460380408 439 85 30 0 10 1 1 +1460407428 439 86 30 0 10 1 1 +1460569764 439 86 31 0 10 1 1 +1461074070 439 87 31 0 10 1 1 +1461270656 439 88 32 0 10 1 1 +1461354039 439 88 33 0 10 1 1 +1461551595 439 89 33 0 10 1 1 +1461552637 439 90 33 0 10 1 1 +1462227334 439 91 33 0 10 1 1 +1463152815 439 91 34 0 10 1 1 +1463157617 439 91 35 0 10 1 1 +1463451445 439 91 36 0 10 1 1 +1463451804 439 91 37 0 10 1 1 +1463680867 439 92 37 0 10 1 1 +1463758054 439 93 37 0 10 1 1 +1464031184 439 94 37 0 10 1 1 +1464096601 439 95 37 0 10 1 1 +1464208709 439 96 37 0 10 1 1 +1464237088 439 97 37 0 10 1 1 +1464237194 439 98 37 0 10 1 1 +1464293889 439 99 37 0 10 1 1 +1464793340 439 100 38 0 10 1 1 +1464880180 439 101 38 0 10 1 1 +1464895801 439 102 38 0 10 1 1 +1464902654 439 103 38 0 10 1 1 +1465319220 439 104 39 0 10 1 1 +1465424498 439 105 39 0 10 1 1 +1466648922 439 106 39 0 10 1 1 +1466649684 439 107 39 0 10 1 1 +1466650102 439 108 39 0 10 1 1 +1466701155 439 109 39 0 10 1 1 +1466735347 439 110 39 0 10 1 1 +1466736165 439 111 40 0 10 1 1 +1468180054 439 114 41 0 10 1 1 +1468292316 439 114 42 0 10 1 1 +1468876762 439 114 43 0 10 1 1 +1468876920 439 114 44 0 10 1 1 +1469121939 439 114 45 0 10 1 1 +1469157573 439 115 45 0 10 1 1 +1469552934 439 115 46 0 10 1 1 +1469589171 439 116 47 0 10 1 1 +1469640240 439 117 47 0 10 1 1 +1469723242 439 117 48 0 10 1 1 +1469725928 439 118 48 0 10 1 1 +1469780404 439 119 48 0 10 1 1 +1475506438 439 120 48 0 10 1 1 +1475508328 439 122 48 0 10 1 1 +1475605531 439 124 48 0 10 1 1 +1475759454 439 125 48 0 10 1 1 +1476301940 439 125 49 0 10 1 1 +1477421556 439 126 50 0 10 1 1 +1477427877 439 127 52 0 10 1 1 +1477433230 439 127 53 0 10 1 1 +1477694191 439 127 54 0 10 1 1 +1477939269 439 127 55 0 10 1 1 +1477941012 439 127 56 0 10 1 1 +1478115005 439 127 57 0 10 1 1 +1478288605 439 127 58 0 10 1 1 +1478551645 439 127 59 0 10 1 1 +1478792001 439 127 60 0 10 1 1 +1478814382 439 127 61 0 10 1 1 +1478816505 439 127 62 0 10 1 1 +1478878515 439 127 63 0 10 1 1 +1479419832 439 127 64 0 10 1 1 +1479846967 439 127 65 0 10 1 1 +1480530088 439 127 66 0 10 1 1 +1481670500 439 127 67 0 10 1 1 +1482181507 439 127 68 1 10 1 1 +1482336682 439 127 69 1 10 1 1 +1482340119 439 127 70 1 10 1 1 +1482353511 439 127 71 2 10 1 1 +1482359008 439 127 71 3 10 1 1 +1483455272 439 127 72 4 10 1 1 +1484342644 439 127 72 5 10 1 1 +1484684949 439 127 72 7 10 1 1 +1484772851 439 127 73 8 10 1 1 +1485799035 439 127 75 9 10 1 1 +1485877540 439 127 76 9 10 1 1 +1485877851 439 127 77 9 10 1 1 +1485877920 439 127 78 9 10 1 1 +1485878121 439 127 79 9 10 1 1 +1486146025 439 127 80 9 10 1 1 +1486412376 439 127 81 9 10 1 1 +1486499625 439 127 82 9 10 1 1 +1486755546 439 127 83 9 10 1 1 +1487109340 439 127 84 9 10 1 1 +1487277883 439 127 84 10 10 1 1 +1487783266 439 127 84 13 10 1 1 +1487946215 439 127 86 14 10 1 1 +1487965862 439 127 86 15 10 1 1 +1487966474 439 127 86 16 10 1 1 +1487966964 439 127 86 17 10 1 1 +1488313813 439 127 86 18 10 1 1 +1488406636 439 127 87 18 10 1 1 +1488407109 439 127 88 18 10 1 1 +1488409193 439 127 89 18 10 1 1 +1488560599 439 127 90 18 10 1 1 +1488773682 439 127 90 19 10 1 1 +1488814084 439 127 91 19 10 1 1 +1488815988 439 127 92 19 10 1 1 +1489686589 439 127 93 19 10 1 1 +1490023066 439 127 95 19 10 1 1 +1490035644 439 127 96 19 10 1 1 +1490041875 439 127 97 19 10 1 1 +1490113585 439 127 98 19 10 1 1 +1490120437 439 127 99 19 10 1 1 +1490128257 439 127 100 19 10 1 1 +1490645760 439 127 101 19 10 1 1 +1490725467 439 127 102 19 10 1 1 +1491336954 439 127 103 19 10 1 1 +1491341896 439 127 104 19 10 1 1 +1492026512 439 127 105 19 10 1 1 +1492107919 439 127 106 19 10 1 1 +1492108901 439 127 107 19 10 1 1 +1492435237 439 127 108 19 10 1 1 +1492435982 439 127 109 19 10 1 1 +1492454272 439 127 110 19 10 1 1 +1493052262 439 127 110 20 10 1 1 +1493153070 439 127 111 20 10 1 1 +1493407521 439 127 112 20 10 1 1 +1493412286 439 127 113 20 10 1 1 diff --git a/FlaskTest/static/data/test_repo/data2_dummy.tsv b/FlaskTest/static/data/test_repo/data2_dummy.tsv new file mode 100644 index 0000000..ee94f59 --- /dev/null +++ b/FlaskTest/static/data/test_repo/data2_dummy.tsv @@ -0,0 +1,169 @@ +day hour value +1 1 88 +1 2 20 +1 3 44 +1 4 0 +1 5 33 +1 6 2 +1 7 0 +1 8 9 +1 9 25 +1 10 1 +1 11 57 +1 12 61 +1 13 22 +1 14 25 +1 15 7 +1 16 55 +1 17 51 +1 18 4 +1 19 17 +1 20 20 +1 21 4 +1 22 4 +1 23 6 +1 24 12 +2 1 6 +2 2 22 +2 3 0 +2 4 0 +2 5 33 +2 6 5 +2 7 4 +2 8 8 +2 9 28 +2 10 99 +2 11 51 +2 12 66 +2 13 38 +2 14 39 +2 15 60 +2 16 22 +2 17 65 +2 18 50 +2 19 22 +2 20 11 +2 21 12 +2 22 9 +2 23 33 +2 24 13 +3 1 5 +3 2 8 +3 3 44 +3 4 0 +3 5 12 +3 6 2 +3 7 5 +3 8 12 +3 9 34 +3 10 43 +3 11 54 +3 12 44 +3 13 40 +3 14 48 +3 15 54 +3 16 59 +3 17 60 +3 18 51 +3 19 21 +3 20 16 +3 21 9 +3 22 5 +3 23 24 +3 24 7 +4 1 22 +4 2 33 +4 3 102 +4 4 33 +4 5 0 +4 6 2 +4 7 4 +4 8 13 +4 9 26 +4 10 58 +4 11 61 +4 12 59 +4 13 53 +4 14 54 +4 15 64 +4 16 55 +4 17 52 +4 18 53 +4 19 18 +4 20 3 +4 21 9 +4 22 12 +4 23 2 +4 24 8 +5 1 2 +5 2 0 +5 3 8 +5 4 2 +5 5 0 +5 6 2 +5 7 4 +5 8 14 +5 9 31 +5 10 48 +5 11 46 +5 12 50 +5 13 66 +5 14 54 +5 15 56 +5 16 67 +5 17 54 +5 18 23 +5 19 14 +5 20 6 +5 21 8 +5 22 7 +5 23 0 +5 24 84 +6 1 11 +6 2 22 +6 3 33 +6 4 44 +6 5 4 +6 6 0 +6 7 4 +6 8 8 +6 9 8 +6 10 6 +6 11 14 +6 12 12 +6 13 9 +6 14 14 +6 15 0 +6 16 4 +6 17 7 +6 18 6 +6 19 42 +6 20 5 +6 21 77 +6 22 32 +6 23 41 +6 24 0 +7 1 7 +7 2 6 +7 3 11 +7 4 22 +7 5 33 +7 6 44 +7 7 66 +7 8 5 +7 9 33 +7 10 0 +7 11 2 +7 12 2 +7 13 44 +7 14 6 +7 15 0 +7 16 4 +7 17 33 +7 18 2 +7 19 10 +7 20 7 +7 21 0 +7 22 19 +7 23 9 +7 24 4 \ No newline at end of file diff --git a/FlaskTest/static/data/test_repo/data_dummy.tsv b/FlaskTest/static/data/test_repo/data_dummy.tsv new file mode 100644 index 0000000..a10dd51 --- /dev/null +++ b/FlaskTest/static/data/test_repo/data_dummy.tsv @@ -0,0 +1,169 @@ +day hour value +1 1 16 +1 2 20 +1 3 0 +1 4 0 +1 5 0 +1 6 2 +1 7 0 +1 8 9 +1 9 25 +1 10 49 +1 11 57 +1 12 61 +1 13 37 +1 14 66 +1 15 70 +1 16 55 +1 17 51 +1 18 55 +1 19 17 +1 20 20 +1 21 9 +1 22 4 +1 23 0 +1 24 12 +2 1 6 +2 2 2 +2 3 0 +2 4 0 +2 5 0 +2 6 2 +2 7 4 +2 8 11 +2 9 28 +2 10 49 +2 11 51 +2 12 47 +2 13 38 +2 14 65 +2 15 60 +2 16 50 +2 17 65 +2 18 50 +2 19 22 +2 20 11 +2 21 12 +2 22 9 +2 23 0 +2 24 13 +3 1 5 +3 2 8 +3 3 8 +3 4 0 +3 5 0 +3 6 2 +3 7 5 +3 8 12 +3 9 34 +3 10 43 +3 11 54 +3 12 44 +3 13 40 +3 14 48 +3 15 54 +3 16 59 +3 17 60 +3 18 51 +3 19 21 +3 20 16 +3 21 9 +3 22 5 +3 23 4 +3 24 7 +4 1 0 +4 2 0 +4 3 0 +4 4 0 +4 5 0 +4 6 2 +4 7 4 +4 8 13 +4 9 26 +4 10 58 +4 11 61 +4 12 59 +4 13 53 +4 14 54 +4 15 64 +4 16 55 +4 17 52 +4 18 53 +4 19 18 +4 20 3 +4 21 9 +4 22 12 +4 23 2 +4 24 8 +5 1 2 +5 2 0 +5 3 8 +5 4 2 +5 5 0 +5 6 2 +5 7 4 +5 8 14 +5 9 31 +5 10 48 +5 11 46 +5 12 50 +5 13 66 +5 14 54 +5 15 56 +5 16 67 +5 17 54 +5 18 23 +5 19 14 +5 20 6 +5 21 8 +5 22 7 +5 23 0 +5 24 8 +6 1 2 +6 2 0 +6 3 2 +6 4 0 +6 5 0 +6 6 0 +6 7 4 +6 8 8 +6 9 8 +6 10 6 +6 11 14 +6 12 12 +6 13 9 +6 14 14 +6 15 0 +6 16 4 +6 17 7 +6 18 6 +6 19 0 +6 20 0 +6 21 0 +6 22 0 +6 23 0 +6 24 0 +7 1 7 +7 2 6 +7 3 0 +7 4 0 +7 5 0 +7 6 0 +7 7 0 +7 8 0 +7 9 0 +7 10 0 +7 11 2 +7 12 2 +7 13 5 +7 14 6 +7 15 0 +7 16 4 +7 17 0 +7 18 2 +7 19 10 +7 20 7 +7 21 0 +7 22 19 +7 23 9 +7 24 4 \ No newline at end of file diff --git a/FlaskTest/static/data/test_repo/day_of_week_copy.tsv b/FlaskTest/static/data/test_repo/day_of_week_copy.tsv new file mode 100644 index 0000000..0458b8b --- /dev/null +++ b/FlaskTest/static/data/test_repo/day_of_week_copy.tsv @@ -0,0 +1,8 @@ +day_number day_name commits +1 Mon 148 +2 Tue 176 +3 Wed 120 +4 Thu 153 +5 Fri 101 +6 Sat 1 +7 Sun 12 diff --git a/FlaskTest/static/data/test_repo/lines_of_code_by_author_copy.tsv b/FlaskTest/static/data/test_repo/lines_of_code_by_author_copy.tsv new file mode 100644 index 0000000..19ccaea --- /dev/null +++ b/FlaskTest/static/data/test_repo/lines_of_code_by_author_copy.tsv @@ -0,0 +1,617 @@ +date author1 author2 author3 author4 author5 author6 author7 +1392392111 27013 0 0 0 0 0 0 +1392397527 27021 0 0 0 0 0 0 +1392830779 27024 0 0 0 0 0 0 +1392841719 27573 0 0 0 0 0 0 +1392844458 27597 0 0 0 0 0 0 +1392852040 27702 0 0 0 0 0 0 +1392933375 27702 0 0 0 0 0 0 +1393016220 27706 0 0 0 0 0 0 +1393018032 27706 0 0 0 0 0 0 +1393272179 27723 0 0 0 0 0 0 +1393356877 27861 0 0 0 0 0 0 +1393357414 27864 0 0 0 0 0 0 +1393437911 27903 0 0 0 0 0 0 +1393442422 28012 0 0 0 0 0 0 +1393515175 28021 0 0 0 0 0 0 +1393531146 28032 0 0 0 0 0 0 +1393532869 28039 0 0 0 0 0 0 +1393534919 28087 0 0 0 0 0 0 +1393540722 28089 0 0 0 0 0 0 +1393861723 28100 0 0 0 0 0 0 +1394035569 28126 0 0 0 0 0 0 +1394039661 28188 0 0 0 0 0 0 +1394054732 28301 0 0 0 0 0 0 +1394055920 28303 0 0 0 0 0 0 +1394056588 28307 0 0 0 0 0 0 +1394119672 28320 0 0 0 0 0 0 +1394125181 28328 0 0 0 0 0 0 +1394145913 33119 0 0 0 0 0 0 +1394460626 33126 0 0 0 0 0 0 +1394465228 33150 0 0 0 0 0 0 +1394467610 33176 0 0 0 0 0 0 +1394470538 33176 0 0 0 0 0 0 +1394478517 33239 0 0 0 0 0 0 +1394487470 33251 0 0 0 0 0 0 +1394546208 33287 0 0 0 0 0 0 +1394549933 33300 0 0 0 0 0 0 +1394573638 33509 0 0 0 0 0 0 +1394730184 33513 0 0 0 0 0 0 +1394732727 33853 0 0 0 0 0 0 +1395071699 33905 0 0 0 0 0 0 +1395080218 33955 0 0 0 0 0 0 +1395084092 37195 0 0 0 0 0 0 +1395243935 37258 0 0 0 0 0 0 +1395261876 37417 0 0 0 0 0 0 +1395324514 37422 0 0 0 0 0 0 +1395347240 37423 0 0 0 0 0 0 +1395418555 37453 0 0 0 0 0 0 +1395675797 37472 0 0 0 0 0 0 +1395682889 37517 0 0 0 0 0 0 +1395687258 37709 0 0 0 0 0 0 +1395687758 37710 0 0 0 0 0 0 +1395695371 37779 0 0 0 0 0 0 +1395759924 37795 0 0 0 0 0 0 +1395781761 37854 0 0 0 0 0 0 +1395931149 37969 0 0 0 0 0 0 +1395955619 38207 0 0 0 0 0 0 +1396017083 38220 0 0 0 0 0 0 +1396018452 38220 0 0 0 0 0 0 +1396033193 38685 0 0 0 0 0 0 +1396034898 38685 0 0 0 0 0 0 +1396036712 38779 0 0 0 0 0 0 +1396293025 38828 0 0 0 0 0 0 +1396379166 38831 0 0 0 0 0 0 +1396379379 38852 0 0 0 0 0 0 +1396469103 40876 0 0 0 0 0 0 +1396469896 40878 0 0 0 0 0 0 +1396472129 40897 0 0 0 0 0 0 +1396474065 41011 0 0 0 0 0 0 +1396541016 41018 0 0 0 0 0 0 +1396638448 41021 0 0 0 0 0 0 +1396639995 41023 0 0 0 0 0 0 +1396885855 41027 0 0 0 0 0 0 +1396899853 41086 0 0 0 0 0 0 +1396984335 41355 0 0 0 0 0 0 +1397247297 41409 0 0 0 0 0 0 +1397248748 41410 0 0 0 0 0 0 +1397484607 41417 0 0 0 0 0 0 +1397491609 41573 0 0 0 0 0 0 +1397501654 41592 0 0 0 0 0 0 +1397502552 41660 0 0 0 0 0 0 +1397508171 41724 0 0 0 0 0 0 +1397593977 41896 0 0 0 0 0 0 +1397596834 41896 0 0 0 0 0 0 +1397681905 41970 0 0 0 0 0 0 +1397747221 42529 0 0 0 0 0 0 +1397751241 42589 0 0 0 0 0 0 +1397754140 42612 0 0 0 0 0 0 +1398106573 42712 0 0 0 0 0 0 +1398190593 42714 0 0 0 0 0 0 +1398265425 42715 0 0 0 0 0 0 +1398265460 42922 0 0 0 0 0 0 +1398268479 42922 0 0 0 0 0 0 +1398271735 42978 0 0 0 0 0 0 +1398278671 42981 0 0 0 0 0 0 +1398282984 42983 0 0 0 0 0 0 +1398373748 42984 0 0 0 0 0 0 +1398434861 42998 0 0 0 0 0 0 +1398437720 43001 0 0 0 0 0 0 +1398697019 43001 0 0 0 0 0 0 +1398699790 43005 0 0 0 0 0 0 +1398715690 43016 0 0 0 0 0 0 +1398716189 43088 0 0 0 0 0 0 +1398718090 43089 0 0 0 0 0 0 +1398797186 43172 0 0 0 0 0 0 +1398799360 43172 0 0 0 0 0 0 +1398800327 43395 0 0 0 0 0 0 +1399305448 43420 0 0 0 0 0 0 +1399315892 43422 0 0 0 0 0 0 +1399315910 43422 0 0 0 0 0 0 +1399316102 43423 0 0 0 0 0 0 +1399387116 43505 0 0 0 0 0 0 +1399388283 43506 0 0 0 0 0 0 +1399389375 43510 0 0 0 0 0 0 +1399564137 43513 0 0 0 0 0 0 +1399666061 43517 0 0 0 0 0 0 +1399905905 43973 0 0 0 0 0 0 +1399991114 43975 0 0 0 0 0 0 +1400189261 44019 0 0 0 0 0 0 +1400529215 77954 0 0 0 0 0 0 +1401293283 77959 0 0 0 0 0 0 +1401296335 77960 0 0 0 0 0 0 +1401386785 78042 0 0 0 0 0 0 +1402341065 78044 0 0 0 0 0 0 +1402342238 78045 0 0 0 0 0 0 +1402428124 78049 0 0 0 0 0 0 +1402431333 78084 0 0 0 0 0 0 +1402511788 78089 0 0 0 0 0 0 +1402512041 78163 0 0 0 0 0 0 +1402595862 78163 0 0 0 0 0 0 +1403192924 78164 0 0 0 0 0 0 +1403206094 78187 0 0 0 0 0 0 +1403280442 78193 0 0 0 0 0 0 +1403535284 78194 0 0 0 0 0 0 +1403541811 78195 0 0 0 0 0 0 +1403636781 78915 0 0 0 0 0 0 +1403637528 78942 0 0 0 0 0 0 +1403724192 78981 0 0 0 0 0 0 +1403732386 78985 0 0 0 0 0 0 +1404142813 79122 0 0 0 0 0 0 +1404248505 79126 0 0 0 0 0 0 +1404915912 79235 0 0 0 0 0 0 +1404923241 79236 0 0 0 0 0 0 +1404923409 79295 0 0 0 0 0 0 +1405002584 79296 0 0 0 0 0 0 +1405003854 79310 0 0 0 0 0 0 +1405021172 79321 0 0 0 0 0 0 +1405023400 79339 0 0 0 0 0 0 +1405113290 79348 0 0 0 0 0 0 +1405348976 79350 0 0 0 0 0 0 +1405361989 79422 0 0 0 0 0 0 +1405364123 79437 0 0 0 0 0 0 +1405447703 79441 0 0 0 0 0 0 +1405540116 79443 0 0 0 0 0 0 +1406040988 79533 0 0 0 0 0 0 +1406041836 79540 0 0 0 0 0 0 +1406052691 79555 0 0 0 0 0 0 +1406055617 79580 0 0 0 0 0 0 +1406055678 79581 0 0 0 0 0 0 +1406225786 79677 0 0 0 0 0 0 +1406231654 79678 0 0 0 0 0 0 +1406235975 85571 0 0 0 0 0 0 +1406297884 85594 0 0 0 0 0 0 +1406312943 85746 0 0 0 0 0 0 +1406325886 85752 0 0 0 0 0 0 +1406563924 85761 0 0 0 0 0 0 +1406564839 85762 0 0 0 0 0 0 +1406670247 85884 0 0 0 0 0 0 +1406734781 85901 0 0 0 0 0 0 +1406754307 86541 0 0 0 0 0 0 +1406834212 86552 0 0 0 0 0 0 +1407185931 86553 0 0 0 0 0 0 +1407255136 86619 0 0 0 0 0 0 +1407268137 86620 0 0 0 0 0 0 +1408040736 86622 0 0 0 0 0 0 +1408138667 86622 0 0 0 0 0 0 +1408481183 86623 0 0 0 0 0 0 +1408976252 86624 0 0 0 0 0 0 +1408976366 86669 0 0 0 0 0 0 +1408976476 86669 0 0 0 0 0 0 +1408983121 86683 0 0 0 0 0 0 +1409078217 86713 0 0 0 0 0 0 +1409244667 86713 0 0 0 0 0 0 +1409253116 86978 0 0 0 0 0 0 +1409259944 87041 0 0 0 0 0 0 +1409672806 87123 0 0 0 0 0 0 +1410206464 87129 0 0 0 0 0 0 +1410207080 87130 0 0 0 0 0 0 +1410287098 87132 0 0 0 0 0 0 +1410551535 87149 0 0 0 0 0 0 +1411486906 87153 0 0 0 0 0 0 +1411658801 88057 0 0 0 0 0 0 +1412085855 88077 0 0 0 0 0 0 +1412093603 88189 0 0 0 0 0 0 +1412103242 88196 0 0 0 0 0 0 +1412103800 88198 0 0 0 0 0 0 +1412106592 88200 0 0 0 0 0 0 +1412110451 88218 0 0 0 0 0 0 +1412110505 88230 0 0 0 0 0 0 +1412110521 88331 0 0 0 0 0 0 +1412171582 88332 0 0 0 0 0 0 +1412178008 88342 0 0 0 0 0 0 +1412182838 88428 0 0 0 0 0 0 +1412265983 88431 0 0 0 0 0 0 +1412275768 88435 0 0 0 0 0 0 +1412369691 88439 0 0 0 0 0 0 +1412625476 88621 0 0 0 0 0 0 +1412715931 88622 0 0 0 0 0 0 +1413222749 88885 0 0 0 0 0 0 +1414522504 91054 0 0 0 0 0 0 +1415144579 91782 0 0 0 0 0 0 +1415218924 91785 0 0 0 0 0 0 +1415219022 91785 0 0 0 0 0 0 +1415220994 91867 0 0 0 0 0 0 +1415319788 91879 0 0 0 0 0 0 +1415319862 91881 0 0 0 0 0 0 +1415321087 91883 0 0 0 0 0 0 +1415395231 91883 0 0 0 0 0 0 +1415649515 91953 0 0 0 0 0 0 +1415652685 91974 0 0 0 0 0 0 +1415717488 91977 0 0 0 0 0 0 +1415724534 91982 0 0 0 0 0 0 +1415726692 92021 0 0 0 0 0 0 +1415728253 92036 0 0 0 0 0 0 +1415734870 92058 0 0 0 0 0 0 +1415736053 92059 0 0 0 0 0 0 +1415738826 92066 0 0 0 0 0 0 +1415742817 92346 0 0 0 0 0 0 +1415745888 92507 0 0 0 0 0 0 +1415823605 92559 0 0 0 0 0 0 +1415832007 92591 0 0 0 0 0 0 +1416239521 92592 0 0 0 0 0 0 +1416245778 92594 0 0 0 0 0 0 +1416350686 92638 0 0 0 0 0 0 +1416612373 92865 0 0 0 0 0 0 +1417464052 92875 0 0 0 0 0 0 +1417464390 92878 0 0 0 0 0 0 +1417534843 92952 0 0 0 0 0 0 +1417549520 92979 0 0 0 0 0 0 +1417553492 92989 0 0 0 0 0 0 +1417564577 93069 0 0 0 0 0 0 +1417640760 93089 0 0 0 0 0 0 +1418053512 93092 0 0 0 0 0 0 +1418318204 93116 0 0 0 0 0 0 +1418318222 93134 0 0 0 0 0 0 +1418318240 93138 0 0 0 0 0 0 +1418318297 93173 0 0 0 0 0 0 +1418318361 93174 0 0 0 0 0 0 +1418318417 93217 0 0 0 0 0 0 +1418318440 93218 0 0 0 0 0 0 +1418318684 93221 0 0 0 0 0 0 +1418421690 93224 0 0 0 0 0 0 +1418421802 93264 0 0 0 0 0 0 +1418746234 93299 0 0 0 0 0 0 +1418746500 93377 0 0 0 0 0 0 +1418752434 93395 0 0 0 0 0 0 +1418755439 93488 0 0 0 0 0 0 +1418849653 93497 0 0 0 0 0 0 +1418918217 93521 0 0 0 0 0 0 +1418940694 93661 0 0 0 0 0 0 +1418941834 93685 0 0 0 0 0 0 +1419356537 99684 0 0 0 0 0 0 +1421161999 99703 0 0 0 0 0 0 +1421164187 99713 0 0 0 0 0 0 +1421170472 99724 0 0 0 0 0 0 +1421182429 99726 0 0 0 0 0 0 +1421186075 99727 0 0 0 0 0 0 +1421333600 99732 0 0 0 0 0 0 +1421362394 99757 0 0 0 0 0 0 +1421781546 99780 0 0 0 0 0 0 +1421794398 99788 0 0 0 0 0 0 +1421858140 99792 0 0 0 0 0 0 +1421861618 99843 0 0 0 0 0 0 +1421865987 99884 0 0 0 0 0 0 +1421870518 99887 0 0 0 0 0 0 +1421942808 99893 0 0 0 0 0 0 +1421965255 99939 0 0 0 0 0 0 +1421965286 100061 0 0 0 0 0 0 +1421966627 100064 0 0 0 0 0 0 +1422288635 100064 0 0 0 0 0 0 +1422288804 100071 0 0 0 0 0 0 +1422289212 100071 0 0 0 0 0 0 +1422289952 100087 0 0 0 0 0 0 +1422290748 100091 0 0 0 0 0 0 +1422291553 100096 0 0 0 0 0 0 +1422310926 100177 0 0 0 0 0 0 +1422372141 100178 0 0 0 0 0 0 +1422375118 100181 0 0 0 0 0 0 +1422384120 100195 0 0 0 0 0 0 +1422386950 100246 0 0 0 0 0 0 +1422387963 100261 0 0 0 0 0 0 +1422463984 100410 0 0 0 0 0 0 +1422478361 100413 0 0 0 0 0 0 +1422481852 100762 0 0 0 0 0 0 +1422544534 100762 0 0 0 0 0 0 +1422565449 100764 0 0 0 0 0 0 +1422569286 100766 0 0 0 0 0 0 +1422569372 100846 0 0 0 0 0 0 +1422861179 100846 0 0 0 5 0 0 +1422894999 100854 0 0 0 5 0 0 +1422989658 100870 0 0 0 5 0 0 +1423167301 100920 0 0 0 5 0 0 +1423585125 100920 0 0 0 5 0 0 +1423590234 100922 0 0 0 5 0 0 +1423596075 100928 0 0 0 5 0 0 +1423603626 101018 0 0 0 5 0 0 +1423672020 101019 0 0 0 5 0 0 +1423753966 101019 0 0 0 5 0 0 +1424114643 101028 0 0 0 5 0 0 +1424188717 101042 0 0 0 5 0 0 +1424193093 101101 0 0 0 5 0 0 +1424201771 101142 0 0 0 5 0 0 +1424273633 101194 0 0 0 5 0 0 +1424279063 101242 0 0 0 5 0 0 +1424280071 101326 0 0 0 5 0 0 +1424281679 101357 0 0 0 5 0 0 +1424288424 101438 0 0 0 5 0 0 +1424288546 101520 0 0 0 5 0 0 +1424295016 101553 0 0 0 5 0 0 +1424465722 101565 0 0 0 5 0 0 +1424466815 101573 0 0 0 5 0 0 +1424467415 101662 0 0 0 5 0 0 +1424712442 101669 0 0 0 5 0 0 +1424716942 101730 0 0 0 5 0 0 +1424721680 101751 0 0 0 5 0 0 +1424791974 101756 0 0 0 5 0 0 +1424796525 101766 0 0 0 5 0 0 +1424798803 101771 0 0 0 5 0 0 +1424798945 101795 0 0 0 5 0 0 +1424803751 101915 0 0 0 5 0 0 +1424810387 101926 0 0 0 5 0 0 +1424810657 101941 0 0 0 5 0 0 +1424816551 102008 0 0 0 5 0 0 +1424818066 102010 0 0 0 5 0 0 +1424878655 102148 0 0 0 5 0 0 +1424884467 102148 0 0 0 5 0 0 +1424884849 102657 0 0 0 5 0 0 +1424892815 102721 0 0 0 5 0 0 +1424898072 102726 0 0 0 5 0 0 +1425051573 102736 0 0 0 5 0 0 +1425067581 102789 0 0 0 5 0 0 +1425067690 102794 0 0 0 5 0 0 +1425077014 102794 0 0 0 5 0 0 +1425309326 102794 0 0 0 5 0 0 +1425313422 102795 0 0 0 5 0 0 +1425329531 102795 0 0 0 5 0 0 +1425337212 102869 0 0 0 5 0 0 +1425342674 102877 0 0 0 5 0 0 +1425914337 102896 0 0 0 5 0 0 +1425917461 102914 0 0 0 5 0 0 +1425999980 102915 0 0 0 5 0 0 +1426267819 102918 0 0 0 5 0 0 +1426273408 102938 0 0 0 5 0 0 +1426280545 102946 0 0 0 5 0 0 +1426628250 102956 0 0 0 5 0 0 +1426778183 102958 0 0 0 5 0 0 +1426791438 102978 0 0 0 5 0 0 +1426803375 102985 0 0 0 5 0 0 +1426804222 102989 0 0 0 5 0 0 +1426890119 103061 0 0 0 5 0 0 +1427129667 103071 0 0 0 5 0 0 +1427133177 103105 0 0 0 5 0 0 +1427135813 103107 0 0 0 5 0 0 +1427137830 103185 0 0 0 5 0 0 +1427139221 103186 0 0 0 5 0 0 +1427141290 103201 0 0 0 5 0 0 +1427141834 103203 0 0 0 5 0 0 +1427206811 103207 0 0 0 5 0 0 +1427225995 103211 0 0 0 5 0 0 +1427226516 103213 0 0 0 5 0 0 +1427228366 131222 0 0 0 5 0 0 +1427267795 131222 0 0 0 74 0 0 +1427267837 131222 0 0 0 77 0 0 +1427294459 131228 0 0 0 77 0 0 +1427317966 131235 0 0 0 77 0 0 +1427335799 131235 0 0 0 77 0 0 +1427349002 131235 0 0 0 77 0 0 +1427349639 131235 0 0 0 79 0 0 +1427362185 131235 0 0 0 157 0 0 +1427362305 131235 0 0 0 161 0 0 +1427426891 131327 0 0 0 167 0 0 +1427488267 131335 0 0 0 167 0 0 +1427789357 131335 0 0 0 169 0 0 +1427789410 131337 0 0 0 195 0 0 +1427833035 131337 0 0 0 195 0 0 +1427917146 131337 0 0 0 195 0 0 +1427997681 131342 0 0 0 195 0 0 +1428443057 131359 0 0 0 195 0 0 +1428513842 131365 0 0 0 195 0 0 +1428521668 131382 0 0 0 195 0 0 +1428934715 131387 0 0 0 195 0 0 +1429112004 131391 0 0 0 195 0 0 +1429284766 235670 0 0 0 195 0 0 +1429304949 235700 0 0 0 195 0 0 +1429310422 235708 0 0 0 195 0 0 +1430403827 235710 0 0 0 195 0 0 +1431109116 235710 0 0 0 195 0 0 +1431110062 235718 0 0 0 195 0 0 +1431398393 235718 0 0 0 195 0 0 +1432310614 235718 23 0 0 195 0 0 +1432310966 235718 23 0 0 195 0 0 +1432311075 235718 23 0 0 195 0 0 +1432311088 235718 53 0 0 195 0 0 +1432311100 235718 53 0 0 195 0 0 +1432312050 235718 67 0 0 195 0 0 +1432588799 235718 67 1 0 195 0 0 +1432588896 235718 67 15 0 195 0 0 +1432588954 235718 67 17 0 195 0 0 +1432831392 235718 75 17 0 195 0 0 +1432831427 235718 75 17 0 195 0 0 +1432907636 235718 75 17 0 195 0 0 +1432929105 235718 122 17 0 195 0 0 +1433175771 235718 151 17 0 195 0 0 +1433464018 235718 151 75 0 195 0 0 +1433464310 235718 151 90 0 195 0 0 +1434132785 235718 151 90 0 195 0 0 +1434134581 235718 151 90 0 195 0 0 +1434138920 235718 157 90 0 195 0 0 +1434138982 235718 157 90 0 195 0 0 +1434139189 235718 158 90 0 195 0 0 +1434376340 235718 180 90 0 195 0 0 +1435836687 235718 180 90 0 195 0 0 +1435843824 235718 194 90 0 195 0 0 +1436849943 235718 194 90 0 195 8 0 +1438269784 235718 1029 90 0 195 8 0 +1438269918 235718 1029 90 0 195 8 0 +1438271263 235718 1035 90 0 195 8 0 +1438273348 235718 2894 90 0 195 8 0 +1438282294 235718 2894 90 0 195 8 0 +1438303550 235718 2935 90 0 195 8 0 +1439397263 235718 2965 90 0 195 8 0 +1439399146 235718 2982 90 0 195 8 0 +1441737290 235718 5196 90 0 195 8 0 +1442267605 235718 5300 90 0 195 8 0 +1442597513 235718 5308 90 0 195 8 0 +1442954764 235718 5308 90 0 195 8 0 +1443018794 235718 5331 90 0 195 8 0 +1443031570 235718 5370 90 0 195 8 0 +1443032056 235718 5370 90 0 195 8 0 +1443119585 235718 5390 90 0 195 8 0 +1443711951 235718 5465 90 0 195 8 0 +1443798856 235718 5478 90 0 195 8 0 +1449685453 235718 10423 90 0 195 8 0 +1450283272 235718 11105 90 0 195 8 0 +1450664183 235718 11363 90 0 195 8 0 +1450666600 235718 11389 90 0 195 8 0 +1452027169 235718 11389 93 0 195 8 0 +1452028386 235718 11389 1094 0 195 8 0 +1452200566 235718 11389 1143 0 195 8 0 +1452207430 235718 11389 1319 0 195 8 0 +1452207602 235718 11395 1324 0 195 8 0 +1452212539 235718 11420 1324 0 195 8 0 +1452280833 235718 11420 1325 0 195 8 0 +1452793688 235718 11439 1325 0 195 8 0 +1453224499 235718 11448 1325 0 195 8 0 +1453225168 235718 11457 1325 0 195 8 0 +1453230613 235718 11457 1325 0 195 8 0 +1453323055 235718 11525 1325 0 195 8 0 +1453493571 235718 11562 1325 0 195 8 0 +1453704637 235718 11562 1325 0 195 8 24 +1453825100 235718 11590 1325 0 195 8 24 +1453837575 235718 11715 1325 0 195 8 24 +1453848840 235718 11715 1325 0 195 8 24 +1453953447 235718 13364 1380 0 195 8 24 +1454689867 235718 13364 1431 0 195 8 24 +1455057770 235718 13364 1447 0 195 8 24 +1455660753 235718 13423 1447 0 195 8 24 +1455830872 235718 13459 1447 0 195 8 24 +1455831309 235718 13475 1447 0 195 8 24 +1455831437 235718 13502 1447 0 195 8 24 +1455894228 235718 13502 1708 0 195 8 24 +1455897059 235718 13502 1713 0 195 8 24 +1456110772 235718 13525 1713 0 195 8 24 +1456266997 235718 13525 1718 0 195 8 24 +1456267705 235718 13525 1724 0 195 8 24 +1456269047 235718 14252 1724 0 195 8 24 +1456506668 235718 14252 2037 0 195 8 24 +1456806554 235718 14268 2037 0 195 8 24 +1457141043 235718 14273 2037 0 195 8 24 +1457452520 235718 14273 2045 0 195 8 24 +1457488422 235718 14273 2051 0 195 8 24 +1457563999 235718 14273 2249 0 195 8 24 +1457644085 235718 14273 2539 0 195 8 24 +1457644884 235718 14273 2683 0 195 8 24 +1457646092 235718 14273 2684 0 195 8 24 +1457987370 235718 14281 2684 0 195 8 24 +1457991490 235718 14281 2692 0 195 8 24 +1458004818 235718 14303 2692 0 195 8 24 +1458593314 235718 14310 2692 0 195 8 24 +1458765547 235718 14382 2692 0 195 8 24 +1458914088 235718 14390 2692 0 195 8 24 +1458991612 235718 14405 2692 0 195 8 24 +1459133960 235718 14421 2692 0 195 8 24 +1460047216 235718 14429 2692 0 195 8 24 +1460047380 235718 14451 2730 0 195 8 24 +1460375644 235718 14636 2730 0 195 8 24 +1460380408 235718 14685 2764 0 195 8 24 +1460407428 235718 14736 2764 0 195 8 24 +1460569764 235718 14736 2764 0 195 8 24 +1461074070 235718 14755 2764 0 195 8 24 +1461270656 235718 14768 2835 0 195 8 24 +1461354039 235718 14768 2841 0 195 8 24 +1461551595 235718 14768 2841 0 195 8 24 +1461552637 235718 14791 2841 0 195 8 24 +1462227334 235718 14959 2841 0 195 8 24 +1463152815 235718 14959 2906 0 195 8 24 +1463157617 235718 14959 2945 0 195 8 24 +1463451445 235718 14959 2980 0 195 8 24 +1463451804 235718 14959 3031 0 195 8 24 +1463680867 235718 15014 3031 0 195 8 24 +1463758054 235718 15029 3031 0 195 8 24 +1464031184 235718 15037 3031 0 195 8 24 +1464096601 235718 15043 3031 0 195 8 24 +1464208709 235718 15043 3031 0 195 8 24 +1464237088 235718 15084 3031 0 195 8 24 +1464237194 235718 15115 3031 0 195 8 24 +1464293889 235718 15115 3031 0 195 8 24 +1464793340 235718 15120 3102 0 195 8 24 +1464880180 235718 15120 3102 0 195 8 24 +1464895801 235718 15139 3102 0 195 8 24 +1464902654 235718 15155 3102 0 195 8 24 +1465319220 235718 15195 3168 0 195 8 24 +1465424498 235718 15216 3168 0 195 8 24 +1466648922 235718 15263 3168 0 195 8 24 +1466649684 235718 15270 3168 0 195 8 24 +1466650102 235718 15335 3168 0 195 8 24 +1466701155 235718 15352 3168 0 195 8 24 +1466735347 235718 15361 3168 0 195 8 24 +1466736165 235718 15387 3174 0 195 8 24 +1468180054 235718 15459 3240 0 195 8 24 +1468292316 235718 15459 3262 0 195 8 24 +1468876762 235718 15459 3270 0 195 8 24 +1468876920 235718 15459 3277 0 195 8 24 +1469121939 235718 15459 3315 0 195 8 24 +1469157573 235718 15487 3315 0 195 8 24 +1469552934 235718 15487 3346 0 195 8 24 +1469589171 235718 15552 3360 0 195 8 24 +1469640240 235718 15577 3360 0 195 8 24 +1469723242 235718 15577 3362 0 195 8 24 +1469725928 235718 15602 3362 0 195 8 24 +1469780404 235718 15617 3362 0 195 8 24 +1475506438 235718 15618 3362 0 195 8 24 +1475508328 235718 15765 3362 0 195 8 24 +1475605531 235718 15898 3362 0 195 8 24 +1475759454 235718 15918 3362 0 195 8 24 +1476301940 235718 15918 3362 0 195 8 24 +1477421556 235718 15918 3376 0 195 8 24 +1477427877 235718 15970 3439 0 195 8 24 +1477433230 235718 15970 3447 0 195 8 24 +1477694191 235718 15970 3450 0 195 8 24 +1477939269 235718 15970 3497 0 195 8 24 +1477941012 235718 15970 3575 0 195 8 24 +1478115005 235718 15970 3575 0 195 8 24 +1478288605 235718 15970 3627 0 195 8 24 +1478551645 235718 15970 3628 0 195 8 24 +1478792001 235718 15970 3651 0 195 8 24 +1478814382 235718 15970 3651 0 195 8 24 +1478816505 235718 15970 3665 0 195 8 24 +1478878515 235718 15970 3682 0 195 8 24 +1479419832 235718 15970 3685 0 195 8 24 +1479846967 235718 15970 3687 0 195 8 24 +1480530088 235718 15970 3687 0 195 8 24 +1481670500 235718 15970 3740 0 195 8 24 +1482181507 235718 15970 3740 1 195 8 24 +1482336682 235718 15970 3746 1 195 8 24 +1482340119 235718 15970 3753 1 195 8 24 +1482353511 235718 15970 3771 11 195 8 24 +1482359008 235718 15970 3771 32 195 8 24 +1483455272 235718 15970 3796 76 195 8 24 +1484342644 235718 15970 3796 77 195 8 24 +1484684949 235718 15970 3796 99 195 8 24 +1484772851 235718 15970 3800 100 195 8 24 +1485799035 235718 15970 120285 116 195 8 24 +1485877540 235718 15970 120293 116 195 8 24 +1485877851 235718 15970 120317 116 195 8 24 +1485877920 235718 15970 120318 116 195 8 24 +1485878121 235718 15970 120340 116 195 8 24 +1486146025 235718 15970 120354 116 195 8 24 +1486412376 235718 15970 120363 116 195 8 24 +1486499625 235718 15970 120404 116 195 8 24 +1486755546 235718 15970 120405 116 195 8 24 +1487109340 235718 15970 120444 116 195 8 24 +1487277883 235718 15970 120444 1305 195 8 24 +1487783266 235718 15970 120444 1313 195 8 24 +1487946215 235718 15970 120503 1347 195 8 24 +1487965862 235718 15970 120503 1369 195 8 24 +1487966474 235718 15970 120503 1429 195 8 24 +1487966964 235718 15970 120503 1429 195 8 24 +1488313813 235718 15970 120503 1461 195 8 24 +1488406636 235718 15970 120525 1461 195 8 24 +1488407109 235718 15970 120587 1461 195 8 24 +1488409193 235718 15970 120620 1461 195 8 24 +1488560599 235718 15970 120718 1461 195 8 24 +1488773682 235718 15970 120718 1545 195 8 24 +1488814084 235718 15970 120718 1545 195 8 24 +1488815988 235718 15970 120747 1545 195 8 24 +1489686589 235718 15970 120753 1545 195 8 24 +1490023066 235718 15970 120755 1545 195 8 24 +1490035644 235718 15970 120761 1545 195 8 24 +1490041875 235718 15970 120763 1545 195 8 24 +1490113585 235718 15970 120763 1545 195 8 24 +1490120437 235718 15970 120764 1545 195 8 24 +1490128257 235718 15970 120783 1545 195 8 24 +1490645760 235718 15970 120783 1545 195 8 24 +1490725467 235718 15970 120858 1545 195 8 24 +1491336954 235718 15970 120858 1545 195 8 24 +1491341896 235718 15970 120875 1545 195 8 24 +1492026512 235718 15970 120893 1545 195 8 24 +1492107919 235718 15970 120898 1545 195 8 24 +1492108901 235718 15970 120998 1545 195 8 24 +1492435237 235718 15970 120998 1545 195 8 24 +1492435982 235718 15970 120998 1545 195 8 24 +1492454272 235718 15970 121021 1545 195 8 24 +1493052262 235718 15970 121021 1646 195 8 24 +1493153070 235718 15970 121070 1646 195 8 24 +1493407521 235718 15970 121078 1646 195 8 24 +1493412286 235718 15970 121093 1646 195 8 24 diff --git a/FlaskTest/static/img/zebra.png b/FlaskTest/static/img/zebra.png new file mode 100644 index 0000000..afcc179 Binary files /dev/null and b/FlaskTest/static/img/zebra.png differ diff --git a/FlaskTest/static/img/zebra_white.png b/FlaskTest/static/img/zebra_white.png new file mode 100644 index 0000000..be9071b Binary files /dev/null and b/FlaskTest/static/img/zebra_white.png differ diff --git a/FlaskTest/static/js/script.js b/FlaskTest/static/js/script.js new file mode 100644 index 0000000..2447b0f --- /dev/null +++ b/FlaskTest/static/js/script.js @@ -0,0 +1,475 @@ +// menu transition +$("#leftside-navigation .sub-menu > a").click(function(e) { + $("#leftside-navigation ul ul").slideUp(), $(this).next().is(":visible") || $(this).next().slideDown(), + e.stopPropagation() +}); + +// Cool load in the beginning +$("#leftside-navigation .sub-menu > a").trigger("click"); + +// generateHeatMap(["../static/data/data_dummy.tsv", "../static/data/data2_dummy.tsv"], "#chart"); + +function generateHeatMap(datasets, divID){ + // heatmap SVG + const margin = { top: 50, right: 0, bottom: 100, left: 30 }, + width =520 - margin.left - margin.right, + height = 320 - margin.top - margin.bottom, + gridSize = Math.floor(width / 24), + legendElementWidth = gridSize*2, + buckets = 9, + + // blue colors + // colors = ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"], // alternatively colorbrewer.YlGnBu[9] + + // orange colors + // colors = ['#fff5eb','#fee6ce','#fdd0a2','#fdae6b','#fd8d3c','#f16913','#d94801','#a63603','#7f2704'], + + // yellow colors + colors =["#ECE622","#D5CF22","#BEB922","#A7A222","#908C22","#797522","#625F22","#625F22","#4B4822","#343222"], + + days = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], + times = ["1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a", "12a", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p", "12p"]; + + // datasets = ["../static/data/data_dummy.tsv", "../static/data/data2_dummy.tsv"]; + + const svg = d3.select(divID).append("svg") + .attr("width", width + margin.left + margin.right) + .attr("height", height + margin.top + margin.bottom) + .append("g") + .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + + const dayLabels = svg.selectAll(".dayLabel") + .data(days) + .enter().append("text") + .text(function (d) { return d; }) + .attr("x", 0) + .attr("y", (d, i) => i * gridSize) + .style("text-anchor", "end") + .attr("transform", "translate(-6," + gridSize / 1.5 + ")") + .attr("class", (d, i) => ((i >= 0 && i <= 4) ? "dayLabel mono axis axis-workweek" : "dayLabel mono axis")); + + const timeLabels = svg.selectAll(".timeLabel") + .data(times) + .enter().append("text") + .text((d) => d) + .attr("x", (d, i) => i * gridSize) + .attr("y", 0) + .style("text-anchor", "middle") + .attr("transform", "translate(" + gridSize / 2 + ", -6)") + .attr("class", (d, i) => ((i >= 7 && i <= 16) ? "timeLabel mono axis axis-worktime" : "timeLabel mono axis")); + + const type = (d) => { + return { + day: +d.day, + hour: +d.hour, + value: +d.value + }; + }; + + const heatmapChart = function(tsvFile) { + d3.tsv(tsvFile, type, (error, data) => { + + var div = d3.select("body").append("div") + .attr("class", "tooltip") + .style("opacity", 0); + + const colorScale = d3.scaleQuantile() + .domain([0, buckets - 1, d3.max(data, (d) => d.value)]) + .range(colors); + + const cards = svg.selectAll(".hour") + .data(data, (d) => d.day+':'+d.hour); + + cards.append("title"); + + cards.enter().append("rect") + .attr("x", (d) => (d.hour - 1) * gridSize) + .attr("y", (d) => (d.day - 1) * gridSize) + .attr("rx", 4) + .attr("ry", 4) + .attr("class", "hour bordered") + .attr("width", gridSize) + .attr("height", gridSize) + .style("fill", colors[0]) + .on("mouseover", function(d) { + div.transition() + .duration(200) + .style("opacity", .9); + div.html("Day: " +days[d.day-1]+ "
Hour: " +times[d.hour-1]+ "
Commits: " +d.value+ "") + .style("left", (d3.event.pageX + 20) + "px") + .style("top", (d3.event.pageY - 20) + "px"); + }) + .on("mouseout", function(d) { + div.transition() + .duration(500) + .style("opacity", 0); + }) + .merge(cards) + .transition() + .duration(1000) + .style("fill", (d) => colorScale(d.value)); + + // cards.select("title").text((d) => d.value); + + cards.exit().remove(); + + const legend = svg.selectAll(".legend") + .data([0].concat(colorScale.quantiles()), (d) => d); + + const legend_g = legend.enter().append("g") + .attr("class", "legend"); + + legend_g.append("rect") + .attr("x", (d, i) => legendElementWidth * i) + .attr("y", height) + .attr("width", legendElementWidth) + .attr("height", gridSize / 2) + .style("fill", (d, i) => colors[i]); + + legend_g.append("text") + .attr("class", "mono") + .text((d) => "≥ " + Math.round(d)) + .attr("x", (d, i) => legendElementWidth * i) + .attr("y", height + gridSize); + + legend.exit().remove(); + }); + }; + + // use first dataset by default + heatmapChart(datasets[0]); + + // dataset buttons + const datasetpicker = d3.select("#dataset-picker") + .selectAll(".btn btn-primary") + .data(datasets); + + // dataset picking button + datasetpicker.enter() + .append("input") + .attr("value", (d) => "Dataset " + d) + .attr("type", "button") + .attr("class", "btn-sm btn-primary") + .on("click", (d) => heatmapChart(d)); + + +} + + + + + + +// generateBarChart("../static/data/day_of_week_copy.tsv", "#day_of_week"); + +function generateBarChart (pathToTSV,divID){ + // Bar chart, see function 'main' for main execution wheel + + function toNum(d){ + //cleaner function + d.commits= +d.commits + return d + }; + + d3.tsv(pathToTSV, toNum, function (error,data){ + "use strict" + // declare outside for reference later + var width=520 + var height=380 + var chartWidth, chartHeight + var svg = d3.select(divID).append("svg") + var axisLayer = svg.append("g").classed("axisLayer", true) + var chartLayer = svg.append("g").classed("chartLayer", true) + var margin = {top:50, right:0, bottom:100, left:30} + + var xScale = d3.scaleBand() + var yScale = d3.scaleLinear() + + var div = d3.select("body").append("div") + .attr("class", "rect_tooltip") + .style("opacity", 0); + + function main(data) { + setSize(); + drawAxisBarChart(); + drawChartBarChart(); + } + + function setSize() { + + chartWidth = width - margin.left - margin.right, + chartHeight = height - margin.top - margin.bottom, + + svg + .attr("width", 520) + .attr("height", 320) + + axisLayer + .attr("width", chartWidth) + .attr("height", chartHeight) + + chartLayer + .attr("width", chartWidth) + .attr("height", chartHeight) + .attr("transform", "translate("+[margin.left, margin.top]+")") + + xScale.domain(data.map(function(d){ return d.day_name })).range([0, chartWidth]) + .paddingInner(0.1) + .paddingOuter(0.5) + + yScale.domain([0, d3.max(data, function(d){ return d.commits})]).range([chartHeight, 0]) + + } + + function drawChartBarChart() { + // monitor the transition + var t = d3.transition() + .duration(1100) + .ease(d3.easeLinear) + .on("start", function(d){ console.log("Bar Chart Transiton start") }) + .on("end", function(d){ console.log("Bar Chart Transiton end") }) + + var bar = chartLayer + .selectAll(".bar") + .data(data) + + bar.exit().remove() + + bar + .enter() + .append("rect") + .classed("bar", true) + .merge(bar) + .attr("fill", "rgb(236, 230, 34)") + .attr("width", xScale.bandwidth()) + .attr("stroke", "#323232") + //setup for cool transition + .attr("height", 0) + .attr("transform", function(d){ return "translate("+[xScale(d.day_name), chartHeight]+")"}) + + var labels = chartLayer + .selectAll("labels") + .data(data) + + //setup for percentage display + var totalCommits=0 + data.forEach(function(d){ + totalCommits+=d.commits + }) + + labels + .enter() + .append("text") + .text(function(d){ + var percentage= (d.commits/totalCommits *100).toFixed(2) + return ""+percentage+"%"; + }) + .attr("transform", function(d){ + return "translate("+[xScale(d.day_name)+5, chartHeight-5]+")" + }) + + chartLayer.selectAll(".bar").transition(t) + // grows to appropriate amount + .attr("height", function(d){ return chartHeight - yScale(d.commits) }) + .attr("transform", function(d){ return "translate("+[xScale(d.day_name), yScale(d.commits)]+")"}) + } + + function drawAxisBarChart(){ + var yAxis = d3.axisLeft(yScale) + .tickSizeInner(-chartWidth) + + axisLayer.append("g") + .attr("transform", "translate("+[margin.left, margin.top]+")") + .attr("class", "axis y") + .call(yAxis); + + var xAxis = d3.axisBottom(xScale) + + axisLayer.append("g") + .attr("class", "axis x") + .attr("transform", "translate("+[margin.left, (height-margin.bottom)]+")") + .call(xAxis); + } + + //kicks of execution of the bar chart + main(); + + }); //end of tsv read in + +} //end of generateBarChart + +// generateLineChart("../static/data/commits_by_author_copy.tsv", "#lineChart"); +// generateLineChart("../static/data/lines_of_code_by_author_copy.tsv", "#lineChart2"); + + + + + +function generateLineChart(pathToTSV, divID){ + + function allToNumber(d){ + //converts everything to Number type + for (var key in d){ + d[key] = +d[key] + } + //fix for Unix timestamps + d.date = new Date(d.date * 1000) + return d; + } + + d3.tsv(pathToTSV, allToNumber, function (error,data){ + if (error) throw error; + + var authors = data.columns.slice(1).map(function(id) { + return { + id: id, + values: data.map(function(d) { + return {date: d.date, commits: d[id]}; + }) + }; + }); + + var svgWidth=1200, + svgHeight=400, + chartWidth= 1000; + + var svg = d3.select(divID).append("svg").attr("height", svgHeight).attr("width", svgWidth), + margin = {top: 20, right: 80, bottom: 30, left: 50}, + //this is smaller than svgWidth to accomodate Legend + width = chartWidth - margin.left - margin.right, + height = svgHeight - margin.top - margin.bottom, + //dynamically builds grid + numberGridLines=30 + //main chart container + g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")"); + + var xScale = d3.scaleTime().range([0, width]), + yScale = d3.scaleLinear().range([height, 0]), + // 10 nice colors + colors = d3.scaleOrdinal(d3.schemeCategory10); + + xScale.domain(d3.extent(data, function(d) { return d.date; })); + + yScale.domain([ + d3.min(authors, function(c) { return d3.min(c.values, function(d) { return d.commits; }); }), + d3.max(authors, function(c) { return d3.max(c.values, function(d) { return d.commits; }); }) + ]); + + var line = d3.line() + // different types of interpolations here + // https://bl.ocks.org/d3noob/ced1b9b18bd8192d2c898884033b5529 + .curve(d3.curveBasis) + .x(function(d) { return xScale(d.date); }) + .y(function(d) { return yScale(d.commits);}); + + colors.domain(authors.map(function(c) { return c.id; })); + + function main(){ + drawAxisLineChart(); + drawChartLineChart(); + drawLegend(); + } + + // gridlines in x axis + function make_x_gridlines() { + return d3.axisBottom(xScale) + .ticks(numberGridLines) + } + + // gridlines in y axis + function make_y_gridlines() { + return d3.axisLeft(yScale) + .ticks(numberGridLines) + } + + function drawAxisLineChart(){ + + g.append("g") + .attr("class", "axis axis--x") + .attr("transform", "translate(0," + height + ")") + .call(d3.axisBottom(xScale)); + + g.append("g") + .attr("class", "axis axis--y") + .call(d3.axisLeft(yScale)) + // .append("text") + // .attr("transform", "rotate(-90)") + // .attr("y", 6) + // .attr("dy", "0.71em") + // .attr("fill", "#000") + + // add the X gridlines + g.append("g") + .attr("class", "grid") + .attr("transform", "translate(0," + height + ")") + .call(make_x_gridlines() + .tickSize(-height) + .tickFormat("") + ); + + // add the Y gridlines + g.append("g") + .attr("class", "grid") + .call(make_y_gridlines() + .tickSize(-width) + .tickFormat("") + ); + + } + + function drawChartLineChart() { + var author = g.selectAll(".author") + .data(authors) + .enter().append("g") + .attr("class", "author"); + + author.append("path") + .attr("class", "line") + .attr("d", function(d) { return line(d.values); }) + .style("stroke", function(d) { return colors(d.id); }); + + // Enable to show author at the end of the line + // author.append("text") + // .datum(function(d) { return {id: d.id, value: d.values[d.values.length - 1]}; }) + // .attr("transform", function(d) { return "translate(" + xScale(d.value.date) + "," + yScale(d.value.commits) + ")"; }) + // .attr("x", 3) + // .attr("dy", "0.35em") + // .style("font", "10px sans-serif") + // .text(function(d) { return d.id; }); + + } + + function drawLegend(){ + var legend= svg.selectAll(".legend-item") + .data(authors) + .enter().append("g") + .attr("class","legend"); + + legend.append("rect") + .attr('x', chartWidth - 20) + .attr('y', function(d, i) { + return (i * 35) + 20; + }) + .attr('width', 10) + .attr('height', 10) + .style('fill', function(d) { + return colors(d.id); + }); + legend.append('text') + .attr('x', chartWidth - 8) + .attr('y', function(d, i) { + return (i * 35) + 29; + }) + .text(function(d) { + return d.id; + }); + } + + main(); //kicks off main execution wheel + + }); //end tsv read in + +}; //end generate line chart + + diff --git a/FlaskTest/templates/base.html b/FlaskTest/templates/base.html new file mode 100644 index 0000000..846d10f --- /dev/null +++ b/FlaskTest/templates/base.html @@ -0,0 +1,61 @@ + + + + + + + + {{sub.name}} - Dashboard + + + + + + + + + + + + + {% block content %}{% endblock %} + + + + + + \ No newline at end of file diff --git a/FlaskTest/templates/combined_dashboard.html b/FlaskTest/templates/combined_dashboard.html new file mode 100644 index 0000000..e5554b3 --- /dev/null +++ b/FlaskTest/templates/combined_dashboard.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

Cool Project Name Here

+
+
Summary: This project is about making Zebra really fast and efficient
+
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum +

+
+
+ +
+ + +
+
+
+

# Commits by day-dummy

+
+
+
+
+
+
+
This data shows cool stuff
+

As you can see, this data focuses on business hours

+

System last updated at 11:34am

+
+
+
+
+
+ + +
+
+
+

Metric 2

+
+ Card image cap +
+
+
+
This is a cool image that will be a better metric
+

Summary: this is a mountain

+

System last updated at 11:34am

+
+
+
+
+
+ +
+ + +
+ +
+
+
+

Metric 3

+
+ Card image cap +
+
+
+
Greg Likes Corgis
+

As you can see, corgis are little fluff balls

+

System last updated at 11:34am

+
+
+
+
+
+ +
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FlaskTest/templates/dashboard.html b/FlaskTest/templates/dashboard.html new file mode 100644 index 0000000..f8f964a --- /dev/null +++ b/FlaskTest/templates/dashboard.html @@ -0,0 +1,156 @@ +{% extends "base.html" %} + +{% block content %} + + + + +
+
+
+
+

{{sub.name}}

+
+
{{sub.summary}}
+
+

{{sub.description}}

+
+
+ +
+ + +
+
+
+

Commits by Hour of Week-dummy data

+
+
+
+
+
+
+
This data shows cool stuff
+

As you can see, this data focuses on business hours

+

System last updated at 11:34am

+
+
+
+
+
+ + +
+
+
+

# Commits by day - real data

+
+ +
+ +
+
+
+
Bar Chart
+

What week is this from?
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non + proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+

System last updated at 11:34am

+
+
+
+
+
+ +
+ + +
+ +
+
+
+

Commits per Author - real data

+
+ +
+ +
+
+
+
Multi Series Line Chart
+

Theres a few authors on this project but 1 stands out

+

System last updated at 11:34am

+
+
+
+
+
+ +
+ + +
+ +
+
+
+

Cumulative Added Lines by Author - real data

+
+ +
+ +
+
+
+
Multi Series Line Chart
+

Theres a few authors on this project but 1 stands out

+

System last updated at 11:34am

+
+
+
+
+
+ +
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + +{% endblock %} + diff --git a/execution.py b/execution.py new file mode 100644 index 0000000..abe0396 --- /dev/null +++ b/execution.py @@ -0,0 +1,88 @@ +import os +import sys +import glob +from xml.etree import ElementTree + +# NOTE: this files needs to be in same directory as gitstats executable +# python execution.py + +def generateGitstatsOnFolders (): + # root location + source_folder = sys.argv[1] + # final destination + output_folder_path = sys.argv[2] + print (source_folder) + + dirs_name=[] + subdir_name='' + + for subdir, dirs, files in os.walk(source_folder): + dirs_name=dirs + subdir_name=subdir + # weirdly keeps looping... + break; + # print (dirs_name) + for directory in dirs_name: + fullPath=(os.path.join(subdir_name, directory)) + os.system("./gitstats "+fullPath+" "+output_folder_path+"/"+directory) + + +def gitDirectoryExists(path): + '''Checks if .git directory exists in directory + + Returns True if there is .git directory, else False + ''' + assert (os.path.isdir(path)), "This directory doesnt exist!" + + search_path=os.path.join(path,".git") + pos_git_directory = glob.glob(search_path) + print ("\nSearching for .git directories in %s" %(path)) + + if pos_git_directory==[search_path]: + print ("\n.git Directory found at %s" %(search_path) ) + return True + else: + print ("\nNo .git directory found in %s" %(path) ) + return False + +def parseXML(manifestPath): + '''Parse manifest.xml and return and array of git repos''' + with open(manifestPath, 'rt') as f: + tree = ElementTree.parse(f) + + gitPaths=[] + for node in tree.iter('project'): + git_path = node.attrib.get('path') + print (git_path) + gitPaths.append(git_path) + + for path in gitPaths: + runGitstats(path, "bleh") + + +def runGitstats(pathsArr): + ''' Runs gitstats on each of , into output directory + This file should be in the same directory as the gitstats executable''' + output_dir=sys.argv[2] + for path in pathsArr: + if gitDirectoryExists(path): + os.system("./gitstats "+os.path.join("/home/gschultz/8956n/.repo/projects",path)+" "+output_dir) + + os.system("./gitstats " +path) + + +def repoController(manifest_path): + gitPaths=parseXML(manifest_path) + +if __name__ == "__main__": + manifest_location=sys.argv[1] + repoController(manifest_location) + # parseXML() + # gitDirectoryExists("C:\Users\GSCHULTZ\Desktop\gitstats\output") + # generateGitstatsOnFolders() + + + + + + diff --git a/gitstats b/gitstats old mode 100755 new mode 100644 index c71b0e4..e7d2362 --- a/gitstats +++ b/gitstats @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # Copyright (c) 2007-2014 Heikki Hokkanen & others (see doc/AUTHOR) # GPLv2 / GPLv3 import datetime @@ -15,8 +15,8 @@ import time import zlib if sys.version_info < (2, 6): - print >> sys.stderr, "Python 2.6 or higher is required for gitstats" - sys.exit(1) + print >> sys.stderr, "Python 2.6 or higher is required for gitstats" + sys.exit(1) from multiprocessing import Pool @@ -34,1146 +34,1283 @@ time_start = time.time() # environment variable "GNUPLOT" gnuplot_cmd = 'gnuplot' if 'GNUPLOT' in os.environ: - gnuplot_cmd = os.environ['GNUPLOT'] - + gnuplot_cmd = os.environ['GNUPLOT'] + conf = { - 'max_domains': 10, - 'max_ext_length': 10, - 'style': 'gitstats.css', - 'max_authors': 20, - 'authors_top': 5, - 'commit_begin': '', - 'commit_end': 'HEAD', - 'linear_linestats': 1, - 'project_name': '', - 'processes': 8, - 'start_date': '' + 'max_domains': 10, + 'max_ext_length': 10, + 'style': 'gitstats.css', + 'max_authors': 20, + 'authors_top': 5, + 'commit_begin': '', + 'commit_end': 'HEAD', + 'linear_linestats': 1, + 'project_name': '', + 'processes': 8, + 'start_date': '' } def getpipeoutput(cmds, quiet = False): - global exectime_external - start = time.time() - if not quiet and ON_LINUX and os.isatty(1): - print '>> ' + ' | '.join(cmds), - sys.stdout.flush() - p = subprocess.Popen(cmds[0], stdout = subprocess.PIPE, shell = True) - processes=[p] - for x in cmds[1:]: - p = subprocess.Popen(x, stdin = p.stdout, stdout = subprocess.PIPE, shell = True) - processes.append(p) - output = p.communicate()[0] - for p in processes: - p.wait() - end = time.time() - if not quiet: - if ON_LINUX and os.isatty(1): - print '\r', - print '[%.5f] >> %s' % (end - start, ' | '.join(cmds)) - exectime_external += (end - start) - return output.rstrip('\n') + global exectime_external + start = time.time() + if not quiet and ON_LINUX and os.isatty(1): + print '>> ' + ' | '.join(cmds), + sys.stdout.flush() + p = subprocess.Popen(cmds[0], stdout = subprocess.PIPE, shell = True) + processes=[p] + for x in cmds[1:]: + p = subprocess.Popen(x, stdin = p.stdout, stdout = subprocess.PIPE, shell = True) + processes.append(p) + output = p.communicate()[0] + for p in processes: + p.wait() + end = time.time() + if not quiet: + if ON_LINUX and os.isatty(1): + print '\r', + print '[%.5f] >> %s' % (end - start, ' | '.join(cmds)) + exectime_external += (end - start) + return output.rstrip('\n') def getlogrange(defaultrange = 'HEAD', end_only = True): - commit_range = getcommitrange(defaultrange, end_only) - if len(conf['start_date']) > 0: - return '--since="%s" "%s"' % (conf['start_date'], commit_range) - return commit_range + commit_range = getcommitrange(defaultrange, end_only) + if len(conf['start_date']) > 0: + return '--since="%s" "%s"' % (conf['start_date'], commit_range) + return commit_range def getcommitrange(defaultrange = 'HEAD', end_only = False): - if len(conf['commit_end']) > 0: - if end_only or len(conf['commit_begin']) == 0: - return conf['commit_end'] - return '%s..%s' % (conf['commit_begin'], conf['commit_end']) - return defaultrange + if len(conf['commit_end']) > 0: + if end_only or len(conf['commit_begin']) == 0: + return conf['commit_end'] + return '%s..%s' % (conf['commit_begin'], conf['commit_end']) + return defaultrange def getkeyssortedbyvalues(dict): - return map(lambda el : el[1], sorted(map(lambda el : (el[1], el[0]), dict.items()))) + return map(lambda el : el[1], sorted(map(lambda el : (el[1], el[0]), dict.items()))) # dict['author'] = { 'commits': 512 } - ...key(dict, 'commits') def getkeyssortedbyvaluekey(d, key): - return map(lambda el : el[1], sorted(map(lambda el : (d[el][key], el), d.keys()))) + return map(lambda el : el[1], sorted(map(lambda el : (d[el][key], el), d.keys()))) def getstatsummarycounts(line): - numbers = re.findall('\d+', line) - if len(numbers) == 1: - # neither insertions nor deletions: may probably only happen for "0 files changed" - numbers.append(0); - numbers.append(0); - elif len(numbers) == 2 and line.find('(+)') != -1: - numbers.append(0); # only insertions were printed on line - elif len(numbers) == 2 and line.find('(-)') != -1: - numbers.insert(1, 0); # only deletions were printed on line - return numbers + numbers = re.findall('\d+', line) + if len(numbers) == 1: + # neither insertions nor deletions: may probably only happen for "0 files changed" + numbers.append(0); + numbers.append(0); + elif len(numbers) == 2 and line.find('(+)') != -1: + numbers.append(0); # only insertions were printed on line + elif len(numbers) == 2 and line.find('(-)') != -1: + numbers.insert(1, 0); # only deletions were printed on line + return numbers VERSION = 0 def getversion(): - global VERSION - if VERSION == 0: - gitstats_repo = os.path.dirname(os.path.abspath(__file__)) - VERSION = getpipeoutput(["git --git-dir=%s/.git --work-tree=%s rev-parse --short %s" % - (gitstats_repo, gitstats_repo, getcommitrange('HEAD').split('\n')[0])]) - return VERSION + global VERSION + if VERSION == 0: + gitstats_repo = os.path.dirname(os.path.abspath(__file__)) + VERSION = getpipeoutput(["git --git-dir=%s/.git --work-tree=%s rev-parse --short %s" % + (gitstats_repo, gitstats_repo, getcommitrange('HEAD').split('\n')[0])]) + return VERSION def getgitversion(): - return getpipeoutput(['git --version']).split('\n')[0] + return getpipeoutput(['git --version']).split('\n')[0] def getgnuplotversion(): - return getpipeoutput(['%s --version' % gnuplot_cmd]).split('\n')[0] + # Manually hack the version + return "1.0.1" + # return getpipeoutput(['%s --version' % gnuplot_cmd]).split('\n')[0] def getnumoffilesfromrev(time_rev): - """ - Get number of files changed in commit - """ - time, rev = time_rev - return (int(time), rev, int(getpipeoutput(['git ls-tree -r --name-only "%s"' % rev, 'wc -l']).split('\n')[0])) + """ + Get number of files changed in commit + """ + time, rev = time_rev + return (int(time), rev, int(getpipeoutput(['git ls-tree -r --name-only "%s"' % rev, 'wc -l']).split('\n')[0])) def getnumoflinesinblob(ext_blob): - """ - Get number of lines in blob - """ - ext, blob_id = ext_blob - return (ext, blob_id, int(getpipeoutput(['git cat-file blob %s' % blob_id, 'wc -l']).split()[0])) + """ + Get number of lines in blob + """ + ext, blob_id = ext_blob + return (ext, blob_id, int(getpipeoutput(['git cat-file blob %s' % blob_id, 'wc -l']).split()[0])) class DataCollector: - """Manages data collection from a revision control repository.""" - def __init__(self): - self.stamp_created = time.time() - self.cache = {} - self.total_authors = 0 - self.activity_by_hour_of_day = {} # hour -> commits - self.activity_by_day_of_week = {} # day -> commits - self.activity_by_month_of_year = {} # month [1-12] -> commits - self.activity_by_hour_of_week = {} # weekday -> hour -> commits - self.activity_by_hour_of_day_busiest = 0 - self.activity_by_hour_of_week_busiest = 0 - self.activity_by_year_week = {} # yy_wNN -> commits - self.activity_by_year_week_peak = 0 - - self.authors = {} # name -> {commits, first_commit_stamp, last_commit_stamp, last_active_day, active_days, lines_added, lines_removed} - - self.total_commits = 0 - self.total_files = 0 - self.authors_by_commits = 0 - - # domains - self.domains = {} # domain -> commits - - # author of the month - self.author_of_month = {} # month -> author -> commits - self.author_of_year = {} # year -> author -> commits - self.commits_by_month = {} # month -> commits - self.commits_by_year = {} # year -> commits - self.lines_added_by_month = {} # month -> lines added - self.lines_added_by_year = {} # year -> lines added - self.lines_removed_by_month = {} # month -> lines removed - self.lines_removed_by_year = {} # year -> lines removed - self.first_commit_stamp = 0 - self.last_commit_stamp = 0 - self.last_active_day = None - self.active_days = set() - - # lines - self.total_lines = 0 - self.total_lines_added = 0 - self.total_lines_removed = 0 - - # size - self.total_size = 0 - - # timezone - self.commits_by_timezone = {} # timezone -> commits - - # tags - self.tags = {} - - self.files_by_stamp = {} # stamp -> files - - # extensions - self.extensions = {} # extension -> files, lines - - # line statistics - self.changes_by_date = {} # stamp -> { files, ins, del } - - ## - # This should be the main function to extract data from the repository. - def collect(self, dir): - self.dir = dir - if len(conf['project_name']) == 0: - self.projectname = os.path.basename(os.path.abspath(dir)) - else: - self.projectname = conf['project_name'] - - ## - # Load cacheable data - def loadCache(self, cachefile): - if not os.path.exists(cachefile): - return - print 'Loading cache...' - f = open(cachefile, 'rb') - try: - self.cache = pickle.loads(zlib.decompress(f.read())) - except: - # temporary hack to upgrade non-compressed caches - f.seek(0) - self.cache = pickle.load(f) - f.close() - - ## - # Produce any additional statistics from the extracted data. - def refine(self): - pass - - ## - # : get a dictionary of author - def getAuthorInfo(self, author): - return None - - def getActivityByDayOfWeek(self): - return {} - - def getActivityByHourOfDay(self): - return {} - - # : get a dictionary of domains - def getDomainInfo(self, domain): - return None - - ## - # Get a list of authors - def getAuthors(self): - return [] - - def getFirstCommitDate(self): - return datetime.datetime.now() - - def getLastCommitDate(self): - return datetime.datetime.now() - - def getStampCreated(self): - return self.stamp_created - - def getTags(self): - return [] - - def getTotalAuthors(self): - return -1 - - def getTotalCommits(self): - return -1 - - def getTotalFiles(self): - return -1 - - def getTotalLOC(self): - return -1 - - ## - # Save cacheable data - def saveCache(self, cachefile): - print 'Saving cache...' - tempfile = cachefile + '.tmp' - f = open(tempfile, 'wb') - #pickle.dump(self.cache, f) - data = zlib.compress(pickle.dumps(self.cache)) - f.write(data) - f.close() - try: - os.remove(cachefile) - except OSError: - pass - os.rename(tempfile, cachefile) + """Manages data collection from a revision control repository.""" + def __init__(self): + self.stamp_created = time.time() + self.cache = {} + self.total_authors = 0 + self.activity_by_hour_of_day = {} # hour -> commits + self.activity_by_day_of_week = {} # day -> commits + self.activity_by_month_of_year = {} # month [1-12] -> commits + self.activity_by_hour_of_week = {} # weekday -> hour -> commits + self.activity_by_hour_of_day_busiest = 0 + self.activity_by_hour_of_week_busiest = 0 + self.activity_by_year_week = {} # yy_wNN -> commits + self.activity_by_year_week_peak = 0 + + self.authors = {} # name -> {commits, first_commit_stamp, last_commit_stamp, last_active_day, active_days, lines_added, lines_removed} + + self.total_commits = 0 + self.total_files = 0 + self.authors_by_commits = 0 + + # domains + self.domains = {} # domain -> commits + + # author of the month + self.author_of_month = {} # month -> author -> commits + self.author_of_year = {} # year -> author -> commits + self.commits_by_month = {} # month -> commits + self.commits_by_year = {} # year -> commits + self.lines_added_by_month = {} # month -> lines added + self.lines_added_by_year = {} # year -> lines added + self.lines_removed_by_month = {} # month -> lines removed + self.lines_removed_by_year = {} # year -> lines removed + self.first_commit_stamp = 0 + self.last_commit_stamp = 0 + self.last_active_day = None + self.active_days = set() + + # lines + self.total_lines = 0 + self.total_lines_added = 0 + self.total_lines_removed = 0 + + # size + self.total_size = 0 + + # timezone + self.commits_by_timezone = {} # timezone -> commits + + # tags + self.tags = {} + + self.files_by_stamp = {} # stamp -> files + + # extensions + self.extensions = {} # extension -> files, lines + + # line statistics + self.changes_by_date = {} # stamp -> { files, ins, del } + + ## + # This should be the main function to extract data from the repository. + def collect(self, dir): + self.dir = dir + if len(conf['project_name']) == 0: + self.projectname = os.path.basename(os.path.abspath(dir)) + else: + self.projectname = conf['project_name'] + + ## + # Load cacheable data + def loadCache(self, cachefile): + if not os.path.exists(cachefile): + return + print 'Loading cache...' + f = open(cachefile, 'rb') + try: + self.cache = pickle.loads(zlib.decompress(f.read())) + except: + # temporary hack to upgrade non-compressed caches + f.seek(0) + self.cache = pickle.load(f) + f.close() + + ## + # Produce any additional statistics from the extracted data. + def refine(self): + pass + + ## + # : get a dictionary of author + def getAuthorInfo(self, author): + return None + + def getActivityByDayOfWeek(self): + return {} + + def getActivityByHourOfDay(self): + return {} + + # : get a dictionary of domains + def getDomainInfo(self, domain): + return None + + ## + # Get a list of authors + def getAuthors(self): + return [] + + def getFirstCommitDate(self): + return datetime.datetime.now() + + def getLastCommitDate(self): + return datetime.datetime.now() + + def getStampCreated(self): + return self.stamp_created + + def getTags(self): + return [] + + def getTotalAuthors(self): + return -1 + + def getTotalCommits(self): + return -1 + + def getTotalFiles(self): + return -1 + + def getTotalLOC(self): + return -1 + + + ## + # Save cacheable data + def saveCache(self, cachefile): + print 'Saving cache...' + tempfile = cachefile + '.tmp' + f = open(tempfile, 'wb') + #pickle.dump(self.cache, f) + data = zlib.compress(pickle.dumps(self.cache)) + f.write(data) + f.close() + try: + os.remove(cachefile) + except OSError: + pass + os.rename(tempfile, cachefile) class GitDataCollector(DataCollector): - def collect(self, dir): - DataCollector.collect(self, dir) - - self.total_authors += int(getpipeoutput(['git shortlog -s %s' % getlogrange(), 'wc -l'])) - #self.total_lines = int(getoutput('git-ls-files -z |xargs -0 cat |wc -l')) - - # tags - lines = getpipeoutput(['git show-ref --tags']).split('\n') - for line in lines: - if len(line) == 0: - continue - (hash, tag) = line.split(' ') - - tag = tag.replace('refs/tags/', '') - output = getpipeoutput(['git log "%s" --pretty=format:"%%at %%aN" -n 1' % hash]) - if len(output) > 0: - parts = output.split(' ') - stamp = 0 - try: - stamp = int(parts[0]) - except ValueError: - stamp = 0 - self.tags[tag] = { 'stamp': stamp, 'hash' : hash, 'date' : datetime.datetime.fromtimestamp(stamp).strftime('%Y-%m-%d'), 'commits': 0, 'authors': {} } - - # collect info on tags, starting from latest - tags_sorted_by_date_desc = map(lambda el : el[1], reversed(sorted(map(lambda el : (el[1]['date'], el[0]), self.tags.items())))) - prev = None - for tag in reversed(tags_sorted_by_date_desc): - cmd = 'git shortlog -s "%s"' % tag - if prev != None: - cmd += ' "^%s"' % prev - output = getpipeoutput([cmd]) - if len(output) == 0: - continue - prev = tag - for line in output.split('\n'): - parts = re.split('\s+', line, 2) - commits = int(parts[1]) - author = parts[2] - self.tags[tag]['commits'] += commits - self.tags[tag]['authors'][author] = commits - - # Collect revision statistics - # Outputs "