diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fa17_lecture13_advanced_search.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fa17_lecture13_advanced_search.pdf new file mode 100644 index 0000000..656ce23 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fa17_lecture13_advanced_search.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture10_contest_strategy.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture10_contest_strategy.pdf new file mode 100644 index 0000000..729836b Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture10_contest_strategy.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture11_flow.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture11_flow.pdf new file mode 100644 index 0000000..8b55b36 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture11_flow.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture12_combinatorial_games.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture12_combinatorial_games.pdf new file mode 100644 index 0000000..4c196a2 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture12_combinatorial_games.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture1_intro.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture1_intro.pdf new file mode 100644 index 0000000..3b0010f Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture1_intro.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture2_data_structures.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture2_data_structures.pdf new file mode 100644 index 0000000..0a9eed9 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture2_data_structures.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture3_intro_to_graphs_and_search.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture3_intro_to_graphs_and_search.pdf new file mode 100644 index 0000000..0309a83 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture3_intro_to_graphs_and_search.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture4_adhoc_simulation.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture4_adhoc_simulation.pdf new file mode 100644 index 0000000..f204185 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture4_adhoc_simulation.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture5_dp_intro.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture5_dp_intro.pdf new file mode 100644 index 0000000..d43faf7 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture5_dp_intro.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture6_basic_graph.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture6_basic_graph.pdf new file mode 100644 index 0000000..09ba55a Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture6_basic_graph.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture7_computational_geometry.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture7_computational_geometry.pdf new file mode 100644 index 0000000..8d2df16 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture7_computational_geometry.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture8_mathematics.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture8_mathematics.pdf new file mode 100644 index 0000000..311de1e Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture8_mathematics.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture9_intermediate_dp.pdf b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture9_intermediate_dp.pdf new file mode 100644 index 0000000..df4ad04 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/Slides/fall17_lecture9_intermediate_dp.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/homework1/POJ1477.java b/491AdvCompetitiveAlgorithmProg/homework1/POJ1477.java new file mode 100644 index 0000000..e598b38 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework1/POJ1477.java @@ -0,0 +1,35 @@ +import java.io.*; +import java.util.*; +import java.lang.*; +public class Main +{ +public static void main(String args[]) throws Exception + { + int counter = 1; + Scanner cin=new Scanner(System.in); + int stacks=cin.nextInt(); + while(stacks!=0) + { + int[] numbers = new int[stacks]; + int result = 0; + int sum = 0; + int avg = 0; + for (int i=0; i(e-c)) { + System.out.println("do not advertise"); + }else{ + System.out.println("does not matter"); + } + } + } +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework1/POJ3096.java b/491AdvCompetitiveAlgorithmProg/homework1/POJ3096.java new file mode 100644 index 0000000..114d1eb --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework1/POJ3096.java @@ -0,0 +1,43 @@ +import java.io.*; +import java.util.*; +import java.lang.*; +public class Main +{ +public static void main(String args[]) throws Exception + { + Scanner cin=new Scanner(System.in); + String data = cin.nextLine(); + while (!data.equals("*")) + { + String[] parts = data.split(""); + int length = parts.length; + boolean surprising = true; + for (int i=1; i +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +typedef pair ii; +typedef vector vi; +typedef vector vii; + +#define INF 1e9 +#define MAX_V 55 + +int res[MAX_V][MAX_V], mf, f, s, t; +vector AdjList; +vi p; + +int n, m, cnt = 1; + +bitset dfsv; +set SSet; + +void dfs(int u) { + dfsv.set(u); + SSet.insert(u); + for (int i = 0; i < (int) AdjList[u].size(); i++) { + int v = AdjList[u][i]; + if (!dfsv.test(v) && res[u][v] > 0) { + dfs(v); + } + } +} + +void mincut() { + SSet.clear(); + for (int i = 0; i < MAX_V; i++) + dfsv.reset(); + dfs(s); + set::iterator it; + + for (it = SSet.begin(); it != SSet.end(); it++) { + int u = *it; + for (int i = 0; i < (int) AdjList[u].size(); i++) { + int v = AdjList[u][i]; + if (SSet.count(v)) + continue; + if (res[u][v] <= 0) { + printf("%d %d\n", u + 1, v + 1); + } + } + } + printf("\n"); +} + +void augment(int v, int minEdge) { + if (v == s) { + f = minEdge; + return; + } else if (p[v] != -1) { + augment(p[v], min(minEdge, res[p[v]][v])); + res[p[v]][v] -= f; + res[v][p[v]] += f; + } +} + +void EdmondKarps() { + mf = 0; + while (1) { + f = 0; + bitset visited; + visited.set(s); + queue q; + q.push(s); + p.assign(MAX_V, -1); + while (!q.empty()) { + int u = q.front(); + q.pop(); + if (u == t) + break; + for (int i = 0; i < (int) AdjList[u].size(); i++) { + int v = AdjList[u][i]; + if (res[u][v] > 0 && !visited.test(v)) { + visited.set(v); + q.push(v); + p[v] = u; + } + } + } + augment(t, INF); + if (f == 0) + break; + mf += f; + } +} + +int main() { + while (scanf("%d %d", &n, &m), n || m) { + memset(res, 0, sizeof res); + AdjList.assign(n, vi()); + + s = 0; + t = 1; + + for (int i = 0; i < m; i++) { + int u, v, w; + scanf("%d %d %d", &u, &v, &w); + u--; + v--; + res[u][v] += w; + res[v][u] += w; + AdjList[u].push_back(v); + AdjList[v].push_back(u); + } + + EdmondKarps(); + mincut(); + } + + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework12/POJ3480.java b/491AdvCompetitiveAlgorithmProg/homework12/POJ3480.java new file mode 100644 index 0000000..750e4a4 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework12/POJ3480.java @@ -0,0 +1,34 @@ +import java.util.*; +import java.io.*; + +public class Main { + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + int testcase = in.nextInt(); + while (testcase-- > 0) { + int number = in.nextInt(); + int xor = 0; + boolean allOnes = true; + for (int i = 1; i <= number; ++i) { + int temp = in.nextInt(); + if (temp != 1) { + allOnes = false; + } + xor ^= temp; + } + if (allOnes) { + if (xor == 0) { + System.out.println("John"); + } else { + System.out.println("Brother"); + } + } else { + if (xor == 0) { + System.out.println("Brother"); + } else { + System.out.println("John"); + } + } + } + } +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework13/UVA10181.cpp b/491AdvCompetitiveAlgorithmProg/homework13/UVA10181.cpp new file mode 100644 index 0000000..54ca221 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework13/UVA10181.cpp @@ -0,0 +1,115 @@ +#include +#include +#include +#define LLU unsigned long long +using namespace std; +struct status { + char board[4][4]; + int ix, iy; +} init; +int pos[16][2], mxdep; +int dir[4][2] = {{0,-1},{-1,0},{1,0},{0,1}};/*u,l,r,d*/ +char dirc[4] = {'L', 'U', 'D', 'R'}, path[100]; +int solved; +bool solvable() { + int sum = 0, row, i, j; + for(i = 0; i < 16; i++) { + if(init.board[i/4][i%4] == 0) { + row = i/4 + 1; + continue; + } + for(j = i+1; j < 16; j++) { + if(init.board[j/4][j%4] < init.board[i/4][i%4]) { + if(init.board[j/4][j%4]) + sum++; + } + } + } + return 1-(sum+row)%2; +} +int H() { + static int i, j, sum, num; + sum = 0; + for(i = 0; i < 4; i++) { + for(j = 0; j < 4; j++) { + num = init.board[i][j]; + if(num == 0) + continue; + sum += abs(i-pos[num][0]) + abs(j-pos[num][1]); + } + } + return sum; +} +int Htable[4][4][16]; +int IDA(int dep, int hv, int prestep) { + if(hv == 0) { + solved = dep; + path[dep] = '\0'; + puts(path); + return dep; + } + if(dep + 5*hv/3 > mxdep) { + return dep + 5*hv/3; + } + int i, tx, ty, x = init.ix, y = init.iy; + int submxdep = 0xfff, val = 0xfff, shv; + + for(i = 0; i < 4; i++) { + if(i + prestep == 3) continue; + tx = x + dir[i][0], ty = y + dir[i][1]; + if(tx < 0 || ty < 0 || tx > 3 || ty > 3) + continue; + + shv = hv; + shv -= Htable[tx][ty][init.board[tx][ty]]; + shv += Htable[x][y][init.board[tx][ty]]; + init.ix = tx, init.iy = ty; + swap(init.board[x][y], init.board[tx][ty]); + + path[dep] = dirc[i]; + val = IDA(dep+1, shv, i); + + swap(init.board[x][y], init.board[tx][ty]); + init.ix = x, init.iy = y; + if(solved) return solved; + submxdep = min(submxdep, val); + } + return submxdep; +} +int main() { + int test, i, j, k, initH; + int cases = 0; + for(i = 0, k = 0; i < 4; i++) + for(j = 0; j < 4; j++) + pos[++k][0] = i, pos[k][1] = j; + for(i = 0; i < 4; i++) + for(j = 0; j < 4; j++) + for(k = 1; k < 16; k++) + Htable[i][j][k] = abs(i - pos[k][0]) + abs(j - pos[k][1]); + scanf("%d", &test); + while(test--) { + cases++; + for(i = 0; i < 4; i++) { + for(j = 0; j < 4; j++) { + scanf("%d", &k); + init.board[i][j] = k; + if(init.board[i][j] == 0) { + init.ix = i, init.iy = j; + } + } + } + if(solvable()) { + solved = 0, initH = mxdep = H(); + if(!mxdep) { + puts(""); + continue; + } + while(solved == 0) + mxdep = IDA(0, initH, -1); + //printf("%d\n", solved); + }else { + puts("This puzzle is not solvable."); + } + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework2/11364.java b/491AdvCompetitiveAlgorithmProg/homework2/11364.java new file mode 100644 index 0000000..edcef6e --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework2/11364.java @@ -0,0 +1,22 @@ +import java.io.*; +import java.util.*; +import java.lang.*; +import java.util.Arrays; +public class Main +{ +public static void main(String args[]) throws Exception + { + Scanner cin=new Scanner(System.in); + int counter=cin.nextInt(); + for (int i=0; i0) { + List prices = new ArrayList(); + double sum = 0; + int price=cin.nextInt(); + while(price!=0) + { + prices.add(price); + price=cin.nextInt(); + } + Collections.sort(prices); + int i = prices.size(); + for (int element:prices) { + sum = sum + Math.pow(element, i); + i--; + } + if ((2*sum)<=5000000) { + System.out.println((int)(2*sum)); + } + else{ + System.out.println("Too expensive"); + } + counter--; + } + } +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework2/11824.pdf b/491AdvCompetitiveAlgorithmProg/homework2/11824.pdf new file mode 100644 index 0000000..ee78af5 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/homework2/11824.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/homework2/417.cpp b/491AdvCompetitiveAlgorithmProg/homework2/417.cpp new file mode 100644 index 0000000..228dcd1 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework2/417.cpp @@ -0,0 +1,30 @@ +#include +#include + +int main() { + int i, j; + int C[50][50] = {}; + C[0][0] = 1; + for(i = 1; i < 50; i++) { + C[i][0] = 1; + for(j = 1; j <= i; j++) + C[i][j] = C[i-1][j-1] + C[i-1][j]; + } + char s[10]; + while(scanf("%s", &s) == 1) { + int len = strlen(s), idx = 0; + for(i = 1; i < len; i++) { + if(s[i] < s[i-1]) { + puts("0");break; + } + idx += C[26][i]; + } + if(i != len) continue; + for(i = 0; i < len; i++) { + for(j = (i == 0) ? 1 : s[i-1]-'a'+2; j <= s[i]-'a'; j++) + idx += C[26-j][len-i-1]; + } + printf("%d\n", idx+1); + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework2/417.pdf b/491AdvCompetitiveAlgorithmProg/homework2/417.pdf new file mode 100644 index 0000000..18002e6 Binary files /dev/null and b/491AdvCompetitiveAlgorithmProg/homework2/417.pdf differ diff --git a/491AdvCompetitiveAlgorithmProg/homework2/417.py b/491AdvCompetitiveAlgorithmProg/homework2/417.py new file mode 100644 index 0000000..f58643e --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework2/417.py @@ -0,0 +1,21 @@ +from itertools import combinations + +if __name__ == "__main__": + alphabet = "abcdefghijklmnopqrstuvwxyz" + words = list(alphabet) + index = 1 + library = {} + + for i in range(1,6): + current = list(sorted(combinations(words,i))) + for element in current: + library["".join(element)] = index + index = index+1 + + data = input() + while data != "": + if data in library.keys(): + print (library[data]) + else: + print (0) + data = input() \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework3/POJ1985.cpp b/491AdvCompetitiveAlgorithmProg/homework3/POJ1985.cpp new file mode 100644 index 0000000..7176337 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework3/POJ1985.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +using namespace std; +const int maxn=50000+5; +const int maxm=100000+5; + +//有向边 +struct Edge +{ + Edge(){} + Edge(int to,int cost,int next):to(to),cost(cost),next(next){} + int to; //边尾部 + int cost; //边距离 + int next; //指向下条边 +}edges[maxm]; +int cnt=0; //边总数 +int head[maxn];//头结点 + +//添加两条有向边 +void AddEdge(int u,int v,int cost) +{ + edges[cnt]=Edge(v,cost,head[u]); + head[u]=cnt++; + edges[cnt]=Edge(u,cost,head[v]); + head[v]=cnt++; +} + +//距离 +int dist[maxn]; + +//BFS返回从s出发能到达的最远点编号 +int BFS(int s) +{ + int max_dist=0; + int id=s; + queue Q; + memset(dist,-1,sizeof(dist)); + dist[s]=0; + Q.push(s); + + while(!Q.empty()) + { + int u=Q.front(); Q.pop(); + if(dist[u]>max_dist) + max_dist=dist[id=u]; + for(int i=head[u]; i!=-1; i=edges[i].next) + { + Edge &e=edges[i]; + if(dist[e.to]==-1) + { + dist[e.to]=dist[u]+e.cost; + Q.push(e.to); + } + } + } + return id; +} + +int main() +{ + int n,m; + while(scanf("%d%d",&n,&m)==2) + { + cnt=0; + memset(head,-1,sizeof(head)); + int u,v,cost; + char c; + for(int i=1;i<=m;i++) + { + scanf("%d%d%d %c",&u,&v,&cost,&c); + AddEdge(u,v,cost); + } + printf("%d\n",dist[BFS(BFS(u))]); + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework4/UVA208.cpp b/491AdvCompetitiveAlgorithmProg/homework4/UVA208.cpp new file mode 100644 index 0000000..81887ec --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework4/UVA208.cpp @@ -0,0 +1,110 @@ +#include +#include + +#define MAX_SIZE 21 + +//#define DEBUG + +void trace(int, int, int); +void judge(int); + +int route[MAX_SIZE][MAX_SIZE]; +int tmproute[MAX_SIZE][MAX_SIZE]; +int traced[MAX_SIZE]; +int buffer[MAX_SIZE]; +int mark[MAX_SIZE]; +int route_num; + +int main(){ + int destination; + int tmp_1; + int tmp_2; + int i, j; + int case_num = 1; + int flag; +#ifdef DEBUG + FILE *fp; + fp = fopen("123.txt", "r"); +#endif + while(scanf("%d", &destination) != EOF){ + //initial + for(i = 0; i < MAX_SIZE; i++){ + for(j = 0; j < MAX_SIZE; j++){ + route[i][j] = 0; + } + traced[i] = 0; + buffer[i] = -1; + mark[i] = 0; + } + route_num = 0; + flag = 0; +#ifdef DEBUG + //read & save + fscanf(fp, "%d", &destination); + while(1){ + fscanf(fp, "%d %d", &tmp_1, &tmp_2); + if(tmp_1 == 0 && tmp_2 == 0)break; + route[tmp_1-1][tmp_2-1] = 1; + route[tmp_2-1][tmp_1-1] = 1; + flag = 1; + } +#else + //read & save + //scanf("%d", &destination); + while(1){ + flag = 1; + scanf("%d %d", &tmp_1, &tmp_2); + if(tmp_1 == 0 && tmp_2 == 0)break; + route[tmp_1-1][tmp_2-1] = 1; + route[tmp_2-1][tmp_1-1] = 1; + } +#endif + if(flag == 0)break; + printf("CASE %d:\n", case_num); + memcpy(tmproute, route, sizeof(route)); + judge(destination); + trace(destination,1,0); + printf("There are %d routes from the firestation to streetcorner %d.\n", route_num, destination); + case_num++; + //system("pause"); + } +#ifdef DEBUG + fclose(fp); +#endif + return 0; +} + +void trace(int destination, int from, int deep){ + int i; + buffer[deep] = from; + if(from == destination){ + buffer[deep+1] = -1; + //print out route + printf("%d", buffer[0]); + for(i = 1; i < MAX_SIZE; i++){ + if(buffer[i] == -1)break; + printf(" %d", buffer[i]); + } + route_num++; + printf("\n"); + return; + } + traced[from-1] = 1; + for(i = 0; i < MAX_SIZE; i++){ + if(route[from-1][i]==1 && !traced[i] && mark[i])trace(destination, i+1, deep+1); + } + traced[from-1] = 0; + return; +} + +void judge(int n){ + int i; + mark[n-1] = 1; + if(n == 1)return; + for(i = 0; i < MAX_SIZE; i++){ + if(tmproute[n-1][i] && mark[i] == 0){ + tmproute[n-1][i] = 0; + judge(i+1); + } + } +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework5/POJ1579.cpp b/491AdvCompetitiveAlgorithmProg/homework5/POJ1579.cpp new file mode 100644 index 0000000..4680c4b --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework5/POJ1579.cpp @@ -0,0 +1,41 @@ +#include +#include +using namespace std; +const int maxn = 55; +int f[maxn][maxn][maxn]; + +int w(int a, int b, int c) +{ + if (a <= 0 || b <= 0 || c <= 0) + { + return 1; + } + if (a > 20 || b > 20 || c > 20) + { + return w(20, 20, 20); + } + if (f[a][b][c]) + { + return f[a][b][c]; + } + if (a < b && b < c) + { + return f[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c); + } + return f[a][b][c] = w(a - 1, b, c) + w(a - 1, b - 1, c) + w(a - 1, b, c - 1) - w(a - 1, b - 1, c - 1); +} + +int main(int argc, char const *argv[]) +{ + int a, b, c; + while (scanf("%d%d%d", &a, &b, &c) != EOF) + { + if (a == -1 && b == -1 && c == -1) + { + return 0; + } + int res = w(a, b, c); + printf("w(%d, %d, %d) = %d\n", a, b, c, res); + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework6/POJ1734.cpp b/491AdvCompetitiveAlgorithmProg/homework6/POJ1734.cpp new file mode 100644 index 0000000..e081846 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework6/POJ1734.cpp @@ -0,0 +1,77 @@ +#include +#include +#include +using namespace std; +#define MIN(a,b) (a)>(b)?(b):(a) +const int INF = 0x3f3f3f3f ; +int N, M ; +int maze[110][110] ; +int dis[110][110] ; +int fa[110][110] ; +int temp ; +int res[110] ; +void solve(int i, int j ,int k){ //记录最小环的路径 + temp = 0 ; + while(j != i){ + res[temp++] = j ; + j = fa[i][j] ; + } + res[temp++] = i ; + res[temp++] = k ; +} +void Floyd(){ + for(int i=1;i<=N;i++){ + for(int j=1;j<=N;j++){ + dis[i][j] = maze[i][j] ; + } + } + int ans = INF ; + for(int k=1;k<=N;k++){ + for(int i=1;idis[i][j] + maze[i][k] + maze[k][j]){ + ans = dis[i][j] + maze[i][k] + maze[k][j] ; + solve(i,j,k); + } + } + } + for(int i=1;i<=N;i++){ + for(int j=1;j<=N;j++){ + if(dis[i][k]dis[i][k] + dis[k][j]){ + dis[i][j] = dis[i][k] + dis[k][j] ; + fa[i][j] = fa[k][j] ; + fa[j][i] = fa[k][i] ; + } + } + } + } + if(ans == INF){ + printf("No solution.\n"); + } + else{ + for(int i=0;i c){ + maze[a][b] = maze[b][a] = c ; + fa[a][b] = a ; //标记(i,j)最短路径上,距离j最近的那个结点 + fa[b][a] = b ; + } + } + Floyd() ; + } + return 0 ; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework6/POJ2728.cpp b/491AdvCompetitiveAlgorithmProg/homework6/POJ2728.cpp new file mode 100644 index 0000000..dbfc21c --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework6/POJ2728.cpp @@ -0,0 +1,99 @@ +#include +#include +#include + +const int MAXN = 1000; +const int CACHE_FIX = 3; +const float EPS = 1e-4; + +struct Node; +struct UndirectedEdge; + +struct Node { + int id; + int x, y, z; + bool inTree; + UndirectedEdge *e; +} nodes[MAXN]; + +struct UndirectedEdge { + float benifit, cost; + float w; + + UndirectedEdge(float benifit, float cost) : benifit(benifit), cost(cost) {} + UndirectedEdge() {} +} edges[MAXN + CACHE_FIX][MAXN]; + +int n; + +inline float prim() { + nodes[0].inTree = true; + for (int i = 1; i < n; i++) nodes[i].e = &edges[0][i], nodes[i].inTree = false; + + float ans = 0; + for (int i = 0; i < n - 1; i++) { + Node *v = NULL; + for (int i = 0; i < n; i++) if (!nodes[i].inTree && (v == NULL || nodes[i].e->w < v->e->w)) v = &nodes[i]; + + ans += v->e->w; + v->e = NULL; + v->inTree = true; + + for (int i = 0; i < n; i++) if (!nodes[i].inTree && nodes[i].e->w > edges[i][v->id].w) nodes[i].e = &edges[i][v->id]; + } + + return ans; +} + +inline float test(float p) { + for (register int i = 0; i < n; i++) { + for (register int j = i + 1; j < n; j++) { + edges[j][i].w = edges[i][j].w = edges[i][j].cost - edges[i][j].benifit * p; + } + } + + float result = prim(); + //printf("test(%lf) = %lf\n", p, result); + return result; +} + +inline float solve(float sum) { + register float l = 0, r = sum; + //while (r - l > EPS) { + for (int i = 0; i < 22; i++) { + float mid = l + (r - l) / 2; + if (test(mid) > 0) l = mid; + else r = mid; + } + + return l + (r - l) / 2; +} + +inline float sqr(float x) { + return x * x; +} + +inline float distance(float x1, float x2, float y1, float y2) { + return sqrt(sqr(x1 - x2) + sqr(y1 - y2)); +} + +int main() { + while (scanf("%d", &n) != EOF && n != 0) { + for (int i = 0; i < n; i++) nodes[i].id = i; + + for (int i = 0; i < n; i++) scanf("%d %d %d", &nodes[i].x, &nodes[i].y, &nodes[i].z); + + float sum = 0; + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + edges[j][i] = edges[i][j] = UndirectedEdge(distance(nodes[i].x, nodes[j].x, nodes[i].y, nodes[j].y), abs(nodes[i].z - nodes[j].z)); + sum += edges[i][j].benifit; + } + } + + float ans = solve(100); + printf("%.3f\n", ans); + } + + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework6/POJ3463.cpp b/491AdvCompetitiveAlgorithmProg/homework6/POJ3463.cpp new file mode 100644 index 0000000..aaf560b --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework6/POJ3463.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include +using namespace std; + +const int MAXN = 1010; +const int INFS = 0x3FFFFFFF; + +struct edge { + int to, cost; + edge(int _to, int _cost) : to(_to), cost(_cost) {} +}; + +vector G[MAXN]; +int d[2][MAXN], cnt[2][MAXN]; +bool vis[2][MAXN]; + +struct ST { + int u, dd, r; + ST(int _u, int _dd, int _r) : u(_u), dd(_dd), r(_r) {} + bool operator < (const ST& o) const { return dd > o.dd; } +}; + +int dijkstra(int s, int t, int n) { + for (int i = 1; i <= n; i++) { + d[0][i] = d[1][i] = INFS; + cnt[0][i] = cnt[1][i] = 0; + vis[0][i] = vis[1][i] = false; + } + priority_queue Q; + Q.push(ST(s, 0, 0)); + d[0][s] = 0, cnt[0][s] = 1; + while (!Q.empty()) { + ST o = Q.top(); Q.pop(); + int u = o.u, r = o.r; + + if (vis[r][u]) continue; + else vis[r][u] = true; + + for (int i = 0; i < G[u].size(); i++) { + edge& e = G[u][i]; + int dis = o.dd + e.cost; + if (dis < d[0][e.to]) { + if (d[0][e.to] != INFS) { + cnt[1][e.to] = cnt[0][e.to]; + d[1][e.to] = d[0][e.to]; + Q.push(ST(e.to, d[1][e.to], 1)); + } + d[0][e.to] = dis; + cnt[0][e.to] = cnt[r][u]; + Q.push(ST(e.to, dis, 0)); + } + else if (dis == d[0][e.to]) { + cnt[0][e.to] += cnt[r][u]; + } + else if (dis < d[1][e.to]) { + d[1][e.to] = dis; + cnt[1][e.to] = cnt[r][u]; + Q.push(ST(e.to, dis, 1)); + } + else if (dis == d[1][e.to]) { + cnt[1][e.to] += cnt[r][u]; + } + } + } + int ans = cnt[0][t]; + if (d[0][t] == d[1][t] - 1) + ans += cnt[1][t]; + return ans; +} + +int main() { + int cases; + scanf("%d", &cases); + while (cases--) { + int n, m; + scanf("%d%d", &n, &m); + for (int i = 1; i <= n; i++) + G[i].clear(); + for (int i = 0; i < m; i++) { + int u, v, cost; + scanf("%d%d%d", &u, &v, &cost); + G[u].push_back(edge(v, cost)); + } + int s, t; + scanf("%d%d", &s, &t); + printf("%d\n", dijkstra(s, t, n)); + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework7/UVA10078.cpp b/491AdvCompetitiveAlgorithmProg/homework7/UVA10078.cpp new file mode 100644 index 0000000..82bd00d --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework7/UVA10078.cpp @@ -0,0 +1,31 @@ +#include +typedef struct { + int x, y; +} Pt; +int cross(Pt o, Pt a, Pt b) { + return (a.x - o.x)*(b.y - o.y) - + (a.y - o.y)*(b.x - o.x); +} +int main() { + int n, i; + Pt D[100]; + while(scanf("%d", &n), n) { + for(i = 0; i < n; i++) + scanf("%d %d", &D[i].x, &D[i].y); + D[n] = D[0], D[n+1] = D[1]; + if(cross(D[0], D[1], D[2]) >= 0) { + for(i = 0; i < n; i++) + if(cross(D[i], D[i+1], D[i+2]) < 0) + break; + } else { + for(i = 0; i < n; i++) + if(cross(D[i], D[i+1], D[i+2]) > 0) + break; + } + if(i != n) + puts("Yes"); + else + puts("No"); + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework7/UVA833.cpp b/491AdvCompetitiveAlgorithmProg/homework7/UVA833.cpp new file mode 100644 index 0000000..4b81bd3 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework7/UVA833.cpp @@ -0,0 +1,48 @@ +#include +#define inRange(c, l, r) ((c >= l && c <= r) || (c >= r && c <= l)) +#define max(x, y) ((x) > (y) ? (x) : (y)) +#define min(x, y) ((x) < (y) ? (x) : (y)) +struct seg { + int sx, sy, ex, ey; +}; +int main() { + int t, m, n, q, i, x, y; + scanf("%d", &t); + while(t--) { + scanf("%d", &n); + seg s[100]; + for(i = 0; i < n; i++) { + scanf("%d %d", &s[i].sx, &s[i].sy); + scanf("%d %d", &s[i].ex, &s[i].ey); + } + scanf("%d", &q); + while(q--) { + scanf("%d %d", &x, &y); + while(true) { + int j = -1; + double max = -1, ty; + for(i = 0; i < n; i++) { + if(inRange(x, s[i].sx, s[i].ex)) { + ty = s[i].ey + (double)(s[i].sy-s[i].ey)*(x-s[i].ex)/(s[i].sx-s[i].ex); + if(ty < y) { + if(ty > max) { + max = ty; + j = i; + } + } + } + } + if(j == -1) break; + if((double)(s[j].sy-s[j].ey)/(s[j].sx-s[j].ex) < 0) + x = max(s[j].sx, s[j].ex); + else + x = min(s[j].sx, s[j].ex); + y = min(s[j].sy, s[j].ey); + } + printf("%d\n", x); + } + if(t) + puts(""); + } + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework8/UVA10791.cpp b/491AdvCompetitiveAlgorithmProg/homework8/UVA10791.cpp new file mode 100644 index 0000000..120d264 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework8/UVA10791.cpp @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef long long LL; +#define N 10005 + +int n , m , ca; + +void work() +{ + int i , j , ans = 0 , x , y = 0; + printf("Case %d: " , ++ ca); + if (n == 2147483647) + { + printf("2147483648\n"); + return; + } + m = n; + for (i = 2 ; i * i <= m ; ++ i) + if (m % i == 0) + { + x = 1 , ++ y; + while (m % i == 0) + x *= i , m /= i; + ans += x; + } + if (m > 1) + ans += m , ++ y; + if (y <= 1) + { + printf("%d\n" , n + 1); + return; + } + printf("%d\n" , ans); +} + +void init() +{ + +} + +int main() +{ + while (scanf("%d",&n) , n) + work(); + return 0; +} \ No newline at end of file diff --git a/491AdvCompetitiveAlgorithmProg/homework8/UVA11762.cpp b/491AdvCompetitiveAlgorithmProg/homework8/UVA11762.cpp new file mode 100644 index 0000000..ce1cc26 --- /dev/null +++ b/491AdvCompetitiveAlgorithmProg/homework8/UVA11762.cpp @@ -0,0 +1,70 @@ + +#include +#include +#include + +using namespace std; +const int maxn = 1000010, prinum = 99999; + +bool nprime[maxn]; +int plist[1500000]; +int lp; + +double dfs(int); +double dp[maxn]; +bool dvis[maxn]; + +int main() +{ + for(int i=2; i<=1001; i++) + { + if(!nprime[i]) + { + int now = i*2; + while(now < maxn) + { + nprime[now] = 1; + now += i; + } + } + } + for(int i=2; i +#include +#include +int main() { + int t, n, w, i, j; + int d[30], v[30], td[30]; + int first = 0; + while(scanf("%d %d", &t, &w) == 2) { + scanf("%d", &n); + for(i = 0; i < n; i++) { + scanf("%d %d", &d[i], &v[i]); + td[i] = 3*w*d[i]; + } + int dp[1001] = {}, cnt[1001] = {}; + int graph[1001][30] = {}; + for(i = n-1; i >= 0; i--) { + for(j = t; j >= td[i]; j--) { + if(dp[j-td[i]] + v[i] > dp[j]) { + dp[j] = dp[j-td[i]] + v[i]; + cnt[j] = cnt[j-td[i]] + 1; + graph[j][i] = 1; + } + } + } + if(first) puts(""); + first = 1; + printf("%d\n%d\n", dp[t], cnt[t]); + j = t; + for(i = 0, j = t; i < n; i++) { + if(graph[j][i] == 1) { + printf("%d %d\n", d[i], v[i]); + j -= td[i]; + } + } + } + return 0; +} \ No newline at end of file diff --git a/519ScientificVisualization/MP/MP1/ new colormap.png b/519ScientificVisualization/MP/MP1/ new colormap.png new file mode 100644 index 0000000..32de24d Binary files /dev/null and b/519ScientificVisualization/MP/MP1/ new colormap.png differ diff --git a/519ScientificVisualization/MP/MP1/MP1.pdf b/519ScientificVisualization/MP/MP1/MP1.pdf new file mode 100644 index 0000000..1c9ee9d Binary files /dev/null and b/519ScientificVisualization/MP/MP1/MP1.pdf differ diff --git a/519ScientificVisualization/MP/MP1/ScalarVis.html b/519ScientificVisualization/MP/MP1/ScalarVis.html new file mode 100644 index 0000000..cc6dc3f --- /dev/null +++ b/519ScientificVisualization/MP/MP1/ScalarVis.html @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + CS 519: Scientific Visualization + + + + +
+
+ Visualization Parameters + Draw Grid + Interpolation
+ Grid Resolution
+ Frequency
+ Contour Value
+ Color Map + Rainbow + Greyscale + Designed Colormap
+
+
+ Data Source + Built-In Functions + Gaussian + Sine +
+
+ + + Please use a browser that supports "canvas" + + + diff --git a/519ScientificVisualization/MP/MP1/ScalarVis.js b/519ScientificVisualization/MP/MP1/ScalarVis.js new file mode 100644 index 0000000..973e653 --- /dev/null +++ b/519ScientificVisualization/MP/MP1/ScalarVis.js @@ -0,0 +1,196 @@ + +//University of Illinois/NCSA Open Source License +//Copyright (c) 2015 University of Illinois +//All rights reserved. +// +//Developed by: Eric Shaffer +// Department of Computer Science +// University of Illinois at Urbana Champaign +// +// +//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +//documentation files (the "Software"), to deal with the Software without restriction, including without limitation +//the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +//to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions and the following +//disclaimers.Redistributions in binary form must reproduce the above copyright notice, this list +//of conditions and the following disclaimers in the documentation and/or other materials provided with the distribution. +//Neither the names of , nor the names of its contributors may be +//used to endorse or promote products derived from this Software without specific prior written permission. +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +//TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +//DEALINGS WITH THE SOFTWARE. + + + + +//------------------------------------------------------- +// Global variables +var x_extent=[-1.0,1.0]; +var y_extent=[-1.0,1.0]; +var myGrid; + +//------------------------------------------------------ +//MAIN +function main() { + render(); +} + +//--Function: render------------------------------------- +//Main drawing function + +function render(canvas){ + var res = parseFloat(document.getElementById("grid_res").value); + // ---------------------------------------------------------------------------------- + var contour_values = document.getElementById("contour_value").value; + var thresholds = contour_values.split(" "); + var frequency = document.getElementById("frequency").value; + // Array to store vertex value + var _value = (function() + { + var array = []; + for(var y = 0; y != (res+1); y++) { array[y] = new Array(res+1); } + return array; + })(); + // ---------------------------------------------------------------------------------- + myGrid = new UGrid2D([x_extent[0],y_extent[0]], [x_extent[1],y_extent[1]] ,res); + var canvas = document.getElementById('example'); + if (! canvas) { + console.log(' Failed to retrieve the < canvas > element'); + return false; + } + else { + console.log(' Got < canvas > element '); + } + + +// Get the rendering context for 2DCG <- (2) +var ctx = canvas.getContext('2d'); + +// Draw the scalar data using an image rpresentation +var imgData=ctx.getImageData(0,0,canvas.width,canvas.height); + +// Store whole image fval data +var pt_value = (function() + { + var array = []; + for(var y = 0; y != (canvas.width+1); y++) { array[y] = new Array(canvas.height+1); } + return array; + })(); + +// Choose the scalar function +var scalar_func = gaussian; +if (document.getElementById("Sine").checked) + scalar_func = sin2D; + +//Determine the data range...useful for the color mapping +var mn = scalar_func(pixel2pt(canvas.width,canvas.height,x_extent,y_extent,0,0)); +var mx = mn +for (var y=0;ymx) + mx=fval; + } + + // Set the colormap based in the radio button + var color_func = rainbow_colormap; + if (document.getElementById("greyscale").checked) + color_func = greyscale_map; + if (document.getElementById("designed").checked) + color_func = designed_colormap; + + //Color the domain according to the scalar value + for (var y=0;y, nor the names of its contributors may be +//used to endorse or promote products derived from this Software without specific prior written permission. +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +//TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +//DEALINGS WITH THE SOFTWARE. + +//-------------------------------------------------------- +//A simple Gaussian function +function gaussian(pt){ + return Math.exp(-(pt[0]*pt[0]+pt[1]*pt[1])); +} + +//-------------------------------------------------------- +//The infamous rainbow color map, normalized to the data range +function rainbow_colormap(fval,fmin,fmax){ + var dx=0.8; + var fval_nrm = (fval-fmin)/(fmax-fmin); + var g = (6.0-2.0*dx)*fval_nrm +dx; + var R = Math.max(0.0,(3.0-Math.abs(g-4.0)-Math.abs(g-5.0))/2.0 )*255; + var G = Math.max(0.0,(4.0-Math.abs(g-2.0)-Math.abs(g-4.0))/2.0 )*255; + var B = Math.max(0.0,(3.0-Math.abs(g-1.0)-Math.abs(g-2.0))/2.0 )*255; + color = [Math.round(R),Math.round(G),Math.round(B),255]; + return color; +} + +//-------------------------------------------------------- +// + +function greyscale_map(fval,fmin,fmax){ + var c=255*((fval-fmin)/(fmax-fmin)); + var color = [Math.round(c),Math.round(c),Math.round(c),255]; + return color; +} + +//-------------------------------------------------------- +// + +function gaussian_gradient(pt){ + var dx = -2*pt[0]*gaussian(pt); + var dy = -2*pt[1]*gaussian(pt); + return [dx,dy]; +} + +//-------------------------------------------------------- +// + +function gaussian_divergence(pt){ + var gradient = gaussian_gradient(pt); + return gradient[0]+gradient[1]; +} + +//-------------------------------------------------------- +// + +function gaussian_vorticity_mag(pt){ + return 0; +} + +//-------------------------------------------------------- +// + +function normalize2D(v){ + var len = Math.sqrt(v[0]*v[0] + v[1]*v[1]); + if (len == 0.0) + { + console.log("Zero length gradient"); + return ([0.0,0.0]); + } + return [v[0]/len,v[1]/len]; +} + +//-------------------------------------------------------- +// + +function euler_integration(pt,h,steps,get_vector) +{ + var ln=[[pt[0],pt[1]]]; + for(i=0;i= threshold + if (_value[x][y]>=threshold&&_value[x+1][y]=threshold&&_value[x][y+1]>=threshold&&_value[x+1][y+1]>=threshold) + { + var ptx = (x*canvas.width/res*(_value[x+1][y]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y]))/(_value[x+1][y]-_value[x][y]); + var pty = (y*canvas.height/res*(_value[x][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x][y]))/(_value[x][y+1]-_value[x][y]); + ctx.moveTo(ptx, y*canvas.height/res); + ctx.lineTo(x*canvas.width/res, pty); + } + // only right top vertex >= threshold + if (_value[x][y]=threshold&&_value[x][y+1]=threshold&&_value[x+1][y]=threshold&&_value[x+1][y+1]>=threshold) + { + var ptx = ((x+1)*canvas.width/res*(_value[x][y]-threshold)+x*canvas.width/res*(threshold-_value[x+1][y]))/(_value[x][y]-_value[x+1][y]); + var pty = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.moveTo(ptx, y*canvas.height/res); + ctx.lineTo((x+1)*canvas.width/res, pty); + } + // only left bottom vertex >= threshold + if (_value[x][y]=threshold&&_value[x+1][y+1]=threshold&&_value[x+1][y]>=threshold&&_value[x][y+1]=threshold) + { + var ptx = (x*canvas.width/res*(_value[x+1][y+1]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y+1]))/(_value[x+1][y+1]-_value[x][y+1]); + var pty = ((y+1)*canvas.width/res*(_value[x][y]-threshold)+y*canvas.width/res*(threshold-_value[x][y+1]))/(_value[x][y]-_value[x][y+1]); + ctx.moveTo(x*canvas.width/res, pty); + ctx.lineTo(ptx, (y+1)*canvas.height/res); + } + // only right bottom vertex >= threshold + if (_value[x][y]=threshold) + { + var ptx = (x*canvas.width/res*(_value[x+1][y+1]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y+1]))/(_value[x+1][y+1]-_value[x][y+1]); + var pty = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.moveTo(ptx, (y+1)*canvas.height/res); + ctx.lineTo((x+1)*canvas.width/res, pty); + } + // only right bottom vertex < threshold + if (_value[x][y]>=threshold&&_value[x+1][y]>=threshold&&_value[x][y+1]>=threshold&&_value[x+1][y+1]= threshold + if (_value[x][y]>=threshold&&_value[x+1][y]>=threshold&&_value[x][y+1]=threshold&&_value[x+1][y+1]>=threshold) + { + var pty1 = (y*canvas.height/res*(_value[x][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x][y]))/(_value[x][y+1]-_value[x][y]); + var pty2 = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.moveTo(x*canvas.width/res, pty1); + ctx.lineTo((x+1)*canvas.width/res, pty2); + } + // left vertex >= threshold + if (_value[x][y]>=threshold&&_value[x+1][y]=threshold&&_value[x+1][y+1]=threshold&&_value[x][y+1]=threshold) + { + var ptx1 = (x*canvas.width/res*(_value[x+1][y]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y]))/(_value[x+1][y]-_value[x][y]); + var ptx2 = (x*canvas.width/res*(_value[x+1][y+1]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y+1]))/(_value[x+1][y+1]-_value[x][y+1]); + ctx.moveTo(ptx1, y*canvas.height/res); + ctx.lineTo(ptx2, (y+1)*canvas.height/res); + } + + // diag vertex >= threshold + if (_value[x][y]>=threshold&&_value[x+1][y]=threshold) + { + if (avg>=threshold) + { + var ptx1 = ((x+1)*canvas.width/res*(_value[x][y]-threshold)+x*canvas.width/res*(threshold-_value[x+1][y]))/(_value[x][y]-_value[x+1][y]); + var pty1 = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.moveTo(ptx1, y*canvas.height/res); + ctx.lineTo((x+1)*canvas.width/res, pty1); + ctx.lineWidth = 1; + ctx.strokeStyle = '#000000'; + ctx.stroke(); + + var ptx2 = (x*canvas.width/res*(_value[x+1][y+1]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y+1]))/(_value[x+1][y+1]-_value[x][y+1]); + var pty2 = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.beginPath(); + ctx.moveTo(x*canvas.width/res, pty2); + ctx.lineTo(ptx2, (y+1)*canvas.height/res); + } + else + { + var ptx1 = ((x+1)*canvas.width/res*(_value[x][y]-threshold)+x*canvas.width/res*(threshold-_value[x+1][y]))/(_value[x][y]-_value[x+1][y]); + var pty1 = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+y*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.moveTo(ptx1, y*canvas.height/res); + ctx.lineTo(x*canvas.width/res, pty1); + ctx.lineWidth = 1; + ctx.strokeStyle = '#000000'; + ctx.stroke(); + + var ptx2 = (x*canvas.width/res*(_value[x+1][y+1]-threshold)+(x+1)*canvas.width/res*(threshold-_value[x][y+1]))/(_value[x+1][y+1]-_value[x][y+1]); + var pty2 = (y*canvas.height/res*(_value[x+1][y+1]-threshold)+(y+1)*canvas.height/res*(threshold-_value[x+1][y]))/(_value[x+1][y+1]-_value[x+1][y]); + ctx.beginPath(); + ctx.moveTo((x+1)*canvas.width/res, pty2); + ctx.lineTo(ptx2, (y+1)*canvas.height/res); + } + } + // diag vertex < threshold + if (_value[x][y]=threshold&&_value[x][y+1]>=threshold&&_value[x+1][y+1], nor the names of its contributors may be +//used to endorse or promote products derived from this Software without specific prior written permission. +//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +//WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +//CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +//TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +//DEALINGS WITH THE SOFTWARE. + + + + + +//-------------------------------------------------------- +// A Simple 2D Grid Class +var UGrid2D = function(min_corner,max_corner,resolution){ + this.min_corner=min_corner; + this.max_corner=max_corner; + this.resolution=resolution; + console.log('UGrid2D instance created'); +} + + +// Method: draw_grid +// Draw the grid lines + +UGrid2D.prototype.draw_grid = function(canvas){ + var ctx = canvas.getContext('2d'); + // loc=[0,0]; + delta = canvas.width/this.resolution; + for (var i=0;i<=this.resolution;i++) + { + ctx.beginPath(); + ctx.moveTo(i*delta, 0); + ctx.lineTo(i*delta, canvas.height-1); + ctx.lineWidth = 1; + // set line color + ctx.strokeStyle = '#000000'; + ctx.stroke(); + } + // loc=[0,0]; + + delta = canvas.height/this.resolution; + + for (var i=0;i<=this.resolution;i++) + { + ctx.beginPath(); + ctx.moveTo(0,i*delta); + ctx.lineTo(canvas.width-1,i*delta); + ctx.lineWidth = 1; + // set line color + ctx.strokeStyle = '#000000'; + ctx.stroke(); + } +} + + +//End UGrid2D-------------------------------------------- \ No newline at end of file diff --git a/519ScientificVisualization/MP/MP1/marching squares.png b/519ScientificVisualization/MP/MP1/marching squares.png new file mode 100644 index 0000000..0a12e21 Binary files /dev/null and b/519ScientificVisualization/MP/MP1/marching squares.png differ diff --git a/519ScientificVisualization/MP/MP1/new colormap.png b/519ScientificVisualization/MP/MP1/new colormap.png new file mode 100644 index 0000000..2b30a73 Binary files /dev/null and b/519ScientificVisualization/MP/MP1/new colormap.png differ diff --git a/519ScientificVisualization/MP/MP2/CS519-MP2.pdf b/519ScientificVisualization/MP/MP2/CS519-MP2.pdf new file mode 100644 index 0000000..91f6654 Binary files /dev/null and b/519ScientificVisualization/MP/MP2/CS519-MP2.pdf differ diff --git a/519ScientificVisualization/MP/MP2/Color.png b/519ScientificVisualization/MP/MP2/Color.png new file mode 100644 index 0000000..aec4513 Binary files /dev/null and b/519ScientificVisualization/MP/MP2/Color.png differ diff --git a/519ScientificVisualization/MP/MP2/Hedgehog.png b/519ScientificVisualization/MP/MP2/Hedgehog.png new file mode 100644 index 0000000..4408106 Binary files /dev/null and b/519ScientificVisualization/MP/MP2/Hedgehog.png differ diff --git a/519ScientificVisualization/MP/MP2/LIC.html b/519ScientificVisualization/MP/MP2/LIC.html new file mode 100644 index 0000000..1353fb2 --- /dev/null +++ b/519ScientificVisualization/MP/MP2/LIC.html @@ -0,0 +1,26 @@ + + + + + CS 519: Scientific Visualization MP2 + + +
+
+ Parameters + L: the LIC line length
+ K: the hedgehog line scaling factor
+ Grid size: determines number of samples for the hedgehog plot
+ Color on/off: color according to magnitude
+ Hedgehog on/off: toggle on or off the hedgehog lines
+ Hedgehog Style: + Sample + Random
+
+
+ + + Please use a browser that supports "canvas" + + + \ No newline at end of file diff --git a/519ScientificVisualization/MP/MP2/LIC.js b/519ScientificVisualization/MP/MP2/LIC.js new file mode 100644 index 0000000..6bd58a9 --- /dev/null +++ b/519ScientificVisualization/MP/MP2/LIC.js @@ -0,0 +1,268 @@ +//------------------------------------------------------- +// Global variables +var x_extent=[-1.0,1.0]; +var y_extent=[-1.0,1.0]; + +//------------------------------------------------------ +//MAIN +function main() { + render(); +} + +//--Function: render------------------------------------- +//Main drawing function +function render(canvas){ + var L = parseFloat(document.getElementById("L").value); + var K = parseFloat(document.getElementById("K").value); + var G = parseFloat(document.getElementById("G").value); + var color_func = greyscale_map; + if (document.getElementById("color").checked) + color_func = rainbow_colormap; + var canvas = document.getElementById('example'); + + if (! canvas) { + console.log(' Failed to retrieve the < canvas > element'); + return false; + } + else { + console.log(' Got < canvas > element '); + } + // Get the rendering context for 2DCG <- (2) + var ctx = canvas.getContext('2d'); + + // Draw the scalar data using an image rpresentation + var imgData=ctx.getImageData(0,0,canvas.width,canvas.height); + + // Store whole image noise data + var pt_noise = (function() + { + var array = []; + for(var y = 0; y != (canvas.width+1); y++) { array[y] = new Float32Array(canvas.height+1); } + return array; + })(); + + var pt_lic = (function() + { + var array = []; + for(var y = 0; y != (canvas.width+1); y++) { array[y] = new Float32Array(canvas.height+1); } + return array; + })(); + + for (var y=0;ycanvas.width||pixel_backward[1]<0||pixel_backward[1]>canvas.height||pixel_forward[0]<0||pixel_forward[0]>canvas.width||pixel_forward[1]<0||pixel_forward[1]>canvas.height) { + numerator = numerator + weight_backward * Math.random() + weight_forward * Math.random(); + }else{ + numerator = numerator + weight_backward * pt_noise[pixel_backward[0]][pixel_backward[1]] + weight_forward * pt_noise[pixel_forward[0]][pixel_forward[1]]; + } + denominator = denominator + weight_backward + weight_forward; + } + numerator = numerator - pt_noise[x][y]; // substract weight(1) * target pixel noise since euler_integration calculate twice(backward,forward) + denominator = denominator - 1; // substract target pixel weight(1) since euler_integration calculate twice(backward,forward) + pt_lic[x][y] = numerator/denominator; + } + } + var mn_temp = 256; + var mx_temp = -256; + for (var y=0;ymx_temp) + mx_temp=fval; + } + + var mn = pt_noise[0][0]; + var mx = mn; + for (var y=0;ymx) + mx=fval; + } + + for (var y=0;y + + + + + + + + + CS 519: Scientific Visualization: Force-Directed Graph Layout + + +
+
+ Graph Layout Parameters + Maximum movement

+ Damping value

+ Number of iterations

+ Use default k value
+ User-provided k value

+ Vertex diameter

+ Edge thickness

+ Test graph
+
+
+ + + Please use a browser that supports "canvas" + + + + + \ No newline at end of file diff --git a/519ScientificVisualization/Paper/2018-TensorFlowGraph-VAST.pdf b/519ScientificVisualization/Paper/2018-TensorFlowGraph-VAST.pdf new file mode 100644 index 0000000..629a50b Binary files /dev/null and b/519ScientificVisualization/Paper/2018-TensorFlowGraph-VAST.pdf differ diff --git a/519ScientificVisualization/Paper/CGF_STARnochanges-red.pdf b/519ScientificVisualization/Paper/CGF_STARnochanges-red.pdf new file mode 100644 index 0000000..9f5bd12 Binary files /dev/null and b/519ScientificVisualization/Paper/CGF_STARnochanges-red.pdf differ diff --git a/519ScientificVisualization/Paper/Dual Contouring.pdf b/519ScientificVisualization/Paper/Dual Contouring.pdf new file mode 100644 index 0000000..5d91b62 Binary files /dev/null and b/519ScientificVisualization/Paper/Dual Contouring.pdf differ diff --git a/519ScientificVisualization/Paper/InfoVisPerceptionForDesign-Chapter4.pdf b/519ScientificVisualization/Paper/InfoVisPerceptionForDesign-Chapter4.pdf new file mode 100644 index 0000000..f99fcf4 Binary files /dev/null and b/519ScientificVisualization/Paper/InfoVisPerceptionForDesign-Chapter4.pdf differ diff --git a/519ScientificVisualization/Paper/Marching Cubes and Variants.pdf b/519ScientificVisualization/Paper/Marching Cubes and Variants.pdf new file mode 100644 index 0000000..eeaa2db Binary files /dev/null and b/519ScientificVisualization/Paper/Marching Cubes and Variants.pdf differ diff --git a/519ScientificVisualization/Paper/colordiff_vis2017.pdf b/519ScientificVisualization/Paper/colordiff_vis2017.pdf new file mode 100644 index 0000000..91c3dc0 Binary files /dev/null and b/519ScientificVisualization/Paper/colordiff_vis2017.pdf differ diff --git a/519ScientificVisualization/Paper/rf.pdf b/519ScientificVisualization/Paper/rf.pdf new file mode 100644 index 0000000..e4b9d38 Binary files /dev/null and b/519ScientificVisualization/Paper/rf.pdf differ diff --git a/519ScientificVisualization/Paper/squarifiedTreeMaps.pdf b/519ScientificVisualization/Paper/squarifiedTreeMaps.pdf new file mode 100644 index 0000000..2ac3271 Binary files /dev/null and b/519ScientificVisualization/Paper/squarifiedTreeMaps.pdf differ diff --git a/519ScientificVisualization/Paper/vis17-bladin-globe_browsing.pdf b/519ScientificVisualization/Paper/vis17-bladin-globe_browsing.pdf new file mode 100644 index 0000000..0378d9b Binary files /dev/null and b/519ScientificVisualization/Paper/vis17-bladin-globe_browsing.pdf differ diff --git a/519ScientificVisualization/Practise/practise1/ScalarVis.html b/519ScientificVisualization/Practise/practise1/ScalarVis.html new file mode 100644 index 0000000..456aa53 --- /dev/null +++ b/519ScientificVisualization/Practise/practise1/ScalarVis.html @@ -0,0 +1,14 @@ + + + + +Scalar Visualization + + + + Please use a browser that supports "canvas" + + + + diff --git a/519ScientificVisualization/Practise/practise1/ScalarVis.js b/519ScientificVisualization/Practise/practise1/ScalarVis.js new file mode 100644 index 0000000..fd56b85 --- /dev/null +++ b/519ScientificVisualization/Practise/practise1/ScalarVis.js @@ -0,0 +1,102 @@ +/** + * @fileOverview Implements a simple visualization tool for a set of 2D mathematical functions. + * + * @author + * + */ + +function main(){ + +// Retrieve < canvas > element <- (1) +var canvas = document.getElementById('example'); +if (! canvas) { + console.log(' Failed to retrieve the < canvas > element'); + return false; +} +else{ + console.log(' Got < canvas > element '); +} +// Get the rendering context for 2DCG <- (2) +var ctx = canvas.getContext('2d'); + +// Draw something +var imgData=ctx.getImageData(0,0,canvas.width,canvas.height); + +// Set up the logical domain of the function which we'll map to pixels +var x_extent=[-1.0,1.0] +var y_extent=[-1.0,1.0] + +//Determine the data range...useful for the color mapping +var mn = 0; +var mx = 1; + +//------------ + +//Color the domain according to the function value +for (var y=0;y + // works on most browsers + // IE10/11 does not support touch event, and MS Edge supports them but not by + // default, so we dont check navigator.maxTouchPoints for them here. + touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge, + // . + pointerEventsSupported: 'onpointerdown' in window + // Firefox supports pointer but not by default, only MS browsers are reliable on pointer + // events currently. So we dont use that on other browsers unless tested sufficiently. + // Although IE 10 supports pointer event, it use old style and is different from the + // standard. So we exclude that. (IE 10 is hardly used on touch device) + && (browser.edge || (browser.ie && browser.version >= 11)) + }; +} + +/** + * @module zrender/core/util + */ + +// 用于处理merge时无法遍历Date等对象的问题 +var BUILTIN_OBJECT = { + '[object Function]': 1, + '[object RegExp]': 1, + '[object Date]': 1, + '[object Error]': 1, + '[object CanvasGradient]': 1, + '[object CanvasPattern]': 1, + // For node-canvas + '[object Image]': 1, + '[object Canvas]': 1 +}; + +var TYPED_ARRAY = { + '[object Int8Array]': 1, + '[object Uint8Array]': 1, + '[object Uint8ClampedArray]': 1, + '[object Int16Array]': 1, + '[object Uint16Array]': 1, + '[object Int32Array]': 1, + '[object Uint32Array]': 1, + '[object Float32Array]': 1, + '[object Float64Array]': 1 +}; + +var objToString = Object.prototype.toString; + +var arrayProto = Array.prototype; +var nativeForEach = arrayProto.forEach; +var nativeFilter = arrayProto.filter; +var nativeSlice = arrayProto.slice; +var nativeMap = arrayProto.map; +var nativeReduce = arrayProto.reduce; + +/** + * Those data types can be cloned: + * Plain object, Array, TypedArray, number, string, null, undefined. + * Those data types will be assgined using the orginal data: + * BUILTIN_OBJECT + * Instance of user defined class will be cloned to a plain object, without + * properties in prototype. + * Other data types is not supported (not sure what will happen). + * + * Caution: do not support clone Date, for performance consideration. + * (There might be a large number of date in `series.data`). + * So date should not be modified in and out of echarts. + * + * @param {*} source + * @return {*} new + */ +function clone(source) { + if (source == null || typeof source != 'object') { + return source; + } + + var result = source; + var typeStr = objToString.call(source); + + if (typeStr === '[object Array]') { + result = []; + for (var i = 0, len = source.length; i < len; i++) { + result[i] = clone(source[i]); + } + } + else if (TYPED_ARRAY[typeStr]) { + var Ctor = source.constructor; + if (source.constructor.from) { + result = Ctor.from(source); + } + else { + result = new Ctor(source.length); + for (var i = 0, len = source.length; i < len; i++) { + result[i] = clone(source[i]); + } + } + } + else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) { + result = {}; + for (var key in source) { + if (source.hasOwnProperty(key)) { + result[key] = clone(source[key]); + } + } + } + + return result; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} target + * @param {*} source + * @param {boolean} [overwrite=false] + */ +function merge(target, source, overwrite) { + // We should escapse that source is string + // and enter for ... in ... + if (!isObject(source) || !isObject(target)) { + return overwrite ? clone(source) : target; + } + + for (var key in source) { + if (source.hasOwnProperty(key)) { + var targetProp = target[key]; + var sourceProp = source[key]; + + if (isObject(sourceProp) + && isObject(targetProp) + && !isArray(sourceProp) + && !isArray(targetProp) + && !isDom(sourceProp) + && !isDom(targetProp) + && !isBuiltInObject(sourceProp) + && !isBuiltInObject(targetProp) + && !isPrimitive(sourceProp) + && !isPrimitive(targetProp) + ) { + // 如果需要递归覆盖,就递归调用merge + merge(targetProp, sourceProp, overwrite); + } + else if (overwrite || !(key in target)) { + // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况 + // NOTE,在 target[key] 不存在的时候也是直接覆盖 + target[key] = clone(source[key], true); + } + } + } + + return target; +} + +/** + * @param {Array} targetAndSources The first item is target, and the rests are source. + * @param {boolean} [overwrite=false] + * @return {*} target + */ +function mergeAll(targetAndSources, overwrite) { + var result = targetAndSources[0]; + for (var i = 1, len = targetAndSources.length; i < len; i++) { + result = merge(result, targetAndSources[i], overwrite); + } + return result; +} + +/** + * @param {*} target + * @param {*} source + * @memberOf module:zrender/core/util + */ +function extend(target, source) { + for (var key in source) { + if (source.hasOwnProperty(key)) { + target[key] = source[key]; + } + } + return target; +} + +/** + * @param {*} target + * @param {*} source + * @param {boolean} [overlay=false] + * @memberOf module:zrender/core/util + */ +function defaults(target, source, overlay) { + for (var key in source) { + if (source.hasOwnProperty(key) + && (overlay ? source[key] != null : target[key] == null) + ) { + target[key] = source[key]; + } + } + return target; +} + +var createCanvas = function () { + return document.createElement('canvas'); +}; + +// FIXME +var _ctx; + +function getContext() { + if (!_ctx) { + // Use util.createCanvas instead of createCanvas + // because createCanvas may be overwritten in different environment + _ctx = createCanvas().getContext('2d'); + } + return _ctx; +} + +/** + * 查询数组中元素的index + * @memberOf module:zrender/core/util + */ +function indexOf(array, value) { + if (array) { + if (array.indexOf) { + return array.indexOf(value); + } + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + } + return -1; +} + +/** + * 构造类继承关系 + * + * @memberOf module:zrender/core/util + * @param {Function} clazz 源类 + * @param {Function} baseClazz 基类 + */ +function inherits(clazz, baseClazz) { + var clazzPrototype = clazz.prototype; + function F() {} + F.prototype = baseClazz.prototype; + clazz.prototype = new F(); + + for (var prop in clazzPrototype) { + clazz.prototype[prop] = clazzPrototype[prop]; + } + clazz.prototype.constructor = clazz; + clazz.superClass = baseClazz; +} + +/** + * @memberOf module:zrender/core/util + * @param {Object|Function} target + * @param {Object|Function} sorce + * @param {boolean} overlay + */ +function mixin(target, source, overlay) { + target = 'prototype' in target ? target.prototype : target; + source = 'prototype' in source ? source.prototype : source; + + defaults(target, source, overlay); +} + +/** + * Consider typed array. + * @param {Array|TypedArray} data + */ +function isArrayLike(data) { + if (! data) { + return; + } + if (typeof data == 'string') { + return false; + } + return typeof data.length == 'number'; +} + +/** + * 数组或对象遍历 + * @memberOf module:zrender/core/util + * @param {Object|Array} obj + * @param {Function} cb + * @param {*} [context] + */ +function each$1(obj, cb, context) { + if (!(obj && cb)) { + return; + } + if (obj.forEach && obj.forEach === nativeForEach) { + obj.forEach(cb, context); + } + else if (obj.length === +obj.length) { + for (var i = 0, len = obj.length; i < len; i++) { + cb.call(context, obj[i], i, obj); + } + } + else { + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + cb.call(context, obj[key], key, obj); + } + } + } +} + +/** + * 数组映射 + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {*} [context] + * @return {Array} + */ +function map(obj, cb, context) { + if (!(obj && cb)) { + return; + } + if (obj.map && obj.map === nativeMap) { + return obj.map(cb, context); + } + else { + var result = []; + for (var i = 0, len = obj.length; i < len; i++) { + result.push(cb.call(context, obj[i], i, obj)); + } + return result; + } +} + +/** + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {Object} [memo] + * @param {*} [context] + * @return {Array} + */ +function reduce(obj, cb, memo, context) { + if (!(obj && cb)) { + return; + } + if (obj.reduce && obj.reduce === nativeReduce) { + return obj.reduce(cb, memo, context); + } + else { + for (var i = 0, len = obj.length; i < len; i++) { + memo = cb.call(context, memo, obj[i], i, obj); + } + return memo; + } +} + +/** + * 数组过滤 + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {*} [context] + * @return {Array} + */ +function filter(obj, cb, context) { + if (!(obj && cb)) { + return; + } + if (obj.filter && obj.filter === nativeFilter) { + return obj.filter(cb, context); + } + else { + var result = []; + for (var i = 0, len = obj.length; i < len; i++) { + if (cb.call(context, obj[i], i, obj)) { + result.push(obj[i]); + } + } + return result; + } +} + +/** + * 数组项查找 + * @memberOf module:zrender/core/util + * @param {Array} obj + * @param {Function} cb + * @param {*} [context] + * @return {*} + */ +function find(obj, cb, context) { + if (!(obj && cb)) { + return; + } + for (var i = 0, len = obj.length; i < len; i++) { + if (cb.call(context, obj[i], i, obj)) { + return obj[i]; + } + } +} + +/** + * @memberOf module:zrender/core/util + * @param {Function} func + * @param {*} context + * @return {Function} + */ +function bind(func, context) { + var args = nativeSlice.call(arguments, 2); + return function () { + return func.apply(context, args.concat(nativeSlice.call(arguments))); + }; +} + +/** + * @memberOf module:zrender/core/util + * @param {Function} func + * @return {Function} + */ +function curry(func) { + var args = nativeSlice.call(arguments, 1); + return function () { + return func.apply(this, args.concat(nativeSlice.call(arguments))); + }; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isArray(value) { + return objToString.call(value) === '[object Array]'; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isFunction(value) { + return typeof value === 'function'; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isString(value) { + return objToString.call(value) === '[object String]'; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return type === 'function' || (!!value && type == 'object'); +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isBuiltInObject(value) { + return !!BUILTIN_OBJECT[objToString.call(value)]; +} + +/** + * @memberOf module:zrender/core/util + * @param {*} value + * @return {boolean} + */ +function isDom(value) { + return typeof value === 'object' + && typeof value.nodeType === 'number' + && typeof value.ownerDocument === 'object'; +} + +/** + * Whether is exactly NaN. Notice isNaN('a') returns true. + * @param {*} value + * @return {boolean} + */ +function eqNaN(value) { + return value !== value; +} + +/** + * If value1 is not null, then return value1, otherwise judget rest of values. + * Low performance. + * @memberOf module:zrender/core/util + * @return {*} Final value + */ +function retrieve(values) { + for (var i = 0, len = arguments.length; i < len; i++) { + if (arguments[i] != null) { + return arguments[i]; + } + } +} + +function retrieve2(value0, value1) { + return value0 != null + ? value0 + : value1; +} + +function retrieve3(value0, value1, value2) { + return value0 != null + ? value0 + : value1 != null + ? value1 + : value2; +} + +/** + * @memberOf module:zrender/core/util + * @param {Array} arr + * @param {number} startIndex + * @param {number} endIndex + * @return {Array} + */ +function slice() { + return Function.call.apply(nativeSlice, arguments); +} + +/** + * Normalize css liked array configuration + * e.g. + * 3 => [3, 3, 3, 3] + * [4, 2] => [4, 2, 4, 2] + * [4, 3, 2] => [4, 3, 2, 3] + * @param {number|Array.} val + * @return {Array.} + */ +function normalizeCssArray(val) { + if (typeof (val) === 'number') { + return [val, val, val, val]; + } + var len = val.length; + if (len === 2) { + // vertical | horizontal + return [val[0], val[1], val[0], val[1]]; + } + else if (len === 3) { + // top | horizontal | bottom + return [val[0], val[1], val[2], val[1]]; + } + return val; +} + +/** + * @memberOf module:zrender/core/util + * @param {boolean} condition + * @param {string} message + */ +function assert(condition, message) { + if (!condition) { + throw new Error(message); + } +} + +var primitiveKey = '__ec_primitive__'; +/** + * Set an object as primitive to be ignored traversing children in clone or merge + */ +function setAsPrimitive(obj) { + obj[primitiveKey] = true; +} + +function isPrimitive(obj) { + return obj[primitiveKey]; +} + +/** + * @constructor + * @param {Object} obj Only apply `ownProperty`. + */ +function HashMap(obj) { + obj && each$1(obj, function (value, key) { + this.set(key, value); + }, this); +} + +// Add prefix to avoid conflict with Object.prototype. +var HASH_MAP_PREFIX = '_ec_'; +var HASH_MAP_PREFIX_LENGTH = 4; + +HashMap.prototype = { + constructor: HashMap, + // Do not provide `has` method to avoid defining what is `has`. + // (We usually treat `null` and `undefined` as the same, different + // from ES6 Map). + get: function (key) { + return this[HASH_MAP_PREFIX + key]; + }, + set: function (key, value) { + this[HASH_MAP_PREFIX + key] = value; + // Comparing with invocation chaining, `return value` is more commonly + // used in this case: `var someVal = map.set('a', genVal());` + return value; + }, + // Although util.each can be performed on this hashMap directly, user + // should not use the exposed keys, who are prefixed. + each: function (cb, context) { + context !== void 0 && (cb = bind(cb, context)); + for (var prefixedKey in this) { + this.hasOwnProperty(prefixedKey) + && cb(this[prefixedKey], prefixedKey.slice(HASH_MAP_PREFIX_LENGTH)); + } + }, + // Do not use this method if performance sensitive. + removeKey: function (key) { + delete this[HASH_MAP_PREFIX + key]; + } +}; + +function createHashMap(obj) { + return new HashMap(obj); +} + +function noop() {} + +var $inject$1 = { + createCanvas: function (f) { + createCanvas = f; + } +}; + + +var zrUtil = (Object.freeze || Object)({ + clone: clone, + merge: merge, + mergeAll: mergeAll, + extend: extend, + defaults: defaults, + createCanvas: createCanvas, + getContext: getContext, + indexOf: indexOf, + inherits: inherits, + mixin: mixin, + isArrayLike: isArrayLike, + each: each$1, + map: map, + reduce: reduce, + filter: filter, + find: find, + bind: bind, + curry: curry, + isArray: isArray, + isFunction: isFunction, + isString: isString, + isObject: isObject, + isBuiltInObject: isBuiltInObject, + isDom: isDom, + eqNaN: eqNaN, + retrieve: retrieve, + retrieve2: retrieve2, + retrieve3: retrieve3, + slice: slice, + normalizeCssArray: normalizeCssArray, + assert: assert, + setAsPrimitive: setAsPrimitive, + isPrimitive: isPrimitive, + createHashMap: createHashMap, + noop: noop, + $inject: $inject$1 +}); + +var ArrayCtor = typeof Float32Array === 'undefined' + ? Array + : Float32Array; + +/** + * 创建一个向量 + * @param {number} [x=0] + * @param {number} [y=0] + * @return {Vector2} + */ +function create(x, y) { + var out = new ArrayCtor(2); + if (x == null) { + x = 0; + } + if (y == null) { + y = 0; + } + out[0] = x; + out[1] = y; + return out; +} + +/** + * 复制向量数据 + * @param {Vector2} out + * @param {Vector2} v + * @return {Vector2} + */ +function copy(out, v) { + out[0] = v[0]; + out[1] = v[1]; + return out; +} + +/** + * 克隆一个向量 + * @param {Vector2} v + * @return {Vector2} + */ +function clone$1(v) { + var out = new ArrayCtor(2); + out[0] = v[0]; + out[1] = v[1]; + return out; +} + +/** + * 设置向量的两个项 + * @param {Vector2} out + * @param {number} a + * @param {number} b + * @return {Vector2} 结果 + */ +function set(out, a, b) { + out[0] = a; + out[1] = b; + return out; +} + +/** + * 向量相加 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function add(out, v1, v2) { + out[0] = v1[0] + v2[0]; + out[1] = v1[1] + v2[1]; + return out; +} + +/** + * 向量缩放后相加 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + * @param {number} a + */ +function scaleAndAdd(out, v1, v2, a) { + out[0] = v1[0] + v2[0] * a; + out[1] = v1[1] + v2[1] * a; + return out; +} + +/** + * 向量相减 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function sub(out, v1, v2) { + out[0] = v1[0] - v2[0]; + out[1] = v1[1] - v2[1]; + return out; +} + +/** + * 向量长度 + * @param {Vector2} v + * @return {number} + */ +function len(v) { + return Math.sqrt(lenSquare(v)); +} +var length = len; // jshint ignore:line + +/** + * 向量长度平方 + * @param {Vector2} v + * @return {number} + */ +function lenSquare(v) { + return v[0] * v[0] + v[1] * v[1]; +} +var lengthSquare = lenSquare; + +/** + * 向量乘法 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function mul(out, v1, v2) { + out[0] = v1[0] * v2[0]; + out[1] = v1[1] * v2[1]; + return out; +} + +/** + * 向量除法 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function div(out, v1, v2) { + out[0] = v1[0] / v2[0]; + out[1] = v1[1] / v2[1]; + return out; +} + +/** + * 向量点乘 + * @param {Vector2} v1 + * @param {Vector2} v2 + * @return {number} + */ +function dot(v1, v2) { + return v1[0] * v2[0] + v1[1] * v2[1]; +} + +/** + * 向量缩放 + * @param {Vector2} out + * @param {Vector2} v + * @param {number} s + */ +function scale(out, v, s) { + out[0] = v[0] * s; + out[1] = v[1] * s; + return out; +} + +/** + * 向量归一化 + * @param {Vector2} out + * @param {Vector2} v + */ +function normalize(out, v) { + var d = len(v); + if (d === 0) { + out[0] = 0; + out[1] = 0; + } + else { + out[0] = v[0] / d; + out[1] = v[1] / d; + } + return out; +} + +/** + * 计算向量间距离 + * @param {Vector2} v1 + * @param {Vector2} v2 + * @return {number} + */ +function distance(v1, v2) { + return Math.sqrt( + (v1[0] - v2[0]) * (v1[0] - v2[0]) + + (v1[1] - v2[1]) * (v1[1] - v2[1]) + ); +} +var dist = distance; + +/** + * 向量距离平方 + * @param {Vector2} v1 + * @param {Vector2} v2 + * @return {number} + */ +function distanceSquare(v1, v2) { + return (v1[0] - v2[0]) * (v1[0] - v2[0]) + + (v1[1] - v2[1]) * (v1[1] - v2[1]); +} +var distSquare = distanceSquare; + +/** + * 求负向量 + * @param {Vector2} out + * @param {Vector2} v + */ +function negate(out, v) { + out[0] = -v[0]; + out[1] = -v[1]; + return out; +} + +/** + * 插值两个点 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + * @param {number} t + */ +function lerp(out, v1, v2, t) { + out[0] = v1[0] + t * (v2[0] - v1[0]); + out[1] = v1[1] + t * (v2[1] - v1[1]); + return out; +} + +/** + * 矩阵左乘向量 + * @param {Vector2} out + * @param {Vector2} v + * @param {Vector2} m + */ +function applyTransform(out, v, m) { + var x = v[0]; + var y = v[1]; + out[0] = m[0] * x + m[2] * y + m[4]; + out[1] = m[1] * x + m[3] * y + m[5]; + return out; +} + +/** + * 求两个向量最小值 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function min(out, v1, v2) { + out[0] = Math.min(v1[0], v2[0]); + out[1] = Math.min(v1[1], v2[1]); + return out; +} + +/** + * 求两个向量最大值 + * @param {Vector2} out + * @param {Vector2} v1 + * @param {Vector2} v2 + */ +function max(out, v1, v2) { + out[0] = Math.max(v1[0], v2[0]); + out[1] = Math.max(v1[1], v2[1]); + return out; +} + + +var vector = (Object.freeze || Object)({ + create: create, + copy: copy, + clone: clone$1, + set: set, + add: add, + scaleAndAdd: scaleAndAdd, + sub: sub, + len: len, + length: length, + lenSquare: lenSquare, + lengthSquare: lengthSquare, + mul: mul, + div: div, + dot: dot, + scale: scale, + normalize: normalize, + distance: distance, + dist: dist, + distanceSquare: distanceSquare, + distSquare: distSquare, + negate: negate, + lerp: lerp, + applyTransform: applyTransform, + min: min, + max: max +}); + +// TODO Draggable for group +// FIXME Draggable on element which has parent rotation or scale +function Draggable() { + + this.on('mousedown', this._dragStart, this); + this.on('mousemove', this._drag, this); + this.on('mouseup', this._dragEnd, this); + this.on('globalout', this._dragEnd, this); + // this._dropTarget = null; + // this._draggingTarget = null; + + // this._x = 0; + // this._y = 0; +} + +Draggable.prototype = { + + constructor: Draggable, + + _dragStart: function (e) { + var draggingTarget = e.target; + if (draggingTarget && draggingTarget.draggable) { + this._draggingTarget = draggingTarget; + draggingTarget.dragging = true; + this._x = e.offsetX; + this._y = e.offsetY; + + this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event); + } + }, + + _drag: function (e) { + var draggingTarget = this._draggingTarget; + if (draggingTarget) { + + var x = e.offsetX; + var y = e.offsetY; + + var dx = x - this._x; + var dy = y - this._y; + this._x = x; + this._y = y; + + draggingTarget.drift(dx, dy, e); + this.dispatchToElement(param(draggingTarget, e), 'drag', e.event); + + var dropTarget = this.findHover(x, y, draggingTarget).target; + var lastDropTarget = this._dropTarget; + this._dropTarget = dropTarget; + + if (draggingTarget !== dropTarget) { + if (lastDropTarget && dropTarget !== lastDropTarget) { + this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event); + } + if (dropTarget && dropTarget !== lastDropTarget) { + this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event); + } + } + } + }, + + _dragEnd: function (e) { + var draggingTarget = this._draggingTarget; + + if (draggingTarget) { + draggingTarget.dragging = false; + } + + this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event); + + if (this._dropTarget) { + this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event); + } + + this._draggingTarget = null; + this._dropTarget = null; + } + +}; + +function param(target, e) { + return {target: target, topTarget: e && e.topTarget}; +} + +/** + * 事件扩展 + * @module zrender/mixin/Eventful + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + * pissang (https://www.github.com/pissang) + */ + +var arrySlice = Array.prototype.slice; + +/** + * 事件分发器 + * @alias module:zrender/mixin/Eventful + * @constructor + */ +var Eventful = function () { + this._$handlers = {}; +}; + +Eventful.prototype = { + + constructor: Eventful, + + /** + * 单次触发绑定,trigger后销毁 + * + * @param {string} event 事件名 + * @param {Function} handler 响应函数 + * @param {Object} context + */ + one: function (event, handler, context) { + var _h = this._$handlers; + + if (!handler || !event) { + return this; + } + + if (!_h[event]) { + _h[event] = []; + } + + for (var i = 0; i < _h[event].length; i++) { + if (_h[event][i].h === handler) { + return this; + } + } + + _h[event].push({ + h: handler, + one: true, + ctx: context || this + }); + + return this; + }, + + /** + * 绑定事件 + * @param {string} event 事件名 + * @param {Function} handler 事件处理函数 + * @param {Object} [context] + */ + on: function (event, handler, context) { + var _h = this._$handlers; + + if (!handler || !event) { + return this; + } + + if (!_h[event]) { + _h[event] = []; + } + + for (var i = 0; i < _h[event].length; i++) { + if (_h[event][i].h === handler) { + return this; + } + } + + _h[event].push({ + h: handler, + one: false, + ctx: context || this + }); + + return this; + }, + + /** + * 是否绑定了事件 + * @param {string} event + * @return {boolean} + */ + isSilent: function (event) { + var _h = this._$handlers; + return _h[event] && _h[event].length; + }, + + /** + * 解绑事件 + * @param {string} event 事件名 + * @param {Function} [handler] 事件处理函数 + */ + off: function (event, handler) { + var _h = this._$handlers; + + if (!event) { + this._$handlers = {}; + return this; + } + + if (handler) { + if (_h[event]) { + var newList = []; + for (var i = 0, l = _h[event].length; i < l; i++) { + if (_h[event][i]['h'] != handler) { + newList.push(_h[event][i]); + } + } + _h[event] = newList; + } + + if (_h[event] && _h[event].length === 0) { + delete _h[event]; + } + } + else { + delete _h[event]; + } + + return this; + }, + + /** + * 事件分发 + * + * @param {string} type 事件类型 + */ + trigger: function (type) { + if (this._$handlers[type]) { + var args = arguments; + var argLen = args.length; + + if (argLen > 3) { + args = arrySlice.call(args, 1); + } + + var _h = this._$handlers[type]; + var len = _h.length; + for (var i = 0; i < len;) { + // Optimize advise from backbone + switch (argLen) { + case 1: + _h[i]['h'].call(_h[i]['ctx']); + break; + case 2: + _h[i]['h'].call(_h[i]['ctx'], args[1]); + break; + case 3: + _h[i]['h'].call(_h[i]['ctx'], args[1], args[2]); + break; + default: + // have more than 2 given arguments + _h[i]['h'].apply(_h[i]['ctx'], args); + break; + } + + if (_h[i]['one']) { + _h.splice(i, 1); + len--; + } + else { + i++; + } + } + } + + return this; + }, + + /** + * 带有context的事件分发, 最后一个参数是事件回调的context + * @param {string} type 事件类型 + */ + triggerWithContext: function (type) { + if (this._$handlers[type]) { + var args = arguments; + var argLen = args.length; + + if (argLen > 4) { + args = arrySlice.call(args, 1, args.length - 1); + } + var ctx = args[args.length - 1]; + + var _h = this._$handlers[type]; + var len = _h.length; + for (var i = 0; i < len;) { + // Optimize advise from backbone + switch (argLen) { + case 1: + _h[i]['h'].call(ctx); + break; + case 2: + _h[i]['h'].call(ctx, args[1]); + break; + case 3: + _h[i]['h'].call(ctx, args[1], args[2]); + break; + default: + // have more than 2 given arguments + _h[i]['h'].apply(ctx, args); + break; + } + + if (_h[i]['one']) { + _h.splice(i, 1); + len--; + } + else { + i++; + } + } + } + + return this; + } +}; + +/** + * Handler + * @module zrender/Handler + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + * errorrik (errorrik@gmail.com) + * pissang (shenyi.914@gmail.com) + */ + +var SILENT = 'silent'; + +function makeEventPacket(eveType, targetInfo, event) { + return { + type: eveType, + event: event, + // target can only be an element that is not silent. + target: targetInfo.target, + // topTarget can be a silent element. + topTarget: targetInfo.topTarget, + cancelBubble: false, + offsetX: event.zrX, + offsetY: event.zrY, + gestureEvent: event.gestureEvent, + pinchX: event.pinchX, + pinchY: event.pinchY, + pinchScale: event.pinchScale, + wheelDelta: event.zrDelta, + zrByTouch: event.zrByTouch, + which: event.which + }; +} + +function EmptyProxy () {} +EmptyProxy.prototype.dispose = function () {}; + +var handlerNames = [ + 'click', 'dblclick', 'mousewheel', 'mouseout', + 'mouseup', 'mousedown', 'mousemove', 'contextmenu' +]; +/** + * @alias module:zrender/Handler + * @constructor + * @extends module:zrender/mixin/Eventful + * @param {module:zrender/Storage} storage Storage instance. + * @param {module:zrender/Painter} painter Painter instance. + * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance. + * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()). + */ +var Handler = function(storage, painter, proxy, painterRoot) { + Eventful.call(this); + + this.storage = storage; + + this.painter = painter; + + this.painterRoot = painterRoot; + + proxy = proxy || new EmptyProxy(); + + /** + * Proxy of event. can be Dom, WebGLSurface, etc. + */ + this.proxy = proxy; + + // Attach handler + proxy.handler = this; + + /** + * {target, topTarget, x, y} + * @private + * @type {Object} + */ + this._hovered = {}; + + /** + * @private + * @type {Date} + */ + this._lastTouchMoment; + + /** + * @private + * @type {number} + */ + this._lastX; + + /** + * @private + * @type {number} + */ + this._lastY; + + + Draggable.call(this); + + each$1(handlerNames, function (name) { + proxy.on && proxy.on(name, this[name], this); + }, this); +}; + +Handler.prototype = { + + constructor: Handler, + + mousemove: function (event) { + var x = event.zrX; + var y = event.zrY; + + var lastHovered = this._hovered; + var lastHoveredTarget = lastHovered.target; + + // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call + // (like 'setOption' or 'dispatchAction') in event handlers, we should find + // lastHovered again here. Otherwise 'mouseout' can not be triggered normally. + // See #6198. + if (lastHoveredTarget && !lastHoveredTarget.__zr) { + lastHovered = this.findHover(lastHovered.x, lastHovered.y); + lastHoveredTarget = lastHovered.target; + } + + var hovered = this._hovered = this.findHover(x, y); + var hoveredTarget = hovered.target; + + var proxy = this.proxy; + proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); + + // Mouse out on previous hovered element + if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) { + this.dispatchToElement(lastHovered, 'mouseout', event); + } + + // Mouse moving on one element + this.dispatchToElement(hovered, 'mousemove', event); + + // Mouse over on a new element + if (hoveredTarget && hoveredTarget !== lastHoveredTarget) { + this.dispatchToElement(hovered, 'mouseover', event); + } + }, + + mouseout: function (event) { + this.dispatchToElement(this._hovered, 'mouseout', event); + + // There might be some doms created by upper layer application + // at the same level of painter.getViewportRoot() (e.g., tooltip + // dom created by echarts), where 'globalout' event should not + // be triggered when mouse enters these doms. (But 'mouseout' + // should be triggered at the original hovered element as usual). + var element = event.toElement || event.relatedTarget; + var innerDom; + do { + element = element && element.parentNode; + } + while (element && element.nodeType != 9 && !( + innerDom = element === this.painterRoot + )); + + !innerDom && this.trigger('globalout', {event: event}); + }, + + /** + * Resize + */ + resize: function (event) { + this._hovered = {}; + }, + + /** + * Dispatch event + * @param {string} eventName + * @param {event=} eventArgs + */ + dispatch: function (eventName, eventArgs) { + var handler = this[eventName]; + handler && handler.call(this, eventArgs); + }, + + /** + * Dispose + */ + dispose: function () { + + this.proxy.dispose(); + + this.storage = + this.proxy = + this.painter = null; + }, + + /** + * 设置默认的cursor style + * @param {string} [cursorStyle='default'] 例如 crosshair + */ + setCursorStyle: function (cursorStyle) { + var proxy = this.proxy; + proxy.setCursor && proxy.setCursor(cursorStyle); + }, + + /** + * 事件分发代理 + * + * @private + * @param {Object} targetInfo {target, topTarget} 目标图形元素 + * @param {string} eventName 事件名称 + * @param {Object} event 事件对象 + */ + dispatchToElement: function (targetInfo, eventName, event) { + targetInfo = targetInfo || {}; + var el = targetInfo.target; + if (el && el.silent) { + return; + } + var eventHandler = 'on' + eventName; + var eventPacket = makeEventPacket(eventName, targetInfo, event); + + while (el) { + el[eventHandler] + && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket)); + + el.trigger(eventName, eventPacket); + + el = el.parent; + + if (eventPacket.cancelBubble) { + break; + } + } + + if (!eventPacket.cancelBubble) { + // 冒泡到顶级 zrender 对象 + this.trigger(eventName, eventPacket); + // 分发事件到用户自定义层 + // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在 + this.painter && this.painter.eachOtherLayer(function (layer) { + if (typeof(layer[eventHandler]) == 'function') { + layer[eventHandler].call(layer, eventPacket); + } + if (layer.trigger) { + layer.trigger(eventName, eventPacket); + } + }); + } + }, + + /** + * @private + * @param {number} x + * @param {number} y + * @param {module:zrender/graphic/Displayable} exclude + * @return {model:zrender/Element} + * @method + */ + findHover: function(x, y, exclude) { + var list = this.storage.getDisplayList(); + var out = {x: x, y: y}; + + for (var i = list.length - 1; i >= 0 ; i--) { + var hoverCheckResult; + if (list[i] !== exclude + // getDisplayList may include ignored item in VML mode + && !list[i].ignore + && (hoverCheckResult = isHover(list[i], x, y)) + ) { + !out.topTarget && (out.topTarget = list[i]); + if (hoverCheckResult !== SILENT) { + out.target = list[i]; + break; + } + } + } + + return out; + } +}; + +// Common handlers +each$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { + Handler.prototype[name] = function (event) { + // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover + var hovered = this.findHover(event.zrX, event.zrY); + var hoveredTarget = hovered.target; + + if (name === 'mousedown') { + this._downEl = hoveredTarget; + this._downPoint = [event.zrX, event.zrY]; + // In case click triggered before mouseup + this._upEl = hoveredTarget; + } + else if (name === 'mosueup') { + this._upEl = hoveredTarget; + } + else if (name === 'click') { + if (this._downEl !== this._upEl + // Original click event is triggered on the whole canvas element, + // including the case that `mousedown` - `mousemove` - `mouseup`, + // which should be filtered, otherwise it will bring trouble to + // pan and zoom. + || !this._downPoint + // Arbitrary value + || dist(this._downPoint, [event.zrX, event.zrY]) > 4 + ) { + return; + } + this._downPoint = null; + } + + this.dispatchToElement(hovered, name, event); + }; +}); + +function isHover(displayable, x, y) { + if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) { + var el = displayable; + var isSilent; + while (el) { + // If clipped by ancestor. + // FIXME: If clipPath has neither stroke nor fill, + // el.clipPath.contain(x, y) will always return false. + if (el.clipPath && !el.clipPath.contain(x, y)) { + return false; + } + if (el.silent) { + isSilent = true; + } + el = el.parent; + } + return isSilent ? SILENT : true; + } + + return false; +} + +mixin(Handler, Eventful); +mixin(Handler, Draggable); + +/** + * 3x2矩阵操作类 + * @exports zrender/tool/matrix + */ + +var ArrayCtor$1 = typeof Float32Array === 'undefined' + ? Array + : Float32Array; + +/** + * 创建一个单位矩阵 + * @return {Float32Array|Array.} + */ +function create$1() { + var out = new ArrayCtor$1(6); + identity(out); + + return out; +} + +/** + * 设置矩阵为单位矩阵 + * @param {Float32Array|Array.} out + */ +function identity(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + out[4] = 0; + out[5] = 0; + return out; +} + +/** + * 复制矩阵 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} m + */ +function copy$1(out, m) { + out[0] = m[0]; + out[1] = m[1]; + out[2] = m[2]; + out[3] = m[3]; + out[4] = m[4]; + out[5] = m[5]; + return out; +} + +/** + * 矩阵相乘 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} m1 + * @param {Float32Array|Array.} m2 + */ +function mul$1(out, m1, m2) { + // Consider matrix.mul(m, m2, m); + // where out is the same as m2. + // So use temp variable to escape error. + var out0 = m1[0] * m2[0] + m1[2] * m2[1]; + var out1 = m1[1] * m2[0] + m1[3] * m2[1]; + var out2 = m1[0] * m2[2] + m1[2] * m2[3]; + var out3 = m1[1] * m2[2] + m1[3] * m2[3]; + var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4]; + var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5]; + out[0] = out0; + out[1] = out1; + out[2] = out2; + out[3] = out3; + out[4] = out4; + out[5] = out5; + return out; +} + +/** + * 平移变换 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + * @param {Float32Array|Array.} v + */ +function translate(out, a, v) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4] + v[0]; + out[5] = a[5] + v[1]; + return out; +} + +/** + * 旋转变换 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + * @param {number} rad + */ +function rotate(out, a, rad) { + var aa = a[0]; + var ac = a[2]; + var atx = a[4]; + var ab = a[1]; + var ad = a[3]; + var aty = a[5]; + var st = Math.sin(rad); + var ct = Math.cos(rad); + + out[0] = aa * ct + ab * st; + out[1] = -aa * st + ab * ct; + out[2] = ac * ct + ad * st; + out[3] = -ac * st + ct * ad; + out[4] = ct * atx + st * aty; + out[5] = ct * aty - st * atx; + return out; +} + +/** + * 缩放变换 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + * @param {Float32Array|Array.} v + */ +function scale$1(out, a, v) { + var vx = v[0]; + var vy = v[1]; + out[0] = a[0] * vx; + out[1] = a[1] * vy; + out[2] = a[2] * vx; + out[3] = a[3] * vy; + out[4] = a[4] * vx; + out[5] = a[5] * vy; + return out; +} + +/** + * 求逆矩阵 + * @param {Float32Array|Array.} out + * @param {Float32Array|Array.} a + */ +function invert(out, a) { + + var aa = a[0]; + var ac = a[2]; + var atx = a[4]; + var ab = a[1]; + var ad = a[3]; + var aty = a[5]; + + var det = aa * ad - ab * ac; + if (!det) { + return null; + } + det = 1.0 / det; + + out[0] = ad * det; + out[1] = -ab * det; + out[2] = -ac * det; + out[3] = aa * det; + out[4] = (ac * aty - ad * atx) * det; + out[5] = (ab * atx - aa * aty) * det; + return out; +} + + +var matrix = (Object.freeze || Object)({ + create: create$1, + identity: identity, + copy: copy$1, + mul: mul$1, + translate: translate, + rotate: rotate, + scale: scale$1, + invert: invert +}); + +/** + * 提供变换扩展 + * @module zrender/mixin/Transformable + * @author pissang (https://www.github.com/pissang) + */ + +var mIdentity = identity; + +var EPSILON = 5e-5; + +function isNotAroundZero(val) { + return val > EPSILON || val < -EPSILON; +} + +/** + * @alias module:zrender/mixin/Transformable + * @constructor + */ +var Transformable = function (opts) { + opts = opts || {}; + // If there are no given position, rotation, scale + if (!opts.position) { + /** + * 平移 + * @type {Array.} + * @default [0, 0] + */ + this.position = [0, 0]; + } + if (opts.rotation == null) { + /** + * 旋转 + * @type {Array.} + * @default 0 + */ + this.rotation = 0; + } + if (!opts.scale) { + /** + * 缩放 + * @type {Array.} + * @default [1, 1] + */ + this.scale = [1, 1]; + } + /** + * 旋转和缩放的原点 + * @type {Array.} + * @default null + */ + this.origin = this.origin || null; +}; + +var transformableProto = Transformable.prototype; +transformableProto.transform = null; + +/** + * 判断是否需要有坐标变换 + * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵 + */ +transformableProto.needLocalTransform = function () { + return isNotAroundZero(this.rotation) + || isNotAroundZero(this.position[0]) + || isNotAroundZero(this.position[1]) + || isNotAroundZero(this.scale[0] - 1) + || isNotAroundZero(this.scale[1] - 1); +}; + +transformableProto.updateTransform = function () { + var parent = this.parent; + var parentHasTransform = parent && parent.transform; + var needLocalTransform = this.needLocalTransform(); + + var m = this.transform; + if (!(needLocalTransform || parentHasTransform)) { + m && mIdentity(m); + return; + } + + m = m || create$1(); + + if (needLocalTransform) { + this.getLocalTransform(m); + } + else { + mIdentity(m); + } + + // 应用父节点变换 + if (parentHasTransform) { + if (needLocalTransform) { + mul$1(m, parent.transform, m); + } + else { + copy$1(m, parent.transform); + } + } + // 保存这个变换矩阵 + this.transform = m; + + this.invTransform = this.invTransform || create$1(); + invert(this.invTransform, m); +}; + +transformableProto.getLocalTransform = function (m) { + return Transformable.getLocalTransform(this, m); +}; + +/** + * 将自己的transform应用到context上 + * @param {CanvasRenderingContext2D} ctx + */ +transformableProto.setTransform = function (ctx) { + var m = this.transform; + var dpr = ctx.dpr || 1; + if (m) { + ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]); + } + else { + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + } +}; + +transformableProto.restoreTransform = function (ctx) { + var dpr = ctx.dpr || 1; + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); +}; + +var tmpTransform = []; + +/** + * 分解`transform`矩阵到`position`, `rotation`, `scale` + */ +transformableProto.decomposeTransform = function () { + if (!this.transform) { + return; + } + var parent = this.parent; + var m = this.transform; + if (parent && parent.transform) { + // Get local transform and decompose them to position, scale, rotation + mul$1(tmpTransform, parent.invTransform, m); + m = tmpTransform; + } + var sx = m[0] * m[0] + m[1] * m[1]; + var sy = m[2] * m[2] + m[3] * m[3]; + var position = this.position; + var scale$$1 = this.scale; + if (isNotAroundZero(sx - 1)) { + sx = Math.sqrt(sx); + } + if (isNotAroundZero(sy - 1)) { + sy = Math.sqrt(sy); + } + if (m[0] < 0) { + sx = -sx; + } + if (m[3] < 0) { + sy = -sy; + } + position[0] = m[4]; + position[1] = m[5]; + scale$$1[0] = sx; + scale$$1[1] = sy; + this.rotation = Math.atan2(-m[1] / sy, m[0] / sx); +}; + +/** + * Get global scale + * @return {Array.} + */ +transformableProto.getGlobalScale = function () { + var m = this.transform; + if (!m) { + return [1, 1]; + } + var sx = Math.sqrt(m[0] * m[0] + m[1] * m[1]); + var sy = Math.sqrt(m[2] * m[2] + m[3] * m[3]); + if (m[0] < 0) { + sx = -sx; + } + if (m[3] < 0) { + sy = -sy; + } + return [sx, sy]; +}; +/** + * 变换坐标位置到 shape 的局部坐标空间 + * @method + * @param {number} x + * @param {number} y + * @return {Array.} + */ +transformableProto.transformCoordToLocal = function (x, y) { + var v2 = [x, y]; + var invTransform = this.invTransform; + if (invTransform) { + applyTransform(v2, v2, invTransform); + } + return v2; +}; + +/** + * 变换局部坐标位置到全局坐标空间 + * @method + * @param {number} x + * @param {number} y + * @return {Array.} + */ +transformableProto.transformCoordToGlobal = function (x, y) { + var v2 = [x, y]; + var transform = this.transform; + if (transform) { + applyTransform(v2, v2, transform); + } + return v2; +}; + +/** + * @static + * @param {Object} target + * @param {Array.} target.origin + * @param {number} target.rotation + * @param {Array.} target.position + * @param {Array.} [m] + */ +Transformable.getLocalTransform = function (target, m) { + m = m || []; + mIdentity(m); + + var origin = target.origin; + var scale$$1 = target.scale || [1, 1]; + var rotation = target.rotation || 0; + var position = target.position || [0, 0]; + + if (origin) { + // Translate to origin + m[4] -= origin[0]; + m[5] -= origin[1]; + } + scale$1(m, m, scale$$1); + if (rotation) { + rotate(m, m, rotation); + } + if (origin) { + // Translate back from origin + m[4] += origin[0]; + m[5] += origin[1]; + } + + m[4] += position[0]; + m[5] += position[1]; + + return m; +}; + +/** + * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js + * @see http://sole.github.io/tween.js/examples/03_graphs.html + * @exports zrender/animation/easing + */ +var easing = { + /** + * @param {number} k + * @return {number} + */ + linear: function (k) { + return k; + }, + + /** + * @param {number} k + * @return {number} + */ + quadraticIn: function (k) { + return k * k; + }, + /** + * @param {number} k + * @return {number} + */ + quadraticOut: function (k) { + return k * (2 - k); + }, + /** + * @param {number} k + * @return {number} + */ + quadraticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k; + } + return -0.5 * (--k * (k - 2) - 1); + }, + + // 三次方的缓动(t^3) + /** + * @param {number} k + * @return {number} + */ + cubicIn: function (k) { + return k * k * k; + }, + /** + * @param {number} k + * @return {number} + */ + cubicOut: function (k) { + return --k * k * k + 1; + }, + /** + * @param {number} k + * @return {number} + */ + cubicInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k; + } + return 0.5 * ((k -= 2) * k * k + 2); + }, + + // 四次方的缓动(t^4) + /** + * @param {number} k + * @return {number} + */ + quarticIn: function (k) { + return k * k * k * k; + }, + /** + * @param {number} k + * @return {number} + */ + quarticOut: function (k) { + return 1 - (--k * k * k * k); + }, + /** + * @param {number} k + * @return {number} + */ + quarticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k; + } + return -0.5 * ((k -= 2) * k * k * k - 2); + }, + + // 五次方的缓动(t^5) + /** + * @param {number} k + * @return {number} + */ + quinticIn: function (k) { + return k * k * k * k * k; + }, + /** + * @param {number} k + * @return {number} + */ + quinticOut: function (k) { + return --k * k * k * k * k + 1; + }, + /** + * @param {number} k + * @return {number} + */ + quinticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k * k; + } + return 0.5 * ((k -= 2) * k * k * k * k + 2); + }, + + // 正弦曲线的缓动(sin(t)) + /** + * @param {number} k + * @return {number} + */ + sinusoidalIn: function (k) { + return 1 - Math.cos(k * Math.PI / 2); + }, + /** + * @param {number} k + * @return {number} + */ + sinusoidalOut: function (k) { + return Math.sin(k * Math.PI / 2); + }, + /** + * @param {number} k + * @return {number} + */ + sinusoidalInOut: function (k) { + return 0.5 * (1 - Math.cos(Math.PI * k)); + }, + + // 指数曲线的缓动(2^t) + /** + * @param {number} k + * @return {number} + */ + exponentialIn: function (k) { + return k === 0 ? 0 : Math.pow(1024, k - 1); + }, + /** + * @param {number} k + * @return {number} + */ + exponentialOut: function (k) { + return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); + }, + /** + * @param {number} k + * @return {number} + */ + exponentialInOut: function (k) { + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if ((k *= 2) < 1) { + return 0.5 * Math.pow(1024, k - 1); + } + return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2); + }, + + // 圆形曲线的缓动(sqrt(1-t^2)) + /** + * @param {number} k + * @return {number} + */ + circularIn: function (k) { + return 1 - Math.sqrt(1 - k * k); + }, + /** + * @param {number} k + * @return {number} + */ + circularOut: function (k) { + return Math.sqrt(1 - (--k * k)); + }, + /** + * @param {number} k + * @return {number} + */ + circularInOut: function (k) { + if ((k *= 2) < 1) { + return -0.5 * (Math.sqrt(1 - k * k) - 1); + } + return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1); + }, + + // 创建类似于弹簧在停止前来回振荡的动画 + /** + * @param {number} k + * @return {number} + */ + elasticIn: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + return -(a * Math.pow(2, 10 * (k -= 1)) * + Math.sin((k - s) * (2 * Math.PI) / p)); + }, + /** + * @param {number} k + * @return {number} + */ + elasticOut: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + return (a * Math.pow(2, -10 * k) * + Math.sin((k - s) * (2 * Math.PI) / p) + 1); + }, + /** + * @param {number} k + * @return {number} + */ + elasticInOut: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + if ((k *= 2) < 1) { + return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p)); + } + return a * Math.pow(2, -10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1; + + }, + + // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动 + /** + * @param {number} k + * @return {number} + */ + backIn: function (k) { + var s = 1.70158; + return k * k * ((s + 1) * k - s); + }, + /** + * @param {number} k + * @return {number} + */ + backOut: function (k) { + var s = 1.70158; + return --k * k * ((s + 1) * k + s) + 1; + }, + /** + * @param {number} k + * @return {number} + */ + backInOut: function (k) { + var s = 1.70158 * 1.525; + if ((k *= 2) < 1) { + return 0.5 * (k * k * ((s + 1) * k - s)); + } + return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); + }, + + // 创建弹跳效果 + /** + * @param {number} k + * @return {number} + */ + bounceIn: function (k) { + return 1 - easing.bounceOut(1 - k); + }, + /** + * @param {number} k + * @return {number} + */ + bounceOut: function (k) { + if (k < (1 / 2.75)) { + return 7.5625 * k * k; + } + else if (k < (2 / 2.75)) { + return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; + } + else if (k < (2.5 / 2.75)) { + return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; + } + else { + return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; + } + }, + /** + * @param {number} k + * @return {number} + */ + bounceInOut: function (k) { + if (k < 0.5) { + return easing.bounceIn(k * 2) * 0.5; + } + return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5; + } +}; + +/** + * 动画主控制器 + * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件 + * @config life(1000) 动画时长 + * @config delay(0) 动画延迟时间 + * @config loop(true) + * @config gap(0) 循环的间隔时间 + * @config onframe + * @config easing(optional) + * @config ondestroy(optional) + * @config onrestart(optional) + * + * TODO pause + */ + +function Clip(options) { + + this._target = options.target; + + // 生命周期 + this._life = options.life || 1000; + // 延时 + this._delay = options.delay || 0; + // 开始时间 + // this._startTime = new Date().getTime() + this._delay;// 单位毫秒 + this._initialized = false; + + // 是否循环 + this.loop = options.loop == null ? false : options.loop; + + this.gap = options.gap || 0; + + this.easing = options.easing || 'Linear'; + + this.onframe = options.onframe; + this.ondestroy = options.ondestroy; + this.onrestart = options.onrestart; + + this._pausedTime = 0; + this._paused = false; +} + +Clip.prototype = { + + constructor: Clip, + + step: function (globalTime, deltaTime) { + // Set startTime on first step, or _startTime may has milleseconds different between clips + // PENDING + if (!this._initialized) { + this._startTime = globalTime + this._delay; + this._initialized = true; + } + + if (this._paused) { + this._pausedTime += deltaTime; + return; + } + + var percent = (globalTime - this._startTime - this._pausedTime) / this._life; + + // 还没开始 + if (percent < 0) { + return; + } + + percent = Math.min(percent, 1); + + var easing$$1 = this.easing; + var easingFunc = typeof easing$$1 == 'string' ? easing[easing$$1] : easing$$1; + var schedule = typeof easingFunc === 'function' + ? easingFunc(percent) + : percent; + + this.fire('frame', schedule); + + // 结束 + if (percent == 1) { + if (this.loop) { + this.restart (globalTime); + // 重新开始周期 + // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件 + return 'restart'; + } + + // 动画完成将这个控制器标识为待删除 + // 在Animation.update中进行批量删除 + this._needsRemove = true; + return 'destroy'; + } + + return null; + }, + + restart: function (globalTime) { + var remainder = (globalTime - this._startTime - this._pausedTime) % this._life; + this._startTime = globalTime - remainder + this.gap; + this._pausedTime = 0; + + this._needsRemove = false; + }, + + fire: function (eventType, arg) { + eventType = 'on' + eventType; + if (this[eventType]) { + this[eventType](this._target, arg); + } + }, + + pause: function () { + this._paused = true; + }, + + resume: function () { + this._paused = false; + } +}; + +// Simple LRU cache use doubly linked list +// @module zrender/core/LRU + +/** + * Simple double linked list. Compared with array, it has O(1) remove operation. + * @constructor + */ +var LinkedList = function () { + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.head = null; + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.tail = null; + + this._len = 0; +}; + +var linkedListProto = LinkedList.prototype; +/** + * Insert a new value at the tail + * @param {} val + * @return {module:zrender/core/LRU~Entry} + */ +linkedListProto.insert = function (val) { + var entry = new Entry(val); + this.insertEntry(entry); + return entry; +}; + +/** + * Insert an entry at the tail + * @param {module:zrender/core/LRU~Entry} entry + */ +linkedListProto.insertEntry = function (entry) { + if (!this.head) { + this.head = this.tail = entry; + } + else { + this.tail.next = entry; + entry.prev = this.tail; + entry.next = null; + this.tail = entry; + } + this._len++; +}; + +/** + * Remove entry. + * @param {module:zrender/core/LRU~Entry} entry + */ +linkedListProto.remove = function (entry) { + var prev = entry.prev; + var next = entry.next; + if (prev) { + prev.next = next; + } + else { + // Is head + this.head = next; + } + if (next) { + next.prev = prev; + } + else { + // Is tail + this.tail = prev; + } + entry.next = entry.prev = null; + this._len--; +}; + +/** + * @return {number} + */ +linkedListProto.len = function () { + return this._len; +}; + +/** + * Clear list + */ +linkedListProto.clear = function () { + this.head = this.tail = null; + this._len = 0; +}; + +/** + * @constructor + * @param {} val + */ +var Entry = function (val) { + /** + * @type {} + */ + this.value = val; + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.next; + + /** + * @type {module:zrender/core/LRU~Entry} + */ + this.prev; +}; + +/** + * LRU Cache + * @constructor + * @alias module:zrender/core/LRU + */ +var LRU = function (maxSize) { + + this._list = new LinkedList(); + + this._map = {}; + + this._maxSize = maxSize || 10; + + this._lastRemovedEntry = null; +}; + +var LRUProto = LRU.prototype; + +/** + * @param {string} key + * @param {} value + * @return {} Removed value + */ +LRUProto.put = function (key, value) { + var list = this._list; + var map = this._map; + var removed = null; + if (map[key] == null) { + var len = list.len(); + // Reuse last removed entry + var entry = this._lastRemovedEntry; + + if (len >= this._maxSize && len > 0) { + // Remove the least recently used + var leastUsedEntry = list.head; + list.remove(leastUsedEntry); + delete map[leastUsedEntry.key]; + + removed = leastUsedEntry.value; + this._lastRemovedEntry = leastUsedEntry; + } + + if (entry) { + entry.value = value; + } + else { + entry = new Entry(value); + } + entry.key = key; + list.insertEntry(entry); + map[key] = entry; + } + + return removed; +}; + +/** + * @param {string} key + * @return {} + */ +LRUProto.get = function (key) { + var entry = this._map[key]; + var list = this._list; + if (entry != null) { + // Put the latest used entry in the tail + if (entry !== list.tail) { + list.remove(entry); + list.insertEntry(entry); + } + + return entry.value; + } +}; + +/** + * Clear the cache + */ +LRUProto.clear = function () { + this._list.clear(); + this._map = {}; +}; + +var kCSSColorTable = { + 'transparent': [0,0,0,0], 'aliceblue': [240,248,255,1], + 'antiquewhite': [250,235,215,1], 'aqua': [0,255,255,1], + 'aquamarine': [127,255,212,1], 'azure': [240,255,255,1], + 'beige': [245,245,220,1], 'bisque': [255,228,196,1], + 'black': [0,0,0,1], 'blanchedalmond': [255,235,205,1], + 'blue': [0,0,255,1], 'blueviolet': [138,43,226,1], + 'brown': [165,42,42,1], 'burlywood': [222,184,135,1], + 'cadetblue': [95,158,160,1], 'chartreuse': [127,255,0,1], + 'chocolate': [210,105,30,1], 'coral': [255,127,80,1], + 'cornflowerblue': [100,149,237,1], 'cornsilk': [255,248,220,1], + 'crimson': [220,20,60,1], 'cyan': [0,255,255,1], + 'darkblue': [0,0,139,1], 'darkcyan': [0,139,139,1], + 'darkgoldenrod': [184,134,11,1], 'darkgray': [169,169,169,1], + 'darkgreen': [0,100,0,1], 'darkgrey': [169,169,169,1], + 'darkkhaki': [189,183,107,1], 'darkmagenta': [139,0,139,1], + 'darkolivegreen': [85,107,47,1], 'darkorange': [255,140,0,1], + 'darkorchid': [153,50,204,1], 'darkred': [139,0,0,1], + 'darksalmon': [233,150,122,1], 'darkseagreen': [143,188,143,1], + 'darkslateblue': [72,61,139,1], 'darkslategray': [47,79,79,1], + 'darkslategrey': [47,79,79,1], 'darkturquoise': [0,206,209,1], + 'darkviolet': [148,0,211,1], 'deeppink': [255,20,147,1], + 'deepskyblue': [0,191,255,1], 'dimgray': [105,105,105,1], + 'dimgrey': [105,105,105,1], 'dodgerblue': [30,144,255,1], + 'firebrick': [178,34,34,1], 'floralwhite': [255,250,240,1], + 'forestgreen': [34,139,34,1], 'fuchsia': [255,0,255,1], + 'gainsboro': [220,220,220,1], 'ghostwhite': [248,248,255,1], + 'gold': [255,215,0,1], 'goldenrod': [218,165,32,1], + 'gray': [128,128,128,1], 'green': [0,128,0,1], + 'greenyellow': [173,255,47,1], 'grey': [128,128,128,1], + 'honeydew': [240,255,240,1], 'hotpink': [255,105,180,1], + 'indianred': [205,92,92,1], 'indigo': [75,0,130,1], + 'ivory': [255,255,240,1], 'khaki': [240,230,140,1], + 'lavender': [230,230,250,1], 'lavenderblush': [255,240,245,1], + 'lawngreen': [124,252,0,1], 'lemonchiffon': [255,250,205,1], + 'lightblue': [173,216,230,1], 'lightcoral': [240,128,128,1], + 'lightcyan': [224,255,255,1], 'lightgoldenrodyellow': [250,250,210,1], + 'lightgray': [211,211,211,1], 'lightgreen': [144,238,144,1], + 'lightgrey': [211,211,211,1], 'lightpink': [255,182,193,1], + 'lightsalmon': [255,160,122,1], 'lightseagreen': [32,178,170,1], + 'lightskyblue': [135,206,250,1], 'lightslategray': [119,136,153,1], + 'lightslategrey': [119,136,153,1], 'lightsteelblue': [176,196,222,1], + 'lightyellow': [255,255,224,1], 'lime': [0,255,0,1], + 'limegreen': [50,205,50,1], 'linen': [250,240,230,1], + 'magenta': [255,0,255,1], 'maroon': [128,0,0,1], + 'mediumaquamarine': [102,205,170,1], 'mediumblue': [0,0,205,1], + 'mediumorchid': [186,85,211,1], 'mediumpurple': [147,112,219,1], + 'mediumseagreen': [60,179,113,1], 'mediumslateblue': [123,104,238,1], + 'mediumspringgreen': [0,250,154,1], 'mediumturquoise': [72,209,204,1], + 'mediumvioletred': [199,21,133,1], 'midnightblue': [25,25,112,1], + 'mintcream': [245,255,250,1], 'mistyrose': [255,228,225,1], + 'moccasin': [255,228,181,1], 'navajowhite': [255,222,173,1], + 'navy': [0,0,128,1], 'oldlace': [253,245,230,1], + 'olive': [128,128,0,1], 'olivedrab': [107,142,35,1], + 'orange': [255,165,0,1], 'orangered': [255,69,0,1], + 'orchid': [218,112,214,1], 'palegoldenrod': [238,232,170,1], + 'palegreen': [152,251,152,1], 'paleturquoise': [175,238,238,1], + 'palevioletred': [219,112,147,1], 'papayawhip': [255,239,213,1], + 'peachpuff': [255,218,185,1], 'peru': [205,133,63,1], + 'pink': [255,192,203,1], 'plum': [221,160,221,1], + 'powderblue': [176,224,230,1], 'purple': [128,0,128,1], + 'red': [255,0,0,1], 'rosybrown': [188,143,143,1], + 'royalblue': [65,105,225,1], 'saddlebrown': [139,69,19,1], + 'salmon': [250,128,114,1], 'sandybrown': [244,164,96,1], + 'seagreen': [46,139,87,1], 'seashell': [255,245,238,1], + 'sienna': [160,82,45,1], 'silver': [192,192,192,1], + 'skyblue': [135,206,235,1], 'slateblue': [106,90,205,1], + 'slategray': [112,128,144,1], 'slategrey': [112,128,144,1], + 'snow': [255,250,250,1], 'springgreen': [0,255,127,1], + 'steelblue': [70,130,180,1], 'tan': [210,180,140,1], + 'teal': [0,128,128,1], 'thistle': [216,191,216,1], + 'tomato': [255,99,71,1], 'turquoise': [64,224,208,1], + 'violet': [238,130,238,1], 'wheat': [245,222,179,1], + 'white': [255,255,255,1], 'whitesmoke': [245,245,245,1], + 'yellow': [255,255,0,1], 'yellowgreen': [154,205,50,1] +}; + +function clampCssByte(i) { // Clamp to integer 0 .. 255. + i = Math.round(i); // Seems to be what Chrome does (vs truncation). + return i < 0 ? 0 : i > 255 ? 255 : i; +} + +function clampCssAngle(i) { // Clamp to integer 0 .. 360. + i = Math.round(i); // Seems to be what Chrome does (vs truncation). + return i < 0 ? 0 : i > 360 ? 360 : i; +} + +function clampCssFloat(f) { // Clamp to float 0.0 .. 1.0. + return f < 0 ? 0 : f > 1 ? 1 : f; +} + +function parseCssInt(str) { // int or percentage. + if (str.length && str.charAt(str.length - 1) === '%') { + return clampCssByte(parseFloat(str) / 100 * 255); + } + return clampCssByte(parseInt(str, 10)); +} + +function parseCssFloat(str) { // float or percentage. + if (str.length && str.charAt(str.length - 1) === '%') { + return clampCssFloat(parseFloat(str) / 100); + } + return clampCssFloat(parseFloat(str)); +} + +function cssHueToRgb(m1, m2, h) { + if (h < 0) { + h += 1; + } + else if (h > 1) { + h -= 1; + } + + if (h * 6 < 1) { + return m1 + (m2 - m1) * h * 6; + } + if (h * 2 < 1) { + return m2; + } + if (h * 3 < 2) { + return m1 + (m2 - m1) * (2/3 - h) * 6; + } + return m1; +} + +function lerpNumber(a, b, p) { + return a + (b - a) * p; +} + +function setRgba(out, r, g, b, a) { + out[0] = r; out[1] = g; out[2] = b; out[3] = a; + return out; +} +function copyRgba(out, a) { + out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3]; + return out; +} + +var colorCache = new LRU(20); +var lastRemovedArr = null; + +function putToCache(colorStr, rgbaArr) { + // Reuse removed array + if (lastRemovedArr) { + copyRgba(lastRemovedArr, rgbaArr); + } + lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice())); +} + +/** + * @param {string} colorStr + * @param {Array.} out + * @return {Array.} + * @memberOf module:zrender/util/color + */ +function parse(colorStr, rgbaArr) { + if (!colorStr) { + return; + } + rgbaArr = rgbaArr || []; + + var cached = colorCache.get(colorStr); + if (cached) { + return copyRgba(rgbaArr, cached); + } + + // colorStr may be not string + colorStr = colorStr + ''; + // Remove all whitespace, not compliant, but should just be more accepting. + var str = colorStr.replace(/ /g, '').toLowerCase(); + + // Color keywords (and transparent) lookup. + if (str in kCSSColorTable) { + copyRgba(rgbaArr, kCSSColorTable[str]); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + + // #abc and #abc123 syntax. + if (str.charAt(0) === '#') { + if (str.length === 4) { + var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. + if (!(iv >= 0 && iv <= 0xfff)) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; // Covers NaN. + } + setRgba(rgbaArr, + ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), + (iv & 0xf0) | ((iv & 0xf0) >> 4), + (iv & 0xf) | ((iv & 0xf) << 4), + 1 + ); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + else if (str.length === 7) { + var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing. + if (!(iv >= 0 && iv <= 0xffffff)) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; // Covers NaN. + } + setRgba(rgbaArr, + (iv & 0xff0000) >> 16, + (iv & 0xff00) >> 8, + iv & 0xff, + 1 + ); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + + return; + } + var op = str.indexOf('('), ep = str.indexOf(')'); + if (op !== -1 && ep + 1 === str.length) { + var fname = str.substr(0, op); + var params = str.substr(op + 1, ep - (op + 1)).split(','); + var alpha = 1; // To allow case fallthrough. + switch (fname) { + case 'rgba': + if (params.length !== 4) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + alpha = parseCssFloat(params.pop()); // jshint ignore:line + // Fall through. + case 'rgb': + if (params.length !== 3) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + setRgba(rgbaArr, + parseCssInt(params[0]), + parseCssInt(params[1]), + parseCssInt(params[2]), + alpha + ); + putToCache(colorStr, rgbaArr); + return rgbaArr; + case 'hsla': + if (params.length !== 4) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + params[3] = parseCssFloat(params[3]); + hsla2rgba(params, rgbaArr); + putToCache(colorStr, rgbaArr); + return rgbaArr; + case 'hsl': + if (params.length !== 3) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + hsla2rgba(params, rgbaArr); + putToCache(colorStr, rgbaArr); + return rgbaArr; + default: + return; + } + } + + setRgba(rgbaArr, 0, 0, 0, 1); + return; +} + +/** + * @param {Array.} hsla + * @param {Array.} rgba + * @return {Array.} rgba + */ +function hsla2rgba(hsla, rgba) { + var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360; // 0 .. 1 + // NOTE(deanm): According to the CSS spec s/l should only be + // percentages, but we don't bother and let float or percentage. + var s = parseCssFloat(hsla[1]); + var l = parseCssFloat(hsla[2]); + var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; + var m1 = l * 2 - m2; + + rgba = rgba || []; + setRgba(rgba, + clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), + clampCssByte(cssHueToRgb(m1, m2, h) * 255), + clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), + 1 + ); + + if (hsla.length === 4) { + rgba[3] = hsla[3]; + } + + return rgba; +} + +/** + * @param {Array.} rgba + * @return {Array.} hsla + */ +function rgba2hsla(rgba) { + if (!rgba) { + return; + } + + // RGB from 0 to 255 + var R = rgba[0] / 255; + var G = rgba[1] / 255; + var B = rgba[2] / 255; + + var vMin = Math.min(R, G, B); // Min. value of RGB + var vMax = Math.max(R, G, B); // Max. value of RGB + var delta = vMax - vMin; // Delta RGB value + + var L = (vMax + vMin) / 2; + var H; + var S; + // HSL results from 0 to 1 + if (delta === 0) { + H = 0; + S = 0; + } + else { + if (L < 0.5) { + S = delta / (vMax + vMin); + } + else { + S = delta / (2 - vMax - vMin); + } + + var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta; + var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta; + var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta; + + if (R === vMax) { + H = deltaB - deltaG; + } + else if (G === vMax) { + H = (1 / 3) + deltaR - deltaB; + } + else if (B === vMax) { + H = (2 / 3) + deltaG - deltaR; + } + + if (H < 0) { + H += 1; + } + + if (H > 1) { + H -= 1; + } + } + + var hsla = [H * 360, S, L]; + + if (rgba[3] != null) { + hsla.push(rgba[3]); + } + + return hsla; +} + +/** + * @param {string} color + * @param {number} level + * @return {string} + * @memberOf module:zrender/util/color + */ +function lift(color, level) { + var colorArr = parse(color); + if (colorArr) { + for (var i = 0; i < 3; i++) { + if (level < 0) { + colorArr[i] = colorArr[i] * (1 - level) | 0; + } + else { + colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0; + } + } + return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb'); + } +} + +/** + * @param {string} color + * @return {string} + * @memberOf module:zrender/util/color + */ +function toHex(color) { + var colorArr = parse(color); + if (colorArr) { + return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1); + } +} + +/** + * Map value to color. Faster than lerp methods because color is represented by rgba array. + * @param {number} normalizedValue A float between 0 and 1. + * @param {Array.>} colors List of rgba color array + * @param {Array.} [out] Mapped gba color array + * @return {Array.} will be null/undefined if input illegal. + */ +function fastLerp(normalizedValue, colors, out) { + if (!(colors && colors.length) + || !(normalizedValue >= 0 && normalizedValue <= 1) + ) { + return; + } + + out = out || []; + + var value = normalizedValue * (colors.length - 1); + var leftIndex = Math.floor(value); + var rightIndex = Math.ceil(value); + var leftColor = colors[leftIndex]; + var rightColor = colors[rightIndex]; + var dv = value - leftIndex; + out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)); + out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)); + out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)); + out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)); + + return out; +} + +/** + * @deprecated + */ +var fastMapToColor = fastLerp; + +/** + * @param {number} normalizedValue A float between 0 and 1. + * @param {Array.} colors Color list. + * @param {boolean=} fullOutput Default false. + * @return {(string|Object)} Result color. If fullOutput, + * return {color: ..., leftIndex: ..., rightIndex: ..., value: ...}, + * @memberOf module:zrender/util/color + */ +function lerp$1(normalizedValue, colors, fullOutput) { + if (!(colors && colors.length) + || !(normalizedValue >= 0 && normalizedValue <= 1) + ) { + return; + } + + var value = normalizedValue * (colors.length - 1); + var leftIndex = Math.floor(value); + var rightIndex = Math.ceil(value); + var leftColor = parse(colors[leftIndex]); + var rightColor = parse(colors[rightIndex]); + var dv = value - leftIndex; + + var color = stringify( + [ + clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), + clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), + clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), + clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)) + ], + 'rgba' + ); + + return fullOutput + ? { + color: color, + leftIndex: leftIndex, + rightIndex: rightIndex, + value: value + } + : color; +} + +/** + * @deprecated + */ +var mapToColor = lerp$1; + +/** + * @param {string} color + * @param {number=} h 0 ~ 360, ignore when null. + * @param {number=} s 0 ~ 1, ignore when null. + * @param {number=} l 0 ~ 1, ignore when null. + * @return {string} Color string in rgba format. + * @memberOf module:zrender/util/color + */ +function modifyHSL(color, h, s, l) { + color = parse(color); + + if (color) { + color = rgba2hsla(color); + h != null && (color[0] = clampCssAngle(h)); + s != null && (color[1] = parseCssFloat(s)); + l != null && (color[2] = parseCssFloat(l)); + + return stringify(hsla2rgba(color), 'rgba'); + } +} + +/** + * @param {string} color + * @param {number=} alpha 0 ~ 1 + * @return {string} Color string in rgba format. + * @memberOf module:zrender/util/color + */ +function modifyAlpha(color, alpha) { + color = parse(color); + + if (color && alpha != null) { + color[3] = clampCssFloat(alpha); + return stringify(color, 'rgba'); + } +} + +/** + * @param {Array.} arrColor like [12,33,44,0.4] + * @param {string} type 'rgba', 'hsva', ... + * @return {string} Result color. (If input illegal, return undefined). + */ +function stringify(arrColor, type) { + if (!arrColor || !arrColor.length) { + return; + } + var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2]; + if (type === 'rgba' || type === 'hsva' || type === 'hsla') { + colorStr += ',' + arrColor[3]; + } + return type + '(' + colorStr + ')'; +} + + +var color = (Object.freeze || Object)({ + parse: parse, + lift: lift, + toHex: toHex, + fastLerp: fastLerp, + fastMapToColor: fastMapToColor, + lerp: lerp$1, + mapToColor: mapToColor, + modifyHSL: modifyHSL, + modifyAlpha: modifyAlpha, + stringify: stringify +}); + +/** + * @module echarts/animation/Animator + */ + +var arraySlice = Array.prototype.slice; + +function defaultGetter(target, key) { + return target[key]; +} + +function defaultSetter(target, key, value) { + target[key] = value; +} + +/** + * @param {number} p0 + * @param {number} p1 + * @param {number} percent + * @return {number} + */ +function interpolateNumber(p0, p1, percent) { + return (p1 - p0) * percent + p0; +} + +/** + * @param {string} p0 + * @param {string} p1 + * @param {number} percent + * @return {string} + */ +function interpolateString(p0, p1, percent) { + return percent > 0.5 ? p1 : p0; +} + +/** + * @param {Array} p0 + * @param {Array} p1 + * @param {number} percent + * @param {Array} out + * @param {number} arrDim + */ +function interpolateArray(p0, p1, percent, out, arrDim) { + var len = p0.length; + if (arrDim == 1) { + for (var i = 0; i < len; i++) { + out[i] = interpolateNumber(p0[i], p1[i], percent); + } + } + else { + var len2 = len && p0[0].length; + for (var i = 0; i < len; i++) { + for (var j = 0; j < len2; j++) { + out[i][j] = interpolateNumber( + p0[i][j], p1[i][j], percent + ); + } + } + } +} + +// arr0 is source array, arr1 is target array. +// Do some preprocess to avoid error happened when interpolating from arr0 to arr1 +function fillArr(arr0, arr1, arrDim) { + var arr0Len = arr0.length; + var arr1Len = arr1.length; + if (arr0Len !== arr1Len) { + // FIXME Not work for TypedArray + var isPreviousLarger = arr0Len > arr1Len; + if (isPreviousLarger) { + // Cut the previous + arr0.length = arr1Len; + } + else { + // Fill the previous + for (var i = arr0Len; i < arr1Len; i++) { + arr0.push( + arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]) + ); + } + } + } + // Handling NaN value + var len2 = arr0[0] && arr0[0].length; + for (var i = 0; i < arr0.length; i++) { + if (arrDim === 1) { + if (isNaN(arr0[i])) { + arr0[i] = arr1[i]; + } + } + else { + for (var j = 0; j < len2; j++) { + if (isNaN(arr0[i][j])) { + arr0[i][j] = arr1[i][j]; + } + } + } + } +} + +/** + * @param {Array} arr0 + * @param {Array} arr1 + * @param {number} arrDim + * @return {boolean} + */ +function isArraySame(arr0, arr1, arrDim) { + if (arr0 === arr1) { + return true; + } + var len = arr0.length; + if (len !== arr1.length) { + return false; + } + if (arrDim === 1) { + for (var i = 0; i < len; i++) { + if (arr0[i] !== arr1[i]) { + return false; + } + } + } + else { + var len2 = arr0[0].length; + for (var i = 0; i < len; i++) { + for (var j = 0; j < len2; j++) { + if (arr0[i][j] !== arr1[i][j]) { + return false; + } + } + } + } + return true; +} + +/** + * Catmull Rom interpolate array + * @param {Array} p0 + * @param {Array} p1 + * @param {Array} p2 + * @param {Array} p3 + * @param {number} t + * @param {number} t2 + * @param {number} t3 + * @param {Array} out + * @param {number} arrDim + */ +function catmullRomInterpolateArray( + p0, p1, p2, p3, t, t2, t3, out, arrDim +) { + var len = p0.length; + if (arrDim == 1) { + for (var i = 0; i < len; i++) { + out[i] = catmullRomInterpolate( + p0[i], p1[i], p2[i], p3[i], t, t2, t3 + ); + } + } + else { + var len2 = p0[0].length; + for (var i = 0; i < len; i++) { + for (var j = 0; j < len2; j++) { + out[i][j] = catmullRomInterpolate( + p0[i][j], p1[i][j], p2[i][j], p3[i][j], + t, t2, t3 + ); + } + } + } +} + +/** + * Catmull Rom interpolate number + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @param {number} t2 + * @param {number} t3 + * @return {number} + */ +function catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + return (2 * (p1 - p2) + v0 + v1) * t3 + + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + + v0 * t + p1; +} + +function cloneValue(value) { + if (isArrayLike(value)) { + var len = value.length; + if (isArrayLike(value[0])) { + var ret = []; + for (var i = 0; i < len; i++) { + ret.push(arraySlice.call(value[i])); + } + return ret; + } + + return arraySlice.call(value); + } + + return value; +} + +function rgba2String(rgba) { + rgba[0] = Math.floor(rgba[0]); + rgba[1] = Math.floor(rgba[1]); + rgba[2] = Math.floor(rgba[2]); + + return 'rgba(' + rgba.join(',') + ')'; +} + +function getArrayDim(keyframes) { + var lastValue = keyframes[keyframes.length - 1].value; + return isArrayLike(lastValue && lastValue[0]) ? 2 : 1; +} + +function createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) { + var getter = animator._getter; + var setter = animator._setter; + var useSpline = easing === 'spline'; + + var trackLen = keyframes.length; + if (!trackLen) { + return; + } + // Guess data type + var firstVal = keyframes[0].value; + var isValueArray = isArrayLike(firstVal); + var isValueColor = false; + var isValueString = false; + + // For vertices morphing + var arrDim = isValueArray ? getArrayDim(keyframes) : 0; + + var trackMaxTime; + // Sort keyframe as ascending + keyframes.sort(function(a, b) { + return a.time - b.time; + }); + + trackMaxTime = keyframes[trackLen - 1].time; + // Percents of each keyframe + var kfPercents = []; + // Value of each keyframe + var kfValues = []; + var prevValue = keyframes[0].value; + var isAllValueEqual = true; + for (var i = 0; i < trackLen; i++) { + kfPercents.push(keyframes[i].time / trackMaxTime); + // Assume value is a color when it is a string + var value = keyframes[i].value; + + // Check if value is equal, deep check if value is array + if (!((isValueArray && isArraySame(value, prevValue, arrDim)) + || (!isValueArray && value === prevValue))) { + isAllValueEqual = false; + } + prevValue = value; + + // Try converting a string to a color array + if (typeof value == 'string') { + var colorArray = parse(value); + if (colorArray) { + value = colorArray; + isValueColor = true; + } + else { + isValueString = true; + } + } + kfValues.push(value); + } + if (!forceAnimate && isAllValueEqual) { + return; + } + + var lastValue = kfValues[trackLen - 1]; + // Polyfill array and NaN value + for (var i = 0; i < trackLen - 1; i++) { + if (isValueArray) { + fillArr(kfValues[i], lastValue, arrDim); + } + else { + if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) { + kfValues[i] = lastValue; + } + } + } + isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); + + // Cache the key of last frame to speed up when + // animation playback is sequency + var lastFrame = 0; + var lastFramePercent = 0; + var start; + var w; + var p0; + var p1; + var p2; + var p3; + + if (isValueColor) { + var rgba = [0, 0, 0, 0]; + } + + var onframe = function (target, percent) { + // Find the range keyframes + // kf1-----kf2---------current--------kf3 + // find kf2 and kf3 and do interpolation + var frame; + // In the easing function like elasticOut, percent may less than 0 + if (percent < 0) { + frame = 0; + } + else if (percent < lastFramePercent) { + // Start from next key + // PENDING start from lastFrame ? + start = Math.min(lastFrame + 1, trackLen - 1); + for (frame = start; frame >= 0; frame--) { + if (kfPercents[frame] <= percent) { + break; + } + } + // PENDING really need to do this ? + frame = Math.min(frame, trackLen - 2); + } + else { + for (frame = lastFrame; frame < trackLen; frame++) { + if (kfPercents[frame] > percent) { + break; + } + } + frame = Math.min(frame - 1, trackLen - 2); + } + lastFrame = frame; + lastFramePercent = percent; + + var range = (kfPercents[frame + 1] - kfPercents[frame]); + if (range === 0) { + return; + } + else { + w = (percent - kfPercents[frame]) / range; + } + if (useSpline) { + p1 = kfValues[frame]; + p0 = kfValues[frame === 0 ? frame : frame - 1]; + p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1]; + p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2]; + if (isValueArray) { + catmullRomInterpolateArray( + p0, p1, p2, p3, w, w * w, w * w * w, + getter(target, propName), + arrDim + ); + } + else { + var value; + if (isValueColor) { + value = catmullRomInterpolateArray( + p0, p1, p2, p3, w, w * w, w * w * w, + rgba, 1 + ); + value = rgba2String(rgba); + } + else if (isValueString) { + // String is step(0.5) + return interpolateString(p1, p2, w); + } + else { + value = catmullRomInterpolate( + p0, p1, p2, p3, w, w * w, w * w * w + ); + } + setter( + target, + propName, + value + ); + } + } + else { + if (isValueArray) { + interpolateArray( + kfValues[frame], kfValues[frame + 1], w, + getter(target, propName), + arrDim + ); + } + else { + var value; + if (isValueColor) { + interpolateArray( + kfValues[frame], kfValues[frame + 1], w, + rgba, 1 + ); + value = rgba2String(rgba); + } + else if (isValueString) { + // String is step(0.5) + return interpolateString(kfValues[frame], kfValues[frame + 1], w); + } + else { + value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w); + } + setter( + target, + propName, + value + ); + } + } + }; + + var clip = new Clip({ + target: animator._target, + life: trackMaxTime, + loop: animator._loop, + delay: animator._delay, + onframe: onframe, + ondestroy: oneTrackDone + }); + + if (easing && easing !== 'spline') { + clip.easing = easing; + } + + return clip; +} + +/** + * @alias module:zrender/animation/Animator + * @constructor + * @param {Object} target + * @param {boolean} loop + * @param {Function} getter + * @param {Function} setter + */ +var Animator = function(target, loop, getter, setter) { + this._tracks = {}; + this._target = target; + + this._loop = loop || false; + + this._getter = getter || defaultGetter; + this._setter = setter || defaultSetter; + + this._clipCount = 0; + + this._delay = 0; + + this._doneList = []; + + this._onframeList = []; + + this._clipList = []; +}; + +Animator.prototype = { + /** + * 设置动画关键帧 + * @param {number} time 关键帧时间,单位是ms + * @param {Object} props 关键帧的属性值,key-value表示 + * @return {module:zrender/animation/Animator} + */ + when: function(time /* ms */, props) { + var tracks = this._tracks; + for (var propName in props) { + if (!props.hasOwnProperty(propName)) { + continue; + } + + if (!tracks[propName]) { + tracks[propName] = []; + // Invalid value + var value = this._getter(this._target, propName); + if (value == null) { + // zrLog('Invalid property ' + propName); + continue; + } + // If time is 0 + // Then props is given initialize value + // Else + // Initialize value from current prop value + if (time !== 0) { + tracks[propName].push({ + time: 0, + value: cloneValue(value) + }); + } + } + tracks[propName].push({ + time: time, + value: props[propName] + }); + } + return this; + }, + /** + * 添加动画每一帧的回调函数 + * @param {Function} callback + * @return {module:zrender/animation/Animator} + */ + during: function (callback) { + this._onframeList.push(callback); + return this; + }, + + pause: function () { + for (var i = 0; i < this._clipList.length; i++) { + this._clipList[i].pause(); + } + this._paused = true; + }, + + resume: function () { + for (var i = 0; i < this._clipList.length; i++) { + this._clipList[i].resume(); + } + this._paused = false; + }, + + isPaused: function () { + return !!this._paused; + }, + + _doneCallback: function () { + // Clear all tracks + this._tracks = {}; + // Clear all clips + this._clipList.length = 0; + + var doneList = this._doneList; + var len = doneList.length; + for (var i = 0; i < len; i++) { + doneList[i].call(this); + } + }, + /** + * 开始执行动画 + * @param {string|Function} [easing] + * 动画缓动函数,详见{@link module:zrender/animation/easing} + * @param {boolean} forceAnimate + * @return {module:zrender/animation/Animator} + */ + start: function (easing, forceAnimate) { + + var self = this; + var clipCount = 0; + + var oneTrackDone = function() { + clipCount--; + if (!clipCount) { + self._doneCallback(); + } + }; + + var lastClip; + for (var propName in this._tracks) { + if (!this._tracks.hasOwnProperty(propName)) { + continue; + } + var clip = createTrackClip( + this, easing, oneTrackDone, + this._tracks[propName], propName, forceAnimate + ); + if (clip) { + this._clipList.push(clip); + clipCount++; + + // If start after added to animation + if (this.animation) { + this.animation.addClip(clip); + } + + lastClip = clip; + } + } + + // Add during callback on the last clip + if (lastClip) { + var oldOnFrame = lastClip.onframe; + lastClip.onframe = function (target, percent) { + oldOnFrame(target, percent); + + for (var i = 0; i < self._onframeList.length; i++) { + self._onframeList[i](target, percent); + } + }; + } + + // This optimization will help the case that in the upper application + // the view may be refreshed frequently, where animation will be + // called repeatly but nothing changed. + if (!clipCount) { + this._doneCallback(); + } + return this; + }, + /** + * 停止动画 + * @param {boolean} forwardToLast If move to last frame before stop + */ + stop: function (forwardToLast) { + var clipList = this._clipList; + var animation = this.animation; + for (var i = 0; i < clipList.length; i++) { + var clip = clipList[i]; + if (forwardToLast) { + // Move to last frame before stop + clip.onframe(this._target, 1); + } + animation && animation.removeClip(clip); + } + clipList.length = 0; + }, + /** + * 设置动画延迟开始的时间 + * @param {number} time 单位ms + * @return {module:zrender/animation/Animator} + */ + delay: function (time) { + this._delay = time; + return this; + }, + /** + * 添加动画结束的回调 + * @param {Function} cb + * @return {module:zrender/animation/Animator} + */ + done: function(cb) { + if (cb) { + this._doneList.push(cb); + } + return this; + }, + + /** + * @return {Array.} + */ + getClips: function () { + return this._clipList; + } +}; + +var dpr = 1; + +// If in browser environment +if (typeof window !== 'undefined') { + dpr = Math.max(window.devicePixelRatio || 1, 1); +} + +/** + * config默认配置项 + * @exports zrender/config + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + */ + +/** + * debug日志选项:catchBrushException为true下有效 + * 0 : 不生成debug数据,发布用 + * 1 : 异常抛出,调试用 + * 2 : 控制台输出,调试用 + */ +var debugMode = 0; + +// retina 屏幕优化 +var devicePixelRatio = dpr; + +var log = function () { +}; + +if (debugMode === 1) { + log = function () { + for (var k in arguments) { + throw new Error(arguments[k]); + } + }; +} +else if (debugMode > 1) { + log = function () { + for (var k in arguments) { + console.log(arguments[k]); + } + }; +} + +var zrLog = log; + +/** + * @alias modue:zrender/mixin/Animatable + * @constructor + */ +var Animatable = function () { + + /** + * @type {Array.} + * @readOnly + */ + this.animators = []; +}; + +Animatable.prototype = { + + constructor: Animatable, + + /** + * 动画 + * + * @param {string} path The path to fetch value from object, like 'a.b.c'. + * @param {boolean} [loop] Whether to loop animation. + * @return {module:zrender/animation/Animator} + * @example: + * el.animate('style', false) + * .when(1000, {x: 10} ) + * .done(function(){ // Animation done }) + * .start() + */ + animate: function (path, loop) { + var target; + var animatingShape = false; + var el = this; + var zr = this.__zr; + if (path) { + var pathSplitted = path.split('.'); + var prop = el; + // If animating shape + animatingShape = pathSplitted[0] === 'shape'; + for (var i = 0, l = pathSplitted.length; i < l; i++) { + if (!prop) { + continue; + } + prop = prop[pathSplitted[i]]; + } + if (prop) { + target = prop; + } + } + else { + target = el; + } + + if (!target) { + zrLog( + 'Property "' + + path + + '" is not existed in element ' + + el.id + ); + return; + } + + var animators = el.animators; + + var animator = new Animator(target, loop); + + animator.during(function (target) { + el.dirty(animatingShape); + }) + .done(function () { + // FIXME Animator will not be removed if use `Animator#stop` to stop animation + animators.splice(indexOf(animators, animator), 1); + }); + + animators.push(animator); + + // If animate after added to the zrender + if (zr) { + zr.animation.addAnimator(animator); + } + + return animator; + }, + + /** + * 停止动画 + * @param {boolean} forwardToLast If move to last frame before stop + */ + stopAnimation: function (forwardToLast) { + var animators = this.animators; + var len = animators.length; + for (var i = 0; i < len; i++) { + animators[i].stop(forwardToLast); + } + animators.length = 0; + + return this; + }, + + /** + * Caution: this method will stop previous animation. + * So do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * @param {Object} target + * @param {number} [time=500] Time in ms + * @param {string} [easing='linear'] + * @param {number} [delay=0] + * @param {Function} [callback] + * @param {Function} [forceAnimate] Prevent stop animation and callback + * immediently when target values are the same as current values. + * + * @example + * // Animate position + * el.animateTo({ + * position: [10, 10] + * }, function () { // done }) + * + * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing + * el.animateTo({ + * shape: { + * width: 500 + * }, + * style: { + * fill: 'red' + * } + * position: [10, 10] + * }, 100, 100, 'cubicOut', function () { // done }) + */ + // TODO Return animation key + animateTo: function (target, time, delay, easing, callback, forceAnimate) { + // animateTo(target, time, easing, callback); + if (isString(delay)) { + callback = easing; + easing = delay; + delay = 0; + } + // animateTo(target, time, delay, callback); + else if (isFunction(easing)) { + callback = easing; + easing = 'linear'; + delay = 0; + } + // animateTo(target, time, callback); + else if (isFunction(delay)) { + callback = delay; + delay = 0; + } + // animateTo(target, callback) + else if (isFunction(time)) { + callback = time; + time = 500; + } + // animateTo(target) + else if (!time) { + time = 500; + } + // Stop all previous animations + this.stopAnimation(); + this._animateToShallow('', this, target, time, delay); + + // Animators may be removed immediately after start + // if there is nothing to animate + var animators = this.animators.slice(); + var count = animators.length; + function done() { + count--; + if (!count) { + callback && callback(); + } + } + + // No animators. This should be checked before animators[i].start(), + // because 'done' may be executed immediately if no need to animate. + if (!count) { + callback && callback(); + } + // Start after all animators created + // Incase any animator is done immediately when all animation properties are not changed + for (var i = 0; i < animators.length; i++) { + animators[i] + .done(done) + .start(easing, forceAnimate); + } + }, + + /** + * @private + * @param {string} path='' + * @param {Object} source=this + * @param {Object} target + * @param {number} [time=500] + * @param {number} [delay=0] + * + * @example + * // Animate position + * el._animateToShallow({ + * position: [10, 10] + * }) + * + * // Animate shape, style and position in 100ms, delayed 100ms + * el._animateToShallow({ + * shape: { + * width: 500 + * }, + * style: { + * fill: 'red' + * } + * position: [10, 10] + * }, 100, 100) + */ + _animateToShallow: function (path, source, target, time, delay) { + var objShallow = {}; + var propertyCount = 0; + for (var name in target) { + if (!target.hasOwnProperty(name)) { + continue; + } + + if (source[name] != null) { + if (isObject(target[name]) && !isArrayLike(target[name])) { + this._animateToShallow( + path ? path + '.' + name : name, + source[name], + target[name], + time, + delay + ); + } + else { + objShallow[name] = target[name]; + propertyCount++; + } + } + else if (target[name] != null) { + // Attr directly if not has property + // FIXME, if some property not needed for element ? + if (!path) { + this.attr(name, target[name]); + } + else { // Shape or style + var props = {}; + props[path] = {}; + props[path][name] = target[name]; + this.attr(props); + } + } + } + + if (propertyCount > 0) { + this.animate(path, false) + .when(time == null ? 500 : time, objShallow) + .delay(delay || 0); + } + + return this; + } +}; + +/** + * @alias module:zrender/Element + * @constructor + * @extends {module:zrender/mixin/Animatable} + * @extends {module:zrender/mixin/Transformable} + * @extends {module:zrender/mixin/Eventful} + */ +var Element = function (opts) { // jshint ignore:line + + Transformable.call(this, opts); + Eventful.call(this, opts); + Animatable.call(this, opts); + + /** + * 画布元素ID + * @type {string} + */ + this.id = opts.id || guid(); +}; + +Element.prototype = { + + /** + * 元素类型 + * Element type + * @type {string} + */ + type: 'element', + + /** + * 元素名字 + * Element name + * @type {string} + */ + name: '', + + /** + * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值 + * ZRender instance will be assigned when element is associated with zrender + * @name module:/zrender/Element#__zr + * @type {module:zrender/ZRender} + */ + __zr: null, + + /** + * 图形是否忽略,为true时忽略图形的绘制以及事件触发 + * If ignore drawing and events of the element object + * @name module:/zrender/Element#ignore + * @type {boolean} + * @default false + */ + ignore: false, + + /** + * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪 + * 该路径会继承被裁减对象的变换 + * @type {module:zrender/graphic/Path} + * @see http://www.w3.org/TR/2dcontext/#clipping-region + * @readOnly + */ + clipPath: null, + + /** + * Drift element + * @param {number} dx dx on the global space + * @param {number} dy dy on the global space + */ + drift: function (dx, dy) { + switch (this.draggable) { + case 'horizontal': + dy = 0; + break; + case 'vertical': + dx = 0; + break; + } + + var m = this.transform; + if (!m) { + m = this.transform = [1, 0, 0, 1, 0, 0]; + } + m[4] += dx; + m[5] += dy; + + this.decomposeTransform(); + this.dirty(false); + }, + + /** + * Hook before update + */ + beforeUpdate: function () {}, + /** + * Hook after update + */ + afterUpdate: function () {}, + /** + * Update each frame + */ + update: function () { + this.updateTransform(); + }, + + /** + * @param {Function} cb + * @param {} context + */ + traverse: function (cb, context) {}, + + /** + * @protected + */ + attrKV: function (key, value) { + if (key === 'position' || key === 'scale' || key === 'origin') { + // Copy the array + if (value) { + var target = this[key]; + if (!target) { + target = this[key] = []; + } + target[0] = value[0]; + target[1] = value[1]; + } + } + else { + this[key] = value; + } + }, + + /** + * Hide the element + */ + hide: function () { + this.ignore = true; + this.__zr && this.__zr.refresh(); + }, + + /** + * Show the element + */ + show: function () { + this.ignore = false; + this.__zr && this.__zr.refresh(); + }, + + /** + * @param {string|Object} key + * @param {*} value + */ + attr: function (key, value) { + if (typeof key === 'string') { + this.attrKV(key, value); + } + else if (isObject(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + this.attrKV(name, key[name]); + } + } + } + + this.dirty(false); + + return this; + }, + + /** + * @param {module:zrender/graphic/Path} clipPath + */ + setClipPath: function (clipPath) { + var zr = this.__zr; + if (zr) { + clipPath.addSelfToZr(zr); + } + + // Remove previous clip path + if (this.clipPath && this.clipPath !== clipPath) { + this.removeClipPath(); + } + + this.clipPath = clipPath; + clipPath.__zr = zr; + clipPath.__clipTarget = this; + + this.dirty(false); + }, + + /** + */ + removeClipPath: function () { + var clipPath = this.clipPath; + if (clipPath) { + if (clipPath.__zr) { + clipPath.removeSelfFromZr(clipPath.__zr); + } + + clipPath.__zr = null; + clipPath.__clipTarget = null; + this.clipPath = null; + + this.dirty(false); + } + }, + + /** + * Add self from zrender instance. + * Not recursively because it will be invoked when element added to storage. + * @param {module:zrender/ZRender} zr + */ + addSelfToZr: function (zr) { + this.__zr = zr; + // 添加动画 + var animators = this.animators; + if (animators) { + for (var i = 0; i < animators.length; i++) { + zr.animation.addAnimator(animators[i]); + } + } + + if (this.clipPath) { + this.clipPath.addSelfToZr(zr); + } + }, + + /** + * Remove self from zrender instance. + * Not recursively because it will be invoked when element added to storage. + * @param {module:zrender/ZRender} zr + */ + removeSelfFromZr: function (zr) { + this.__zr = null; + // 移除动画 + var animators = this.animators; + if (animators) { + for (var i = 0; i < animators.length; i++) { + zr.animation.removeAnimator(animators[i]); + } + } + + if (this.clipPath) { + this.clipPath.removeSelfFromZr(zr); + } + } +}; + +mixin(Element, Animatable); +mixin(Element, Transformable); +mixin(Element, Eventful); + +/** + * @module echarts/core/BoundingRect + */ + +var v2ApplyTransform = applyTransform; +var mathMin = Math.min; +var mathMax = Math.max; + +/** + * @alias module:echarts/core/BoundingRect + */ +function BoundingRect(x, y, width, height) { + + if (width < 0) { + x = x + width; + width = -width; + } + if (height < 0) { + y = y + height; + height = -height; + } + + /** + * @type {number} + */ + this.x = x; + /** + * @type {number} + */ + this.y = y; + /** + * @type {number} + */ + this.width = width; + /** + * @type {number} + */ + this.height = height; +} + +BoundingRect.prototype = { + + constructor: BoundingRect, + + /** + * @param {module:echarts/core/BoundingRect} other + */ + union: function (other) { + var x = mathMin(other.x, this.x); + var y = mathMin(other.y, this.y); + + this.width = mathMax( + other.x + other.width, + this.x + this.width + ) - x; + this.height = mathMax( + other.y + other.height, + this.y + this.height + ) - y; + this.x = x; + this.y = y; + }, + + /** + * @param {Array.} m + * @methods + */ + applyTransform: (function () { + var lt = []; + var rb = []; + var lb = []; + var rt = []; + return function (m) { + // In case usage like this + // el.getBoundingRect().applyTransform(el.transform) + // And element has no transform + if (!m) { + return; + } + lt[0] = lb[0] = this.x; + lt[1] = rt[1] = this.y; + rb[0] = rt[0] = this.x + this.width; + rb[1] = lb[1] = this.y + this.height; + + v2ApplyTransform(lt, lt, m); + v2ApplyTransform(rb, rb, m); + v2ApplyTransform(lb, lb, m); + v2ApplyTransform(rt, rt, m); + + this.x = mathMin(lt[0], rb[0], lb[0], rt[0]); + this.y = mathMin(lt[1], rb[1], lb[1], rt[1]); + var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]); + var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]); + this.width = maxX - this.x; + this.height = maxY - this.y; + }; + })(), + + /** + * Calculate matrix of transforming from self to target rect + * @param {module:zrender/core/BoundingRect} b + * @return {Array.} + */ + calculateTransform: function (b) { + var a = this; + var sx = b.width / a.width; + var sy = b.height / a.height; + + var m = create$1(); + + // 矩阵右乘 + translate(m, m, [-a.x, -a.y]); + scale$1(m, m, [sx, sy]); + translate(m, m, [b.x, b.y]); + + return m; + }, + + /** + * @param {(module:echarts/core/BoundingRect|Object)} b + * @return {boolean} + */ + intersect: function (b) { + if (!b) { + return false; + } + + if (!(b instanceof BoundingRect)) { + // Normalize negative width/height. + b = BoundingRect.create(b); + } + + var a = this; + var ax0 = a.x; + var ax1 = a.x + a.width; + var ay0 = a.y; + var ay1 = a.y + a.height; + + var bx0 = b.x; + var bx1 = b.x + b.width; + var by0 = b.y; + var by1 = b.y + b.height; + + return ! (ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0); + }, + + contain: function (x, y) { + var rect = this; + return x >= rect.x + && x <= (rect.x + rect.width) + && y >= rect.y + && y <= (rect.y + rect.height); + }, + + /** + * @return {module:echarts/core/BoundingRect} + */ + clone: function () { + return new BoundingRect(this.x, this.y, this.width, this.height); + }, + + /** + * Copy from another rect + */ + copy: function (other) { + this.x = other.x; + this.y = other.y; + this.width = other.width; + this.height = other.height; + }, + + plain: function () { + return { + x: this.x, + y: this.y, + width: this.width, + height: this.height + }; + } +}; + +/** + * @param {Object|module:zrender/core/BoundingRect} rect + * @param {number} rect.x + * @param {number} rect.y + * @param {number} rect.width + * @param {number} rect.height + * @return {module:zrender/core/BoundingRect} + */ +BoundingRect.create = function (rect) { + return new BoundingRect(rect.x, rect.y, rect.width, rect.height); +}; + +/** + * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上 + * @module zrender/graphic/Group + * @example + * var Group = require('zrender/container/Group'); + * var Circle = require('zrender/graphic/shape/Circle'); + * var g = new Group(); + * g.position[0] = 100; + * g.position[1] = 100; + * g.add(new Circle({ + * style: { + * x: 100, + * y: 100, + * r: 20, + * } + * })); + * zr.add(g); + */ + +/** + * @alias module:zrender/graphic/Group + * @constructor + * @extends module:zrender/mixin/Transformable + * @extends module:zrender/mixin/Eventful + */ +var Group = function (opts) { + + opts = opts || {}; + + Element.call(this, opts); + + for (var key in opts) { + if (opts.hasOwnProperty(key)) { + this[key] = opts[key]; + } + } + + this._children = []; + + this.__storage = null; + + this.__dirty = true; +}; + +Group.prototype = { + + constructor: Group, + + isGroup: true, + + /** + * @type {string} + */ + type: 'group', + + /** + * 所有子孙元素是否响应鼠标事件 + * @name module:/zrender/container/Group#silent + * @type {boolean} + * @default false + */ + silent: false, + + /** + * @return {Array.} + */ + children: function () { + return this._children.slice(); + }, + + /** + * 获取指定 index 的儿子节点 + * @param {number} idx + * @return {module:zrender/Element} + */ + childAt: function (idx) { + return this._children[idx]; + }, + + /** + * 获取指定名字的儿子节点 + * @param {string} name + * @return {module:zrender/Element} + */ + childOfName: function (name) { + var children = this._children; + for (var i = 0; i < children.length; i++) { + if (children[i].name === name) { + return children[i]; + } + } + }, + + /** + * @return {number} + */ + childCount: function () { + return this._children.length; + }, + + /** + * 添加子节点到最后 + * @param {module:zrender/Element} child + */ + add: function (child) { + if (child && child !== this && child.parent !== this) { + + this._children.push(child); + + this._doAdd(child); + } + + return this; + }, + + /** + * 添加子节点在 nextSibling 之前 + * @param {module:zrender/Element} child + * @param {module:zrender/Element} nextSibling + */ + addBefore: function (child, nextSibling) { + if (child && child !== this && child.parent !== this + && nextSibling && nextSibling.parent === this) { + + var children = this._children; + var idx = children.indexOf(nextSibling); + + if (idx >= 0) { + children.splice(idx, 0, child); + this._doAdd(child); + } + } + + return this; + }, + + _doAdd: function (child) { + if (child.parent) { + child.parent.remove(child); + } + + child.parent = this; + + var storage = this.__storage; + var zr = this.__zr; + if (storage && storage !== child.__storage) { + + storage.addToStorage(child); + + if (child instanceof Group) { + child.addChildrenToStorage(storage); + } + } + + zr && zr.refresh(); + }, + + /** + * 移除子节点 + * @param {module:zrender/Element} child + */ + remove: function (child) { + var zr = this.__zr; + var storage = this.__storage; + var children = this._children; + + var idx = indexOf(children, child); + if (idx < 0) { + return this; + } + children.splice(idx, 1); + + child.parent = null; + + if (storage) { + + storage.delFromStorage(child); + + if (child instanceof Group) { + child.delChildrenFromStorage(storage); + } + } + + zr && zr.refresh(); + + return this; + }, + + /** + * 移除所有子节点 + */ + removeAll: function () { + var children = this._children; + var storage = this.__storage; + var child; + var i; + for (i = 0; i < children.length; i++) { + child = children[i]; + if (storage) { + storage.delFromStorage(child); + if (child instanceof Group) { + child.delChildrenFromStorage(storage); + } + } + child.parent = null; + } + children.length = 0; + + return this; + }, + + /** + * 遍历所有子节点 + * @param {Function} cb + * @param {} context + */ + eachChild: function (cb, context) { + var children = this._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + cb.call(context, child, i); + } + return this; + }, + + /** + * 深度优先遍历所有子孙节点 + * @param {Function} cb + * @param {} context + */ + traverse: function (cb, context) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + cb.call(context, child); + + if (child.type === 'group') { + child.traverse(cb, context); + } + } + return this; + }, + + addChildrenToStorage: function (storage) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + storage.addToStorage(child); + if (child instanceof Group) { + child.addChildrenToStorage(storage); + } + } + }, + + delChildrenFromStorage: function (storage) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + storage.delFromStorage(child); + if (child instanceof Group) { + child.delChildrenFromStorage(storage); + } + } + }, + + dirty: function () { + this.__dirty = true; + this.__zr && this.__zr.refresh(); + return this; + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getBoundingRect: function (includeChildren) { + // TODO Caching + var rect = null; + var tmpRect = new BoundingRect(0, 0, 0, 0); + var children = includeChildren || this._children; + var tmpMat = []; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.ignore || child.invisible) { + continue; + } + + var childRect = child.getBoundingRect(); + var transform = child.getLocalTransform(tmpMat); + // TODO + // The boundingRect cacluated by transforming original + // rect may be bigger than the actual bundingRect when rotation + // is used. (Consider a circle rotated aginst its center, where + // the actual boundingRect should be the same as that not be + // rotated.) But we can not find better approach to calculate + // actual boundingRect yet, considering performance. + if (transform) { + tmpRect.copy(childRect); + tmpRect.applyTransform(transform); + rect = rect || tmpRect.clone(); + rect.union(tmpRect); + } + else { + rect = rect || childRect.clone(); + rect.union(childRect); + } + } + return rect || tmpRect; + } +}; + +inherits(Group, Element); + +// https://github.com/mziccard/node-timsort +var DEFAULT_MIN_MERGE = 32; + +var DEFAULT_MIN_GALLOPING = 7; + +function minRunLength(n) { + var r = 0; + + while (n >= DEFAULT_MIN_MERGE) { + r |= n & 1; + n >>= 1; + } + + return n + r; +} + +function makeAscendingRun(array, lo, hi, compare) { + var runHi = lo + 1; + + if (runHi === hi) { + return 1; + } + + if (compare(array[runHi++], array[lo]) < 0) { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) { + runHi++; + } + + reverseRun(array, lo, runHi); + } + else { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) { + runHi++; + } + } + + return runHi - lo; +} + +function reverseRun(array, lo, hi) { + hi--; + + while (lo < hi) { + var t = array[lo]; + array[lo++] = array[hi]; + array[hi--] = t; + } +} + +function binaryInsertionSort(array, lo, hi, start, compare) { + if (start === lo) { + start++; + } + + for (; start < hi; start++) { + var pivot = array[start]; + + var left = lo; + var right = start; + var mid; + + while (left < right) { + mid = left + right >>> 1; + + if (compare(pivot, array[mid]) < 0) { + right = mid; + } + else { + left = mid + 1; + } + } + + var n = start - left; + + switch (n) { + case 3: + array[left + 3] = array[left + 2]; + + case 2: + array[left + 2] = array[left + 1]; + + case 1: + array[left + 1] = array[left]; + break; + default: + while (n > 0) { + array[left + n] = array[left + n - 1]; + n--; + } + } + + array[left] = pivot; + } +} + +function gallopLeft(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + + if (compare(value, array[start + hint]) > 0) { + maxOffset = length - hint; + + while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + + if (offset > maxOffset) { + offset = maxOffset; + } + + lastOffset += hint; + offset += hint; + } + else { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + if (offset > maxOffset) { + offset = maxOffset; + } + + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + + if (compare(value, array[start + m]) > 0) { + lastOffset = m + 1; + } + else { + offset = m; + } + } + return offset; +} + +function gallopRight(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + + if (compare(value, array[start + hint]) < 0) { + maxOffset = hint + 1; + + while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + + if (offset > maxOffset) { + offset = maxOffset; + } + + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + else { + maxOffset = length - hint; + + while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + + if (offset <= 0) { + offset = maxOffset; + } + } + + if (offset > maxOffset) { + offset = maxOffset; + } + + lastOffset += hint; + offset += hint; + } + + lastOffset++; + + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + + if (compare(value, array[start + m]) < 0) { + offset = m; + } + else { + lastOffset = m + 1; + } + } + + return offset; +} + +function TimSort(array, compare) { + var minGallop = DEFAULT_MIN_GALLOPING; + var runStart; + var runLength; + var stackSize = 0; + + var tmp = []; + + runStart = []; + runLength = []; + + function pushRun(_runStart, _runLength) { + runStart[stackSize] = _runStart; + runLength[stackSize] = _runLength; + stackSize += 1; + } + + function mergeRuns() { + while (stackSize > 1) { + var n = stackSize - 2; + + if (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) { + if (runLength[n - 1] < runLength[n + 1]) { + n--; + } + } + else if (runLength[n] > runLength[n + 1]) { + break; + } + mergeAt(n); + } + } + + function forceMergeRuns() { + while (stackSize > 1) { + var n = stackSize - 2; + + if (n > 0 && runLength[n - 1] < runLength[n + 1]) { + n--; + } + + mergeAt(n); + } + } + + function mergeAt(i) { + var start1 = runStart[i]; + var length1 = runLength[i]; + var start2 = runStart[i + 1]; + var length2 = runLength[i + 1]; + + runLength[i] = length1 + length2; + + if (i === stackSize - 3) { + runStart[i + 1] = runStart[i + 2]; + runLength[i + 1] = runLength[i + 2]; + } + + stackSize--; + + var k = gallopRight(array[start2], array, start1, length1, 0, compare); + start1 += k; + length1 -= k; + + if (length1 === 0) { + return; + } + + length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); + + if (length2 === 0) { + return; + } + + if (length1 <= length2) { + mergeLow(start1, length1, start2, length2); + } + else { + mergeHigh(start1, length1, start2, length2); + } + } + + function mergeLow(start1, length1, start2, length2) { + var i = 0; + + for (i = 0; i < length1; i++) { + tmp[i] = array[start1 + i]; + } + + var cursor1 = 0; + var cursor2 = start2; + var dest = start1; + + array[dest++] = array[cursor2++]; + + if (--length2 === 0) { + for (i = 0; i < length1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + return; + } + + if (length1 === 1) { + for (i = 0; i < length2; i++) { + array[dest + i] = array[cursor2 + i]; + } + array[dest + length2] = tmp[cursor1]; + return; + } + + var _minGallop = minGallop; + var count1, count2, exit; + + while (1) { + count1 = 0; + count2 = 0; + exit = false; + + do { + if (compare(array[cursor2], tmp[cursor1]) < 0) { + array[dest++] = array[cursor2++]; + count2++; + count1 = 0; + + if (--length2 === 0) { + exit = true; + break; + } + } + else { + array[dest++] = tmp[cursor1++]; + count1++; + count2 = 0; + if (--length1 === 1) { + exit = true; + break; + } + } + } while ((count1 | count2) < _minGallop); + + if (exit) { + break; + } + + do { + count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); + + if (count1 !== 0) { + for (i = 0; i < count1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + + dest += count1; + cursor1 += count1; + length1 -= count1; + if (length1 <= 1) { + exit = true; + break; + } + } + + array[dest++] = array[cursor2++]; + + if (--length2 === 0) { + exit = true; + break; + } + + count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); + + if (count2 !== 0) { + for (i = 0; i < count2; i++) { + array[dest + i] = array[cursor2 + i]; + } + + dest += count2; + cursor2 += count2; + length2 -= count2; + + if (length2 === 0) { + exit = true; + break; + } + } + array[dest++] = tmp[cursor1++]; + + if (--length1 === 1) { + exit = true; + break; + } + + _minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + + if (exit) { + break; + } + + if (_minGallop < 0) { + _minGallop = 0; + } + + _minGallop += 2; + } + + minGallop = _minGallop; + + minGallop < 1 && (minGallop = 1); + + if (length1 === 1) { + for (i = 0; i < length2; i++) { + array[dest + i] = array[cursor2 + i]; + } + array[dest + length2] = tmp[cursor1]; + } + else if (length1 === 0) { + throw new Error(); + // throw new Error('mergeLow preconditions were not respected'); + } + else { + for (i = 0; i < length1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + } + } + + function mergeHigh (start1, length1, start2, length2) { + var i = 0; + + for (i = 0; i < length2; i++) { + tmp[i] = array[start2 + i]; + } + + var cursor1 = start1 + length1 - 1; + var cursor2 = length2 - 1; + var dest = start2 + length2 - 1; + var customCursor = 0; + var customDest = 0; + + array[dest--] = array[cursor1--]; + + if (--length1 === 0) { + customCursor = dest - (length2 - 1); + + for (i = 0; i < length2; i++) { + array[customCursor + i] = tmp[i]; + } + + return; + } + + if (length2 === 1) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + + for (i = length1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + + array[dest] = tmp[cursor2]; + return; + } + + var _minGallop = minGallop; + + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + + do { + if (compare(tmp[cursor2], array[cursor1]) < 0) { + array[dest--] = array[cursor1--]; + count1++; + count2 = 0; + if (--length1 === 0) { + exit = true; + break; + } + } + else { + array[dest--] = tmp[cursor2--]; + count2++; + count1 = 0; + if (--length2 === 1) { + exit = true; + break; + } + } + } while ((count1 | count2) < _minGallop); + + if (exit) { + break; + } + + do { + count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); + + if (count1 !== 0) { + dest -= count1; + cursor1 -= count1; + length1 -= count1; + customDest = dest + 1; + customCursor = cursor1 + 1; + + for (i = count1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + + if (length1 === 0) { + exit = true; + break; + } + } + + array[dest--] = tmp[cursor2--]; + + if (--length2 === 1) { + exit = true; + break; + } + + count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); + + if (count2 !== 0) { + dest -= count2; + cursor2 -= count2; + length2 -= count2; + customDest = dest + 1; + customCursor = cursor2 + 1; + + for (i = 0; i < count2; i++) { + array[customDest + i] = tmp[customCursor + i]; + } + + if (length2 <= 1) { + exit = true; + break; + } + } + + array[dest--] = array[cursor1--]; + + if (--length1 === 0) { + exit = true; + break; + } + + _minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + + if (exit) { + break; + } + + if (_minGallop < 0) { + _minGallop = 0; + } + + _minGallop += 2; + } + + minGallop = _minGallop; + + if (minGallop < 1) { + minGallop = 1; + } + + if (length2 === 1) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + + for (i = length1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + + array[dest] = tmp[cursor2]; + } + else if (length2 === 0) { + throw new Error(); + // throw new Error('mergeHigh preconditions were not respected'); + } + else { + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) { + array[customCursor + i] = tmp[i]; + } + } + } + + this.mergeRuns = mergeRuns; + this.forceMergeRuns = forceMergeRuns; + this.pushRun = pushRun; +} + +function sort(array, compare, lo, hi) { + if (!lo) { + lo = 0; + } + if (!hi) { + hi = array.length; + } + + var remaining = hi - lo; + + if (remaining < 2) { + return; + } + + var runLength = 0; + + if (remaining < DEFAULT_MIN_MERGE) { + runLength = makeAscendingRun(array, lo, hi, compare); + binaryInsertionSort(array, lo, hi, lo + runLength, compare); + return; + } + + var ts = new TimSort(array, compare); + + var minRun = minRunLength(remaining); + + do { + runLength = makeAscendingRun(array, lo, hi, compare); + if (runLength < minRun) { + var force = remaining; + if (force > minRun) { + force = minRun; + } + + binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); + runLength = force; + } + + ts.pushRun(lo, runLength); + ts.mergeRuns(); + + remaining -= runLength; + lo += runLength; + } while (remaining !== 0); + + ts.forceMergeRuns(); +} + +/** + * Storage内容仓库模块 + * @module zrender/Storage + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + * @author errorrik (errorrik@gmail.com) + * @author pissang (https://github.com/pissang/) + */ + +// Use timsort because in most case elements are partially sorted +// https://jsfiddle.net/pissang/jr4x7mdm/8/ +function shapeCompareFunc(a, b) { + if (a.zlevel === b.zlevel) { + if (a.z === b.z) { + // if (a.z2 === b.z2) { + // // FIXME Slow has renderidx compare + // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement + // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012 + // return a.__renderidx - b.__renderidx; + // } + return a.z2 - b.z2; + } + return a.z - b.z; + } + return a.zlevel - b.zlevel; +} +/** + * 内容仓库 (M) + * @alias module:zrender/Storage + * @constructor + */ +var Storage = function () { // jshint ignore:line + this._roots = []; + + this._displayList = []; + + this._displayListLen = 0; +}; + +Storage.prototype = { + + constructor: Storage, + + /** + * @param {Function} cb + * + */ + traverse: function (cb, context) { + for (var i = 0; i < this._roots.length; i++) { + this._roots[i].traverse(cb, context); + } + }, + + /** + * 返回所有图形的绘制队列 + * @param {boolean} [update=false] 是否在返回前更新该数组 + * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效 + * + * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList} + * @return {Array.} + */ + getDisplayList: function (update, includeIgnore) { + includeIgnore = includeIgnore || false; + if (update) { + this.updateDisplayList(includeIgnore); + } + return this._displayList; + }, + + /** + * 更新图形的绘制队列。 + * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中, + * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列 + * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组 + */ + updateDisplayList: function (includeIgnore) { + this._displayListLen = 0; + var roots = this._roots; + var displayList = this._displayList; + for (var i = 0, len = roots.length; i < len; i++) { + this._updateAndAddDisplayable(roots[i], null, includeIgnore); + } + displayList.length = this._displayListLen; + + // for (var i = 0, len = displayList.length; i < len; i++) { + // displayList[i].__renderidx = i; + // } + + // displayList.sort(shapeCompareFunc); + env$1.canvasSupported && sort(displayList, shapeCompareFunc); + }, + + _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) { + + if (el.ignore && !includeIgnore) { + return; + } + + el.beforeUpdate(); + + if (el.__dirty) { + + el.update(); + + } + + el.afterUpdate(); + + var userSetClipPath = el.clipPath; + if (userSetClipPath) { + + // FIXME 效率影响 + if (clipPaths) { + clipPaths = clipPaths.slice(); + } + else { + clipPaths = []; + } + + var currentClipPath = userSetClipPath; + var parentClipPath = el; + // Recursively add clip path + while (currentClipPath) { + // clipPath 的变换是基于使用这个 clipPath 的元素 + currentClipPath.parent = parentClipPath; + currentClipPath.updateTransform(); + + clipPaths.push(currentClipPath); + + parentClipPath = currentClipPath; + currentClipPath = currentClipPath.clipPath; + } + } + + if (el.isGroup) { + var children = el._children; + + for (var i = 0; i < children.length; i++) { + var child = children[i]; + + // Force to mark as dirty if group is dirty + // FIXME __dirtyPath ? + if (el.__dirty) { + child.__dirty = true; + } + + this._updateAndAddDisplayable(child, clipPaths, includeIgnore); + } + + // Mark group clean here + el.__dirty = false; + + } + else { + el.__clipPaths = clipPaths; + + this._displayList[this._displayListLen++] = el; + } + }, + + /** + * 添加图形(Shape)或者组(Group)到根节点 + * @param {module:zrender/Element} el + */ + addRoot: function (el) { + if (el.__storage === this) { + return; + } + + if (el instanceof Group) { + el.addChildrenToStorage(this); + } + + this.addToStorage(el); + this._roots.push(el); + }, + + /** + * 删除指定的图形(Shape)或者组(Group) + * @param {string|Array.} [el] 如果为空清空整个Storage + */ + delRoot: function (el) { + if (el == null) { + // 不指定el清空 + for (var i = 0; i < this._roots.length; i++) { + var root = this._roots[i]; + if (root instanceof Group) { + root.delChildrenFromStorage(this); + } + } + + this._roots = []; + this._displayList = []; + this._displayListLen = 0; + + return; + } + + if (el instanceof Array) { + for (var i = 0, l = el.length; i < l; i++) { + this.delRoot(el[i]); + } + return; + } + + + var idx = indexOf(this._roots, el); + if (idx >= 0) { + this.delFromStorage(el); + this._roots.splice(idx, 1); + if (el instanceof Group) { + el.delChildrenFromStorage(this); + } + } + }, + + addToStorage: function (el) { + el.__storage = this; + el.dirty(false); + + return this; + }, + + delFromStorage: function (el) { + if (el) { + el.__storage = null; + } + + return this; + }, + + /** + * 清空并且释放Storage + */ + dispose: function () { + this._renderList = + this._roots = null; + }, + + displayableSortFunc: shapeCompareFunc +}; + +var STYLE_COMMON_PROPS = [ + ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'], + ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10] +]; + +// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4); +// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4); + +var Style = function (opts, host) { + this.extendFrom(opts, false); + this.host = host; +}; + +function createLinearGradient(ctx, obj, rect) { + var x = obj.x == null ? 0 : obj.x; + var x2 = obj.x2 == null ? 1 : obj.x2; + var y = obj.y == null ? 0 : obj.y; + var y2 = obj.y2 == null ? 0 : obj.y2; + + if (!obj.global) { + x = x * rect.width + rect.x; + x2 = x2 * rect.width + rect.x; + y = y * rect.height + rect.y; + y2 = y2 * rect.height + rect.y; + } + + var canvasGradient = ctx.createLinearGradient(x, y, x2, y2); + + return canvasGradient; +} + +function createRadialGradient(ctx, obj, rect) { + var width = rect.width; + var height = rect.height; + var min = Math.min(width, height); + + var x = obj.x == null ? 0.5 : obj.x; + var y = obj.y == null ? 0.5 : obj.y; + var r = obj.r == null ? 0.5 : obj.r; + if (!obj.global) { + x = x * width + rect.x; + y = y * height + rect.y; + r = r * min; + } + + var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r); + + return canvasGradient; +} + + +Style.prototype = { + + constructor: Style, + + /** + * @type {module:zrender/graphic/Displayable} + */ + host: null, + + /** + * @type {string} + */ + fill: '#000', + + /** + * @type {string} + */ + stroke: null, + + /** + * @type {number} + */ + opacity: 1, + + /** + * @type {Array.} + */ + lineDash: null, + + /** + * @type {number} + */ + lineDashOffset: 0, + + /** + * @type {number} + */ + shadowBlur: 0, + + /** + * @type {number} + */ + shadowOffsetX: 0, + + /** + * @type {number} + */ + shadowOffsetY: 0, + + /** + * @type {number} + */ + lineWidth: 1, + + /** + * If stroke ignore scale + * @type {Boolean} + */ + strokeNoScale: false, + + // Bounding rect text configuration + // Not affected by element transform + /** + * @type {string} + */ + text: null, + + /** + * If `fontSize` or `fontFamily` exists, `font` will be reset by + * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`. + * So do not visit it directly in upper application (like echarts), + * but use `contain/text#makeFont` instead. + * @type {string} + */ + font: null, + + /** + * The same as font. Use font please. + * @deprecated + * @type {string} + */ + textFont: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * @type {string} + */ + fontStyle: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * @type {string} + */ + fontWeight: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * Should be 12 but not '12px'. + * @type {number} + */ + fontSize: null, + + /** + * It helps merging respectively, rather than parsing an entire font string. + * @type {string} + */ + fontFamily: null, + + /** + * Reserved for special functinality, like 'hr'. + * @type {string} + */ + textTag: null, + + /** + * @type {string} + */ + textFill: '#000', + + /** + * @type {string} + */ + textStroke: null, + + /** + * @type {number} + */ + textWidth: null, + + /** + * Only for textBackground. + * @type {number} + */ + textHeight: null, + + /** + * textStroke may be set as some color as a default + * value in upper applicaion, where the default value + * of textStrokeWidth should be 0 to make sure that + * user can choose to do not use text stroke. + * @type {number} + */ + textStrokeWidth: 0, + + /** + * @type {number} + */ + textLineHeight: null, + + /** + * 'inside', 'left', 'right', 'top', 'bottom' + * [x, y] + * Based on x, y of rect. + * @type {string|Array.} + * @default 'inside' + */ + textPosition: 'inside', + + /** + * If not specified, use the boundingRect of a `displayable`. + * @type {Object} + */ + textRect: null, + + /** + * [x, y] + * @type {Array.} + */ + textOffset: null, + + /** + * @type {string} + */ + textAlign: null, + + /** + * @type {string} + */ + textVerticalAlign: null, + + /** + * @type {number} + */ + textDistance: 5, + + /** + * @type {string} + */ + textShadowColor: 'transparent', + + /** + * @type {number} + */ + textShadowBlur: 0, + + /** + * @type {number} + */ + textShadowOffsetX: 0, + + /** + * @type {number} + */ + textShadowOffsetY: 0, + + /** + * @type {string} + */ + textBoxShadowColor: 'transparent', + + /** + * @type {number} + */ + textBoxShadowBlur: 0, + + /** + * @type {number} + */ + textBoxShadowOffsetX: 0, + + /** + * @type {number} + */ + textBoxShadowOffsetY: 0, + + /** + * Whether transform text. + * Only useful in Path and Image element + * @type {boolean} + */ + transformText: false, + + /** + * Text rotate around position of Path or Image + * Only useful in Path and Image element and transformText is false. + */ + textRotation: 0, + + /** + * Text origin of text rotation, like [10, 40]. + * Based on x, y of rect. + * Useful in label rotation of circular symbol. + * By default, this origin is textPosition. + * Can be 'center'. + * @type {string|Array.} + */ + textOrigin: null, + + /** + * @type {string} + */ + textBackgroundColor: null, + + /** + * @type {string} + */ + textBorderColor: null, + + /** + * @type {number} + */ + textBorderWidth: 0, + + /** + * @type {number} + */ + textBorderRadius: 0, + + /** + * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]` + * @type {number|Array.} + */ + textPadding: null, + + /** + * Text styles for rich text. + * @type {Object} + */ + rich: null, + + /** + * {outerWidth, outerHeight, ellipsis, placeholder} + * @type {Object} + */ + truncate: null, + + /** + * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation + * @type {string} + */ + blend: null, + + /** + * @param {CanvasRenderingContext2D} ctx + */ + bind: function (ctx, el, prevEl) { + var style = this; + var prevStyle = prevEl && prevEl.style; + var firstDraw = !prevStyle; + + for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) { + var prop = STYLE_COMMON_PROPS[i]; + var styleName = prop[0]; + + if (firstDraw || style[styleName] !== prevStyle[styleName]) { + // FIXME Invalid property value will cause style leak from previous element. + ctx[styleName] = style[styleName] || prop[1]; + } + } + + if ((firstDraw || style.fill !== prevStyle.fill)) { + ctx.fillStyle = style.fill; + } + if ((firstDraw || style.stroke !== prevStyle.stroke)) { + ctx.strokeStyle = style.stroke; + } + if ((firstDraw || style.opacity !== prevStyle.opacity)) { + ctx.globalAlpha = style.opacity == null ? 1 : style.opacity; + } + + if ((firstDraw || style.blend !== prevStyle.blend)) { + ctx.globalCompositeOperation = style.blend || 'source-over'; + } + if (this.hasStroke()) { + var lineWidth = style.lineWidth; + ctx.lineWidth = lineWidth / ( + (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1 + ); + } + }, + + hasFill: function () { + var fill = this.fill; + return fill != null && fill !== 'none'; + }, + + hasStroke: function () { + var stroke = this.stroke; + return stroke != null && stroke !== 'none' && this.lineWidth > 0; + }, + + /** + * Extend from other style + * @param {zrender/graphic/Style} otherStyle + * @param {boolean} overwrite true: overwrirte any way. + * false: overwrite only when !target.hasOwnProperty + * others: overwrite when property is not null/undefined. + */ + extendFrom: function (otherStyle, overwrite) { + if (otherStyle) { + for (var name in otherStyle) { + if (otherStyle.hasOwnProperty(name) + && (overwrite === true + || ( + overwrite === false + ? !this.hasOwnProperty(name) + : otherStyle[name] != null + ) + ) + ) { + this[name] = otherStyle[name]; + } + } + } + }, + + /** + * Batch setting style with a given object + * @param {Object|string} obj + * @param {*} [obj] + */ + set: function (obj, value) { + if (typeof obj === 'string') { + this[obj] = value; + } + else { + this.extendFrom(obj, true); + } + }, + + /** + * Clone + * @return {zrender/graphic/Style} [description] + */ + clone: function () { + var newStyle = new this.constructor(); + newStyle.extendFrom(this, true); + return newStyle; + }, + + getGradient: function (ctx, obj, rect) { + var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient; + var canvasGradient = method(ctx, obj, rect); + var colorStops = obj.colorStops; + for (var i = 0; i < colorStops.length; i++) { + canvasGradient.addColorStop( + colorStops[i].offset, colorStops[i].color + ); + } + return canvasGradient; + } + +}; + +var styleProto = Style.prototype; +for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) { + var prop = STYLE_COMMON_PROPS[i]; + if (!(prop[0] in styleProto)) { + styleProto[prop[0]] = prop[1]; + } +} + +// Provide for others +Style.getGradient = styleProto.getGradient; + +var Pattern = function (image, repeat) { + // Should do nothing more in this constructor. Because gradient can be + // declard by `color: {image: ...}`, where this constructor will not be called. + + this.image = image; + this.repeat = repeat; + + // Can be cloned + this.type = 'pattern'; +}; + +Pattern.prototype.getCanvasPattern = function (ctx) { + return ctx.createPattern(this.image, this.repeat || 'repeat'); +}; + +/** + * @module zrender/Layer + * @author pissang(https://www.github.com/pissang) + */ + +function returnFalse() { + return false; +} + +/** + * 创建dom + * + * @inner + * @param {string} id dom id 待用 + * @param {Painter} painter painter instance + * @param {number} number + */ +function createDom(id, painter, dpr) { + var newDom = createCanvas(); + var width = painter.getWidth(); + var height = painter.getHeight(); + + var newDomStyle = newDom.style; + // 没append呢,请原谅我这样写,清晰~ + newDomStyle.position = 'absolute'; + newDomStyle.left = 0; + newDomStyle.top = 0; + newDomStyle.width = width + 'px'; + newDomStyle.height = height + 'px'; + newDom.width = width * dpr; + newDom.height = height * dpr; + + // id不作为索引用,避免可能造成的重名,定义为私有属性 + newDom.setAttribute('data-zr-dom-id', id); + return newDom; +} + +/** + * @alias module:zrender/Layer + * @constructor + * @extends module:zrender/mixin/Transformable + * @param {string} id + * @param {module:zrender/Painter} painter + * @param {number} [dpr] + */ +var Layer = function(id, painter, dpr) { + var dom; + dpr = dpr || devicePixelRatio; + if (typeof id === 'string') { + dom = createDom(id, painter, dpr); + } + // Not using isDom because in node it will return false + else if (isObject(id)) { + dom = id; + id = dom.id; + } + this.id = id; + this.dom = dom; + + var domStyle = dom.style; + if (domStyle) { // Not in node + dom.onselectstart = returnFalse; // 避免页面选中的尴尬 + domStyle['-webkit-user-select'] = 'none'; + domStyle['user-select'] = 'none'; + domStyle['-webkit-touch-callout'] = 'none'; + domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)'; + domStyle['padding'] = 0; + domStyle['margin'] = 0; + domStyle['border-width'] = 0; + } + + this.domBack = null; + this.ctxBack = null; + + this.painter = painter; + + this.config = null; + + // Configs + /** + * 每次清空画布的颜色 + * @type {string} + * @default 0 + */ + this.clearColor = 0; + /** + * 是否开启动态模糊 + * @type {boolean} + * @default false + */ + this.motionBlur = false; + /** + * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显 + * @type {number} + * @default 0.7 + */ + this.lastFrameAlpha = 0.7; + + /** + * Layer dpr + * @type {number} + */ + this.dpr = dpr; +}; + +Layer.prototype = { + + constructor: Layer, + + elCount: 0, + + __dirty: true, + + initContext: function () { + this.ctx = this.dom.getContext('2d'); + this.ctx.__currentValues = {}; + this.ctx.dpr = this.dpr; + }, + + createBackBuffer: function () { + var dpr = this.dpr; + + this.domBack = createDom('back-' + this.id, this.painter, dpr); + this.ctxBack = this.domBack.getContext('2d'); + this.ctxBack.__currentValues = {}; + + if (dpr != 1) { + this.ctxBack.scale(dpr, dpr); + } + }, + + /** + * @param {number} width + * @param {number} height + */ + resize: function (width, height) { + var dpr = this.dpr; + + var dom = this.dom; + var domStyle = dom.style; + var domBack = this.domBack; + + domStyle.width = width + 'px'; + domStyle.height = height + 'px'; + + dom.width = width * dpr; + dom.height = height * dpr; + + if (domBack) { + domBack.width = width * dpr; + domBack.height = height * dpr; + + if (dpr != 1) { + this.ctxBack.scale(dpr, dpr); + } + } + }, + + /** + * 清空该层画布 + * @param {boolean} clearAll Clear all with out motion blur + */ + clear: function (clearAll) { + var dom = this.dom; + var ctx = this.ctx; + var width = dom.width; + var height = dom.height; + + var clearColor = this.clearColor; + var haveMotionBLur = this.motionBlur && !clearAll; + var lastFrameAlpha = this.lastFrameAlpha; + + var dpr = this.dpr; + + if (haveMotionBLur) { + if (!this.domBack) { + this.createBackBuffer(); + } + + this.ctxBack.globalCompositeOperation = 'copy'; + this.ctxBack.drawImage( + dom, 0, 0, + width / dpr, + height / dpr + ); + } + + ctx.clearRect(0, 0, width, height); + if (clearColor) { + var clearColorGradientOrPattern; + // Gradient + if (clearColor.colorStops) { + // Cache canvas gradient + clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, { + x: 0, + y: 0, + width: width, + height: height + }); + + clearColor.__canvasGradient = clearColorGradientOrPattern; + } + // Pattern + else if (clearColor.image) { + clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx); + } + ctx.save(); + ctx.fillStyle = clearColorGradientOrPattern || clearColor; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + } + + if (haveMotionBLur) { + var domBack = this.domBack; + ctx.save(); + ctx.globalAlpha = lastFrameAlpha; + ctx.drawImage(domBack, 0, 0, width, height); + ctx.restore(); + } + } +}; + +var requestAnimationFrame = ( + typeof window !== 'undefined' + && ( + (window.requestAnimationFrame && window.requestAnimationFrame.bind(window)) + // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809 + || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window)) + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + ) +) || function (func) { + setTimeout(func, 16); +}; + +var globalImageCache = new LRU(50); + +/** + * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc + * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image + */ +function findExistImage(newImageOrSrc) { + if (typeof newImageOrSrc === 'string') { + var cachedImgObj = globalImageCache.get(newImageOrSrc); + return cachedImgObj && cachedImgObj.image; + } + else { + return newImageOrSrc; + } +} + +/** + * Caution: User should cache loaded images, but not just count on LRU. + * Consider if required images more than LRU size, will dead loop occur? + * + * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc + * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image. + * @param {module:zrender/Element} [hostEl] For calling `dirty`. + * @param {Function} [cb] params: (image, cbPayload) + * @param {Object} [cbPayload] Payload on cb calling. + * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image + */ +function createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) { + if (!newImageOrSrc) { + return image; + } + else if (typeof newImageOrSrc === 'string') { + + // Image should not be loaded repeatly. + if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) { + return image; + } + + // Only when there is no existent image or existent image src + // is different, this method is responsible for load. + var cachedImgObj = globalImageCache.get(newImageOrSrc); + + var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload}; + + if (cachedImgObj) { + image = cachedImgObj.image; + !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); + } + else { + !image && (image = new Image()); + image.onload = imageOnLoad; + + globalImageCache.put( + newImageOrSrc, + image.__cachedImgObj = { + image: image, + pending: [pendingWrap] + } + ); + + image.src = image.__zrImageSrc = newImageOrSrc; + } + + return image; + } + // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas + else { + return newImageOrSrc; + } +} + +function imageOnLoad() { + var cachedImgObj = this.__cachedImgObj; + this.onload = this.__cachedImgObj = null; + + for (var i = 0; i < cachedImgObj.pending.length; i++) { + var pendingWrap = cachedImgObj.pending[i]; + var cb = pendingWrap.cb; + cb && cb(this, pendingWrap.cbPayload); + pendingWrap.hostEl.dirty(); + } + cachedImgObj.pending.length = 0; +} + +function isImageReady(image) { + return image && image.width && image.height; +} + +var textWidthCache = {}; +var textWidthCacheCounter = 0; + +var TEXT_CACHE_MAX = 5000; +var STYLE_REG = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g; + +var DEFAULT_FONT = '12px sans-serif'; + +/** + * @public + * @param {string} text + * @param {string} font + * @return {number} width + */ +function getWidth(text, font) { + font = font || DEFAULT_FONT; + var key = text + ':' + font; + if (textWidthCache[key]) { + return textWidthCache[key]; + } + + var textLines = (text + '').split('\n'); + var width = 0; + + for (var i = 0, l = textLines.length; i < l; i++) { + // textContain.measureText may be overrided in SVG or VML + width = Math.max(measureText(textLines[i], font).width, width); + } + + if (textWidthCacheCounter > TEXT_CACHE_MAX) { + textWidthCacheCounter = 0; + textWidthCache = {}; + } + textWidthCacheCounter++; + textWidthCache[key] = width; + + return width; +} + +/** + * @public + * @param {string} text + * @param {string} font + * @param {string} [textAlign='left'] + * @param {string} [textVerticalAlign='top'] + * @param {Array.} [textPadding] + * @param {Object} [rich] + * @param {Object} [truncate] + * @return {Object} {x, y, width, height, lineHeight} + */ +function getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) { + return rich + ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) + : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate); +} + +function getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate) { + var contentBlock = parsePlainText(text, font, textPadding, truncate); + var outerWidth = getWidth(text, font); + if (textPadding) { + outerWidth += textPadding[1] + textPadding[3]; + } + var outerHeight = contentBlock.outerHeight; + + var x = adjustTextX(0, outerWidth, textAlign); + var y = adjustTextY(0, outerHeight, textVerticalAlign); + + var rect = new BoundingRect(x, y, outerWidth, outerHeight); + rect.lineHeight = contentBlock.lineHeight; + + return rect; +} + +function getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) { + var contentBlock = parseRichText(text, { + rich: rich, + truncate: truncate, + font: font, + textAlign: textAlign, + textPadding: textPadding + }); + var outerWidth = contentBlock.outerWidth; + var outerHeight = contentBlock.outerHeight; + + var x = adjustTextX(0, outerWidth, textAlign); + var y = adjustTextY(0, outerHeight, textVerticalAlign); + + return new BoundingRect(x, y, outerWidth, outerHeight); +} + +/** + * @public + * @param {number} x + * @param {number} width + * @param {string} [textAlign='left'] + * @return {number} Adjusted x. + */ +function adjustTextX(x, width, textAlign) { + // FIXME Right to left language + if (textAlign === 'right') { + x -= width; + } + else if (textAlign === 'center') { + x -= width / 2; + } + return x; +} + +/** + * @public + * @param {number} y + * @param {number} height + * @param {string} [textVerticalAlign='top'] + * @return {number} Adjusted y. + */ +function adjustTextY(y, height, textVerticalAlign) { + if (textVerticalAlign === 'middle') { + y -= height / 2; + } + else if (textVerticalAlign === 'bottom') { + y -= height; + } + return y; +} + +/** + * @public + * @param {stirng} textPosition + * @param {Object} rect {x, y, width, height} + * @param {number} distance + * @return {Object} {x, y, textAlign, textVerticalAlign} + */ +function adjustTextPositionOnRect(textPosition, rect, distance) { + + var x = rect.x; + var y = rect.y; + + var height = rect.height; + var width = rect.width; + var halfHeight = height / 2; + + var textAlign = 'left'; + var textVerticalAlign = 'top'; + + switch (textPosition) { + case 'left': + x -= distance; + y += halfHeight; + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + case 'right': + x += distance + width; + y += halfHeight; + textVerticalAlign = 'middle'; + break; + case 'top': + x += width / 2; + y -= distance; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + case 'bottom': + x += width / 2; + y += height + distance; + textAlign = 'center'; + break; + case 'inside': + x += width / 2; + y += halfHeight; + textAlign = 'center'; + textVerticalAlign = 'middle'; + break; + case 'insideLeft': + x += distance; + y += halfHeight; + textVerticalAlign = 'middle'; + break; + case 'insideRight': + x += width - distance; + y += halfHeight; + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + case 'insideTop': + x += width / 2; + y += distance; + textAlign = 'center'; + break; + case 'insideBottom': + x += width / 2; + y += height - distance; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + case 'insideTopLeft': + x += distance; + y += distance; + break; + case 'insideTopRight': + x += width - distance; + y += distance; + textAlign = 'right'; + break; + case 'insideBottomLeft': + x += distance; + y += height - distance; + textVerticalAlign = 'bottom'; + break; + case 'insideBottomRight': + x += width - distance; + y += height - distance; + textAlign = 'right'; + textVerticalAlign = 'bottom'; + break; + } + + return { + x: x, + y: y, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +} + +/** + * Show ellipsis if overflow. + * + * @public + * @param {string} text + * @param {string} containerWidth + * @param {string} font + * @param {number} [ellipsis='...'] + * @param {Object} [options] + * @param {number} [options.maxIterations=3] + * @param {number} [options.minChar=0] If truncate result are less + * then minChar, ellipsis will not show, which is + * better for user hint in some cases. + * @param {number} [options.placeholder=''] When all truncated, use the placeholder. + * @return {string} + */ +function truncateText(text, containerWidth, font, ellipsis, options) { + if (!containerWidth) { + return ''; + } + + var textLines = (text + '').split('\n'); + options = prepareTruncateOptions(containerWidth, font, ellipsis, options); + + // FIXME + // It is not appropriate that every line has '...' when truncate multiple lines. + for (var i = 0, len = textLines.length; i < len; i++) { + textLines[i] = truncateSingleLine(textLines[i], options); + } + + return textLines.join('\n'); +} + +function prepareTruncateOptions(containerWidth, font, ellipsis, options) { + options = extend({}, options); + + options.font = font; + var ellipsis = retrieve2(ellipsis, '...'); + options.maxIterations = retrieve2(options.maxIterations, 2); + var minChar = options.minChar = retrieve2(options.minChar, 0); + // FIXME + // Other languages? + options.cnCharWidth = getWidth('国', font); + // FIXME + // Consider proportional font? + var ascCharWidth = options.ascCharWidth = getWidth('a', font); + options.placeholder = retrieve2(options.placeholder, ''); + + // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'. + // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'. + var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap. + for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) { + contentWidth -= ascCharWidth; + } + + var ellipsisWidth = getWidth(ellipsis); + if (ellipsisWidth > contentWidth) { + ellipsis = ''; + ellipsisWidth = 0; + } + + contentWidth = containerWidth - ellipsisWidth; + + options.ellipsis = ellipsis; + options.ellipsisWidth = ellipsisWidth; + options.contentWidth = contentWidth; + options.containerWidth = containerWidth; + + return options; +} + +function truncateSingleLine(textLine, options) { + var containerWidth = options.containerWidth; + var font = options.font; + var contentWidth = options.contentWidth; + + if (!containerWidth) { + return ''; + } + + var lineWidth = getWidth(textLine, font); + + if (lineWidth <= containerWidth) { + return textLine; + } + + for (var j = 0;; j++) { + if (lineWidth <= contentWidth || j >= options.maxIterations) { + textLine += options.ellipsis; + break; + } + + var subLength = j === 0 + ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) + : lineWidth > 0 + ? Math.floor(textLine.length * contentWidth / lineWidth) + : 0; + + textLine = textLine.substr(0, subLength); + lineWidth = getWidth(textLine, font); + } + + if (textLine === '') { + textLine = options.placeholder; + } + + return textLine; +} + +function estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) { + var width = 0; + var i = 0; + for (var len = text.length; i < len && width < contentWidth; i++) { + var charCode = text.charCodeAt(i); + width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth; + } + return i; +} + +/** + * @public + * @param {string} font + * @return {number} line height + */ +function getLineHeight(font) { + // FIXME A rough approach. + return getWidth('国', font); +} + +/** + * @public + * @param {string} text + * @param {string} font + * @return {Object} width + */ +var measureText = function (text, font) { + var ctx = getContext(); + ctx.font = font || DEFAULT_FONT; + return ctx.measureText(text); +}; + +/** + * @public + * @param {string} text + * @param {string} font + * @param {Object} [truncate] + * @return {Object} block: {lineHeight, lines, height, outerHeight} + * Notice: for performance, do not calculate outerWidth util needed. + */ +function parsePlainText(text, font, padding, truncate) { + text != null && (text += ''); + + var lineHeight = getLineHeight(font); + var lines = text ? text.split('\n') : []; + var height = lines.length * lineHeight; + var outerHeight = height; + + if (padding) { + outerHeight += padding[0] + padding[2]; + } + + if (text && truncate) { + var truncOuterHeight = truncate.outerHeight; + var truncOuterWidth = truncate.outerWidth; + if (truncOuterHeight != null && outerHeight > truncOuterHeight) { + text = ''; + lines = []; + } + else if (truncOuterWidth != null) { + var options = prepareTruncateOptions( + truncOuterWidth - (padding ? padding[1] + padding[3] : 0), + font, + truncate.ellipsis, + {minChar: truncate.minChar, placeholder: truncate.placeholder} + ); + + // FIXME + // It is not appropriate that every line has '...' when truncate multiple lines. + for (var i = 0, len = lines.length; i < len; i++) { + lines[i] = truncateSingleLine(lines[i], options); + } + } + } + + return { + lines: lines, + height: height, + outerHeight: outerHeight, + lineHeight: lineHeight + }; +} + +/** + * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx' + * Also consider 'bbbb{a|xxx\nzzz}xxxx\naaaa'. + * + * @public + * @param {string} text + * @param {Object} style + * @return {Object} block + * { + * width, + * height, + * lines: [{ + * lineHeight, + * width, + * tokens: [[{ + * styleName, + * text, + * width, // include textPadding + * height, // include textPadding + * textWidth, // pure text width + * textHeight, // pure text height + * lineHeihgt, + * font, + * textAlign, + * textVerticalAlign + * }], [...], ...] + * }, ...] + * } + * If styleName is undefined, it is plain text. + */ +function parseRichText(text, style) { + var contentBlock = {lines: [], width: 0, height: 0}; + + text != null && (text += ''); + if (!text) { + return contentBlock; + } + + var lastIndex = STYLE_REG.lastIndex = 0; + var result; + while ((result = STYLE_REG.exec(text)) != null) { + var matchedIndex = result.index; + if (matchedIndex > lastIndex) { + pushTokens(contentBlock, text.substring(lastIndex, matchedIndex)); + } + pushTokens(contentBlock, result[2], result[1]); + lastIndex = STYLE_REG.lastIndex; + } + + if (lastIndex < text.length) { + pushTokens(contentBlock, text.substring(lastIndex, text.length)); + } + + var lines = contentBlock.lines; + var contentHeight = 0; + var contentWidth = 0; + // For `textWidth: 100%` + var pendingList = []; + + var stlPadding = style.textPadding; + + var truncate = style.truncate; + var truncateWidth = truncate && truncate.outerWidth; + var truncateHeight = truncate && truncate.outerHeight; + if (stlPadding) { + truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]); + truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]); + } + + // Calculate layout info of tokens. + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var lineHeight = 0; + var lineWidth = 0; + + for (var j = 0; j < line.tokens.length; j++) { + var token = line.tokens[j]; + var tokenStyle = token.styleName && style.rich[token.styleName] || {}; + // textPadding should not inherit from style. + var textPadding = token.textPadding = tokenStyle.textPadding; + + // textFont has been asigned to font by `normalizeStyle`. + var font = token.font = tokenStyle.font || style.font; + + // textHeight can be used when textVerticalAlign is specified in token. + var tokenHeight = token.textHeight = retrieve2( + // textHeight should not be inherited, consider it can be specified + // as box height of the block. + tokenStyle.textHeight, getLineHeight(font) + ); + textPadding && (tokenHeight += textPadding[0] + textPadding[2]); + token.height = tokenHeight; + token.lineHeight = retrieve3( + tokenStyle.textLineHeight, style.textLineHeight, tokenHeight + ); + + token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign; + token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle'; + + if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) { + return {lines: [], width: 0, height: 0}; + } + + token.textWidth = getWidth(token.text, font); + var tokenWidth = tokenStyle.textWidth; + var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; + + // Percent width, can be `100%`, can be used in drawing separate + // line when box width is needed to be auto. + if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') { + token.percentWidth = tokenWidth; + pendingList.push(token); + tokenWidth = 0; + // Do not truncate in this case, because there is no user case + // and it is too complicated. + } + else { + if (tokenWidthNotSpecified) { + tokenWidth = token.textWidth; + + // FIXME: If image is not loaded and textWidth is not specified, calling + // `getBoundingRect()` will not get correct result. + var textBackgroundColor = tokenStyle.textBackgroundColor; + var bgImg = textBackgroundColor && textBackgroundColor.image; + + // Use cases: + // (1) If image is not loaded, it will be loaded at render phase and call + // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded + // image, and then the right size will be calculated here at the next tick. + // See `graphic/helper/text.js`. + // (2) If image loaded, and `textBackgroundColor.image` is image src string, + // use `imageHelper.findExistImage` to find cached image. + // `imageHelper.findExistImage` will always be called here before + // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText` + // which ensures that image will not be rendered before correct size calcualted. + if (bgImg) { + bgImg = findExistImage(bgImg); + if (isImageReady(bgImg)) { + tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height); + } + } + } + + var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0; + tokenWidth += paddingW; + + var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null; + + if (remianTruncWidth != null && remianTruncWidth < tokenWidth) { + if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) { + token.text = ''; + token.textWidth = tokenWidth = 0; + } + else { + token.text = truncateText( + token.text, remianTruncWidth - paddingW, font, truncate.ellipsis, + {minChar: truncate.minChar} + ); + token.textWidth = getWidth(token.text, font); + tokenWidth = token.textWidth + paddingW; + } + } + } + + lineWidth += (token.width = tokenWidth); + tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight)); + } + + line.width = lineWidth; + line.lineHeight = lineHeight; + contentHeight += lineHeight; + contentWidth = Math.max(contentWidth, lineWidth); + } + + contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth); + contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight); + + if (stlPadding) { + contentBlock.outerWidth += stlPadding[1] + stlPadding[3]; + contentBlock.outerHeight += stlPadding[0] + stlPadding[2]; + } + + for (var i = 0; i < pendingList.length; i++) { + var token = pendingList[i]; + var percentWidth = token.percentWidth; + // Should not base on outerWidth, because token can not be placed out of padding. + token.width = parseInt(percentWidth, 10) / 100 * contentWidth; + } + + return contentBlock; +} + +function pushTokens(block, str, styleName) { + var isEmptyStr = str === ''; + var strs = str.split('\n'); + var lines = block.lines; + + for (var i = 0; i < strs.length; i++) { + var text = strs[i]; + var token = { + styleName: styleName, + text: text, + isLineHolder: !text && !isEmptyStr + }; + + // The first token should be appended to the last line. + if (!i) { + var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).tokens; + + // Consider cases: + // (1) ''.split('\n') => ['', '\n', ''], the '' at the first item + // (which is a placeholder) should be replaced by new token. + // (2) A image backage, where token likes {a|}. + // (3) A redundant '' will affect textAlign in line. + // (4) tokens with the same tplName should not be merged, because + // they should be displayed in different box (with border and padding). + var tokensLen = tokens.length; + (tokensLen === 1 && tokens[0].isLineHolder) + ? (tokens[0] = token) + // Consider text is '', only insert when it is the "lineHolder" or + // "emptyStr". Otherwise a redundant '' will affect textAlign in line. + : ((text || !tokensLen || isEmptyStr) && tokens.push(token)); + } + // Other tokens always start a new line. + else { + // If there is '', insert it as a placeholder. + lines.push({tokens: [token]}); + } + } +} + +function makeFont(style) { + // FIXME in node-canvas fontWeight is before fontStyle + // Use `fontSize` `fontFamily` to check whether font properties are defined. + return (style.fontSize || style.fontFamily) && [ + style.fontStyle, + style.fontWeight, + (style.fontSize || 12) + 'px', + // If font properties are defined, `fontFamily` should not be ignored. + style.fontFamily || 'sans-serif' + ].join(' ') || style.textFont || style.font; +} + +var $inject$2 = { + measureText: function (f) { + measureText = f; + } +}; + +function buildPath(ctx, shape) { + var x = shape.x; + var y = shape.y; + var width = shape.width; + var height = shape.height; + var r = shape.r; + var r1; + var r2; + var r3; + var r4; + + // Convert width and height to positive for better borderRadius + if (width < 0) { + x = x + width; + width = -width; + } + if (height < 0) { + y = y + height; + height = -height; + } + + if (typeof r === 'number') { + r1 = r2 = r3 = r4 = r; + } + else if (r instanceof Array) { + if (r.length === 1) { + r1 = r2 = r3 = r4 = r[0]; + } + else if (r.length === 2) { + r1 = r3 = r[0]; + r2 = r4 = r[1]; + } + else if (r.length === 3) { + r1 = r[0]; + r2 = r4 = r[1]; + r3 = r[2]; + } + else { + r1 = r[0]; + r2 = r[1]; + r3 = r[2]; + r4 = r[3]; + } + } + else { + r1 = r2 = r3 = r4 = 0; + } + + var total; + if (r1 + r2 > width) { + total = r1 + r2; + r1 *= width / total; + r2 *= width / total; + } + if (r3 + r4 > width) { + total = r3 + r4; + r3 *= width / total; + r4 *= width / total; + } + if (r2 + r3 > height) { + total = r2 + r3; + r2 *= height / total; + r3 *= height / total; + } + if (r1 + r4 > height) { + total = r1 + r4; + r1 *= height / total; + r4 *= height / total; + } + ctx.moveTo(x + r1, y); + ctx.lineTo(x + width - r2, y); + r2 !== 0 && ctx.quadraticCurveTo( + x + width, y, x + width, y + r2 + ); + ctx.lineTo(x + width, y + height - r3); + r3 !== 0 && ctx.quadraticCurveTo( + x + width, y + height, x + width - r3, y + height + ); + ctx.lineTo(x + r4, y + height); + r4 !== 0 && ctx.quadraticCurveTo( + x, y + height, x, y + height - r4 + ); + ctx.lineTo(x, y + r1); + r1 !== 0 && ctx.quadraticCurveTo(x, y, x + r1, y); +} + +// TODO: Have not support 'start', 'end' yet. +var VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1}; +var VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1}; + +/** + * @param {module:zrender/graphic/Style} style + * @return {module:zrender/graphic/Style} The input style. + */ +function normalizeTextStyle(style) { + normalizeStyle(style); + each$1(style.rich, normalizeStyle); + return style; +} + +function normalizeStyle(style) { + if (style) { + + style.font = makeFont(style); + + var textAlign = style.textAlign; + textAlign === 'middle' && (textAlign = 'center'); + style.textAlign = ( + textAlign == null || VALID_TEXT_ALIGN[textAlign] + ) ? textAlign : 'left'; + + // Compatible with textBaseline. + var textVerticalAlign = style.textVerticalAlign || style.textBaseline; + textVerticalAlign === 'center' && (textVerticalAlign = 'middle'); + style.textVerticalAlign = ( + textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign] + ) ? textVerticalAlign : 'top'; + + var textPadding = style.textPadding; + if (textPadding) { + style.textPadding = normalizeCssArray(style.textPadding); + } + } +} + +/** + * @param {CanvasRenderingContext2D} ctx + * @param {string} text + * @param {module:zrender/graphic/Style} style + * @param {Object|boolean} [rect] {x, y, width, height} + * If set false, rect text is not used. + */ +function renderText(hostEl, ctx, text, style, rect) { + style.rich + ? renderRichText(hostEl, ctx, text, style, rect) + : renderPlainText(hostEl, ctx, text, style, rect); +} + +function renderPlainText(hostEl, ctx, text, style, rect) { + var font = setCtx(ctx, 'font', style.font || DEFAULT_FONT); + + var textPadding = style.textPadding; + + var contentBlock = hostEl.__textCotentBlock; + if (!contentBlock || hostEl.__dirty) { + contentBlock = hostEl.__textCotentBlock = parsePlainText( + text, font, textPadding, style.truncate + ); + } + + var outerHeight = contentBlock.outerHeight; + + var textLines = contentBlock.lines; + var lineHeight = contentBlock.lineHeight; + + var boxPos = getBoxPosition(outerHeight, style, rect); + var baseX = boxPos.baseX; + var baseY = boxPos.baseY; + var textAlign = boxPos.textAlign; + var textVerticalAlign = boxPos.textVerticalAlign; + + // Origin of textRotation should be the base point of text drawing. + applyTextRotation(ctx, style, rect, baseX, baseY); + + var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); + var textX = baseX; + var textY = boxY; + + var needDrawBg = needDrawBackground(style); + if (needDrawBg || textPadding) { + // Consider performance, do not call getTextWidth util necessary. + var textWidth = getWidth(text, font); + var outerWidth = textWidth; + textPadding && (outerWidth += textPadding[1] + textPadding[3]); + var boxX = adjustTextX(baseX, outerWidth, textAlign); + + needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight); + + if (textPadding) { + textX = getTextXForPadding(baseX, textAlign, textPadding); + textY += textPadding[0]; + } + } + + setCtx(ctx, 'textAlign', textAlign || 'left'); + // Force baseline to be "middle". Otherwise, if using "top", the + // text will offset downward a little bit in font "Microsoft YaHei". + setCtx(ctx, 'textBaseline', 'middle'); + + // Always set shadowBlur and shadowOffset to avoid leak from displayable. + setCtx(ctx, 'shadowBlur', style.textShadowBlur || 0); + setCtx(ctx, 'shadowColor', style.textShadowColor || 'transparent'); + setCtx(ctx, 'shadowOffsetX', style.textShadowOffsetX || 0); + setCtx(ctx, 'shadowOffsetY', style.textShadowOffsetY || 0); + + // `textBaseline` is set as 'middle'. + textY += lineHeight / 2; + + var textStrokeWidth = style.textStrokeWidth; + var textStroke = getStroke(style.textStroke, textStrokeWidth); + var textFill = getFill(style.textFill); + + if (textStroke) { + setCtx(ctx, 'lineWidth', textStrokeWidth); + setCtx(ctx, 'strokeStyle', textStroke); + } + if (textFill) { + setCtx(ctx, 'fillStyle', textFill); + } + + for (var i = 0; i < textLines.length; i++) { + // Fill after stroke so the outline will not cover the main part. + textStroke && ctx.strokeText(textLines[i], textX, textY); + textFill && ctx.fillText(textLines[i], textX, textY); + textY += lineHeight; + } +} + +function renderRichText(hostEl, ctx, text, style, rect) { + var contentBlock = hostEl.__textCotentBlock; + + if (!contentBlock || hostEl.__dirty) { + contentBlock = hostEl.__textCotentBlock = parseRichText(text, style); + } + + drawRichText(hostEl, ctx, contentBlock, style, rect); +} + +function drawRichText(hostEl, ctx, contentBlock, style, rect) { + var contentWidth = contentBlock.width; + var outerWidth = contentBlock.outerWidth; + var outerHeight = contentBlock.outerHeight; + var textPadding = style.textPadding; + + var boxPos = getBoxPosition(outerHeight, style, rect); + var baseX = boxPos.baseX; + var baseY = boxPos.baseY; + var textAlign = boxPos.textAlign; + var textVerticalAlign = boxPos.textVerticalAlign; + + // Origin of textRotation should be the base point of text drawing. + applyTextRotation(ctx, style, rect, baseX, baseY); + + var boxX = adjustTextX(baseX, outerWidth, textAlign); + var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign); + var xLeft = boxX; + var lineTop = boxY; + if (textPadding) { + xLeft += textPadding[3]; + lineTop += textPadding[0]; + } + var xRight = xLeft + contentWidth; + + needDrawBackground(style) && drawBackground( + hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight + ); + + for (var i = 0; i < contentBlock.lines.length; i++) { + var line = contentBlock.lines[i]; + var tokens = line.tokens; + var tokenCount = tokens.length; + var lineHeight = line.lineHeight; + var usedWidth = line.width; + + var leftIndex = 0; + var lineXLeft = xLeft; + var lineXRight = xRight; + var rightIndex = tokenCount - 1; + var token; + + while ( + leftIndex < tokenCount + && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left') + ) { + placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left'); + usedWidth -= token.width; + lineXLeft += token.width; + leftIndex++; + } + + while ( + rightIndex >= 0 + && (token = tokens[rightIndex], token.textAlign === 'right') + ) { + placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right'); + usedWidth -= token.width; + lineXRight -= token.width; + rightIndex--; + } + + // The other tokens are placed as textAlign 'center' if there is enough space. + lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2; + while (leftIndex <= rightIndex) { + token = tokens[leftIndex]; + // Consider width specified by user, use 'center' rather than 'left'. + placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center'); + lineXLeft += token.width; + leftIndex++; + } + + lineTop += lineHeight; + } +} + +function applyTextRotation(ctx, style, rect, x, y) { + // textRotation only apply in RectText. + if (rect && style.textRotation) { + var origin = style.textOrigin; + if (origin === 'center') { + x = rect.width / 2 + rect.x; + y = rect.height / 2 + rect.y; + } + else if (origin) { + x = origin[0] + rect.x; + y = origin[1] + rect.y; + } + + ctx.translate(x, y); + // Positive: anticlockwise + ctx.rotate(-style.textRotation); + ctx.translate(-x, -y); + } +} + +function placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) { + var tokenStyle = style.rich[token.styleName] || {}; + + // 'ctx.textBaseline' is always set as 'middle', for sake of + // the bias of "Microsoft YaHei". + var textVerticalAlign = token.textVerticalAlign; + var y = lineTop + lineHeight / 2; + if (textVerticalAlign === 'top') { + y = lineTop + token.height / 2; + } + else if (textVerticalAlign === 'bottom') { + y = lineTop + lineHeight - token.height / 2; + } + + !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground( + hostEl, + ctx, + tokenStyle, + textAlign === 'right' + ? x - token.width + : textAlign === 'center' + ? x - token.width / 2 + : x, + y - token.height / 2, + token.width, + token.height + ); + + var textPadding = token.textPadding; + if (textPadding) { + x = getTextXForPadding(x, textAlign, textPadding); + y -= token.height / 2 - textPadding[2] - token.textHeight / 2; + } + + setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0)); + setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent'); + setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0)); + setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0)); + + setCtx(ctx, 'textAlign', textAlign); + // Force baseline to be "middle". Otherwise, if using "top", the + // text will offset downward a little bit in font "Microsoft YaHei". + setCtx(ctx, 'textBaseline', 'middle'); + + setCtx(ctx, 'font', token.font || DEFAULT_FONT); + + var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth); + var textFill = getFill(tokenStyle.textFill || style.textFill); + var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth); + + // Fill after stroke so the outline will not cover the main part. + if (textStroke) { + setCtx(ctx, 'lineWidth', textStrokeWidth); + setCtx(ctx, 'strokeStyle', textStroke); + ctx.strokeText(token.text, x, y); + } + if (textFill) { + setCtx(ctx, 'fillStyle', textFill); + ctx.fillText(token.text, x, y); + } +} + +function needDrawBackground(style) { + return style.textBackgroundColor + || (style.textBorderWidth && style.textBorderColor); +} + +// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius} +// shape: {x, y, width, height} +function drawBackground(hostEl, ctx, style, x, y, width, height) { + var textBackgroundColor = style.textBackgroundColor; + var textBorderWidth = style.textBorderWidth; + var textBorderColor = style.textBorderColor; + var isPlainBg = isString(textBackgroundColor); + + setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0); + setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent'); + setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0); + setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0); + + if (isPlainBg || (textBorderWidth && textBorderColor)) { + ctx.beginPath(); + var textBorderRadius = style.textBorderRadius; + if (!textBorderRadius) { + ctx.rect(x, y, width, height); + } + else { + buildPath(ctx, { + x: x, y: y, width: width, height: height, r: textBorderRadius + }); + } + ctx.closePath(); + } + + if (isPlainBg) { + setCtx(ctx, 'fillStyle', textBackgroundColor); + ctx.fill(); + } + else if (isObject(textBackgroundColor)) { + var image = textBackgroundColor.image; + + image = createOrUpdateImage( + image, null, hostEl, onBgImageLoaded, textBackgroundColor + ); + if (image && isImageReady(image)) { + ctx.drawImage(image, x, y, width, height); + } + } + + if (textBorderWidth && textBorderColor) { + setCtx(ctx, 'lineWidth', textBorderWidth); + setCtx(ctx, 'strokeStyle', textBorderColor); + ctx.stroke(); + } +} + +function onBgImageLoaded(image, textBackgroundColor) { + // Replace image, so that `contain/text.js#parseRichText` + // will get correct result in next tick. + textBackgroundColor.image = image; +} + +function getBoxPosition(blockHeiht, style, rect) { + var baseX = style.x || 0; + var baseY = style.y || 0; + var textAlign = style.textAlign; + var textVerticalAlign = style.textVerticalAlign; + + // Text position represented by coord + if (rect) { + var textPosition = style.textPosition; + if (textPosition instanceof Array) { + // Percent + baseX = rect.x + parsePercent(textPosition[0], rect.width); + baseY = rect.y + parsePercent(textPosition[1], rect.height); + } + else { + var res = adjustTextPositionOnRect( + textPosition, rect, style.textDistance + ); + baseX = res.x; + baseY = res.y; + // Default align and baseline when has textPosition + textAlign = textAlign || res.textAlign; + textVerticalAlign = textVerticalAlign || res.textVerticalAlign; + } + + // textOffset is only support in RectText, otherwise + // we have to adjust boundingRect for textOffset. + var textOffset = style.textOffset; + if (textOffset) { + baseX += textOffset[0]; + baseY += textOffset[1]; + } + } + + return { + baseX: baseX, + baseY: baseY, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +} + +function setCtx(ctx, prop, value) { + // FIXME ??? performance try + // if (ctx.__currentValues[prop] !== value) { + // ctx[prop] = ctx.__currentValues[prop] = value; + ctx[prop] = value; + // } + return ctx[prop]; +} + +/** + * @param {string} [stroke] If specified, do not check style.textStroke. + * @param {string} [lineWidth] If specified, do not check style.textStroke. + * @param {number} style + */ +function getStroke(stroke, lineWidth) { + return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none') + ? null + // TODO pattern and gradient? + : (stroke.image || stroke.colorStops) + ? '#000' + : stroke; +} + +function getFill(fill) { + return (fill == null || fill === 'none') + ? null + // TODO pattern and gradient? + : (fill.image || fill.colorStops) + ? '#000' + : fill; +} + +function parsePercent(value, maxValue) { + if (typeof value === 'string') { + if (value.lastIndexOf('%') >= 0) { + return parseFloat(value) / 100 * maxValue; + } + return parseFloat(value); + } + return value; +} + +function getTextXForPadding(x, textAlign, textPadding) { + return textAlign === 'right' + ? (x - textPadding[1]) + : textAlign === 'center' + ? (x + textPadding[3] / 2 - textPadding[1] / 2) + : (x + textPadding[3]); +} + +/** + * @param {string} text + * @param {module:zrender/Style} style + * @return {boolean} + */ +function needDrawText(text, style) { + return text != null + && (text + || style.textBackgroundColor + || (style.textBorderWidth && style.textBorderColor) + || style.textPadding + ); +} + +/** + * Mixin for drawing text in a element bounding rect + * @module zrender/mixin/RectText + */ + +var tmpRect$1 = new BoundingRect(); + +var RectText = function () {}; + +RectText.prototype = { + + constructor: RectText, + + /** + * Draw text in a rect with specified position. + * @param {CanvasRenderingContext2D} ctx + * @param {Object} rect Displayable rect + */ + drawRectText: function (ctx, rect) { + var style = this.style; + + rect = style.textRect || rect; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + var text = style.text; + + // Convert to string + text != null && (text += ''); + + if (!needDrawText(text, style)) { + return; + } + + // FIXME + ctx.save(); + + // Transform rect to view space + var transform = this.transform; + if (!style.transformText) { + if (transform) { + tmpRect$1.copy(rect); + tmpRect$1.applyTransform(transform); + rect = tmpRect$1; + } + } + else { + this.setTransform(ctx); + } + + // transformText and textRotation can not be used at the same time. + renderText(this, ctx, text, style, rect); + + ctx.restore(); + } +}; + +/** + * 可绘制的图形基类 + * Base class of all displayable graphic objects + * @module zrender/graphic/Displayable + */ + + +/** + * @alias module:zrender/graphic/Displayable + * @extends module:zrender/Element + * @extends module:zrender/graphic/mixin/RectText + */ +function Displayable(opts) { + + opts = opts || {}; + + Element.call(this, opts); + + // Extend properties + for (var name in opts) { + if ( + opts.hasOwnProperty(name) && + name !== 'style' + ) { + this[name] = opts[name]; + } + } + + /** + * @type {module:zrender/graphic/Style} + */ + this.style = new Style(opts.style, this); + + this._rect = null; + // Shapes for cascade clipping. + this.__clipPaths = []; + + // FIXME Stateful must be mixined after style is setted + // Stateful.call(this, opts); +} + +Displayable.prototype = { + + constructor: Displayable, + + type: 'displayable', + + /** + * Displayable 是否为脏,Painter 中会根据该标记判断是否需要是否需要重新绘制 + * Dirty flag. From which painter will determine if this displayable object needs brush + * @name module:zrender/graphic/Displayable#__dirty + * @type {boolean} + */ + __dirty: true, + + /** + * 图形是否可见,为true时不绘制图形,但是仍能触发鼠标事件 + * If ignore drawing of the displayable object. Mouse event will still be triggered + * @name module:/zrender/graphic/Displayable#invisible + * @type {boolean} + * @default false + */ + invisible: false, + + /** + * @name module:/zrender/graphic/Displayable#z + * @type {number} + * @default 0 + */ + z: 0, + + /** + * @name module:/zrender/graphic/Displayable#z + * @type {number} + * @default 0 + */ + z2: 0, + + /** + * z层level,决定绘画在哪层canvas中 + * @name module:/zrender/graphic/Displayable#zlevel + * @type {number} + * @default 0 + */ + zlevel: 0, + + /** + * 是否可拖拽 + * @name module:/zrender/graphic/Displayable#draggable + * @type {boolean} + * @default false + */ + draggable: false, + + /** + * 是否正在拖拽 + * @name module:/zrender/graphic/Displayable#draggable + * @type {boolean} + * @default false + */ + dragging: false, + + /** + * 是否相应鼠标事件 + * @name module:/zrender/graphic/Displayable#silent + * @type {boolean} + * @default false + */ + silent: false, + + /** + * If enable culling + * @type {boolean} + * @default false + */ + culling: false, + + /** + * Mouse cursor when hovered + * @name module:/zrender/graphic/Displayable#cursor + * @type {string} + */ + cursor: 'pointer', + + /** + * If hover area is bounding rect + * @name module:/zrender/graphic/Displayable#rectHover + * @type {string} + */ + rectHover: false, + + /** + * Render the element progressively when the value >= 0, + * usefull for large data. + * @type {number} + */ + progressive: -1, + + beforeBrush: function (ctx) {}, + + afterBrush: function (ctx) {}, + + /** + * 图形绘制方法 + * @param {CanvasRenderingContext2D} ctx + */ + // Interface + brush: function (ctx, prevEl) {}, + + /** + * 获取最小包围盒 + * @return {module:zrender/core/BoundingRect} + */ + // Interface + getBoundingRect: function () {}, + + /** + * 判断坐标 x, y 是否在图形上 + * If displayable element contain coord x, y + * @param {number} x + * @param {number} y + * @return {boolean} + */ + contain: function (x, y) { + return this.rectContain(x, y); + }, + + /** + * @param {Function} cb + * @param {} context + */ + traverse: function (cb, context) { + cb.call(context, this); + }, + + /** + * 判断坐标 x, y 是否在图形的包围盒上 + * If bounding rect of element contain coord x, y + * @param {number} x + * @param {number} y + * @return {boolean} + */ + rectContain: function (x, y) { + var coord = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + return rect.contain(coord[0], coord[1]); + }, + + /** + * 标记图形元素为脏,并且在下一帧重绘 + * Mark displayable element dirty and refresh next frame + */ + dirty: function () { + this.__dirty = true; + + this._rect = null; + + this.__zr && this.__zr.refresh(); + }, + + /** + * 图形是否会触发事件 + * If displayable object binded any event + * @return {boolean} + */ + // TODO, 通过 bind 绑定的事件 + // isSilent: function () { + // return !( + // this.hoverable || this.draggable + // || this.onmousemove || this.onmouseover || this.onmouseout + // || this.onmousedown || this.onmouseup || this.onclick + // || this.ondragenter || this.ondragover || this.ondragleave + // || this.ondrop + // ); + // }, + /** + * Alias for animate('style') + * @param {boolean} loop + */ + animateStyle: function (loop) { + return this.animate('style', loop); + }, + + attrKV: function (key, value) { + if (key !== 'style') { + Element.prototype.attrKV.call(this, key, value); + } + else { + this.style.set(value); + } + }, + + /** + * @param {Object|string} key + * @param {*} value + */ + setStyle: function (key, value) { + this.style.set(key, value); + this.dirty(false); + return this; + }, + + /** + * Use given style object + * @param {Object} obj + */ + useStyle: function (obj) { + this.style = new Style(obj, this); + this.dirty(false); + return this; + } +}; + +inherits(Displayable, Element); + +mixin(Displayable, RectText); + +/** + * @alias zrender/graphic/Image + * @extends module:zrender/graphic/Displayable + * @constructor + * @param {Object} opts + */ +function ZImage(opts) { + Displayable.call(this, opts); +} + +ZImage.prototype = { + + constructor: ZImage, + + type: 'image', + + brush: function (ctx, prevEl) { + var style = this.style; + var src = style.image; + + // Must bind each time + style.bind(ctx, this, prevEl); + + var image = this._image = createOrUpdateImage( + src, + this._image, + this, + this.onload + ); + + if (!image || !isImageReady(image)) { + return; + } + + // 图片已经加载完成 + // if (image.nodeName.toUpperCase() == 'IMG') { + // if (!image.complete) { + // return; + // } + // } + // Else is canvas + + var x = style.x || 0; + var y = style.y || 0; + var width = style.width; + var height = style.height; + var aspect = image.width / image.height; + if (width == null && height != null) { + // Keep image/height ratio + width = height * aspect; + } + else if (height == null && width != null) { + height = width / aspect; + } + else if (width == null && height == null) { + width = image.width; + height = image.height; + } + + // 设置transform + this.setTransform(ctx); + + if (style.sWidth && style.sHeight) { + var sx = style.sx || 0; + var sy = style.sy || 0; + ctx.drawImage( + image, + sx, sy, style.sWidth, style.sHeight, + x, y, width, height + ); + } + else if (style.sx && style.sy) { + var sx = style.sx; + var sy = style.sy; + var sWidth = width - sx; + var sHeight = height - sy; + ctx.drawImage( + image, + sx, sy, sWidth, sHeight, + x, y, width, height + ); + } + else { + ctx.drawImage(image, x, y, width, height); + } + + this.restoreTransform(ctx); + + // Draw rect text + if (style.text != null) { + this.drawRectText(ctx, this.getBoundingRect()); + } + }, + + getBoundingRect: function () { + var style = this.style; + if (! this._rect) { + this._rect = new BoundingRect( + style.x || 0, style.y || 0, style.width || 0, style.height || 0 + ); + } + return this._rect; + } +}; + +inherits(ZImage, Displayable); + +/** + * Default canvas painter + * @module zrender/Painter + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + * errorrik (errorrik@gmail.com) + * pissang (https://www.github.com/pissang) + */ + +// PENDIGN +// Layer exceeds MAX_PROGRESSIVE_LAYER_NUMBER may have some problem when flush directly second time. +// +// Maximum progressive layer. When exceeding this number. All elements will be drawed in the last layer. +var MAX_PROGRESSIVE_LAYER_NUMBER = 5; + +function parseInt10(val) { + return parseInt(val, 10); +} + +function isLayerValid(layer) { + if (!layer) { + return false; + } + + if (layer.__builtin__) { + return true; + } + + if (typeof(layer.resize) !== 'function' + || typeof(layer.refresh) !== 'function' + ) { + return false; + } + + return true; +} + +function preProcessLayer(layer) { + layer.__unusedCount++; +} + +function postProcessLayer(layer) { + if (layer.__unusedCount == 1) { + layer.clear(); + } +} + +var tmpRect = new BoundingRect(0, 0, 0, 0); +var viewRect = new BoundingRect(0, 0, 0, 0); +function isDisplayableCulled(el, width, height) { + tmpRect.copy(el.getBoundingRect()); + if (el.transform) { + tmpRect.applyTransform(el.transform); + } + viewRect.width = width; + viewRect.height = height; + return !tmpRect.intersect(viewRect); +} + +function isClipPathChanged(clipPaths, prevClipPaths) { + if (clipPaths == prevClipPaths) { // Can both be null or undefined + return false; + } + + if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) { + return true; + } + for (var i = 0; i < clipPaths.length; i++) { + if (clipPaths[i] !== prevClipPaths[i]) { + return true; + } + } +} + +function doClip(clipPaths, ctx) { + for (var i = 0; i < clipPaths.length; i++) { + var clipPath = clipPaths[i]; + + clipPath.setTransform(ctx); + ctx.beginPath(); + clipPath.buildPath(ctx, clipPath.shape); + ctx.clip(); + // Transform back + clipPath.restoreTransform(ctx); + } +} + +function createRoot(width, height) { + var domRoot = document.createElement('div'); + + // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬 + domRoot.style.cssText = [ + 'position:relative', + 'overflow:hidden', + 'width:' + width + 'px', + 'height:' + height + 'px', + 'padding:0', + 'margin:0', + 'border-width:0' + ].join(';') + ';'; + + return domRoot; +} + +/** + * @alias module:zrender/Painter + * @constructor + * @param {HTMLElement} root 绘图容器 + * @param {module:zrender/Storage} storage + * @param {Object} opts + */ +var Painter = function (root, storage, opts) { + + this.type = 'canvas'; + + // In node environment using node-canvas + var singleCanvas = !root.nodeName // In node ? + || root.nodeName.toUpperCase() === 'CANVAS'; + + this._opts = opts = extend({}, opts || {}); + + /** + * @type {number} + */ + this.dpr = opts.devicePixelRatio || devicePixelRatio; + /** + * @type {boolean} + * @private + */ + this._singleCanvas = singleCanvas; + /** + * 绘图容器 + * @type {HTMLElement} + */ + this.root = root; + + var rootStyle = root.style; + + if (rootStyle) { + rootStyle['-webkit-tap-highlight-color'] = 'transparent'; + rootStyle['-webkit-user-select'] = + rootStyle['user-select'] = + rootStyle['-webkit-touch-callout'] = 'none'; + + root.innerHTML = ''; + } + + /** + * @type {module:zrender/Storage} + */ + this.storage = storage; + + /** + * @type {Array.} + * @private + */ + var zlevelList = this._zlevelList = []; + + /** + * @type {Object.} + * @private + */ + var layers = this._layers = {}; + + /** + * @type {Object.} + * @type {private} + */ + this._layerConfig = {}; + + if (!singleCanvas) { + this._width = this._getSize(0); + this._height = this._getSize(1); + + var domRoot = this._domRoot = createRoot( + this._width, this._height + ); + root.appendChild(domRoot); + } + else { + if (opts.width != null) { + root.width = opts.width; + } + if (opts.height != null) { + root.height = opts.height; + } + // Use canvas width and height directly + var width = root.width; + var height = root.height; + this._width = width; + this._height = height; + + // Create layer if only one given canvas + // Device pixel ratio is fixed to 1 because given canvas has its specified width and height + var mainLayer = new Layer(root, this, 1); + mainLayer.initContext(); + // FIXME Use canvas width and height + // mainLayer.resize(width, height); + layers[0] = mainLayer; + zlevelList.push(0); + + this._domRoot = root; + } + + // Layers for progressive rendering + this._progressiveLayers = []; + + /** + * @type {module:zrender/Layer} + * @private + */ + this._hoverlayer; + + this._hoverElements = []; +}; + +Painter.prototype = { + + constructor: Painter, + + getType: function () { + return 'canvas'; + }, + + /** + * If painter use a single canvas + * @return {boolean} + */ + isSingleCanvas: function () { + return this._singleCanvas; + }, + /** + * @return {HTMLDivElement} + */ + getViewportRoot: function () { + return this._domRoot; + }, + + getViewportRootOffset: function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }, + + /** + * 刷新 + * @param {boolean} [paintAll=false] 强制绘制所有displayable + */ + refresh: function (paintAll) { + + var list = this.storage.getDisplayList(true); + + var zlevelList = this._zlevelList; + + this._paintList(list, paintAll); + + // Paint custum layers + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + var layer = this._layers[z]; + if (!layer.__builtin__ && layer.refresh) { + layer.refresh(); + } + } + + this.refreshHover(); + + if (this._progressiveLayers.length) { + this._startProgessive(); + } + + return this; + }, + + addHover: function (el, hoverStyle) { + if (el.__hoverMir) { + return; + } + var elMirror = new el.constructor({ + style: el.style, + shape: el.shape + }); + elMirror.__from = el; + el.__hoverMir = elMirror; + elMirror.setStyle(hoverStyle); + this._hoverElements.push(elMirror); + }, + + removeHover: function (el) { + var elMirror = el.__hoverMir; + var hoverElements = this._hoverElements; + var idx = indexOf(hoverElements, elMirror); + if (idx >= 0) { + hoverElements.splice(idx, 1); + } + el.__hoverMir = null; + }, + + clearHover: function (el) { + var hoverElements = this._hoverElements; + for (var i = 0; i < hoverElements.length; i++) { + var from = hoverElements[i].__from; + if (from) { + from.__hoverMir = null; + } + } + hoverElements.length = 0; + }, + + refreshHover: function () { + var hoverElements = this._hoverElements; + var len = hoverElements.length; + var hoverLayer = this._hoverlayer; + hoverLayer && hoverLayer.clear(); + + if (!len) { + return; + } + sort(hoverElements, this.storage.displayableSortFunc); + + // Use a extream large zlevel + // FIXME? + if (!hoverLayer) { + hoverLayer = this._hoverlayer = this.getLayer(1e5); + } + + var scope = {}; + hoverLayer.ctx.save(); + for (var i = 0; i < len;) { + var el = hoverElements[i]; + var originalEl = el.__from; + // Original el is removed + // PENDING + if (!(originalEl && originalEl.__zr)) { + hoverElements.splice(i, 1); + originalEl.__hoverMir = null; + len--; + continue; + } + i++; + + // Use transform + // FIXME style and shape ? + if (!originalEl.invisible) { + el.transform = originalEl.transform; + el.invTransform = originalEl.invTransform; + el.__clipPaths = originalEl.__clipPaths; + // el. + this._doPaintEl(el, hoverLayer, true, scope); + } + } + hoverLayer.ctx.restore(); + }, + + _startProgessive: function () { + var self = this; + + if (!self._furtherProgressive) { + return; + } + + // Use a token to stop progress steps triggered by + // previous zr.refresh calling. + var token = self._progressiveToken = +new Date(); + + self._progress++; + requestAnimationFrame(step); + + function step() { + // In case refreshed or disposed + if (token === self._progressiveToken && self.storage) { + + self._doPaintList(self.storage.getDisplayList()); + + if (self._furtherProgressive) { + self._progress++; + requestAnimationFrame(step); + } + else { + self._progressiveToken = -1; + } + } + } + }, + + _clearProgressive: function () { + this._progressiveToken = -1; + this._progress = 0; + each$1(this._progressiveLayers, function (layer) { + layer.__dirty && layer.clear(); + }); + }, + + _paintList: function (list, paintAll) { + + if (paintAll == null) { + paintAll = false; + } + + this._updateLayerStatus(list); + + this._clearProgressive(); + + this.eachBuiltinLayer(preProcessLayer); + + this._doPaintList(list, paintAll); + + this.eachBuiltinLayer(postProcessLayer); + }, + + _doPaintList: function (list, paintAll) { + var currentLayer; + var currentZLevel; + var ctx; + + // var invTransform = []; + var scope; + + var progressiveLayerIdx = 0; + var currentProgressiveLayer; + + var width = this._width; + var height = this._height; + var layerProgress; + var frame = this._progress; + function flushProgressiveLayer(layer) { + var dpr = ctx.dpr || 1; + ctx.save(); + ctx.globalAlpha = 1; + ctx.shadowBlur = 0; + // Avoid layer don't clear in next progressive frame + currentLayer.__dirty = true; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layer.dom, 0, 0, width * dpr, height * dpr); + ctx.restore(); + } + + for (var i = 0, l = list.length; i < l; i++) { + var el = list[i]; + var elZLevel = this._singleCanvas ? 0 : el.zlevel; + + var elFrame = el.__frame; + + // Flush at current context + // PENDING + if (elFrame < 0 && currentProgressiveLayer) { + flushProgressiveLayer(currentProgressiveLayer); + currentProgressiveLayer = null; + } + + // Change draw layer + if (currentZLevel !== elZLevel) { + if (ctx) { + ctx.restore(); + } + + // Reset scope + scope = {}; + + // Only 0 zlevel if only has one canvas + currentZLevel = elZLevel; + currentLayer = this.getLayer(currentZLevel); + + if (!currentLayer.__builtin__) { + zrLog( + 'ZLevel ' + currentZLevel + + ' has been used by unkown layer ' + currentLayer.id + ); + } + + ctx = currentLayer.ctx; + ctx.save(); + + // Reset the count + currentLayer.__unusedCount = 0; + + if (currentLayer.__dirty || paintAll) { + currentLayer.clear(); + } + } + + if (!(currentLayer.__dirty || paintAll)) { + continue; + } + + if (elFrame >= 0) { + // Progressive layer changed + if (!currentProgressiveLayer) { + currentProgressiveLayer = this._progressiveLayers[ + Math.min(progressiveLayerIdx++, MAX_PROGRESSIVE_LAYER_NUMBER - 1) + ]; + + currentProgressiveLayer.ctx.save(); + currentProgressiveLayer.renderScope = {}; + + if (currentProgressiveLayer + && (currentProgressiveLayer.__progress > currentProgressiveLayer.__maxProgress) + ) { + // flushProgressiveLayer(currentProgressiveLayer); + // Quick jump all progressive elements + // All progressive element are not dirty, jump over and flush directly + i = currentProgressiveLayer.__nextIdxNotProg - 1; + // currentProgressiveLayer = null; + continue; + } + + layerProgress = currentProgressiveLayer.__progress; + + if (!currentProgressiveLayer.__dirty) { + // Keep rendering + frame = layerProgress; + } + + currentProgressiveLayer.__progress = frame + 1; + } + + if (elFrame === frame) { + this._doPaintEl(el, currentProgressiveLayer, true, currentProgressiveLayer.renderScope); + } + } + else { + this._doPaintEl(el, currentLayer, paintAll, scope); + } + + el.__dirty = false; + } + + if (currentProgressiveLayer) { + flushProgressiveLayer(currentProgressiveLayer); + } + + // Restore the lastLayer ctx + ctx && ctx.restore(); + // If still has clipping state + // if (scope.prevElClipPaths) { + // ctx.restore(); + // } + + this._furtherProgressive = false; + each$1(this._progressiveLayers, function (layer) { + if (layer.__maxProgress >= layer.__progress) { + this._furtherProgressive = true; + } + }, this); + }, + + _doPaintEl: function (el, currentLayer, forcePaint, scope) { + var ctx = currentLayer.ctx; + var m = el.transform; + if ( + (currentLayer.__dirty || forcePaint) + // Ignore invisible element + && !el.invisible + // Ignore transparent element + && el.style.opacity !== 0 + // Ignore scale 0 element, in some environment like node-canvas + // Draw a scale 0 element can cause all following draw wrong + // And setTransform with scale 0 will cause set back transform failed. + && !(m && !m[0] && !m[3]) + // Ignore culled element + && !(el.culling && isDisplayableCulled(el, this._width, this._height)) + ) { + + var clipPaths = el.__clipPaths; + + // Optimize when clipping on group with several elements + if (scope.prevClipLayer !== currentLayer + || isClipPathChanged(clipPaths, scope.prevElClipPaths) + ) { + // If has previous clipping state, restore from it + if (scope.prevElClipPaths) { + scope.prevClipLayer.ctx.restore(); + scope.prevClipLayer = scope.prevElClipPaths = null; + + // Reset prevEl since context has been restored + scope.prevEl = null; + } + // New clipping state + if (clipPaths) { + ctx.save(); + doClip(clipPaths, ctx); + scope.prevClipLayer = currentLayer; + scope.prevElClipPaths = clipPaths; + } + } + el.beforeBrush && el.beforeBrush(ctx); + + el.brush(ctx, scope.prevEl || null); + scope.prevEl = el; + + el.afterBrush && el.afterBrush(ctx); + } + }, + + /** + * 获取 zlevel 所在层,如果不存在则会创建一个新的层 + * @param {number} zlevel + * @return {module:zrender/Layer} + */ + getLayer: function (zlevel) { + if (this._singleCanvas) { + return this._layers[0]; + } + + var layer = this._layers[zlevel]; + if (!layer) { + // Create a new layer + layer = new Layer('zr_' + zlevel, this, this.dpr); + layer.__builtin__ = true; + + if (this._layerConfig[zlevel]) { + merge(layer, this._layerConfig[zlevel], true); + } + + this.insertLayer(zlevel, layer); + + // Context is created after dom inserted to document + // Or excanvas will get 0px clientWidth and clientHeight + layer.initContext(); + } + + return layer; + }, + + insertLayer: function (zlevel, layer) { + + var layersMap = this._layers; + var zlevelList = this._zlevelList; + var len = zlevelList.length; + var prevLayer = null; + var i = -1; + var domRoot = this._domRoot; + + if (layersMap[zlevel]) { + zrLog('ZLevel ' + zlevel + ' has been used already'); + return; + } + // Check if is a valid layer + if (!isLayerValid(layer)) { + zrLog('Layer of zlevel ' + zlevel + ' is not valid'); + return; + } + + if (len > 0 && zlevel > zlevelList[0]) { + for (i = 0; i < len - 1; i++) { + if ( + zlevelList[i] < zlevel + && zlevelList[i + 1] > zlevel + ) { + break; + } + } + prevLayer = layersMap[zlevelList[i]]; + } + zlevelList.splice(i + 1, 0, zlevel); + + layersMap[zlevel] = layer; + + // Vitual layer will not directly show on the screen. + // (It can be a WebGL layer and assigned to a ZImage element) + // But it still under management of zrender. + if (!layer.virtual) { + if (prevLayer) { + var prevDom = prevLayer.dom; + if (prevDom.nextSibling) { + domRoot.insertBefore( + layer.dom, + prevDom.nextSibling + ); + } + else { + domRoot.appendChild(layer.dom); + } + } + else { + if (domRoot.firstChild) { + domRoot.insertBefore(layer.dom, domRoot.firstChild); + } + else { + domRoot.appendChild(layer.dom); + } + } + } + }, + + // Iterate each layer + eachLayer: function (cb, context) { + var zlevelList = this._zlevelList; + var z; + var i; + for (i = 0; i < zlevelList.length; i++) { + z = zlevelList[i]; + cb.call(context, this._layers[z], z); + } + }, + + // Iterate each buildin layer + eachBuiltinLayer: function (cb, context) { + var zlevelList = this._zlevelList; + var layer; + var z; + var i; + for (i = 0; i < zlevelList.length; i++) { + z = zlevelList[i]; + layer = this._layers[z]; + if (layer.__builtin__) { + cb.call(context, layer, z); + } + } + }, + + // Iterate each other layer except buildin layer + eachOtherLayer: function (cb, context) { + var zlevelList = this._zlevelList; + var layer; + var z; + var i; + for (i = 0; i < zlevelList.length; i++) { + z = zlevelList[i]; + layer = this._layers[z]; + if (!layer.__builtin__) { + cb.call(context, layer, z); + } + } + }, + + /** + * 获取所有已创建的层 + * @param {Array.} [prevLayer] + */ + getLayers: function () { + return this._layers; + }, + + _updateLayerStatus: function (list) { + + var layers = this._layers; + var progressiveLayers = this._progressiveLayers; + + var elCountsLastFrame = {}; + var progressiveElCountsLastFrame = {}; + + this.eachBuiltinLayer(function (layer, z) { + elCountsLastFrame[z] = layer.elCount; + layer.elCount = 0; + layer.__dirty = false; + }); + + each$1(progressiveLayers, function (layer, idx) { + progressiveElCountsLastFrame[idx] = layer.elCount; + layer.elCount = 0; + layer.__dirty = false; + }); + + var progressiveLayerCount = 0; + var currentProgressiveLayer; + var lastProgressiveKey; + var frameCount = 0; + for (var i = 0, l = list.length; i < l; i++) { + var el = list[i]; + var zlevel = this._singleCanvas ? 0 : el.zlevel; + var layer = layers[zlevel]; + var elProgress = el.progressive; + if (layer) { + layer.elCount++; + layer.__dirty = layer.__dirty || el.__dirty; + } + + /////// Update progressive + if (elProgress >= 0) { + // Fix wrong progressive sequence problem. + if (lastProgressiveKey !== elProgress) { + lastProgressiveKey = elProgress; + frameCount++; + } + var elFrame = el.__frame = frameCount - 1; + if (!currentProgressiveLayer) { + var idx = Math.min(progressiveLayerCount, MAX_PROGRESSIVE_LAYER_NUMBER - 1); + currentProgressiveLayer = progressiveLayers[idx]; + if (!currentProgressiveLayer) { + currentProgressiveLayer = progressiveLayers[idx] = new Layer( + 'progressive', this, this.dpr + ); + currentProgressiveLayer.initContext(); + } + currentProgressiveLayer.__maxProgress = 0; + } + currentProgressiveLayer.__dirty = currentProgressiveLayer.__dirty || el.__dirty; + currentProgressiveLayer.elCount++; + + currentProgressiveLayer.__maxProgress = Math.max( + currentProgressiveLayer.__maxProgress, elFrame + ); + + if (currentProgressiveLayer.__maxProgress >= currentProgressiveLayer.__progress) { + // Should keep rendering this layer because progressive rendering is not finished yet + layer.__dirty = true; + } + } + else { + el.__frame = -1; + + if (currentProgressiveLayer) { + currentProgressiveLayer.__nextIdxNotProg = i; + progressiveLayerCount++; + currentProgressiveLayer = null; + } + } + } + + if (currentProgressiveLayer) { + progressiveLayerCount++; + currentProgressiveLayer.__nextIdxNotProg = i; + } + + // 层中的元素数量有发生变化 + this.eachBuiltinLayer(function (layer, z) { + if (elCountsLastFrame[z] !== layer.elCount) { + layer.__dirty = true; + } + }); + + progressiveLayers.length = Math.min(progressiveLayerCount, MAX_PROGRESSIVE_LAYER_NUMBER); + each$1(progressiveLayers, function (layer, idx) { + if (progressiveElCountsLastFrame[idx] !== layer.elCount) { + el.__dirty = true; + } + if (layer.__dirty) { + layer.__progress = 0; + } + }); + }, + + /** + * 清除hover层外所有内容 + */ + clear: function () { + this.eachBuiltinLayer(this._clearLayer); + return this; + }, + + _clearLayer: function (layer) { + layer.clear(); + }, + + /** + * 修改指定zlevel的绘制参数 + * + * @param {string} zlevel + * @param {Object} config 配置对象 + * @param {string} [config.clearColor=0] 每次清空画布的颜色 + * @param {string} [config.motionBlur=false] 是否开启动态模糊 + * @param {number} [config.lastFrameAlpha=0.7] + * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显 + */ + configLayer: function (zlevel, config) { + if (config) { + var layerConfig = this._layerConfig; + if (!layerConfig[zlevel]) { + layerConfig[zlevel] = config; + } + else { + merge(layerConfig[zlevel], config, true); + } + + var layer = this._layers[zlevel]; + + if (layer) { + merge(layer, layerConfig[zlevel], true); + } + } + }, + + /** + * 删除指定层 + * @param {number} zlevel 层所在的zlevel + */ + delLayer: function (zlevel) { + var layers = this._layers; + var zlevelList = this._zlevelList; + var layer = layers[zlevel]; + if (!layer) { + return; + } + layer.dom.parentNode.removeChild(layer.dom); + delete layers[zlevel]; + + zlevelList.splice(indexOf(zlevelList, zlevel), 1); + }, + + /** + * 区域大小变化后重绘 + */ + resize: function (width, height) { + var domRoot = this._domRoot; + // FIXME Why ? + domRoot.style.display = 'none'; + + // Save input w/h + var opts = this._opts; + width != null && (opts.width = width); + height != null && (opts.height = height); + + width = this._getSize(0); + height = this._getSize(1); + + domRoot.style.display = ''; + + // 优化没有实际改变的resize + if (this._width != width || height != this._height) { + domRoot.style.width = width + 'px'; + domRoot.style.height = height + 'px'; + + for (var id in this._layers) { + if (this._layers.hasOwnProperty(id)) { + this._layers[id].resize(width, height); + } + } + each$1(this._progressiveLayers, function (layer) { + layer.resize(width, height); + }); + + this.refresh(true); + } + + this._width = width; + this._height = height; + + return this; + }, + + /** + * 清除单独的一个层 + * @param {number} zlevel + */ + clearLayer: function (zlevel) { + var layer = this._layers[zlevel]; + if (layer) { + layer.clear(); + } + }, + + /** + * 释放 + */ + dispose: function () { + this.root.innerHTML = ''; + + this.root = + this.storage = + + this._domRoot = + this._layers = null; + }, + + /** + * Get canvas which has all thing rendered + * @param {Object} opts + * @param {string} [opts.backgroundColor] + * @param {number} [opts.pixelRatio] + */ + getRenderedCanvas: function (opts) { + opts = opts || {}; + if (this._singleCanvas) { + return this._layers[0].dom; + } + + var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr); + imageLayer.initContext(); + + imageLayer.clearColor = opts.backgroundColor; + imageLayer.clear(); + + var displayList = this.storage.getDisplayList(true); + + var scope = {}; + var zlevel; + + var self = this; + function findAndDrawOtherLayer(smaller, larger) { + var zlevelList = self._zlevelList; + if (smaller == null) { + smaller = -Infinity; + } + var intermediateLayer; + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + var layer = self._layers[z]; + if (!layer.__builtin__ && z > smaller && z < larger) { + intermediateLayer = layer; + break; + } + } + if (intermediateLayer && intermediateLayer.renderToCanvas) { + imageLayer.ctx.save(); + intermediateLayer.renderToCanvas(imageLayer.ctx); + imageLayer.ctx.restore(); + } + } + for (var i = 0; i < displayList.length; i++) { + var el = displayList[i]; + + if (el.zlevel !== zlevel) { + findAndDrawOtherLayer(zlevel, el.zlevel); + zlevel = el.zlevel; + } + this._doPaintEl(el, imageLayer, true, scope); + } + + findAndDrawOtherLayer(zlevel, Infinity); + + return imageLayer.dom; + }, + /** + * 获取绘图区域宽度 + */ + getWidth: function () { + return this._width; + }, + + /** + * 获取绘图区域高度 + */ + getHeight: function () { + return this._height; + }, + + _getSize: function (whIdx) { + var opts = this._opts; + var wh = ['width', 'height'][whIdx]; + var cwh = ['clientWidth', 'clientHeight'][whIdx]; + var plt = ['paddingLeft', 'paddingTop'][whIdx]; + var prb = ['paddingRight', 'paddingBottom'][whIdx]; + + if (opts[wh] != null && opts[wh] !== 'auto') { + return parseFloat(opts[wh]); + } + + var root = this.root; + // IE8 does not support getComputedStyle, but it use VML. + var stl = document.defaultView.getComputedStyle(root); + + return ( + (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) + - (parseInt10(stl[plt]) || 0) + - (parseInt10(stl[prb]) || 0) + ) | 0; + }, + + pathToImage: function (path, dpr) { + dpr = dpr || this.dpr; + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + var rect = path.getBoundingRect(); + var style = path.style; + var shadowBlurSize = style.shadowBlur; + var shadowOffsetX = style.shadowOffsetX; + var shadowOffsetY = style.shadowOffsetY; + var lineWidth = style.hasStroke() ? style.lineWidth : 0; + + var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize); + var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize); + var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize); + var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize); + var width = rect.width + leftMargin + rightMargin; + var height = rect.height + topMargin + bottomMargin; + + canvas.width = width * dpr; + canvas.height = height * dpr; + + ctx.scale(dpr, dpr); + ctx.clearRect(0, 0, width, height); + ctx.dpr = dpr; + + var pathTransform = { + position: path.position, + rotation: path.rotation, + scale: path.scale + }; + path.position = [leftMargin - rect.x, topMargin - rect.y]; + path.rotation = 0; + path.scale = [1, 1]; + path.updateTransform(); + if (path) { + path.brush(ctx); + } + + var ImageShape = ZImage; + var imgShape = new ImageShape({ + style: { + x: 0, + y: 0, + image: canvas + } + }); + + if (pathTransform.position != null) { + imgShape.position = path.position = pathTransform.position; + } + + if (pathTransform.rotation != null) { + imgShape.rotation = path.rotation = pathTransform.rotation; + } + + if (pathTransform.scale != null) { + imgShape.scale = path.scale = pathTransform.scale; + } + + return imgShape; + } +}; + +/** + * 事件辅助类 + * @module zrender/core/event + * @author Kener (@Kener-林峰, kener.linfeng@gmail.com) + */ + +var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener; + +var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/; + +function getBoundingClientRect(el) { + // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect + return el.getBoundingClientRect ? el.getBoundingClientRect() : {left: 0, top: 0}; +} + +// `calculate` is optional, default false +function clientToLocal(el, e, out, calculate) { + out = out || {}; + + // According to the W3C Working Draft, offsetX and offsetY should be relative + // to the padding edge of the target element. The only browser using this convention + // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does + // not support the properties. + // (see http://www.jacklmoore.com/notes/mouse-position/) + // In zr painter.dom, padding edge equals to border edge. + + // FIXME + // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and + // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y + // is too complex. So css-transfrom dont support in this case temporarily. + if (calculate || !env$1.canvasSupported) { + defaultGetZrXY(el, e, out); + } + // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned + // ancestor element, so we should make sure el is positioned (e.g., not position:static). + // BTW1, Webkit don't return the same results as FF in non-simple cases (like add + // zoom-factor, overflow / opacity layers, transforms ...) + // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d. + // + // BTW3, In ff, offsetX/offsetY is always 0. + else if (env$1.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) { + out.zrX = e.layerX; + out.zrY = e.layerY; + } + // For IE6+, chrome, safari, opera. (When will ff support offsetX?) + else if (e.offsetX != null) { + out.zrX = e.offsetX; + out.zrY = e.offsetY; + } + // For some other device, e.g., IOS safari. + else { + defaultGetZrXY(el, e, out); + } + + return out; +} + +function defaultGetZrXY(el, e, out) { + // This well-known method below does not support css transform. + var box = getBoundingClientRect(el); + out.zrX = e.clientX - box.left; + out.zrY = e.clientY - box.top; +} + +/** + * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标. + * `calculate` is optional, default false. + */ +function normalizeEvent(el, e, calculate) { + + e = e || window.event; + + if (e.zrX != null) { + return e; + } + + var eventType = e.type; + var isTouch = eventType && eventType.indexOf('touch') >= 0; + + if (!isTouch) { + clientToLocal(el, e, e, calculate); + e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3; + } + else { + var touch = eventType != 'touchend' + ? e.targetTouches[0] + : e.changedTouches[0]; + touch && clientToLocal(el, touch, e, calculate); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0; + // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js + // If e.which has been defined, if may be readonly, + // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which + var button = e.button; + if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) { + e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0))); + } + + return e; +} + +function addEventListener(el, name, handler) { + if (isDomLevel2) { + el.addEventListener(name, handler); + } + else { + el.attachEvent('on' + name, handler); + } +} + +function removeEventListener(el, name, handler) { + if (isDomLevel2) { + el.removeEventListener(name, handler); + } + else { + el.detachEvent('on' + name, handler); + } +} + +/** + * preventDefault and stopPropagation. + * Notice: do not do that in zrender. Upper application + * do that if necessary. + * + * @memberOf module:zrender/core/event + * @method + * @param {Event} e : event对象 + */ +var stop = isDomLevel2 + ? function (e) { + e.preventDefault(); + e.stopPropagation(); + e.cancelBubble = true; + } + : function (e) { + e.returnValue = false; + e.cancelBubble = true; + }; + +function notLeftMouse(e) { + // If e.which is undefined, considered as left mouse event. + return e.which > 1; +} + +/** + * 动画主类, 调度和管理所有动画控制器 + * + * @module zrender/animation/Animation + * @author pissang(https://github.com/pissang) + */ +// TODO Additive animation +// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/ +// https://developer.apple.com/videos/wwdc2014/#236 + +/** + * @typedef {Object} IZRenderStage + * @property {Function} update + */ + +/** + * @alias module:zrender/animation/Animation + * @constructor + * @param {Object} [options] + * @param {Function} [options.onframe] + * @param {IZRenderStage} [options.stage] + * @example + * var animation = new Animation(); + * var obj = { + * x: 100, + * y: 100 + * }; + * animation.animate(node.position) + * .when(1000, { + * x: 500, + * y: 500 + * }) + * .when(2000, { + * x: 100, + * y: 100 + * }) + * .start('spline'); + */ +var Animation = function (options) { + + options = options || {}; + + this.stage = options.stage || {}; + + this.onframe = options.onframe || function() {}; + + // private properties + this._clips = []; + + this._running = false; + + this._time; + + this._pausedTime; + + this._pauseStart; + + this._paused = false; + + Eventful.call(this); +}; + +Animation.prototype = { + + constructor: Animation, + /** + * 添加 clip + * @param {module:zrender/animation/Clip} clip + */ + addClip: function (clip) { + this._clips.push(clip); + }, + /** + * 添加 animator + * @param {module:zrender/animation/Animator} animator + */ + addAnimator: function (animator) { + animator.animation = this; + var clips = animator.getClips(); + for (var i = 0; i < clips.length; i++) { + this.addClip(clips[i]); + } + }, + /** + * 删除动画片段 + * @param {module:zrender/animation/Clip} clip + */ + removeClip: function(clip) { + var idx = indexOf(this._clips, clip); + if (idx >= 0) { + this._clips.splice(idx, 1); + } + }, + + /** + * 删除动画片段 + * @param {module:zrender/animation/Animator} animator + */ + removeAnimator: function (animator) { + var clips = animator.getClips(); + for (var i = 0; i < clips.length; i++) { + this.removeClip(clips[i]); + } + animator.animation = null; + }, + + _update: function() { + + var time = new Date().getTime() - this._pausedTime; + var delta = time - this._time; + var clips = this._clips; + var len = clips.length; + + var deferredEvents = []; + var deferredClips = []; + for (var i = 0; i < len; i++) { + var clip = clips[i]; + var e = clip.step(time, delta); + // Throw out the events need to be called after + // stage.update, like destroy + if (e) { + deferredEvents.push(e); + deferredClips.push(clip); + } + } + + // Remove the finished clip + for (var i = 0; i < len;) { + if (clips[i]._needsRemove) { + clips[i] = clips[len - 1]; + clips.pop(); + len--; + } + else { + i++; + } + } + + len = deferredEvents.length; + for (var i = 0; i < len; i++) { + deferredClips[i].fire(deferredEvents[i]); + } + + this._time = time; + + this.onframe(delta); + + this.trigger('frame', delta); + + if (this.stage.update) { + this.stage.update(); + } + }, + + _startLoop: function () { + var self = this; + + this._running = true; + + function step() { + if (self._running) { + + requestAnimationFrame(step); + + !self._paused && self._update(); + } + } + + requestAnimationFrame(step); + }, + + /** + * 开始运行动画 + */ + start: function () { + + this._time = new Date().getTime(); + this._pausedTime = 0; + + this._startLoop(); + }, + /** + * 停止运行动画 + */ + stop: function () { + this._running = false; + }, + + /** + * Pause + */ + pause: function () { + if (!this._paused) { + this._pauseStart = new Date().getTime(); + this._paused = true; + } + }, + + /** + * Resume + */ + resume: function () { + if (this._paused) { + this._pausedTime += (new Date().getTime()) - this._pauseStart; + this._paused = false; + } + }, + + /** + * 清除所有动画片段 + */ + clear: function () { + this._clips = []; + }, + /** + * 对一个目标创建一个animator对象,可以指定目标中的属性使用动画 + * @param {Object} target + * @param {Object} options + * @param {boolean} [options.loop=false] 是否循环播放动画 + * @param {Function} [options.getter=null] + * 如果指定getter函数,会通过getter函数取属性值 + * @param {Function} [options.setter=null] + * 如果指定setter函数,会通过setter函数设置属性值 + * @return {module:zrender/animation/Animation~Animator} + */ + // TODO Gap + animate: function (target, options) { + options = options || {}; + + var animator = new Animator( + target, + options.loop, + options.getter, + options.setter + ); + + this.addAnimator(animator); + + return animator; + } +}; + +mixin(Animation, Eventful); + +/** + * Only implements needed gestures for mobile. + */ + +var GestureMgr = function () { + + /** + * @private + * @type {Array.} + */ + this._track = []; +}; + +GestureMgr.prototype = { + + constructor: GestureMgr, + + recognize: function (event, target, root) { + this._doTrack(event, target, root); + return this._recognize(event); + }, + + clear: function () { + this._track.length = 0; + return this; + }, + + _doTrack: function (event, target, root) { + var touches = event.touches; + + if (!touches) { + return; + } + + var trackItem = { + points: [], + touches: [], + target: target, + event: event + }; + + for (var i = 0, len = touches.length; i < len; i++) { + var touch = touches[i]; + var pos = clientToLocal(root, touch, {}); + trackItem.points.push([pos.zrX, pos.zrY]); + trackItem.touches.push(touch); + } + + this._track.push(trackItem); + }, + + _recognize: function (event) { + for (var eventName in recognizers) { + if (recognizers.hasOwnProperty(eventName)) { + var gestureInfo = recognizers[eventName](this._track, event); + if (gestureInfo) { + return gestureInfo; + } + } + } + } +}; + +function dist$1(pointPair) { + var dx = pointPair[1][0] - pointPair[0][0]; + var dy = pointPair[1][1] - pointPair[0][1]; + + return Math.sqrt(dx * dx + dy * dy); +} + +function center(pointPair) { + return [ + (pointPair[0][0] + pointPair[1][0]) / 2, + (pointPair[0][1] + pointPair[1][1]) / 2 + ]; +} + +var recognizers = { + + pinch: function (track, event) { + var trackLen = track.length; + + if (!trackLen) { + return; + } + + var pinchEnd = (track[trackLen - 1] || {}).points; + var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd; + + if (pinchPre + && pinchPre.length > 1 + && pinchEnd + && pinchEnd.length > 1 + ) { + var pinchScale = dist$1(pinchEnd) / dist$1(pinchPre); + !isFinite(pinchScale) && (pinchScale = 1); + + event.pinchScale = pinchScale; + + var pinchCenter = center(pinchEnd); + event.pinchX = pinchCenter[0]; + event.pinchY = pinchCenter[1]; + + return { + type: 'pinch', + target: track[0].target, + event: event + }; + } + } + + // Only pinch currently. +}; + +var TOUCH_CLICK_DELAY = 300; + +var mouseHandlerNames = [ + 'click', 'dblclick', 'mousewheel', 'mouseout', + 'mouseup', 'mousedown', 'mousemove', 'contextmenu' +]; + +var touchHandlerNames = [ + 'touchstart', 'touchend', 'touchmove' +]; + +var pointerEventNames = { + pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1 +}; + +var pointerHandlerNames = map(mouseHandlerNames, function (name) { + var nm = name.replace('mouse', 'pointer'); + return pointerEventNames[nm] ? nm : name; +}); + +function eventNameFix(name) { + return (name === 'mousewheel' && env$1.browser.firefox) ? 'DOMMouseScroll' : name; +} + +function processGesture(proxy, event, stage) { + var gestureMgr = proxy._gestureMgr; + + stage === 'start' && gestureMgr.clear(); + + var gestureInfo = gestureMgr.recognize( + event, + proxy.handler.findHover(event.zrX, event.zrY, null).target, + proxy.dom + ); + + stage === 'end' && gestureMgr.clear(); + + // Do not do any preventDefault here. Upper application do that if necessary. + if (gestureInfo) { + var type = gestureInfo.type; + event.gestureEvent = type; + + proxy.handler.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event); + } +} + +// function onMSGestureChange(proxy, event) { +// if (event.translationX || event.translationY) { +// // mousemove is carried by MSGesture to reduce the sensitivity. +// proxy.handler.dispatchToElement(event.target, 'mousemove', event); +// } +// if (event.scale !== 1) { +// event.pinchX = event.offsetX; +// event.pinchY = event.offsetY; +// event.pinchScale = event.scale; +// proxy.handler.dispatchToElement(event.target, 'pinch', event); +// } +// } + +/** + * Prevent mouse event from being dispatched after Touch Events action + * @see + * 1. Mobile browsers dispatch mouse events 300ms after touchend. + * 2. Chrome for Android dispatch mousedown for long-touch about 650ms + * Result: Blocking Mouse Events for 700ms. + */ +function setTouchTimer(instance) { + instance._touching = true; + clearTimeout(instance._touchTimer); + instance._touchTimer = setTimeout(function () { + instance._touching = false; + }, 700); +} + + +var domHandlers = { + /** + * Mouse move handler + * @inner + * @param {Event} event + */ + mousemove: function (event) { + event = normalizeEvent(this.dom, event); + + this.trigger('mousemove', event); + }, + + /** + * Mouse out handler + * @inner + * @param {Event} event + */ + mouseout: function (event) { + event = normalizeEvent(this.dom, event); + + var element = event.toElement || event.relatedTarget; + if (element != this.dom) { + while (element && element.nodeType != 9) { + // 忽略包含在root中的dom引起的mouseOut + if (element === this.dom) { + return; + } + + element = element.parentNode; + } + } + + this.trigger('mouseout', event); + }, + + /** + * Touch开始响应函数 + * @inner + * @param {Event} event + */ + touchstart: function (event) { + // Default mouse behaviour should not be disabled here. + // For example, page may needs to be slided. + event = normalizeEvent(this.dom, event); + + // Mark touch, which is useful in distinguish touch and + // mouse event in upper applicatoin. + event.zrByTouch = true; + + this._lastTouchMoment = new Date(); + + processGesture(this, event, 'start'); + + // In touch device, trigger `mousemove`(`mouseover`) should + // be triggered, and must before `mousedown` triggered. + domHandlers.mousemove.call(this, event); + + domHandlers.mousedown.call(this, event); + + setTouchTimer(this); + }, + + /** + * Touch移动响应函数 + * @inner + * @param {Event} event + */ + touchmove: function (event) { + + event = normalizeEvent(this.dom, event); + + // Mark touch, which is useful in distinguish touch and + // mouse event in upper applicatoin. + event.zrByTouch = true; + + processGesture(this, event, 'change'); + + // Mouse move should always be triggered no matter whether + // there is gestrue event, because mouse move and pinch may + // be used at the same time. + domHandlers.mousemove.call(this, event); + + setTouchTimer(this); + }, + + /** + * Touch结束响应函数 + * @inner + * @param {Event} event + */ + touchend: function (event) { + + event = normalizeEvent(this.dom, event); + + // Mark touch, which is useful in distinguish touch and + // mouse event in upper applicatoin. + event.zrByTouch = true; + + processGesture(this, event, 'end'); + + domHandlers.mouseup.call(this, event); + + // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is + // triggered in `touchstart`. This seems to be illogical, but by this mechanism, + // we can conveniently implement "hover style" in both PC and touch device just + // by listening to `mouseover` to add "hover style" and listening to `mouseout` + // to remove "hover style" on an element, without any additional code for + // compatibility. (`mouseout` will not be triggered in `touchend`, so "hover + // style" will remain for user view) + + // click event should always be triggered no matter whether + // there is gestrue event. System click can not be prevented. + if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) { + domHandlers.click.call(this, event); + } + + setTouchTimer(this); + }, + + pointerdown: function (event) { + domHandlers.mousedown.call(this, event); + + // if (useMSGuesture(this, event)) { + // this._msGesture.addPointer(event.pointerId); + // } + }, + + pointermove: function (event) { + // FIXME + // pointermove is so sensitive that it always triggered when + // tap(click) on touch screen, which affect some judgement in + // upper application. So, we dont support mousemove on MS touch + // device yet. + if (!isPointerFromTouch(event)) { + domHandlers.mousemove.call(this, event); + } + }, + + pointerup: function (event) { + domHandlers.mouseup.call(this, event); + }, + + pointerout: function (event) { + // pointerout will be triggered when tap on touch screen + // (IE11+/Edge on MS Surface) after click event triggered, + // which is inconsistent with the mousout behavior we defined + // in touchend. So we unify them. + // (check domHandlers.touchend for detailed explanation) + if (!isPointerFromTouch(event)) { + domHandlers.mouseout.call(this, event); + } + } +}; + +function isPointerFromTouch(event) { + var pointerType = event.pointerType; + return pointerType === 'pen' || pointerType === 'touch'; +} + +// function useMSGuesture(handlerProxy, event) { +// return isPointerFromTouch(event) && !!handlerProxy._msGesture; +// } + +// Common handlers +each$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { + domHandlers[name] = function (event) { + event = normalizeEvent(this.dom, event); + this.trigger(name, event); + }; +}); + +/** + * 为控制类实例初始化dom 事件处理函数 + * + * @inner + * @param {module:zrender/Handler} instance 控制类实例 + */ +function initDomHandler(instance) { + each$1(touchHandlerNames, function (name) { + instance._handlers[name] = bind(domHandlers[name], instance); + }); + + each$1(pointerHandlerNames, function (name) { + instance._handlers[name] = bind(domHandlers[name], instance); + }); + + each$1(mouseHandlerNames, function (name) { + instance._handlers[name] = makeMouseHandler(domHandlers[name], instance); + }); + + function makeMouseHandler(fn, instance) { + return function () { + if (instance._touching) { + return; + } + return fn.apply(instance, arguments); + }; + } +} + + +function HandlerDomProxy(dom) { + Eventful.call(this); + + this.dom = dom; + + /** + * @private + * @type {boolean} + */ + this._touching = false; + + /** + * @private + * @type {number} + */ + this._touchTimer; + + /** + * @private + * @type {module:zrender/core/GestureMgr} + */ + this._gestureMgr = new GestureMgr(); + + this._handlers = {}; + + initDomHandler(this); + + if (env$1.pointerEventsSupported) { // Only IE11+/Edge + // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240), + // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event + // at the same time. + // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on + // screen, which do not occurs in pointer event. + // So we use pointer event to both detect touch gesture and mouse behavior. + mountHandlers(pointerHandlerNames, this); + + // FIXME + // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable, + // which does not prevent defuault behavior occasionally (which may cause view port + // zoomed in but use can not zoom it back). And event.preventDefault() does not work. + // So we have to not to use MSGesture and not to support touchmove and pinch on MS + // touch screen. And we only support click behavior on MS touch screen now. + + // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+. + // We dont support touch on IE on win7. + // See + // if (typeof MSGesture === 'function') { + // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line + // dom.addEventListener('MSGestureChange', onMSGestureChange); + // } + } + else { + if (env$1.touchEventsSupported) { + mountHandlers(touchHandlerNames, this); + // Handler of 'mouseout' event is needed in touch mode, which will be mounted below. + // addEventListener(root, 'mouseout', this._mouseoutHandler); + } + + // 1. Considering some devices that both enable touch and mouse event (like on MS Surface + // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise + // mouse event can not be handle in those devices. + // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent + // mouseevent after touch event triggered, see `setTouchTimer`. + mountHandlers(mouseHandlerNames, this); + } + + function mountHandlers(handlerNames, instance) { + each$1(handlerNames, function (name) { + addEventListener(dom, eventNameFix(name), instance._handlers[name]); + }, instance); + } +} + +var handlerDomProxyProto = HandlerDomProxy.prototype; +handlerDomProxyProto.dispose = function () { + var handlerNames = mouseHandlerNames.concat(touchHandlerNames); + + for (var i = 0; i < handlerNames.length; i++) { + var name = handlerNames[i]; + removeEventListener(this.dom, eventNameFix(name), this._handlers[name]); + } +}; + +handlerDomProxyProto.setCursor = function (cursorStyle) { + this.dom.style.cursor = cursorStyle || 'default'; +}; + +mixin(HandlerDomProxy, Eventful); + +/*! +* ZRender, a high performance 2d drawing library. +* +* Copyright (c) 2013, Baidu Inc. +* All rights reserved. +* +* LICENSE +* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt +*/ + +var useVML = !env$1.canvasSupported; + +var painterCtors = { + canvas: Painter +}; + +var instances$1 = {}; // ZRender实例map索引 + +/** + * @type {string} + */ +var version$1 = '3.7.0'; + +/** + * Initializing a zrender instance + * @param {HTMLElement} dom + * @param {Object} opts + * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg' + * @param {number} [opts.devicePixelRatio] + * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined) + * @return {module:zrender/ZRender} + */ +function init$1(dom, opts) { + var zr = new ZRender(guid(), dom, opts); + instances$1[zr.id] = zr; + return zr; +} + +/** + * Dispose zrender instance + * @param {module:zrender/ZRender} zr + */ +function dispose$1(zr) { + if (zr) { + zr.dispose(); + } + else { + for (var key in instances$1) { + if (instances$1.hasOwnProperty(key)) { + instances$1[key].dispose(); + } + } + instances$1 = {}; + } + + return this; +} + +/** + * Get zrender instance by id + * @param {string} id zrender instance id + * @return {module:zrender/ZRender} + */ +function getInstance(id) { + return instances$1[id]; +} + +function registerPainter(name, Ctor) { + painterCtors[name] = Ctor; +} + +function delInstance(id) { + delete instances$1[id]; +} + +/** + * @module zrender/ZRender + */ +/** + * @constructor + * @alias module:zrender/ZRender + * @param {string} id + * @param {HTMLElement} dom + * @param {Object} opts + * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg' + * @param {number} [opts.devicePixelRatio] + * @param {number} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number} [opts.height] Can be 'auto' (the same as null/undefined) + */ +var ZRender = function (id, dom, opts) { + + opts = opts || {}; + + /** + * @type {HTMLDomElement} + */ + this.dom = dom; + + /** + * @type {string} + */ + this.id = id; + + var self = this; + var storage = new Storage(); + + var rendererType = opts.renderer; + // TODO WebGL + if (useVML) { + if (!painterCtors.vml) { + throw new Error('You need to require \'zrender/vml/vml\' to support IE8'); + } + rendererType = 'vml'; + } + else if (!rendererType || !painterCtors[rendererType]) { + rendererType = 'canvas'; + } + var painter = new painterCtors[rendererType](dom, storage, opts); + + this.storage = storage; + this.painter = painter; + + var handerProxy = !env$1.node ? new HandlerDomProxy(painter.getViewportRoot()) : null; + this.handler = new Handler(storage, painter, handerProxy, painter.root); + + /** + * @type {module:zrender/animation/Animation} + */ + this.animation = new Animation({ + stage: { + update: bind(this.flush, this) + } + }); + this.animation.start(); + + /** + * @type {boolean} + * @private + */ + this._needsRefresh; + + // 修改 storage.delFromStorage, 每次删除元素之前删除动画 + // FIXME 有点ugly + var oldDelFromStorage = storage.delFromStorage; + var oldAddToStorage = storage.addToStorage; + + storage.delFromStorage = function (el) { + oldDelFromStorage.call(storage, el); + + el && el.removeSelfFromZr(self); + }; + + storage.addToStorage = function (el) { + oldAddToStorage.call(storage, el); + + el.addSelfToZr(self); + }; +}; + +ZRender.prototype = { + + constructor: ZRender, + /** + * 获取实例唯一标识 + * @return {string} + */ + getId: function () { + return this.id; + }, + + /** + * 添加元素 + * @param {module:zrender/Element} el + */ + add: function (el) { + this.storage.addRoot(el); + this._needsRefresh = true; + }, + + /** + * 删除元素 + * @param {module:zrender/Element} el + */ + remove: function (el) { + this.storage.delRoot(el); + this._needsRefresh = true; + }, + + /** + * Change configuration of layer + * @param {string} zLevel + * @param {Object} config + * @param {string} [config.clearColor=0] Clear color + * @param {string} [config.motionBlur=false] If enable motion blur + * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer + */ + configLayer: function (zLevel, config) { + this.painter.configLayer(zLevel, config); + this._needsRefresh = true; + }, + + /** + * Repaint the canvas immediately + */ + refreshImmediately: function () { + // var start = new Date(); + // Clear needsRefresh ahead to avoid something wrong happens in refresh + // Or it will cause zrender refreshes again and again. + this._needsRefresh = false; + this.painter.refresh(); + /** + * Avoid trigger zr.refresh in Element#beforeUpdate hook + */ + this._needsRefresh = false; + // var end = new Date(); + + // var log = document.getElementById('log'); + // if (log) { + // log.innerHTML = log.innerHTML + '
' + (end - start); + // } + }, + + /** + * Mark and repaint the canvas in the next frame of browser + */ + refresh: function() { + this._needsRefresh = true; + }, + + /** + * Perform all refresh + */ + flush: function () { + if (this._needsRefresh) { + this.refreshImmediately(); + } + if (this._needsRefreshHover) { + this.refreshHoverImmediately(); + } + }, + + /** + * Add element to hover layer + * @param {module:zrender/Element} el + * @param {Object} style + */ + addHover: function (el, style) { + if (this.painter.addHover) { + this.painter.addHover(el, style); + this.refreshHover(); + } + }, + + /** + * Add element from hover layer + * @param {module:zrender/Element} el + */ + removeHover: function (el) { + if (this.painter.removeHover) { + this.painter.removeHover(el); + this.refreshHover(); + } + }, + + /** + * Clear all hover elements in hover layer + * @param {module:zrender/Element} el + */ + clearHover: function () { + if (this.painter.clearHover) { + this.painter.clearHover(); + this.refreshHover(); + } + }, + + /** + * Refresh hover in next frame + */ + refreshHover: function () { + this._needsRefreshHover = true; + }, + + /** + * Refresh hover immediately + */ + refreshHoverImmediately: function () { + this._needsRefreshHover = false; + this.painter.refreshHover && this.painter.refreshHover(); + }, + + /** + * Resize the canvas. + * Should be invoked when container size is changed + * @param {Object} [opts] + * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined) + */ + resize: function(opts) { + opts = opts || {}; + this.painter.resize(opts.width, opts.height); + this.handler.resize(); + }, + + /** + * Stop and clear all animation immediately + */ + clearAnimation: function () { + this.animation.clear(); + }, + + /** + * Get container width + */ + getWidth: function() { + return this.painter.getWidth(); + }, + + /** + * Get container height + */ + getHeight: function() { + return this.painter.getHeight(); + }, + + /** + * Export the canvas as Base64 URL + * @param {string} type + * @param {string} [backgroundColor='#fff'] + * @return {string} Base64 URL + */ + // toDataURL: function(type, backgroundColor) { + // return this.painter.getRenderedCanvas({ + // backgroundColor: backgroundColor + // }).toDataURL(type); + // }, + + /** + * Converting a path to image. + * It has much better performance of drawing image rather than drawing a vector path. + * @param {module:zrender/graphic/Path} e + * @param {number} width + * @param {number} height + */ + pathToImage: function(e, dpr) { + return this.painter.pathToImage(e, dpr); + }, + + /** + * Set default cursor + * @param {string} [cursorStyle='default'] 例如 crosshair + */ + setCursorStyle: function (cursorStyle) { + this.handler.setCursorStyle(cursorStyle); + }, + + /** + * Find hovered element + * @param {number} x + * @param {number} y + * @return {Object} {target, topTarget} + */ + findHover: function (x, y) { + return this.handler.findHover(x, y); + }, + + /** + * Bind event + * + * @param {string} eventName Event name + * @param {Function} eventHandler Handler function + * @param {Object} [context] Context object + */ + on: function(eventName, eventHandler, context) { + this.handler.on(eventName, eventHandler, context); + }, + + /** + * Unbind event + * @param {string} eventName Event name + * @param {Function} [eventHandler] Handler function + */ + off: function(eventName, eventHandler) { + this.handler.off(eventName, eventHandler); + }, + + /** + * Trigger event manually + * + * @param {string} eventName Event name + * @param {event=} event Event object + */ + trigger: function (eventName, event) { + this.handler.trigger(eventName, event); + }, + + + /** + * Clear all objects and the canvas. + */ + clear: function () { + this.storage.delRoot(); + this.painter.clear(); + }, + + /** + * Dispose self. + */ + dispose: function () { + this.animation.stop(); + + this.clear(); + this.storage.dispose(); + this.painter.dispose(); + this.handler.dispose(); + + this.animation = + this.storage = + this.painter = + this.handler = null; + + delInstance(this.id); + } +}; + + + +var zrender = (Object.freeze || Object)({ + version: version$1, + init: init$1, + dispose: dispose$1, + getInstance: getInstance, + registerPainter: registerPainter +}); + +var RADIAN_EPSILON = 1e-4; + +function _trim(str) { + return str.replace(/^\s+/, '').replace(/\s+$/, ''); +} + +/** + * Linear mapping a value from domain to range + * @memberOf module:echarts/util/number + * @param {(number|Array.)} val + * @param {Array.} domain Domain extent domain[0] can be bigger than domain[1] + * @param {Array.} range Range extent range[0] can be bigger than range[1] + * @param {boolean} clamp + * @return {(number|Array.} + */ +function linearMap(val, domain, range, clamp) { + var subDomain = domain[1] - domain[0]; + var subRange = range[1] - range[0]; + + if (subDomain === 0) { + return subRange === 0 + ? range[0] + : (range[0] + range[1]) / 2; + } + + // Avoid accuracy problem in edge, such as + // 146.39 - 62.83 === 83.55999999999999. + // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError + // It is a little verbose for efficiency considering this method + // is a hotspot. + if (clamp) { + if (subDomain > 0) { + if (val <= domain[0]) { + return range[0]; + } + else if (val >= domain[1]) { + return range[1]; + } + } + else { + if (val >= domain[0]) { + return range[0]; + } + else if (val <= domain[1]) { + return range[1]; + } + } + } + else { + if (val === domain[0]) { + return range[0]; + } + if (val === domain[1]) { + return range[1]; + } + } + + return (val - domain[0]) / subDomain * subRange + range[0]; +} + +/** + * Convert a percent string to absolute number. + * Returns NaN if percent is not a valid string or number + * @memberOf module:echarts/util/number + * @param {string|number} percent + * @param {number} all + * @return {number} + */ +function parsePercent$1(percent, all) { + switch (percent) { + case 'center': + case 'middle': + percent = '50%'; + break; + case 'left': + case 'top': + percent = '0%'; + break; + case 'right': + case 'bottom': + percent = '100%'; + break; + } + if (typeof percent === 'string') { + if (_trim(percent).match(/%$/)) { + return parseFloat(percent) / 100 * all; + } + + return parseFloat(percent); + } + + return percent == null ? NaN : +percent; +} + +/** + * (1) Fix rounding error of float numbers. + * (2) Support return string to avoid scientific notation like '3.5e-7'. + * + * @param {number} x + * @param {number} [precision] + * @param {boolean} [returnStr] + * @return {number|string} + */ +function round(x, precision, returnStr) { + if (precision == null) { + precision = 10; + } + // Avoid range error + precision = Math.min(Math.max(0, precision), 20); + x = (+x).toFixed(precision); + return returnStr ? x : +x; +} + +function asc(arr) { + arr.sort(function (a, b) { + return a - b; + }); + return arr; +} + +/** + * Get precision + * @param {number} val + */ +function getPrecision(val) { + val = +val; + if (isNaN(val)) { + return 0; + } + // It is much faster than methods converting number to string as follows + // var tmp = val.toString(); + // return tmp.length - 1 - tmp.indexOf('.'); + // especially when precision is low + var e = 1; + var count = 0; + while (Math.round(val * e) / e !== val) { + e *= 10; + count++; + } + return count; +} + +/** + * @param {string|number} val + * @return {number} + */ +function getPrecisionSafe(val) { + var str = val.toString(); + + // Consider scientific notation: '3.4e-12' '3.4e+12' + var eIndex = str.indexOf('e'); + if (eIndex > 0) { + var precision = +str.slice(eIndex + 1); + return precision < 0 ? -precision : 0; + } + else { + var dotIndex = str.indexOf('.'); + return dotIndex < 0 ? 0 : str.length - 1 - dotIndex; + } +} + +/** + * Minimal dicernible data precisioin according to a single pixel. + * + * @param {Array.} dataExtent + * @param {Array.} pixelExtent + * @return {number} precision + */ +function getPixelPrecision(dataExtent, pixelExtent) { + var log = Math.log; + var LN10 = Math.LN10; + var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10); + var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); + // toFixed() digits argument must be between 0 and 20. + var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20); + return !isFinite(precision) ? 20 : precision; +} + +/** + * Get a data of given precision, assuring the sum of percentages + * in valueList is 1. + * The largest remainer method is used. + * https://en.wikipedia.org/wiki/Largest_remainder_method + * + * @param {Array.} valueList a list of all data + * @param {number} idx index of the data to be processed in valueList + * @param {number} precision integer number showing digits of precision + * @return {number} percent ranging from 0 to 100 + */ +function getPercentWithPrecision(valueList, idx, precision) { + if (!valueList[idx]) { + return 0; + } + + var sum = reduce(valueList, function (acc, val) { + return acc + (isNaN(val) ? 0 : val); + }, 0); + if (sum === 0) { + return 0; + } + + var digits = Math.pow(10, precision); + var votesPerQuota = map(valueList, function (val) { + return (isNaN(val) ? 0 : val) / sum * digits * 100; + }); + var targetSeats = digits * 100; + + var seats = map(votesPerQuota, function (votes) { + // Assign automatic seats. + return Math.floor(votes); + }); + var currentSum = reduce(seats, function (acc, val) { + return acc + val; + }, 0); + + var remainder = map(votesPerQuota, function (votes, idx) { + return votes - seats[idx]; + }); + + // Has remainding votes. + while (currentSum < targetSeats) { + // Find next largest remainder. + var max = Number.NEGATIVE_INFINITY; + var maxId = null; + for (var i = 0, len = remainder.length; i < len; ++i) { + if (remainder[i] > max) { + max = remainder[i]; + maxId = i; + } + } + + // Add a vote to max remainder. + ++seats[maxId]; + remainder[maxId] = 0; + ++currentSum; + } + + return seats[idx] / digits; +} + +// Number.MAX_SAFE_INTEGER, ie do not support. +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * To 0 - 2 * PI, considering negative radian. + * @param {number} radian + * @return {number} + */ +function remRadian(radian) { + var pi2 = Math.PI * 2; + return (radian % pi2 + pi2) % pi2; +} + +/** + * @param {type} radian + * @return {boolean} + */ +function isRadianAroundZero(val) { + return val > -RADIAN_EPSILON && val < RADIAN_EPSILON; +} + +var TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/; // jshint ignore:line + +/** + * @param {string|Date|number} value These values can be accepted: + * + An instance of Date, represent a time in its own time zone. + * + Or string in a subset of ISO 8601, only including: + * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06', + * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123', + * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00', + * all of which will be treated as local time if time zone is not specified + * (see ). + * + Or other string format, including (all of which will be treated as loacal time): + * '2012', '2012-3-1', '2012/3/1', '2012/03/01', + * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123' + * + a timestamp, which represent a time in UTC. + * @return {Date} date + */ +function parseDate(value) { + if (value instanceof Date) { + return value; + } + else if (typeof value === 'string') { + // Different browsers parse date in different way, so we parse it manually. + // Some other issues: + // new Date('1970-01-01') is UTC, + // new Date('1970/01/01') and new Date('1970-1-01') is local. + // See issue #3623 + var match = TIME_REG.exec(value); + + if (!match) { + // return Invalid Date. + return new Date(NaN); + } + + // Use local time when no timezone offset specifed. + if (!match[8]) { + // match[n] can only be string or undefined. + // But take care of '12' + 1 => '121'. + return new Date( + +match[1], + +(match[2] || 1) - 1, + +match[3] || 1, + +match[4] || 0, + +(match[5] || 0), + +match[6] || 0, + +match[7] || 0 + ); + } + // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time, + // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment). + // For example, system timezone is set as "Time Zone: America/Toronto", + // then these code will get different result: + // `new Date(1478411999999).getTimezoneOffset(); // get 240` + // `new Date(1478412000000).getTimezoneOffset(); // get 300` + // So we should not use `new Date`, but use `Date.UTC`. + else { + var hour = +match[4] || 0; + if (match[8].toUpperCase() !== 'Z') { + hour -= match[8].slice(0, 3); + } + return new Date(Date.UTC( + +match[1], + +(match[2] || 1) - 1, + +match[3] || 1, + hour, + +(match[5] || 0), + +match[6] || 0, + +match[7] || 0 + )); + } + } + else if (value == null) { + return new Date(NaN); + } + + return new Date(Math.round(value)); +} + +/** + * Quantity of a number. e.g. 0.1, 1, 10, 100 + * + * @param {number} val + * @return {number} + */ +function quantity(val) { + return Math.pow(10, quantityExponent(val)); +} + +function quantityExponent(val) { + return Math.floor(Math.log(val) / Math.LN10); +} + +/** + * find a “nice” number approximately equal to x. Round the number if round = true, + * take ceiling if round = false. The primary observation is that the “nicest” + * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers. + * + * See "Nice Numbers for Graph Labels" of Graphic Gems. + * + * @param {number} val Non-negative value. + * @param {boolean} round + * @return {number} + */ +function nice(val, round) { + var exponent = quantityExponent(val); + var exp10 = Math.pow(10, exponent); + var f = val / exp10; // 1 <= f < 10 + var nf; + if (round) { + if (f < 1.5) { nf = 1; } + else if (f < 2.5) { nf = 2; } + else if (f < 4) { nf = 3; } + else if (f < 7) { nf = 5; } + else { nf = 10; } + } + else { + if (f < 1) { nf = 1; } + else if (f < 2) { nf = 2; } + else if (f < 3) { nf = 3; } + else if (f < 5) { nf = 5; } + else { nf = 10; } + } + val = nf * exp10; + + // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754). + // 20 is the uppper bound of toFixed. + return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val; +} + +/** + * Order intervals asc, and split them when overlap. + * expect(numberUtil.reformIntervals([ + * {interval: [18, 62], close: [1, 1]}, + * {interval: [-Infinity, -70], close: [0, 0]}, + * {interval: [-70, -26], close: [1, 1]}, + * {interval: [-26, 18], close: [1, 1]}, + * {interval: [62, 150], close: [1, 1]}, + * {interval: [106, 150], close: [1, 1]}, + * {interval: [150, Infinity], close: [0, 0]} + * ])).toEqual([ + * {interval: [-Infinity, -70], close: [0, 0]}, + * {interval: [-70, -26], close: [1, 1]}, + * {interval: [-26, 18], close: [0, 1]}, + * {interval: [18, 62], close: [0, 1]}, + * {interval: [62, 150], close: [0, 1]}, + * {interval: [150, Infinity], close: [0, 0]} + * ]); + * @param {Array.} list, where `close` mean open or close + * of the interval, and Infinity can be used. + * @return {Array.} The origin list, which has been reformed. + */ +function reformIntervals(list) { + list.sort(function (a, b) { + return littleThan(a, b, 0) ? -1 : 1; + }); + + var curr = -Infinity; + var currClose = 1; + for (var i = 0; i < list.length;) { + var interval = list[i].interval; + var close = list[i].close; + + for (var lg = 0; lg < 2; lg++) { + if (interval[lg] <= curr) { + interval[lg] = curr; + close[lg] = !lg ? 1 - currClose : 1; + } + curr = interval[lg]; + currClose = close[lg]; + } + + if (interval[0] === interval[1] && close[0] * close[1] !== 1) { + list.splice(i, 1); + } + else { + i++; + } + } + + return list; + + function littleThan(a, b, lg) { + return a.interval[lg] < b.interval[lg] + || ( + a.interval[lg] === b.interval[lg] + && ( + (a.close[lg] - b.close[lg] === (!lg ? 1 : -1)) + || (!lg && littleThan(a, b, 1)) + ) + ); + } +} + +/** + * parseFloat NaNs numeric-cast false positives (null|true|false|"") + * ...but misinterprets leading-number strings, particularly hex literals ("0x...") + * subtraction forces infinities to NaN + * + * @param {*} v + * @return {boolean} + */ +function isNumeric(v) { + return v - parseFloat(v) >= 0; +} + + +var number = (Object.freeze || Object)({ + linearMap: linearMap, + parsePercent: parsePercent$1, + round: round, + asc: asc, + getPrecision: getPrecision, + getPrecisionSafe: getPrecisionSafe, + getPixelPrecision: getPixelPrecision, + getPercentWithPrecision: getPercentWithPrecision, + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER, + remRadian: remRadian, + isRadianAroundZero: isRadianAroundZero, + parseDate: parseDate, + quantity: quantity, + nice: nice, + reformIntervals: reformIntervals, + isNumeric: isNumeric +}); + +/** + * 每三位默认加,格式化 + * @param {string|number} x + * @return {string} + */ +function addCommas(x) { + if (isNaN(x)) { + return '-'; + } + x = (x + '').split('.'); + return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,'$1,') + + (x.length > 1 ? ('.' + x[1]) : ''); +} + +/** + * @param {string} str + * @param {boolean} [upperCaseFirst=false] + * @return {string} str + */ +function toCamelCase(str, upperCaseFirst) { + str = (str || '').toLowerCase().replace(/-(.)/g, function(match, group1) { + return group1.toUpperCase(); + }); + + if (upperCaseFirst && str) { + str = str.charAt(0).toUpperCase() + str.slice(1); + } + + return str; +} + +var normalizeCssArray$1 = normalizeCssArray; + +function encodeHTML(source) { + return String(source) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g']; + +var wrapVar = function (varName, seriesIdx) { + return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}'; +}; + +/** + * Template formatter + * @param {string} tpl + * @param {Array.|Object} paramsList + * @param {boolean} [encode=false] + * @return {string} + */ +function formatTpl(tpl, paramsList, encode) { + if (!isArray(paramsList)) { + paramsList = [paramsList]; + } + var seriesLen = paramsList.length; + if (!seriesLen) { + return ''; + } + + var $vars = paramsList[0].$vars || []; + for (var i = 0; i < $vars.length; i++) { + var alias = TPL_VAR_ALIAS[i]; + var val = wrapVar(alias, 0); + tpl = tpl.replace(wrapVar(alias), encode ? encodeHTML(val) : val); + } + for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) { + for (var k = 0; k < $vars.length; k++) { + var val = paramsList[seriesIdx][$vars[k]]; + tpl = tpl.replace( + wrapVar(TPL_VAR_ALIAS[k], seriesIdx), + encode ? encodeHTML(val) : val + ); + } + } + + return tpl; +} + +/** + * simple Template formatter + * + * @param {string} tpl + * @param {Object} param + * @param {boolean} [encode=false] + * @return {string} + */ +function formatTplSimple(tpl, param, encode) { + each$1(param, function (value, key) { + tpl = tpl.replace( + '{' + key + '}', + encode ? encodeHTML(value) : value + ); + }); + return tpl; +} + +/** + * @param {string} color + * @param {string} [extraCssText] + * @return {string} + */ +function getTooltipMarker(color, extraCssText) { + return color + ? '' + : ''; +} + +/** + * @param {string} str + * @return {string} + * @inner + */ +var s2d = function (str) { + return str < 10 ? ('0' + str) : str; +}; + +/** + * ISO Date format + * @param {string} tpl + * @param {number} value + * @param {boolean} [isUTC=false] Default in local time. + * see `module:echarts/scale/Time` + * and `module:echarts/util/number#parseDate`. + * @inner + */ +function formatTime(tpl, value, isUTC) { + if (tpl === 'week' + || tpl === 'month' + || tpl === 'quarter' + || tpl === 'half-year' + || tpl === 'year' + ) { + tpl = 'MM-dd\nyyyy'; + } + + var date = parseDate(value); + var utc = isUTC ? 'UTC' : ''; + var y = date['get' + utc + 'FullYear'](); + var M = date['get' + utc + 'Month']() + 1; + var d = date['get' + utc + 'Date'](); + var h = date['get' + utc + 'Hours'](); + var m = date['get' + utc + 'Minutes'](); + var s = date['get' + utc + 'Seconds'](); + + tpl = tpl.replace('MM', s2d(M)) + .replace('M', M) + .replace('yyyy', y) + .replace('yy', y % 100) + .replace('dd', s2d(d)) + .replace('d', d) + .replace('hh', s2d(h)) + .replace('h', h) + .replace('mm', s2d(m)) + .replace('m', m) + .replace('ss', s2d(s)) + .replace('s', s); + + return tpl; +} + +/** + * Capital first + * @param {string} str + * @return {string} + */ +function capitalFirst(str) { + return str ? str.charAt(0).toUpperCase() + str.substr(1) : str; +} + +var truncateText$1 = truncateText; + +var getTextRect = getBoundingRect; + + +var format = (Object.freeze || Object)({ + addCommas: addCommas, + toCamelCase: toCamelCase, + normalizeCssArray: normalizeCssArray$1, + encodeHTML: encodeHTML, + formatTpl: formatTpl, + formatTplSimple: formatTplSimple, + getTooltipMarker: getTooltipMarker, + formatTime: formatTime, + capitalFirst: capitalFirst, + truncateText: truncateText$1, + getTextRect: getTextRect +}); + +var TYPE_DELIMITER = '.'; +var IS_CONTAINER = '___EC__COMPONENT__CONTAINER___'; +var MEMBER_PRIFIX = '\0ec_\0'; + +/** + * Hide private class member. + * The same behavior as `host[name] = value;` (can be right-value) + * @public + */ +function set$1(host, name, value) { + return (host[MEMBER_PRIFIX + name] = value); +} + +/** + * Hide private class member. + * The same behavior as `host[name];` + * @public + */ +function get(host, name) { + return host[MEMBER_PRIFIX + name]; +} + +/** + * For hidden private class member. + * The same behavior as `host.hasOwnProperty(name);` + * @public + */ +function hasOwn(host, name) { + return host.hasOwnProperty(MEMBER_PRIFIX + name); +} + +/** + * Notice, parseClassType('') should returns {main: '', sub: ''} + * @public + */ +function parseClassType$1(componentType) { + var ret = {main: '', sub: ''}; + if (componentType) { + componentType = componentType.split(TYPE_DELIMITER); + ret.main = componentType[0] || ''; + ret.sub = componentType[1] || ''; + } + return ret; +} + +/** + * @public + */ +function checkClassType(componentType) { + assert( + /^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), + 'componentType "' + componentType + '" illegal' + ); +} + +/** + * @public + */ +function enableClassExtend(RootClass, mandatoryMethods) { + + RootClass.$constructor = RootClass; + RootClass.extend = function (proto) { + + if (__DEV__) { + each$1(mandatoryMethods, function (method) { + if (!proto[method]) { + console.warn( + 'Method `' + method + '` should be implemented' + + (proto.type ? ' in ' + proto.type : '') + '.' + ); + } + }); + } + + var superClass = this; + var ExtendedClass = function () { + if (!proto.$constructor) { + superClass.apply(this, arguments); + } + else { + proto.$constructor.apply(this, arguments); + } + }; + + extend(ExtendedClass.prototype, proto); + + ExtendedClass.extend = this.extend; + ExtendedClass.superCall = superCall; + ExtendedClass.superApply = superApply; + inherits(ExtendedClass, this); + ExtendedClass.superClass = superClass; + + return ExtendedClass; + }; +} + +// superCall should have class info, which can not be fetch from 'this'. +// Consider this case: +// class A has method f, +// class B inherits class A, overrides method f, f call superApply('f'), +// class C inherits class B, do not overrides method f, +// then when method of class C is called, dead loop occured. +function superCall(context, methodName) { + var args = slice(arguments, 2); + return this.superClass.prototype[methodName].apply(context, args); +} + +function superApply(context, methodName, args) { + return this.superClass.prototype[methodName].apply(context, args); +} + +/** + * @param {Object} entity + * @param {Object} options + * @param {boolean} [options.registerWhenExtend] + * @public + */ +function enableClassManagement(entity, options) { + options = options || {}; + + /** + * Component model classes + * key: componentType, + * value: + * componentClass, when componentType is 'xxx' + * or Object., when componentType is 'xxx.yy' + * @type {Object} + */ + var storage = {}; + + entity.registerClass = function (Clazz, componentType) { + if (componentType) { + checkClassType(componentType); + componentType = parseClassType$1(componentType); + + if (!componentType.sub) { + if (__DEV__) { + if (storage[componentType.main]) { + console.warn(componentType.main + ' exists.'); + } + } + storage[componentType.main] = Clazz; + } + else if (componentType.sub !== IS_CONTAINER) { + var container = makeContainer(componentType); + container[componentType.sub] = Clazz; + } + } + return Clazz; + }; + + entity.getClass = function (componentMainType, subType, throwWhenNotFound) { + var Clazz = storage[componentMainType]; + + if (Clazz && Clazz[IS_CONTAINER]) { + Clazz = subType ? Clazz[subType] : null; + } + + if (throwWhenNotFound && !Clazz) { + throw new Error( + !subType + ? componentMainType + '.' + 'type should be specified.' + : 'Component ' + componentMainType + '.' + (subType || '') + ' not exists. Load it first.' + ); + } + + return Clazz; + }; + + entity.getClassesByMainType = function (componentType) { + componentType = parseClassType$1(componentType); + + var result = []; + var obj = storage[componentType.main]; + + if (obj && obj[IS_CONTAINER]) { + each$1(obj, function (o, type) { + type !== IS_CONTAINER && result.push(o); + }); + } + else { + result.push(obj); + } + + return result; + }; + + entity.hasClass = function (componentType) { + // Just consider componentType.main. + componentType = parseClassType$1(componentType); + return !!storage[componentType.main]; + }; + + /** + * @return {Array.} Like ['aa', 'bb'], but can not be ['aa.xx'] + */ + entity.getAllClassMainTypes = function () { + var types = []; + each$1(storage, function (obj, type) { + types.push(type); + }); + return types; + }; + + /** + * If a main type is container and has sub types + * @param {string} mainType + * @return {boolean} + */ + entity.hasSubTypes = function (componentType) { + componentType = parseClassType$1(componentType); + var obj = storage[componentType.main]; + return obj && obj[IS_CONTAINER]; + }; + + entity.parseClassType = parseClassType$1; + + function makeContainer(componentType) { + var container = storage[componentType.main]; + if (!container || !container[IS_CONTAINER]) { + container = storage[componentType.main] = {}; + container[IS_CONTAINER] = true; + } + return container; + } + + if (options.registerWhenExtend) { + var originalExtend = entity.extend; + if (originalExtend) { + entity.extend = function (proto) { + var ExtendedClass = originalExtend.call(this, proto); + return entity.registerClass(ExtendedClass, proto.type); + }; + } + } + + return entity; +} + +/** + * @param {string|Array.} properties + */ + +// TODO Parse shadow style +// TODO Only shallow path support +var makeStyleMapper = function (properties) { + // Normalize + for (var i = 0; i < properties.length; i++) { + if (!properties[i][1]) { + properties[i][1] = properties[i][0]; + } + } + return function (model, excludes, includes) { + var style = {}; + for (var i = 0; i < properties.length; i++) { + var propName = properties[i][1]; + if ((excludes && indexOf(excludes, propName) >= 0) + || (includes && indexOf(includes, propName) < 0) + ) { + continue; + } + var val = model.getShallow(propName); + if (val != null) { + style[properties[i][0]] = val; + } + } + return style; + }; +}; + +var getLineStyle = makeStyleMapper( + [ + ['lineWidth', 'width'], + ['stroke', 'color'], + ['opacity'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'] + ] +); + +var lineStyleMixin = { + getLineStyle: function (excludes) { + var style = getLineStyle(this, excludes); + var lineDash = this.getLineDash(style.lineWidth); + lineDash && (style.lineDash = lineDash); + return style; + }, + + getLineDash: function (lineWidth) { + if (lineWidth == null) { + lineWidth = 1; + } + var lineType = this.get('type'); + var dotSize = Math.max(lineWidth, 2); + var dashSize = lineWidth * 4; + return (lineType === 'solid' || lineType == null) ? null + : (lineType === 'dashed' ? [dashSize, dashSize] : [dotSize, dotSize]); + } +}; + +var getAreaStyle = makeStyleMapper( + [ + ['fill', 'color'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['opacity'], + ['shadowColor'] + ] +); + +var areaStyleMixin = { + getAreaStyle: function (excludes, includes) { + return getAreaStyle(this, excludes, includes); + } +}; + +/** + * 曲线辅助模块 + * @module zrender/core/curve + * @author pissang(https://www.github.com/pissang) + */ + +var mathPow = Math.pow; +var mathSqrt$2 = Math.sqrt; + +var EPSILON$1 = 1e-8; +var EPSILON_NUMERIC = 1e-4; + +var THREE_SQRT = mathSqrt$2(3); +var ONE_THIRD = 1 / 3; + +// 临时变量 +var _v0 = create(); +var _v1 = create(); +var _v2 = create(); + +function isAroundZero(val) { + return val > -EPSILON$1 && val < EPSILON$1; +} +function isNotAroundZero$1(val) { + return val > EPSILON$1 || val < -EPSILON$1; +} +/** + * 计算三次贝塞尔值 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @return {number} + */ +function cubicAt(p0, p1, p2, p3, t) { + var onet = 1 - t; + return onet * onet * (onet * p0 + 3 * t * p1) + + t * t * (t * p3 + 3 * onet * p2); +} + +/** + * 计算三次贝塞尔导数值 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @return {number} + */ +function cubicDerivativeAt(p0, p1, p2, p3, t) { + var onet = 1 - t; + return 3 * ( + ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + + (p3 - p2) * t * t + ); +} + +/** + * 计算三次贝塞尔方程根,使用盛金公式 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} val + * @param {Array.} roots + * @return {number} 有效根数目 + */ +function cubicRootAt(p0, p1, p2, p3, val, roots) { + // Evaluate roots of cubic functions + var a = p3 + 3 * (p1 - p2) - p0; + var b = 3 * (p2 - p1 * 2 + p0); + var c = 3 * (p1 - p0); + var d = p0 - val; + + var A = b * b - 3 * a * c; + var B = b * c - 9 * a * d; + var C = c * c - 3 * b * d; + + var n = 0; + + if (isAroundZero(A) && isAroundZero(B)) { + if (isAroundZero(b)) { + roots[0] = 0; + } + else { + var t1 = -c / b; //t1, t2, t3, b is not zero + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + } + else { + var disc = B * B - 4 * A * C; + + if (isAroundZero(disc)) { + var K = B / A; + var t1 = -b / a + K; // t1, a is not zero + var t2 = -K / 2; // t2, t3 + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + } + else if (disc > 0) { + var discSqrt = mathSqrt$2(disc); + var Y1 = A * b + 1.5 * a * (-B + discSqrt); + var Y2 = A * b + 1.5 * a * (-B - discSqrt); + if (Y1 < 0) { + Y1 = -mathPow(-Y1, ONE_THIRD); + } + else { + Y1 = mathPow(Y1, ONE_THIRD); + } + if (Y2 < 0) { + Y2 = -mathPow(-Y2, ONE_THIRD); + } + else { + Y2 = mathPow(Y2, ONE_THIRD); + } + var t1 = (-b - (Y1 + Y2)) / (3 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + else { + var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt$2(A * A * A)); + var theta = Math.acos(T) / 3; + var ASqrt = mathSqrt$2(A); + var tmp = Math.cos(theta); + + var t1 = (-b - 2 * ASqrt * tmp) / (3 * a); + var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a); + var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + if (t3 >= 0 && t3 <= 1) { + roots[n++] = t3; + } + } + } + return n; +} + +/** + * 计算三次贝塞尔方程极限值的位置 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {Array.} extrema + * @return {number} 有效数目 + */ +function cubicExtrema(p0, p1, p2, p3, extrema) { + var b = 6 * p2 - 12 * p1 + 6 * p0; + var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2; + var c = 3 * p1 - 3 * p0; + + var n = 0; + if (isAroundZero(a)) { + if (isNotAroundZero$1(b)) { + var t1 = -c / b; + if (t1 >= 0 && t1 <=1) { + extrema[n++] = t1; + } + } + } + else { + var disc = b * b - 4 * a * c; + if (isAroundZero(disc)) { + extrema[0] = -b / (2 * a); + } + else if (disc > 0) { + var discSqrt = mathSqrt$2(disc); + var t1 = (-b + discSqrt) / (2 * a); + var t2 = (-b - discSqrt) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + extrema[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + extrema[n++] = t2; + } + } + } + return n; +} + +/** + * 细分三次贝塞尔曲线 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} p3 + * @param {number} t + * @param {Array.} out + */ +function cubicSubdivide(p0, p1, p2, p3, t, out) { + var p01 = (p1 - p0) * t + p0; + var p12 = (p2 - p1) * t + p1; + var p23 = (p3 - p2) * t + p2; + + var p012 = (p12 - p01) * t + p01; + var p123 = (p23 - p12) * t + p12; + + var p0123 = (p123 - p012) * t + p012; + // Seg0 + out[0] = p0; + out[1] = p01; + out[2] = p012; + out[3] = p0123; + // Seg1 + out[4] = p0123; + out[5] = p123; + out[6] = p23; + out[7] = p3; +} + +/** + * 投射点到三次贝塞尔曲线上,返回投射距离。 + * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @param {number} x + * @param {number} y + * @param {Array.} [out] 投射点 + * @return {number} + */ +function cubicProjectPoint( + x0, y0, x1, y1, x2, y2, x3, y3, + x, y, out +) { + // http://pomax.github.io/bezierinfo/#projections + var t; + var interval = 0.005; + var d = Infinity; + var prev; + var next; + var d1; + var d2; + + _v0[0] = x; + _v0[1] = y; + + // 先粗略估计一下可能的最小距离的 t 值 + // PENDING + for (var _t = 0; _t < 1; _t += 0.05) { + _v1[0] = cubicAt(x0, x1, x2, x3, _t); + _v1[1] = cubicAt(y0, y1, y2, y3, _t); + d1 = distSquare(_v0, _v1); + if (d1 < d) { + t = _t; + d = d1; + } + } + d = Infinity; + + // At most 32 iteration + for (var i = 0; i < 32; i++) { + if (interval < EPSILON_NUMERIC) { + break; + } + prev = t - interval; + next = t + interval; + // t - interval + _v1[0] = cubicAt(x0, x1, x2, x3, prev); + _v1[1] = cubicAt(y0, y1, y2, y3, prev); + + d1 = distSquare(_v1, _v0); + + if (prev >= 0 && d1 < d) { + t = prev; + d = d1; + } + else { + // t + interval + _v2[0] = cubicAt(x0, x1, x2, x3, next); + _v2[1] = cubicAt(y0, y1, y2, y3, next); + d2 = distSquare(_v2, _v0); + + if (next <= 1 && d2 < d) { + t = next; + d = d2; + } + else { + interval *= 0.5; + } + } + } + // t + if (out) { + out[0] = cubicAt(x0, x1, x2, x3, t); + out[1] = cubicAt(y0, y1, y2, y3, t); + } + // console.log(interval, i); + return mathSqrt$2(d); +} + +/** + * 计算二次方贝塞尔值 + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @return {number} + */ +function quadraticAt(p0, p1, p2, t) { + var onet = 1 - t; + return onet * (onet * p0 + 2 * t * p1) + t * t * p2; +} + +/** + * 计算二次方贝塞尔导数值 + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @return {number} + */ +function quadraticDerivativeAt(p0, p1, p2, t) { + return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1)); +} + +/** + * 计算二次方贝塞尔方程根 + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @param {Array.} roots + * @return {number} 有效根数目 + */ +function quadraticRootAt(p0, p1, p2, val, roots) { + var a = p0 - 2 * p1 + p2; + var b = 2 * (p1 - p0); + var c = p0 - val; + + var n = 0; + if (isAroundZero(a)) { + if (isNotAroundZero$1(b)) { + var t1 = -c / b; + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + } + else { + var disc = b * b - 4 * a * c; + if (isAroundZero(disc)) { + var t1 = -b / (2 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + else if (disc > 0) { + var discSqrt = mathSqrt$2(disc); + var t1 = (-b + discSqrt) / (2 * a); + var t2 = (-b - discSqrt) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + } + } + return n; +} + +/** + * 计算二次贝塞尔方程极限值 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @return {number} + */ +function quadraticExtremum(p0, p1, p2) { + var divider = p0 + p2 - 2 * p1; + if (divider === 0) { + // p1 is center of p0 and p2 + return 0.5; + } + else { + return (p0 - p1) / divider; + } +} + +/** + * 细分二次贝塞尔曲线 + * @memberOf module:zrender/core/curve + * @param {number} p0 + * @param {number} p1 + * @param {number} p2 + * @param {number} t + * @param {Array.} out + */ +function quadraticSubdivide(p0, p1, p2, t, out) { + var p01 = (p1 - p0) * t + p0; + var p12 = (p2 - p1) * t + p1; + var p012 = (p12 - p01) * t + p01; + + // Seg0 + out[0] = p0; + out[1] = p01; + out[2] = p012; + + // Seg1 + out[3] = p012; + out[4] = p12; + out[5] = p2; +} + +/** + * 投射点到二次贝塞尔曲线上,返回投射距离。 + * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x + * @param {number} y + * @param {Array.} out 投射点 + * @return {number} + */ +function quadraticProjectPoint( + x0, y0, x1, y1, x2, y2, + x, y, out +) { + // http://pomax.github.io/bezierinfo/#projections + var t; + var interval = 0.005; + var d = Infinity; + + _v0[0] = x; + _v0[1] = y; + + // 先粗略估计一下可能的最小距离的 t 值 + // PENDING + for (var _t = 0; _t < 1; _t += 0.05) { + _v1[0] = quadraticAt(x0, x1, x2, _t); + _v1[1] = quadraticAt(y0, y1, y2, _t); + var d1 = distSquare(_v0, _v1); + if (d1 < d) { + t = _t; + d = d1; + } + } + d = Infinity; + + // At most 32 iteration + for (var i = 0; i < 32; i++) { + if (interval < EPSILON_NUMERIC) { + break; + } + var prev = t - interval; + var next = t + interval; + // t - interval + _v1[0] = quadraticAt(x0, x1, x2, prev); + _v1[1] = quadraticAt(y0, y1, y2, prev); + + var d1 = distSquare(_v1, _v0); + + if (prev >= 0 && d1 < d) { + t = prev; + d = d1; + } + else { + // t + interval + _v2[0] = quadraticAt(x0, x1, x2, next); + _v2[1] = quadraticAt(y0, y1, y2, next); + var d2 = distSquare(_v2, _v0); + if (next <= 1 && d2 < d) { + t = next; + d = d2; + } + else { + interval *= 0.5; + } + } + } + // t + if (out) { + out[0] = quadraticAt(x0, x1, x2, t); + out[1] = quadraticAt(y0, y1, y2, t); + } + // console.log(interval, i); + return mathSqrt$2(d); +} + +/** + * @author Yi Shen(https://github.com/pissang) + */ + +var mathMin$3 = Math.min; +var mathMax$3 = Math.max; +var mathSin$2 = Math.sin; +var mathCos$2 = Math.cos; +var PI2 = Math.PI * 2; + +var start = create(); +var end = create(); +var extremity = create(); + +/** + * 从顶点数组中计算出最小包围盒,写入`min`和`max`中 + * @module zrender/core/bbox + * @param {Array} points 顶点数组 + * @param {number} min + * @param {number} max + */ +function fromPoints(points, min$$1, max$$1) { + if (points.length === 0) { + return; + } + var p = points[0]; + var left = p[0]; + var right = p[0]; + var top = p[1]; + var bottom = p[1]; + var i; + + for (i = 1; i < points.length; i++) { + p = points[i]; + left = mathMin$3(left, p[0]); + right = mathMax$3(right, p[0]); + top = mathMin$3(top, p[1]); + bottom = mathMax$3(bottom, p[1]); + } + + min$$1[0] = left; + min$$1[1] = top; + max$$1[0] = right; + max$$1[1] = bottom; +} + +/** + * @memberOf module:zrender/core/bbox + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {Array.} min + * @param {Array.} max + */ +function fromLine(x0, y0, x1, y1, min$$1, max$$1) { + min$$1[0] = mathMin$3(x0, x1); + min$$1[1] = mathMin$3(y0, y1); + max$$1[0] = mathMax$3(x0, x1); + max$$1[1] = mathMax$3(y0, y1); +} + +var xDim = []; +var yDim = []; +/** + * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中 + * @memberOf module:zrender/core/bbox + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @param {Array.} min + * @param {Array.} max + */ +function fromCubic( + x0, y0, x1, y1, x2, y2, x3, y3, min$$1, max$$1 +) { + var cubicExtrema$$1 = cubicExtrema; + var cubicAt$$1 = cubicAt; + var i; + var n = cubicExtrema$$1(x0, x1, x2, x3, xDim); + min$$1[0] = Infinity; + min$$1[1] = Infinity; + max$$1[0] = -Infinity; + max$$1[1] = -Infinity; + + for (i = 0; i < n; i++) { + var x = cubicAt$$1(x0, x1, x2, x3, xDim[i]); + min$$1[0] = mathMin$3(x, min$$1[0]); + max$$1[0] = mathMax$3(x, max$$1[0]); + } + n = cubicExtrema$$1(y0, y1, y2, y3, yDim); + for (i = 0; i < n; i++) { + var y = cubicAt$$1(y0, y1, y2, y3, yDim[i]); + min$$1[1] = mathMin$3(y, min$$1[1]); + max$$1[1] = mathMax$3(y, max$$1[1]); + } + + min$$1[0] = mathMin$3(x0, min$$1[0]); + max$$1[0] = mathMax$3(x0, max$$1[0]); + min$$1[0] = mathMin$3(x3, min$$1[0]); + max$$1[0] = mathMax$3(x3, max$$1[0]); + + min$$1[1] = mathMin$3(y0, min$$1[1]); + max$$1[1] = mathMax$3(y0, max$$1[1]); + min$$1[1] = mathMin$3(y3, min$$1[1]); + max$$1[1] = mathMax$3(y3, max$$1[1]); +} + +/** + * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中 + * @memberOf module:zrender/core/bbox + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {Array.} min + * @param {Array.} max + */ +function fromQuadratic(x0, y0, x1, y1, x2, y2, min$$1, max$$1) { + var quadraticExtremum$$1 = quadraticExtremum; + var quadraticAt$$1 = quadraticAt; + // Find extremities, where derivative in x dim or y dim is zero + var tx = + mathMax$3( + mathMin$3(quadraticExtremum$$1(x0, x1, x2), 1), 0 + ); + var ty = + mathMax$3( + mathMin$3(quadraticExtremum$$1(y0, y1, y2), 1), 0 + ); + + var x = quadraticAt$$1(x0, x1, x2, tx); + var y = quadraticAt$$1(y0, y1, y2, ty); + + min$$1[0] = mathMin$3(x0, x2, x); + min$$1[1] = mathMin$3(y0, y2, y); + max$$1[0] = mathMax$3(x0, x2, x); + max$$1[1] = mathMax$3(y0, y2, y); +} + +/** + * 从圆弧中计算出最小包围盒,写入`min`和`max`中 + * @method + * @memberOf module:zrender/core/bbox + * @param {number} x + * @param {number} y + * @param {number} rx + * @param {number} ry + * @param {number} startAngle + * @param {number} endAngle + * @param {number} anticlockwise + * @param {Array.} min + * @param {Array.} max + */ +function fromArc( + x, y, rx, ry, startAngle, endAngle, anticlockwise, min$$1, max$$1 +) { + var vec2Min = min; + var vec2Max = max; + + var diff = Math.abs(startAngle - endAngle); + + + if (diff % PI2 < 1e-4 && diff > 1e-4) { + // Is a circle + min$$1[0] = x - rx; + min$$1[1] = y - ry; + max$$1[0] = x + rx; + max$$1[1] = y + ry; + return; + } + + start[0] = mathCos$2(startAngle) * rx + x; + start[1] = mathSin$2(startAngle) * ry + y; + + end[0] = mathCos$2(endAngle) * rx + x; + end[1] = mathSin$2(endAngle) * ry + y; + + vec2Min(min$$1, start, end); + vec2Max(max$$1, start, end); + + // Thresh to [0, Math.PI * 2] + startAngle = startAngle % (PI2); + if (startAngle < 0) { + startAngle = startAngle + PI2; + } + endAngle = endAngle % (PI2); + if (endAngle < 0) { + endAngle = endAngle + PI2; + } + + if (startAngle > endAngle && !anticlockwise) { + endAngle += PI2; + } + else if (startAngle < endAngle && anticlockwise) { + startAngle += PI2; + } + if (anticlockwise) { + var tmp = endAngle; + endAngle = startAngle; + startAngle = tmp; + } + + // var number = 0; + // var step = (anticlockwise ? -Math.PI : Math.PI) / 2; + for (var angle = 0; angle < endAngle; angle += Math.PI / 2) { + if (angle > startAngle) { + extremity[0] = mathCos$2(angle) * rx + x; + extremity[1] = mathSin$2(angle) * ry + y; + + vec2Min(min$$1, extremity, min$$1); + vec2Max(max$$1, extremity, max$$1); + } + } +} + +/** + * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中 + * 可以用于 isInsidePath 判断以及获取boundingRect + * + * @module zrender/core/PathProxy + * @author Yi Shen (http://www.github.com/pissang) + */ + +// TODO getTotalLength, getPointAtLength + +var CMD = { + M: 1, + L: 2, + C: 3, + Q: 4, + A: 5, + Z: 6, + // Rect + R: 7 +}; + +// var CMD_MEM_SIZE = { +// M: 3, +// L: 3, +// C: 7, +// Q: 5, +// A: 9, +// R: 5, +// Z: 1 +// }; + +var min$1 = []; +var max$1 = []; +var min2 = []; +var max2 = []; +var mathMin$2 = Math.min; +var mathMax$2 = Math.max; +var mathCos$1 = Math.cos; +var mathSin$1 = Math.sin; +var mathSqrt$1 = Math.sqrt; +var mathAbs = Math.abs; + +var hasTypedArray = typeof Float32Array != 'undefined'; + +/** + * @alias module:zrender/core/PathProxy + * @constructor + */ +var PathProxy = function (notSaveData) { + + this._saveData = !(notSaveData || false); + + if (this._saveData) { + /** + * Path data. Stored as flat array + * @type {Array.} + */ + this.data = []; + } + + this._ctx = null; +}; + +/** + * 快速计算Path包围盒(并不是最小包围盒) + * @return {Object} + */ +PathProxy.prototype = { + + constructor: PathProxy, + + _xi: 0, + _yi: 0, + + _x0: 0, + _y0: 0, + // Unit x, Unit y. Provide for avoiding drawing that too short line segment + _ux: 0, + _uy: 0, + + _len: 0, + + _lineDash: null, + + _dashOffset: 0, + + _dashIdx: 0, + + _dashSum: 0, + + /** + * @readOnly + */ + setScale: function (sx, sy) { + this._ux = mathAbs(1 / devicePixelRatio / sx) || 0; + this._uy = mathAbs(1 / devicePixelRatio / sy) || 0; + }, + + getContext: function () { + return this._ctx; + }, + + /** + * @param {CanvasRenderingContext2D} ctx + * @return {module:zrender/core/PathProxy} + */ + beginPath: function (ctx) { + + this._ctx = ctx; + + ctx && ctx.beginPath(); + + ctx && (this.dpr = ctx.dpr); + + // Reset + if (this._saveData) { + this._len = 0; + } + + if (this._lineDash) { + this._lineDash = null; + + this._dashOffset = 0; + } + + return this; + }, + + /** + * @param {number} x + * @param {number} y + * @return {module:zrender/core/PathProxy} + */ + moveTo: function (x, y) { + this.addData(CMD.M, x, y); + this._ctx && this._ctx.moveTo(x, y); + + // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用 + // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。 + // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要 + // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持 + this._x0 = x; + this._y0 = y; + + this._xi = x; + this._yi = y; + + return this; + }, + + /** + * @param {number} x + * @param {number} y + * @return {module:zrender/core/PathProxy} + */ + lineTo: function (x, y) { + var exceedUnit = mathAbs(x - this._xi) > this._ux + || mathAbs(y - this._yi) > this._uy + // Force draw the first segment + || this._len < 5; + + this.addData(CMD.L, x, y); + + if (this._ctx && exceedUnit) { + this._needsDash() ? this._dashedLineTo(x, y) + : this._ctx.lineTo(x, y); + } + if (exceedUnit) { + this._xi = x; + this._yi = y; + } + + return this; + }, + + /** + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @return {module:zrender/core/PathProxy} + */ + bezierCurveTo: function (x1, y1, x2, y2, x3, y3) { + this.addData(CMD.C, x1, y1, x2, y2, x3, y3); + if (this._ctx) { + this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) + : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); + } + this._xi = x3; + this._yi = y3; + return this; + }, + + /** + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @return {module:zrender/core/PathProxy} + */ + quadraticCurveTo: function (x1, y1, x2, y2) { + this.addData(CMD.Q, x1, y1, x2, y2); + if (this._ctx) { + this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2) + : this._ctx.quadraticCurveTo(x1, y1, x2, y2); + } + this._xi = x2; + this._yi = y2; + return this; + }, + + /** + * @param {number} cx + * @param {number} cy + * @param {number} r + * @param {number} startAngle + * @param {number} endAngle + * @param {boolean} anticlockwise + * @return {module:zrender/core/PathProxy} + */ + arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) { + this.addData( + CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1 + ); + this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); + + this._xi = mathCos$1(endAngle) * r + cx; + this._yi = mathSin$1(endAngle) * r + cx; + return this; + }, + + // TODO + arcTo: function (x1, y1, x2, y2, radius) { + if (this._ctx) { + this._ctx.arcTo(x1, y1, x2, y2, radius); + } + return this; + }, + + // TODO + rect: function (x, y, w, h) { + this._ctx && this._ctx.rect(x, y, w, h); + this.addData(CMD.R, x, y, w, h); + return this; + }, + + /** + * @return {module:zrender/core/PathProxy} + */ + closePath: function () { + this.addData(CMD.Z); + + var ctx = this._ctx; + var x0 = this._x0; + var y0 = this._y0; + if (ctx) { + this._needsDash() && this._dashedLineTo(x0, y0); + ctx.closePath(); + } + + this._xi = x0; + this._yi = y0; + return this; + }, + + /** + * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。 + * stroke 同样 + * @param {CanvasRenderingContext2D} ctx + * @return {module:zrender/core/PathProxy} + */ + fill: function (ctx) { + ctx && ctx.fill(); + this.toStatic(); + }, + + /** + * @param {CanvasRenderingContext2D} ctx + * @return {module:zrender/core/PathProxy} + */ + stroke: function (ctx) { + ctx && ctx.stroke(); + this.toStatic(); + }, + + /** + * 必须在其它绘制命令前调用 + * Must be invoked before all other path drawing methods + * @return {module:zrender/core/PathProxy} + */ + setLineDash: function (lineDash) { + if (lineDash instanceof Array) { + this._lineDash = lineDash; + + this._dashIdx = 0; + + var lineDashSum = 0; + for (var i = 0; i < lineDash.length; i++) { + lineDashSum += lineDash[i]; + } + this._dashSum = lineDashSum; + } + return this; + }, + + /** + * 必须在其它绘制命令前调用 + * Must be invoked before all other path drawing methods + * @return {module:zrender/core/PathProxy} + */ + setLineDashOffset: function (offset) { + this._dashOffset = offset; + return this; + }, + + /** + * + * @return {boolean} + */ + len: function () { + return this._len; + }, + + /** + * 直接设置 Path 数据 + */ + setData: function (data) { + + var len$$1 = data.length; + + if (! (this.data && this.data.length == len$$1) && hasTypedArray) { + this.data = new Float32Array(len$$1); + } + + for (var i = 0; i < len$$1; i++) { + this.data[i] = data[i]; + } + + this._len = len$$1; + }, + + /** + * 添加子路径 + * @param {module:zrender/core/PathProxy|Array.} path + */ + appendPath: function (path) { + if (!(path instanceof Array)) { + path = [path]; + } + var len$$1 = path.length; + var appendSize = 0; + var offset = this._len; + for (var i = 0; i < len$$1; i++) { + appendSize += path[i].len(); + } + if (hasTypedArray && (this.data instanceof Float32Array)) { + this.data = new Float32Array(offset + appendSize); + } + for (var i = 0; i < len$$1; i++) { + var appendPathData = path[i].data; + for (var k = 0; k < appendPathData.length; k++) { + this.data[offset++] = appendPathData[k]; + } + } + this._len = offset; + }, + + /** + * 填充 Path 数据。 + * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。 + */ + addData: function (cmd) { + if (!this._saveData) { + return; + } + + var data = this.data; + if (this._len + arguments.length > data.length) { + // 因为之前的数组已经转换成静态的 Float32Array + // 所以不够用时需要扩展一个新的动态数组 + this._expandData(); + data = this.data; + } + for (var i = 0; i < arguments.length; i++) { + data[this._len++] = arguments[i]; + } + + this._prevCmd = cmd; + }, + + _expandData: function () { + // Only if data is Float32Array + if (!(this.data instanceof Array)) { + var newData = []; + for (var i = 0; i < this._len; i++) { + newData[i] = this.data[i]; + } + this.data = newData; + } + }, + + /** + * If needs js implemented dashed line + * @return {boolean} + * @private + */ + _needsDash: function () { + return this._lineDash; + }, + + _dashedLineTo: function (x1, y1) { + var dashSum = this._dashSum; + var offset = this._dashOffset; + var lineDash = this._lineDash; + var ctx = this._ctx; + + var x0 = this._xi; + var y0 = this._yi; + var dx = x1 - x0; + var dy = y1 - y0; + var dist$$1 = mathSqrt$1(dx * dx + dy * dy); + var x = x0; + var y = y0; + var dash; + var nDash = lineDash.length; + var idx; + dx /= dist$$1; + dy /= dist$$1; + + if (offset < 0) { + // Convert to positive offset + offset = dashSum + offset; + } + offset %= dashSum; + x -= offset * dx; + y -= offset * dy; + + while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1) + || (dx == 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) { + idx = this._dashIdx; + dash = lineDash[idx]; + x += dx * dash; + y += dy * dash; + this._dashIdx = (idx + 1) % nDash; + // Skip positive offset + if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) { + continue; + } + ctx[idx % 2 ? 'moveTo' : 'lineTo']( + dx >= 0 ? mathMin$2(x, x1) : mathMax$2(x, x1), + dy >= 0 ? mathMin$2(y, y1) : mathMax$2(y, y1) + ); + } + // Offset for next lineTo + dx = x - x1; + dy = y - y1; + this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); + }, + + // Not accurate dashed line to + _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) { + var dashSum = this._dashSum; + var offset = this._dashOffset; + var lineDash = this._lineDash; + var ctx = this._ctx; + + var x0 = this._xi; + var y0 = this._yi; + var t; + var dx; + var dy; + var cubicAt$$1 = cubicAt; + var bezierLen = 0; + var idx = this._dashIdx; + var nDash = lineDash.length; + + var x; + var y; + + var tmpLen = 0; + + if (offset < 0) { + // Convert to positive offset + offset = dashSum + offset; + } + offset %= dashSum; + // Bezier approx length + for (t = 0; t < 1; t += 0.1) { + dx = cubicAt$$1(x0, x1, x2, x3, t + 0.1) + - cubicAt$$1(x0, x1, x2, x3, t); + dy = cubicAt$$1(y0, y1, y2, y3, t + 0.1) + - cubicAt$$1(y0, y1, y2, y3, t); + bezierLen += mathSqrt$1(dx * dx + dy * dy); + } + + // Find idx after add offset + for (; idx < nDash; idx++) { + tmpLen += lineDash[idx]; + if (tmpLen > offset) { + break; + } + } + t = (tmpLen - offset) / bezierLen; + + while (t <= 1) { + + x = cubicAt$$1(x0, x1, x2, x3, t); + y = cubicAt$$1(y0, y1, y2, y3, t); + + // Use line to approximate dashed bezier + // Bad result if dash is long + idx % 2 ? ctx.moveTo(x, y) + : ctx.lineTo(x, y); + + t += lineDash[idx] / bezierLen; + + idx = (idx + 1) % nDash; + } + + // Finish the last segment and calculate the new offset + (idx % 2 !== 0) && ctx.lineTo(x3, y3); + dx = x3 - x; + dy = y3 - y; + this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); + }, + + _dashedQuadraticTo: function (x1, y1, x2, y2) { + // Convert quadratic to cubic using degree elevation + var x3 = x2; + var y3 = y2; + x2 = (x2 + 2 * x1) / 3; + y2 = (y2 + 2 * y1) / 3; + x1 = (this._xi + 2 * x1) / 3; + y1 = (this._yi + 2 * y1) / 3; + + this._dashedBezierTo(x1, y1, x2, y2, x3, y3); + }, + + /** + * 转成静态的 Float32Array 减少堆内存占用 + * Convert dynamic array to static Float32Array + */ + toStatic: function () { + var data = this.data; + if (data instanceof Array) { + data.length = this._len; + if (hasTypedArray) { + this.data = new Float32Array(data); + } + } + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getBoundingRect: function () { + min$1[0] = min$1[1] = min2[0] = min2[1] = Number.MAX_VALUE; + max$1[0] = max$1[1] = max2[0] = max2[1] = -Number.MAX_VALUE; + + var data = this.data; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + + for (var i = 0; i < data.length;) { + var cmd = data[i++]; + + if (i == 1) { + // 如果第一个命令是 L, C, Q + // 则 previous point 同绘制命令的第一个 point + // + // 第一个命令为 Arc 的情况下会在后面特殊处理 + xi = data[i]; + yi = data[i + 1]; + + x0 = xi; + y0 = yi; + } + + switch (cmd) { + case CMD.M: + // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 + // 在 closePath 的时候使用 + x0 = data[i++]; + y0 = data[i++]; + xi = x0; + yi = y0; + min2[0] = x0; + min2[1] = y0; + max2[0] = x0; + max2[1] = y0; + break; + case CMD.L: + fromLine(xi, yi, data[i], data[i + 1], min2, max2); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.C: + fromCubic( + xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], + min2, max2 + ); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.Q: + fromQuadratic( + xi, yi, data[i++], data[i++], data[i], data[i + 1], + min2, max2 + ); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.A: + // TODO Arc 判断的开销比较大 + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++]; + var endAngle = data[i++] + startAngle; + // TODO Arc 旋转 + var psi = data[i++]; + var anticlockwise = 1 - data[i++]; + + if (i == 1) { + // 直接使用 arc 命令 + // 第一个命令起点还未定义 + x0 = mathCos$1(startAngle) * rx + cx; + y0 = mathSin$1(startAngle) * ry + cy; + } + + fromArc( + cx, cy, rx, ry, startAngle, endAngle, + anticlockwise, min2, max2 + ); + + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + // Use fromLine + fromLine(x0, y0, x0 + width, y0 + height, min2, max2); + break; + case CMD.Z: + xi = x0; + yi = y0; + break; + } + + // Union + min(min$1, min$1, min2); + max(max$1, max$1, max2); + } + + // No data + if (i === 0) { + min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0; + } + + return new BoundingRect( + min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1] + ); + }, + + /** + * Rebuild path from current data + * Rebuild path will not consider javascript implemented line dash. + * @param {CanvasRenderingContext2D} ctx + */ + rebuildPath: function (ctx) { + var d = this.data; + var x0, y0; + var xi, yi; + var x, y; + var ux = this._ux; + var uy = this._uy; + var len$$1 = this._len; + for (var i = 0; i < len$$1;) { + var cmd = d[i++]; + + if (i == 1) { + // 如果第一个命令是 L, C, Q + // 则 previous point 同绘制命令的第一个 point + // + // 第一个命令为 Arc 的情况下会在后面特殊处理 + xi = d[i]; + yi = d[i + 1]; + + x0 = xi; + y0 = yi; + } + switch (cmd) { + case CMD.M: + x0 = xi = d[i++]; + y0 = yi = d[i++]; + ctx.moveTo(xi, yi); + break; + case CMD.L: + x = d[i++]; + y = d[i++]; + // Not draw too small seg between + if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len$$1 - 1) { + ctx.lineTo(x, y); + xi = x; + yi = y; + } + break; + case CMD.C: + ctx.bezierCurveTo( + d[i++], d[i++], d[i++], d[i++], d[i++], d[i++] + ); + xi = d[i - 2]; + yi = d[i - 1]; + break; + case CMD.Q: + ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]); + xi = d[i - 2]; + yi = d[i - 1]; + break; + case CMD.A: + var cx = d[i++]; + var cy = d[i++]; + var rx = d[i++]; + var ry = d[i++]; + var theta = d[i++]; + var dTheta = d[i++]; + var psi = d[i++]; + var fs = d[i++]; + var r = (rx > ry) ? rx : ry; + var scaleX = (rx > ry) ? 1 : rx / ry; + var scaleY = (rx > ry) ? ry / rx : 1; + var isEllipse = Math.abs(rx - ry) > 1e-3; + var endAngle = theta + dTheta; + if (isEllipse) { + ctx.translate(cx, cy); + ctx.rotate(psi); + ctx.scale(scaleX, scaleY); + ctx.arc(0, 0, r, theta, endAngle, 1 - fs); + ctx.scale(1 / scaleX, 1 / scaleY); + ctx.rotate(-psi); + ctx.translate(-cx, -cy); + } + else { + ctx.arc(cx, cy, r, theta, endAngle, 1 - fs); + } + + if (i == 1) { + // 直接使用 arc 命令 + // 第一个命令起点还未定义 + x0 = mathCos$1(theta) * rx + cx; + y0 = mathSin$1(theta) * ry + cy; + } + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: + x0 = xi = d[i]; + y0 = yi = d[i + 1]; + ctx.rect(d[i++], d[i++], d[i++], d[i++]); + break; + case CMD.Z: + ctx.closePath(); + xi = x0; + yi = y0; + } + } + } +}; + +PathProxy.CMD = CMD; + +/** + * 线段包含判断 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {boolean} + */ +function containStroke$1(x0, y0, x1, y1, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + var _a = 0; + var _b = x0; + // Quick reject + if ( + (y > y0 + _l && y > y1 + _l) + || (y < y0 - _l && y < y1 - _l) + || (x > x0 + _l && x > x1 + _l) + || (x < x0 - _l && x < x1 - _l) + ) { + return false; + } + + if (x0 !== x1) { + _a = (y0 - y1) / (x0 - x1); + _b = (x0 * y1 - x1 * y0) / (x0 - x1) ; + } + else { + return Math.abs(x - x0) <= _l / 2; + } + var tmp = _a * x - y + _b; + var _s = tmp * tmp / (_a * _a + 1); + return _s <= _l / 2 * _l / 2; +} + +/** + * 三次贝塞尔曲线描边包含判断 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {boolean} + */ +function containStroke$2(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + // Quick reject + if ( + (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) + || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) + || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) + || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) + ) { + return false; + } + var d = cubicProjectPoint( + x0, y0, x1, y1, x2, y2, x3, y3, + x, y, null + ); + return d <= _l / 2; +} + +/** + * 二次贝塞尔曲线描边包含判断 + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {boolean} + */ +function containStroke$3(x0, y0, x1, y1, x2, y2, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + // Quick reject + if ( + (y > y0 + _l && y > y1 + _l && y > y2 + _l) + || (y < y0 - _l && y < y1 - _l && y < y2 - _l) + || (x > x0 + _l && x > x1 + _l && x > x2 + _l) + || (x < x0 - _l && x < x1 - _l && x < x2 - _l) + ) { + return false; + } + var d = quadraticProjectPoint( + x0, y0, x1, y1, x2, y2, + x, y, null + ); + return d <= _l / 2; +} + +var PI2$3 = Math.PI * 2; + +function normalizeRadian(angle) { + angle %= PI2$3; + if (angle < 0) { + angle += PI2$3; + } + return angle; +} + +var PI2$2 = Math.PI * 2; + +/** + * 圆弧描边包含判断 + * @param {number} cx + * @param {number} cy + * @param {number} r + * @param {number} startAngle + * @param {number} endAngle + * @param {boolean} anticlockwise + * @param {number} lineWidth + * @param {number} x + * @param {number} y + * @return {Boolean} + */ +function containStroke$4( + cx, cy, r, startAngle, endAngle, anticlockwise, + lineWidth, x, y +) { + + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + + x -= cx; + y -= cy; + var d = Math.sqrt(x * x + y * y); + + if ((d - _l > r) || (d + _l < r)) { + return false; + } + if (Math.abs(startAngle - endAngle) % PI2$2 < 1e-4) { + // Is a circle + return true; + } + if (anticlockwise) { + var tmp = startAngle; + startAngle = normalizeRadian(endAngle); + endAngle = normalizeRadian(tmp); + } else { + startAngle = normalizeRadian(startAngle); + endAngle = normalizeRadian(endAngle); + } + if (startAngle > endAngle) { + endAngle += PI2$2; + } + + var angle = Math.atan2(y, x); + if (angle < 0) { + angle += PI2$2; + } + return (angle >= startAngle && angle <= endAngle) + || (angle + PI2$2 >= startAngle && angle + PI2$2 <= endAngle); +} + +function windingLine(x0, y0, x1, y1, x, y) { + if ((y > y0 && y > y1) || (y < y0 && y < y1)) { + return 0; + } + // Ignore horizontal line + if (y1 === y0) { + return 0; + } + var dir = y1 < y0 ? 1 : -1; + var t = (y - y0) / (y1 - y0); + + // Avoid winding error when intersection point is the connect point of two line of polygon + if (t === 1 || t === 0) { + dir = y1 < y0 ? 0.5 : -0.5; + } + + var x_ = t * (x1 - x0) + x0; + + return x_ > x ? dir : 0; +} + +var PI2$1 = Math.PI * 2; + +var EPSILON$2 = 1e-4; + +function isAroundEqual(a, b) { + return Math.abs(a - b) < EPSILON$2; +} + +// 临时数组 +var roots = [-1, -1, -1]; +var extrema = [-1, -1]; + +function swapExtrema() { + var tmp = extrema[0]; + extrema[0] = extrema[1]; + extrema[1] = tmp; +} + +function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) { + // Quick reject + if ( + (y > y0 && y > y1 && y > y2 && y > y3) + || (y < y0 && y < y1 && y < y2 && y < y3) + ) { + return 0; + } + var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots); + if (nRoots === 0) { + return 0; + } + else { + var w = 0; + var nExtrema = -1; + var y0_, y1_; + for (var i = 0; i < nRoots; i++) { + var t = roots[i]; + + // Avoid winding error when intersection point is the connect point of two line of polygon + var unit = (t === 0 || t === 1) ? 0.5 : 1; + + var x_ = cubicAt(x0, x1, x2, x3, t); + if (x_ < x) { // Quick reject + continue; + } + if (nExtrema < 0) { + nExtrema = cubicExtrema(y0, y1, y2, y3, extrema); + if (extrema[1] < extrema[0] && nExtrema > 1) { + swapExtrema(); + } + y0_ = cubicAt(y0, y1, y2, y3, extrema[0]); + if (nExtrema > 1) { + y1_ = cubicAt(y0, y1, y2, y3, extrema[1]); + } + } + if (nExtrema == 2) { + // 分成三段单调函数 + if (t < extrema[0]) { + w += y0_ < y0 ? unit : -unit; + } + else if (t < extrema[1]) { + w += y1_ < y0_ ? unit : -unit; + } + else { + w += y3 < y1_ ? unit : -unit; + } + } + else { + // 分成两段单调函数 + if (t < extrema[0]) { + w += y0_ < y0 ? unit : -unit; + } + else { + w += y3 < y0_ ? unit : -unit; + } + } + } + return w; + } +} + +function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) { + // Quick reject + if ( + (y > y0 && y > y1 && y > y2) + || (y < y0 && y < y1 && y < y2) + ) { + return 0; + } + var nRoots = quadraticRootAt(y0, y1, y2, y, roots); + if (nRoots === 0) { + return 0; + } + else { + var t = quadraticExtremum(y0, y1, y2); + if (t >= 0 && t <= 1) { + var w = 0; + var y_ = quadraticAt(y0, y1, y2, t); + for (var i = 0; i < nRoots; i++) { + // Remove one endpoint. + var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1; + + var x_ = quadraticAt(x0, x1, x2, roots[i]); + if (x_ < x) { // Quick reject + continue; + } + if (roots[i] < t) { + w += y_ < y0 ? unit : -unit; + } + else { + w += y2 < y_ ? unit : -unit; + } + } + return w; + } + else { + // Remove one endpoint. + var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1; + + var x_ = quadraticAt(x0, x1, x2, roots[0]); + if (x_ < x) { // Quick reject + return 0; + } + return y2 < y0 ? unit : -unit; + } + } +} + +// TODO +// Arc 旋转 +function windingArc( + cx, cy, r, startAngle, endAngle, anticlockwise, x, y +) { + y -= cy; + if (y > r || y < -r) { + return 0; + } + var tmp = Math.sqrt(r * r - y * y); + roots[0] = -tmp; + roots[1] = tmp; + + var diff = Math.abs(startAngle - endAngle); + if (diff < 1e-4) { + return 0; + } + if (diff % PI2$1 < 1e-4) { + // Is a circle + startAngle = 0; + endAngle = PI2$1; + var dir = anticlockwise ? 1 : -1; + if (x >= roots[0] + cx && x <= roots[1] + cx) { + return dir; + } else { + return 0; + } + } + + if (anticlockwise) { + var tmp = startAngle; + startAngle = normalizeRadian(endAngle); + endAngle = normalizeRadian(tmp); + } + else { + startAngle = normalizeRadian(startAngle); + endAngle = normalizeRadian(endAngle); + } + if (startAngle > endAngle) { + endAngle += PI2$1; + } + + var w = 0; + for (var i = 0; i < 2; i++) { + var x_ = roots[i]; + if (x_ + cx > x) { + var angle = Math.atan2(y, x_); + var dir = anticlockwise ? 1 : -1; + if (angle < 0) { + angle = PI2$1 + angle; + } + if ( + (angle >= startAngle && angle <= endAngle) + || (angle + PI2$1 >= startAngle && angle + PI2$1 <= endAngle) + ) { + if (angle > Math.PI / 2 && angle < Math.PI * 1.5) { + dir = -dir; + } + w += dir; + } + } + } + return w; +} + +function containPath(data, lineWidth, isStroke, x, y) { + var w = 0; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + + for (var i = 0; i < data.length;) { + var cmd = data[i++]; + // Begin a new subpath + if (cmd === CMD.M && i > 1) { + // Close previous subpath + if (!isStroke) { + w += windingLine(xi, yi, x0, y0, x, y); + } + // 如果被任何一个 subpath 包含 + // if (w !== 0) { + // return true; + // } + } + + if (i == 1) { + // 如果第一个命令是 L, C, Q + // 则 previous point 同绘制命令的第一个 point + // + // 第一个命令为 Arc 的情况下会在后面特殊处理 + xi = data[i]; + yi = data[i + 1]; + + x0 = xi; + y0 = yi; + } + + switch (cmd) { + case CMD.M: + // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 + // 在 closePath 的时候使用 + x0 = data[i++]; + y0 = data[i++]; + xi = x0; + yi = y0; + break; + case CMD.L: + if (isStroke) { + if (containStroke$1(xi, yi, data[i], data[i + 1], lineWidth, x, y)) { + return true; + } + } + else { + // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN + w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD.C: + if (isStroke) { + if (containStroke$2(xi, yi, + data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], + lineWidth, x, y + )) { + return true; + } + } + else { + w += windingCubic( + xi, yi, + data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], + x, y + ) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD.Q: + if (isStroke) { + if (containStroke$3(xi, yi, + data[i++], data[i++], data[i], data[i + 1], + lineWidth, x, y + )) { + return true; + } + } + else { + w += windingQuadratic( + xi, yi, + data[i++], data[i++], data[i], data[i + 1], + x, y + ) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD.A: + // TODO Arc 判断的开销比较大 + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var theta = data[i++]; + var dTheta = data[i++]; + // TODO Arc 旋转 + var psi = data[i++]; + var anticlockwise = 1 - data[i++]; + var x1 = Math.cos(theta) * rx + cx; + var y1 = Math.sin(theta) * ry + cy; + // 不是直接使用 arc 命令 + if (i > 1) { + w += windingLine(xi, yi, x1, y1, x, y); + } + else { + // 第一个命令起点还未定义 + x0 = x1; + y0 = y1; + } + // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放 + var _x = (x - cx) * ry / rx + cx; + if (isStroke) { + if (containStroke$4( + cx, cy, ry, theta, theta + dTheta, anticlockwise, + lineWidth, _x, y + )) { + return true; + } + } + else { + w += windingArc( + cx, cy, ry, theta, theta + dTheta, anticlockwise, + _x, y + ); + } + xi = Math.cos(theta + dTheta) * rx + cx; + yi = Math.sin(theta + dTheta) * ry + cy; + break; + case CMD.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + var x1 = x0 + width; + var y1 = y0 + height; + if (isStroke) { + if (containStroke$1(x0, y0, x1, y0, lineWidth, x, y) + || containStroke$1(x1, y0, x1, y1, lineWidth, x, y) + || containStroke$1(x1, y1, x0, y1, lineWidth, x, y) + || containStroke$1(x0, y1, x0, y0, lineWidth, x, y) + ) { + return true; + } + } + else { + // FIXME Clockwise ? + w += windingLine(x1, y0, x1, y1, x, y); + w += windingLine(x0, y1, x0, y0, x, y); + } + break; + case CMD.Z: + if (isStroke) { + if (containStroke$1( + xi, yi, x0, y0, lineWidth, x, y + )) { + return true; + } + } + else { + // Close a subpath + w += windingLine(xi, yi, x0, y0, x, y); + // 如果被任何一个 subpath 包含 + // FIXME subpaths may overlap + // if (w !== 0) { + // return true; + // } + } + xi = x0; + yi = y0; + break; + } + } + if (!isStroke && !isAroundEqual(yi, y0)) { + w += windingLine(xi, yi, x0, y0, x, y) || 0; + } + return w !== 0; +} + +function contain(pathData, x, y) { + return containPath(pathData, 0, false, x, y); +} + +function containStroke(pathData, lineWidth, x, y) { + return containPath(pathData, lineWidth, true, x, y); +} + +var getCanvasPattern = Pattern.prototype.getCanvasPattern; + +var abs = Math.abs; + +var pathProxyForDraw = new PathProxy(true); +/** + * @alias module:zrender/graphic/Path + * @extends module:zrender/graphic/Displayable + * @constructor + * @param {Object} opts + */ +function Path(opts) { + Displayable.call(this, opts); + + /** + * @type {module:zrender/core/PathProxy} + * @readOnly + */ + this.path = null; +} + +Path.prototype = { + + constructor: Path, + + type: 'path', + + __dirtyPath: true, + + strokeContainThreshold: 5, + + brush: function (ctx, prevEl) { + var style = this.style; + var path = this.path || pathProxyForDraw; + var hasStroke = style.hasStroke(); + var hasFill = style.hasFill(); + var fill = style.fill; + var stroke = style.stroke; + var hasFillGradient = hasFill && !!(fill.colorStops); + var hasStrokeGradient = hasStroke && !!(stroke.colorStops); + var hasFillPattern = hasFill && !!(fill.image); + var hasStrokePattern = hasStroke && !!(stroke.image); + + style.bind(ctx, this, prevEl); + this.setTransform(ctx); + + if (this.__dirty) { + var rect; + // Update gradient because bounding rect may changed + if (hasFillGradient) { + rect = rect || this.getBoundingRect(); + this._fillGradient = style.getGradient(ctx, fill, rect); + } + if (hasStrokeGradient) { + rect = rect || this.getBoundingRect(); + this._strokeGradient = style.getGradient(ctx, stroke, rect); + } + } + // Use the gradient or pattern + if (hasFillGradient) { + // PENDING If may have affect the state + ctx.fillStyle = this._fillGradient; + } + else if (hasFillPattern) { + ctx.fillStyle = getCanvasPattern.call(fill, ctx); + } + if (hasStrokeGradient) { + ctx.strokeStyle = this._strokeGradient; + } + else if (hasStrokePattern) { + ctx.strokeStyle = getCanvasPattern.call(stroke, ctx); + } + + var lineDash = style.lineDash; + var lineDashOffset = style.lineDashOffset; + + var ctxLineDash = !!ctx.setLineDash; + + // Update path sx, sy + var scale = this.getGlobalScale(); + path.setScale(scale[0], scale[1]); + + // Proxy context + // Rebuild path in following 2 cases + // 1. Path is dirty + // 2. Path needs javascript implemented lineDash stroking. + // In this case, lineDash information will not be saved in PathProxy + if (this.__dirtyPath + || (lineDash && !ctxLineDash && hasStroke) + ) { + path.beginPath(ctx); + + // Setting line dash before build path + if (lineDash && !ctxLineDash) { + path.setLineDash(lineDash); + path.setLineDashOffset(lineDashOffset); + } + + this.buildPath(path, this.shape, false); + + // Clear path dirty flag + if (this.path) { + this.__dirtyPath = false; + } + } + else { + // Replay path building + ctx.beginPath(); + this.path.rebuildPath(ctx); + } + + hasFill && path.fill(ctx); + + if (lineDash && ctxLineDash) { + ctx.setLineDash(lineDash); + ctx.lineDashOffset = lineDashOffset; + } + + hasStroke && path.stroke(ctx); + + if (lineDash && ctxLineDash) { + // PENDING + // Remove lineDash + ctx.setLineDash([]); + } + + this.restoreTransform(ctx); + + // Draw rect text + if (style.text != null) { + this.drawRectText(ctx, this.getBoundingRect()); + } + }, + + // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath + // Like in circle + buildPath: function (ctx, shapeCfg, inBundle) {}, + + createPathProxy: function () { + this.path = new PathProxy(); + }, + + getBoundingRect: function () { + var rect = this._rect; + var style = this.style; + var needsUpdateRect = !rect; + if (needsUpdateRect) { + var path = this.path; + if (!path) { + // Create path on demand. + path = this.path = new PathProxy(); + } + if (this.__dirtyPath) { + path.beginPath(); + this.buildPath(path, this.shape, false); + } + rect = path.getBoundingRect(); + } + this._rect = rect; + + if (style.hasStroke()) { + // Needs update rect with stroke lineWidth when + // 1. Element changes scale or lineWidth + // 2. Shape is changed + var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone()); + if (this.__dirty || needsUpdateRect) { + rectWithStroke.copy(rect); + // FIXME Must after updateTransform + var w = style.lineWidth; + // PENDING, Min line width is needed when line is horizontal or vertical + var lineScale = style.strokeNoScale ? this.getLineScale() : 1; + + // Only add extra hover lineWidth when there are no fill + if (!style.hasFill()) { + w = Math.max(w, this.strokeContainThreshold || 4); + } + // Consider line width + // Line scale can't be 0; + if (lineScale > 1e-10) { + rectWithStroke.width += w / lineScale; + rectWithStroke.height += w / lineScale; + rectWithStroke.x -= w / lineScale / 2; + rectWithStroke.y -= w / lineScale / 2; + } + } + + // Return rect with stroke + return rectWithStroke; + } + + return rect; + }, + + contain: function (x, y) { + var localPos = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + var style = this.style; + x = localPos[0]; + y = localPos[1]; + + if (rect.contain(x, y)) { + var pathData = this.path.data; + if (style.hasStroke()) { + var lineWidth = style.lineWidth; + var lineScale = style.strokeNoScale ? this.getLineScale() : 1; + // Line scale can't be 0; + if (lineScale > 1e-10) { + // Only add extra hover lineWidth when there are no fill + if (!style.hasFill()) { + lineWidth = Math.max(lineWidth, this.strokeContainThreshold); + } + if (containStroke( + pathData, lineWidth / lineScale, x, y + )) { + return true; + } + } + } + if (style.hasFill()) { + return contain(pathData, x, y); + } + } + return false; + }, + + /** + * @param {boolean} dirtyPath + */ + dirty: function (dirtyPath) { + if (dirtyPath == null) { + dirtyPath = true; + } + // Only mark dirty, not mark clean + if (dirtyPath) { + this.__dirtyPath = dirtyPath; + this._rect = null; + } + + this.__dirty = true; + + this.__zr && this.__zr.refresh(); + + // Used as a clipping path + if (this.__clipTarget) { + this.__clipTarget.dirty(); + } + }, + + /** + * Alias for animate('shape') + * @param {boolean} loop + */ + animateShape: function (loop) { + return this.animate('shape', loop); + }, + + // Overwrite attrKV + attrKV: function (key, value) { + // FIXME + if (key === 'shape') { + this.setShape(value); + this.__dirtyPath = true; + this._rect = null; + } + else { + Displayable.prototype.attrKV.call(this, key, value); + } + }, + + /** + * @param {Object|string} key + * @param {*} value + */ + setShape: function (key, value) { + var shape = this.shape; + // Path from string may not have shape + if (shape) { + if (isObject(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + shape[name] = key[name]; + } + } + } + else { + shape[key] = value; + } + this.dirty(true); + } + return this; + }, + + getLineScale: function () { + var m = this.transform; + // Get the line scale. + // Determinant of `m` means how much the area is enlarged by the + // transformation. So its square root can be used as a scale factor + // for width. + return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 + ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) + : 1; + } +}; + +/** + * 扩展一个 Path element, 比如星形,圆等。 + * Extend a path element + * @param {Object} props + * @param {string} props.type Path type + * @param {Function} props.init Initialize + * @param {Function} props.buildPath Overwrite buildPath method + * @param {Object} [props.style] Extended default style config + * @param {Object} [props.shape] Extended default shape config + */ +Path.extend = function (defaults$$1) { + var Sub = function (opts) { + Path.call(this, opts); + + if (defaults$$1.style) { + // Extend default style + this.style.extendFrom(defaults$$1.style, false); + } + + // Extend default shape + var defaultShape = defaults$$1.shape; + if (defaultShape) { + this.shape = this.shape || {}; + var thisShape = this.shape; + for (var name in defaultShape) { + if ( + ! thisShape.hasOwnProperty(name) + && defaultShape.hasOwnProperty(name) + ) { + thisShape[name] = defaultShape[name]; + } + } + } + + defaults$$1.init && defaults$$1.init.call(this, opts); + }; + + inherits(Sub, Path); + + // FIXME 不能 extend position, rotation 等引用对象 + for (var name in defaults$$1) { + // Extending prototype values and methods + if (name !== 'style' && name !== 'shape') { + Sub.prototype[name] = defaults$$1[name]; + } + } + + return Sub; +}; + +inherits(Path, Displayable); + +var points = [[], [], []]; +var mathSqrt$3 = Math.sqrt; +var mathAtan2 = Math.atan2; + +var transformPath = function (path, m) { + var data = path.data; + var cmd; + var nPoint; + var i; + var j; + var k; + var p; + + var M = CMD.M; + var C = CMD.C; + var L = CMD.L; + var R = CMD.R; + var A = CMD.A; + var Q = CMD.Q; + + for (i = 0, j = 0; i < data.length;) { + cmd = data[i++]; + j = i; + nPoint = 0; + + switch (cmd) { + case M: + nPoint = 1; + break; + case L: + nPoint = 1; + break; + case C: + nPoint = 3; + break; + case Q: + nPoint = 2; + break; + case A: + var x = m[4]; + var y = m[5]; + var sx = mathSqrt$3(m[0] * m[0] + m[1] * m[1]); + var sy = mathSqrt$3(m[2] * m[2] + m[3] * m[3]); + var angle = mathAtan2(-m[1] / sy, m[0] / sx); + // cx + data[i] *= sx; + data[i++] += x; + // cy + data[i] *= sy; + data[i++] += y; + // Scale rx and ry + // FIXME Assume psi is 0 here + data[i++] *= sx; + data[i++] *= sy; + + // Start angle + data[i++] += angle; + // end angle + data[i++] += angle; + // FIXME psi + i += 2; + j = i; + break; + case R: + // x0, y0 + p[0] = data[i++]; + p[1] = data[i++]; + applyTransform(p, p, m); + data[j++] = p[0]; + data[j++] = p[1]; + // x1, y1 + p[0] += data[i++]; + p[1] += data[i++]; + applyTransform(p, p, m); + data[j++] = p[0]; + data[j++] = p[1]; + } + + for (k = 0; k < nPoint; k++) { + var p = points[k]; + p[0] = data[i++]; + p[1] = data[i++]; + + applyTransform(p, p, m); + // Write back + data[j++] = p[0]; + data[j++] = p[1]; + } + } +}; + +// command chars +var cc = [ + 'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', + 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A' +]; + +var mathSqrt = Math.sqrt; +var mathSin = Math.sin; +var mathCos = Math.cos; +var PI = Math.PI; + +var vMag = function(v) { + return Math.sqrt(v[0] * v[0] + v[1] * v[1]); +}; +var vRatio = function(u, v) { + return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)); +}; +var vAngle = function(u, v) { + return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) + * Math.acos(vRatio(u, v)); +}; + +function processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) { + var psi = psiDeg * (PI / 180.0); + var xp = mathCos(psi) * (x1 - x2) / 2.0 + + mathSin(psi) * (y1 - y2) / 2.0; + var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0 + + mathCos(psi) * (y1 - y2) / 2.0; + + var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry); + + if (lambda > 1) { + rx *= mathSqrt(lambda); + ry *= mathSqrt(lambda); + } + + var f = (fa === fs ? -1 : 1) + * mathSqrt((((rx * rx) * (ry * ry)) + - ((rx * rx) * (yp * yp)) + - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp) + + (ry * ry) * (xp * xp)) + ) || 0; + + var cxp = f * rx * yp / ry; + var cyp = f * -ry * xp / rx; + + var cx = (x1 + x2) / 2.0 + + mathCos(psi) * cxp + - mathSin(psi) * cyp; + var cy = (y1 + y2) / 2.0 + + mathSin(psi) * cxp + + mathCos(psi) * cyp; + + var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]); + var u = [ (xp - cxp) / rx, (yp - cyp) / ry ]; + var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ]; + var dTheta = vAngle(u, v); + + if (vRatio(u, v) <= -1) { + dTheta = PI; + } + if (vRatio(u, v) >= 1) { + dTheta = 0; + } + if (fs === 0 && dTheta > 0) { + dTheta = dTheta - 2 * PI; + } + if (fs === 1 && dTheta < 0) { + dTheta = dTheta + 2 * PI; + } + + path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs); +} + +function createPathProxyFromString(data) { + if (!data) { + return []; + } + + // command string + var cs = data.replace(/-/g, ' -') + .replace(/ /g, ' ') + .replace(/ /g, ',') + .replace(/,,/g, ','); + + var n; + // create pipes so that we can split the data + for (n = 0; n < cc.length; n++) { + cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]); + } + + // create array + var arr = cs.split('|'); + // init context point + var cpx = 0; + var cpy = 0; + + var path = new PathProxy(); + var CMD$$1 = PathProxy.CMD; + + var prevCmd; + for (n = 1; n < arr.length; n++) { + var str = arr[n]; + var c = str.charAt(0); + var off = 0; + var p = str.slice(1).replace(/e,-/g, 'e-').split(','); + var cmd; + + if (p.length > 0 && p[0] === '') { + p.shift(); + } + + for (var i = 0; i < p.length; i++) { + p[i] = parseFloat(p[i]); + } + while (off < p.length && !isNaN(p[off])) { + if (isNaN(p[0])) { + break; + } + var ctlPtx; + var ctlPty; + + var rx; + var ry; + var psi; + var fa; + var fs; + + var x1 = cpx; + var y1 = cpy; + + // convert l, H, h, V, and v to L + switch (c) { + case 'l': + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD$$1.L; + path.addData(cmd, cpx, cpy); + break; + case 'L': + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD$$1.L; + path.addData(cmd, cpx, cpy); + break; + case 'm': + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD$$1.M; + path.addData(cmd, cpx, cpy); + c = 'l'; + break; + case 'M': + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD$$1.M; + path.addData(cmd, cpx, cpy); + c = 'L'; + break; + case 'h': + cpx += p[off++]; + cmd = CMD$$1.L; + path.addData(cmd, cpx, cpy); + break; + case 'H': + cpx = p[off++]; + cmd = CMD$$1.L; + path.addData(cmd, cpx, cpy); + break; + case 'v': + cpy += p[off++]; + cmd = CMD$$1.L; + path.addData(cmd, cpx, cpy); + break; + case 'V': + cpy = p[off++]; + cmd = CMD$$1.L; + path.addData(cmd, cpx, cpy); + break; + case 'C': + cmd = CMD$$1.C; + path.addData( + cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++] + ); + cpx = p[off - 2]; + cpy = p[off - 1]; + break; + case 'c': + cmd = CMD$$1.C; + path.addData( + cmd, + p[off++] + cpx, p[off++] + cpy, + p[off++] + cpx, p[off++] + cpy, + p[off++] + cpx, p[off++] + cpy + ); + cpx += p[off - 2]; + cpy += p[off - 1]; + break; + case 'S': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD$$1.C) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cmd = CMD$$1.C; + x1 = p[off++]; + y1 = p[off++]; + cpx = p[off++]; + cpy = p[off++]; + path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); + break; + case 's': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD$$1.C) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cmd = CMD$$1.C; + x1 = cpx + p[off++]; + y1 = cpy + p[off++]; + cpx += p[off++]; + cpy += p[off++]; + path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); + break; + case 'Q': + x1 = p[off++]; + y1 = p[off++]; + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD$$1.Q; + path.addData(cmd, x1, y1, cpx, cpy); + break; + case 'q': + x1 = p[off++] + cpx; + y1 = p[off++] + cpy; + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD$$1.Q; + path.addData(cmd, x1, y1, cpx, cpy); + break; + case 'T': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD$$1.Q) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD$$1.Q; + path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); + break; + case 't': + ctlPtx = cpx; + ctlPty = cpy; + var len = path.len(); + var pathData = path.data; + if (prevCmd === CMD$$1.Q) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD$$1.Q; + path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); + break; + case 'A': + rx = p[off++]; + ry = p[off++]; + psi = p[off++]; + fa = p[off++]; + fs = p[off++]; + + x1 = cpx, y1 = cpy; + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD$$1.A; + processArc( + x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path + ); + break; + case 'a': + rx = p[off++]; + ry = p[off++]; + psi = p[off++]; + fa = p[off++]; + fs = p[off++]; + + x1 = cpx, y1 = cpy; + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD$$1.A; + processArc( + x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path + ); + break; + } + } + + if (c === 'z' || c === 'Z') { + cmd = CMD$$1.Z; + path.addData(cmd); + } + + prevCmd = cmd; + } + + path.toStatic(); + + return path; +} + +// TODO Optimize double memory cost problem +function createPathOptions(str, opts) { + var pathProxy = createPathProxyFromString(str); + opts = opts || {}; + opts.buildPath = function (path) { + if (path.setData) { + path.setData(pathProxy.data); + // Svg and vml renderer don't have context + var ctx = path.getContext(); + if (ctx) { + path.rebuildPath(ctx); + } + } + else { + var ctx = path; + pathProxy.rebuildPath(ctx); + } + }; + + opts.applyTransform = function (m) { + transformPath(pathProxy, m); + + this.dirty(true); + }; + + return opts; +} + +/** + * Create a Path object from path string data + * http://www.w3.org/TR/SVG/paths.html#PathData + * @param {Object} opts Other options + */ +function createFromString(str, opts) { + return new Path(createPathOptions(str, opts)); +} + +/** + * Create a Path class from path string data + * @param {string} str + * @param {Object} opts Other options + */ +function extendFromString(str, opts) { + return Path.extend(createPathOptions(str, opts)); +} + +/** + * Merge multiple paths + */ +// TODO Apply transform +// TODO stroke dash +// TODO Optimize double memory cost problem +function mergePath$1(pathEls, opts) { + var pathList = []; + var len = pathEls.length; + for (var i = 0; i < len; i++) { + var pathEl = pathEls[i]; + if (!pathEl.path) { + pathEl.createPathProxy(); + } + if (pathEl.__dirtyPath) { + pathEl.buildPath(pathEl.path, pathEl.shape, true); + } + pathList.push(pathEl.path); + } + + var pathBundle = new Path(opts); + // Need path proxy. + pathBundle.createPathProxy(); + pathBundle.buildPath = function (path) { + path.appendPath(pathList); + // Svg and vml renderer don't have context + var ctx = path.getContext(); + if (ctx) { + path.rebuildPath(ctx); + } + }; + + return pathBundle; +} + +/** + * @alias zrender/graphic/Text + * @extends module:zrender/graphic/Displayable + * @constructor + * @param {Object} opts + */ +var Text = function (opts) { // jshint ignore:line + Displayable.call(this, opts); +}; + +Text.prototype = { + + constructor: Text, + + type: 'text', + + brush: function (ctx, prevEl) { + var style = this.style; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + // Use props with prefix 'text'. + style.fill = style.stroke = style.shadowBlur = style.shadowColor = + style.shadowOffsetX = style.shadowOffsetY = null; + + var text = style.text; + // Convert to string + text != null && (text += ''); + + // Always bind style + style.bind(ctx, this, prevEl); + + if (!needDrawText(text, style)) { + return; + } + + this.setTransform(ctx); + + renderText(this, ctx, text, style); + + this.restoreTransform(ctx); + }, + + getBoundingRect: function () { + var style = this.style; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + if (!this._rect) { + var text = style.text; + text != null ? (text += '') : (text = ''); + + var rect = getBoundingRect( + style.text + '', + style.font, + style.textAlign, + style.textVerticalAlign, + style.textPadding, + style.rich + ); + + rect.x += style.x || 0; + rect.y += style.y || 0; + + if (getStroke(style.textStroke, style.textStrokeWidth)) { + var w = style.textStrokeWidth; + rect.x -= w / 2; + rect.y -= w / 2; + rect.width += w; + rect.height += w; + } + + this._rect = rect; + } + + return this._rect; + } +}; + +inherits(Text, Displayable); + +/** + * 圆形 + * @module zrender/shape/Circle + */ + +var Circle = Path.extend({ + + type: 'circle', + + shape: { + cx: 0, + cy: 0, + r: 0 + }, + + + buildPath : function (ctx, shape, inBundle) { + // Better stroking in ShapeBundle + // Always do it may have performence issue ( fill may be 2x more cost) + if (inBundle) { + ctx.moveTo(shape.cx + shape.r, shape.cy); + } + // else { + // if (ctx.allocate && !ctx.data.length) { + // ctx.allocate(ctx.CMD_MEM_SIZE.A); + // } + // } + // Better stroking in ShapeBundle + // ctx.moveTo(shape.cx + shape.r, shape.cy); + ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true); + } +}); + +// Fix weird bug in some version of IE11 (like 11.0.9600.178**), +// where exception "unexpected call to method or property access" +// might be thrown when calling ctx.fill or ctx.stroke after a path +// whose area size is zero is drawn and ctx.clip() is called and +// shadowBlur is set. See #4572, #3112, #5777. +// (e.g., +// ctx.moveTo(10, 10); +// ctx.lineTo(20, 10); +// ctx.closePath(); +// ctx.clip(); +// ctx.shadowBlur = 10; +// ... +// ctx.fill(); +// ) + +var shadowTemp = [ + ['shadowBlur', 0], + ['shadowColor', '#000'], + ['shadowOffsetX', 0], + ['shadowOffsetY', 0] +]; + +var fixClipWithShadow = function (orignalBrush) { + + // version string can be: '11.0' + return (env$1.browser.ie && env$1.browser.version >= 11) + + ? function () { + var clipPaths = this.__clipPaths; + var style = this.style; + var modified; + + if (clipPaths) { + for (var i = 0; i < clipPaths.length; i++) { + var clipPath = clipPaths[i]; + var shape = clipPath && clipPath.shape; + var type = clipPath && clipPath.type; + + if (shape && ( + (type === 'sector' && shape.startAngle === shape.endAngle) + || (type === 'rect' && (!shape.width || !shape.height)) + )) { + for (var j = 0; j < shadowTemp.length; j++) { + // It is save to put shadowTemp static, because shadowTemp + // will be all modified each item brush called. + shadowTemp[j][2] = style[shadowTemp[j][0]]; + style[shadowTemp[j][0]] = shadowTemp[j][1]; + } + modified = true; + break; + } + } + } + + orignalBrush.apply(this, arguments); + + if (modified) { + for (var j = 0; j < shadowTemp.length; j++) { + style[shadowTemp[j][0]] = shadowTemp[j][2]; + } + } + } + + : orignalBrush; +}; + +/** + * 扇形 + * @module zrender/graphic/shape/Sector + */ + +var Sector = Path.extend({ + + type: 'sector', + + shape: { + + cx: 0, + + cy: 0, + + r0: 0, + + r: 0, + + startAngle: 0, + + endAngle: Math.PI * 2, + + clockwise: true + }, + + brush: fixClipWithShadow(Path.prototype.brush), + + buildPath: function (ctx, shape) { + + var x = shape.cx; + var y = shape.cy; + var r0 = Math.max(shape.r0 || 0, 0); + var r = Math.max(shape.r, 0); + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var clockwise = shape.clockwise; + + var unitX = Math.cos(startAngle); + var unitY = Math.sin(startAngle); + + ctx.moveTo(unitX * r0 + x, unitY * r0 + y); + + ctx.lineTo(unitX * r + x, unitY * r + y); + + ctx.arc(x, y, r, startAngle, endAngle, !clockwise); + + ctx.lineTo( + Math.cos(endAngle) * r0 + x, + Math.sin(endAngle) * r0 + y + ); + + if (r0 !== 0) { + ctx.arc(x, y, r0, endAngle, startAngle, clockwise); + } + + ctx.closePath(); + } +}); + +/** + * 圆环 + * @module zrender/graphic/shape/Ring + */ + +var Ring = Path.extend({ + + type: 'ring', + + shape: { + cx: 0, + cy: 0, + r: 0, + r0: 0 + }, + + buildPath: function (ctx, shape) { + var x = shape.cx; + var y = shape.cy; + var PI2 = Math.PI * 2; + ctx.moveTo(x + shape.r, y); + ctx.arc(x, y, shape.r, 0, PI2, false); + ctx.moveTo(x + shape.r0, y); + ctx.arc(x, y, shape.r0, 0, PI2, true); + } +}); + +/** + * Catmull-Rom spline 插值折线 + * @module zrender/shape/util/smoothSpline + * @author pissang (https://www.github.com/pissang) + * Kener (@Kener-林峰, kener.linfeng@gmail.com) + * errorrik (errorrik@gmail.com) + */ + +/** + * @inner + */ +function interpolate(p0, p1, p2, p3, t, t2, t3) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + return (2 * (p1 - p2) + v0 + v1) * t3 + + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + + v0 * t + p1; +} + +/** + * @alias module:zrender/shape/util/smoothSpline + * @param {Array} points 线段顶点数组 + * @param {boolean} isLoop + * @return {Array} + */ +var smoothSpline = function (points, isLoop) { + var len$$1 = points.length; + var ret = []; + + var distance$$1 = 0; + for (var i = 1; i < len$$1; i++) { + distance$$1 += distance(points[i - 1], points[i]); + } + + var segs = distance$$1 / 2; + segs = segs < len$$1 ? len$$1 : segs; + for (var i = 0; i < segs; i++) { + var pos = i / (segs - 1) * (isLoop ? len$$1 : len$$1 - 1); + var idx = Math.floor(pos); + + var w = pos - idx; + + var p0; + var p1 = points[idx % len$$1]; + var p2; + var p3; + if (!isLoop) { + p0 = points[idx === 0 ? idx : idx - 1]; + p2 = points[idx > len$$1 - 2 ? len$$1 - 1 : idx + 1]; + p3 = points[idx > len$$1 - 3 ? len$$1 - 1 : idx + 2]; + } + else { + p0 = points[(idx - 1 + len$$1) % len$$1]; + p2 = points[(idx + 1) % len$$1]; + p3 = points[(idx + 2) % len$$1]; + } + + var w2 = w * w; + var w3 = w * w2; + + ret.push([ + interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3), + interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3) + ]); + } + return ret; +}; + +/** + * 贝塞尔平滑曲线 + * @module zrender/shape/util/smoothBezier + * @author pissang (https://www.github.com/pissang) + * Kener (@Kener-林峰, kener.linfeng@gmail.com) + * errorrik (errorrik@gmail.com) + */ + +/** + * 贝塞尔平滑曲线 + * @alias module:zrender/shape/util/smoothBezier + * @param {Array} points 线段顶点数组 + * @param {number} smooth 平滑等级, 0-1 + * @param {boolean} isLoop + * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内 + * 比如 [[0, 0], [100, 100]], 这个包围盒会与 + * 整个折线的包围盒做一个并集用来约束控制点。 + * @param {Array} 计算出来的控制点数组 + */ +var smoothBezier = function (points, smooth, isLoop, constraint) { + var cps = []; + + var v = []; + var v1 = []; + var v2 = []; + var prevPoint; + var nextPoint; + + var min$$1, max$$1; + if (constraint) { + min$$1 = [Infinity, Infinity]; + max$$1 = [-Infinity, -Infinity]; + for (var i = 0, len$$1 = points.length; i < len$$1; i++) { + min(min$$1, min$$1, points[i]); + max(max$$1, max$$1, points[i]); + } + // 与指定的包围盒做并集 + min(min$$1, min$$1, constraint[0]); + max(max$$1, max$$1, constraint[1]); + } + + for (var i = 0, len$$1 = points.length; i < len$$1; i++) { + var point = points[i]; + + if (isLoop) { + prevPoint = points[i ? i - 1 : len$$1 - 1]; + nextPoint = points[(i + 1) % len$$1]; + } + else { + if (i === 0 || i === len$$1 - 1) { + cps.push(clone$1(points[i])); + continue; + } + else { + prevPoint = points[i - 1]; + nextPoint = points[i + 1]; + } + } + + sub(v, nextPoint, prevPoint); + + // use degree to scale the handle length + scale(v, v, smooth); + + var d0 = distance(point, prevPoint); + var d1 = distance(point, nextPoint); + var sum = d0 + d1; + if (sum !== 0) { + d0 /= sum; + d1 /= sum; + } + + scale(v1, v, -d0); + scale(v2, v, d1); + var cp0 = add([], point, v1); + var cp1 = add([], point, v2); + if (constraint) { + max(cp0, cp0, min$$1); + min(cp0, cp0, max$$1); + max(cp1, cp1, min$$1); + min(cp1, cp1, max$$1); + } + cps.push(cp0); + cps.push(cp1); + } + + if (isLoop) { + cps.push(cps.shift()); + } + + return cps; +}; + +function buildPath$1(ctx, shape, closePath) { + var points = shape.points; + var smooth = shape.smooth; + if (points && points.length >= 2) { + if (smooth && smooth !== 'spline') { + var controlPoints = smoothBezier( + points, smooth, closePath, shape.smoothConstraint + ); + + ctx.moveTo(points[0][0], points[0][1]); + var len = points.length; + for (var i = 0; i < (closePath ? len : len - 1); i++) { + var cp1 = controlPoints[i * 2]; + var cp2 = controlPoints[i * 2 + 1]; + var p = points[(i + 1) % len]; + ctx.bezierCurveTo( + cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1] + ); + } + } + else { + if (smooth === 'spline') { + points = smoothSpline(points, closePath); + } + + ctx.moveTo(points[0][0], points[0][1]); + for (var i = 1, l = points.length; i < l; i++) { + ctx.lineTo(points[i][0], points[i][1]); + } + } + + closePath && ctx.closePath(); + } +} + +/** + * 多边形 + * @module zrender/shape/Polygon + */ + +var Polygon = Path.extend({ + + type: 'polygon', + + shape: { + points: null, + + smooth: false, + + smoothConstraint: null + }, + + buildPath: function (ctx, shape) { + buildPath$1(ctx, shape, true); + } +}); + +/** + * @module zrender/graphic/shape/Polyline + */ + +var Polyline = Path.extend({ + + type: 'polyline', + + shape: { + points: null, + + smooth: false, + + smoothConstraint: null + }, + + style: { + stroke: '#000', + + fill: null + }, + + buildPath: function (ctx, shape) { + buildPath$1(ctx, shape, false); + } +}); + +/** + * 矩形 + * @module zrender/graphic/shape/Rect + */ + +var Rect = Path.extend({ + + type: 'rect', + + shape: { + // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4 + // r缩写为1 相当于 [1, 1, 1, 1] + // r缩写为[1] 相当于 [1, 1, 1, 1] + // r缩写为[1, 2] 相当于 [1, 2, 1, 2] + // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2] + r: 0, + + x: 0, + y: 0, + width: 0, + height: 0 + }, + + buildPath: function (ctx, shape) { + var x = shape.x; + var y = shape.y; + var width = shape.width; + var height = shape.height; + if (!shape.r) { + ctx.rect(x, y, width, height); + } + else { + buildPath(ctx, shape); + } + ctx.closePath(); + return; + } +}); + +/** + * 直线 + * @module zrender/graphic/shape/Line + */ + +var Line = Path.extend({ + + type: 'line', + + shape: { + // Start point + x1: 0, + y1: 0, + // End point + x2: 0, + y2: 0, + + percent: 1 + }, + + style: { + stroke: '#000', + fill: null + }, + + buildPath: function (ctx, shape) { + var x1 = shape.x1; + var y1 = shape.y1; + var x2 = shape.x2; + var y2 = shape.y2; + var percent = shape.percent; + + if (percent === 0) { + return; + } + + ctx.moveTo(x1, y1); + + if (percent < 1) { + x2 = x1 * (1 - percent) + x2 * percent; + y2 = y1 * (1 - percent) + y2 * percent; + } + ctx.lineTo(x2, y2); + }, + + /** + * Get point at percent + * @param {number} percent + * @return {Array.} + */ + pointAt: function (p) { + var shape = this.shape; + return [ + shape.x1 * (1 - p) + shape.x2 * p, + shape.y1 * (1 - p) + shape.y2 * p + ]; + } +}); + +/** + * 贝塞尔曲线 + * @module zrender/shape/BezierCurve + */ + +var out = []; + +function someVectorAt(shape, t, isTangent) { + var cpx2 = shape.cpx2; + var cpy2 = shape.cpy2; + if (cpx2 === null || cpy2 === null) { + return [ + (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), + (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t) + ]; + } + else { + return [ + (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), + (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t) + ]; + } +} + +var BezierCurve = Path.extend({ + + type: 'bezier-curve', + + shape: { + x1: 0, + y1: 0, + x2: 0, + y2: 0, + cpx1: 0, + cpy1: 0, + // cpx2: 0, + // cpy2: 0 + + // Curve show percent, for animating + percent: 1 + }, + + style: { + stroke: '#000', + fill: null + }, + + buildPath: function (ctx, shape) { + var x1 = shape.x1; + var y1 = shape.y1; + var x2 = shape.x2; + var y2 = shape.y2; + var cpx1 = shape.cpx1; + var cpy1 = shape.cpy1; + var cpx2 = shape.cpx2; + var cpy2 = shape.cpy2; + var percent = shape.percent; + if (percent === 0) { + return; + } + + ctx.moveTo(x1, y1); + + if (cpx2 == null || cpy2 == null) { + if (percent < 1) { + quadraticSubdivide( + x1, cpx1, x2, percent, out + ); + cpx1 = out[1]; + x2 = out[2]; + quadraticSubdivide( + y1, cpy1, y2, percent, out + ); + cpy1 = out[1]; + y2 = out[2]; + } + + ctx.quadraticCurveTo( + cpx1, cpy1, + x2, y2 + ); + } + else { + if (percent < 1) { + cubicSubdivide( + x1, cpx1, cpx2, x2, percent, out + ); + cpx1 = out[1]; + cpx2 = out[2]; + x2 = out[3]; + cubicSubdivide( + y1, cpy1, cpy2, y2, percent, out + ); + cpy1 = out[1]; + cpy2 = out[2]; + y2 = out[3]; + } + ctx.bezierCurveTo( + cpx1, cpy1, + cpx2, cpy2, + x2, y2 + ); + } + }, + + /** + * Get point at percent + * @param {number} t + * @return {Array.} + */ + pointAt: function (t) { + return someVectorAt(this.shape, t, false); + }, + + /** + * Get tangent at percent + * @param {number} t + * @return {Array.} + */ + tangentAt: function (t) { + var p = someVectorAt(this.shape, t, true); + return normalize(p, p); + } +}); + +/** + * 圆弧 + * @module zrender/graphic/shape/Arc + */ + +var Arc = Path.extend({ + + type: 'arc', + + shape: { + + cx: 0, + + cy: 0, + + r: 0, + + startAngle: 0, + + endAngle: Math.PI * 2, + + clockwise: true + }, + + style: { + + stroke: '#000', + + fill: null + }, + + buildPath: function (ctx, shape) { + + var x = shape.cx; + var y = shape.cy; + var r = Math.max(shape.r, 0); + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var clockwise = shape.clockwise; + + var unitX = Math.cos(startAngle); + var unitY = Math.sin(startAngle); + + ctx.moveTo(unitX * r + x, unitY * r + y); + ctx.arc(x, y, r, startAngle, endAngle, !clockwise); + } +}); + +// CompoundPath to improve performance + +var CompoundPath = Path.extend({ + + type: 'compound', + + shape: { + + paths: null + }, + + _updatePathDirty: function () { + var dirtyPath = this.__dirtyPath; + var paths = this.shape.paths; + for (var i = 0; i < paths.length; i++) { + // Mark as dirty if any subpath is dirty + dirtyPath = dirtyPath || paths[i].__dirtyPath; + } + this.__dirtyPath = dirtyPath; + this.__dirty = this.__dirty || dirtyPath; + }, + + beforeBrush: function () { + this._updatePathDirty(); + var paths = this.shape.paths || []; + var scale = this.getGlobalScale(); + // Update path scale + for (var i = 0; i < paths.length; i++) { + if (!paths[i].path) { + paths[i].createPathProxy(); + } + paths[i].path.setScale(scale[0], scale[1]); + } + }, + + buildPath: function (ctx, shape) { + var paths = shape.paths || []; + for (var i = 0; i < paths.length; i++) { + paths[i].buildPath(ctx, paths[i].shape, true); + } + }, + + afterBrush: function () { + var paths = this.shape.paths || []; + for (var i = 0; i < paths.length; i++) { + paths[i].__dirtyPath = false; + } + }, + + getBoundingRect: function () { + this._updatePathDirty(); + return Path.prototype.getBoundingRect.call(this); + } +}); + +/** + * @param {Array.} colorStops + */ +var Gradient = function (colorStops) { + + this.colorStops = colorStops || []; + +}; + +Gradient.prototype = { + + constructor: Gradient, + + addColorStop: function (offset, color) { + this.colorStops.push({ + + offset: offset, + + color: color + }); + } + +}; + +/** + * x, y, x2, y2 are all percent from 0 to 1 + * @param {number} [x=0] + * @param {number} [y=0] + * @param {number} [x2=1] + * @param {number} [y2=0] + * @param {Array.} colorStops + * @param {boolean} [globalCoord=false] + */ +var LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) { + // Should do nothing more in this constructor. Because gradient can be + // declard by `color: {type: 'linear', colorStops: ...}`, where + // this constructor will not be called. + + this.x = x == null ? 0 : x; + + this.y = y == null ? 0 : y; + + this.x2 = x2 == null ? 1 : x2; + + this.y2 = y2 == null ? 0 : y2; + + // Can be cloned + this.type = 'linear'; + + // If use global coord + this.global = globalCoord || false; + + Gradient.call(this, colorStops); +}; + +LinearGradient.prototype = { + + constructor: LinearGradient +}; + +inherits(LinearGradient, Gradient); + +/** + * x, y, r are all percent from 0 to 1 + * @param {number} [x=0.5] + * @param {number} [y=0.5] + * @param {number} [r=0.5] + * @param {Array.} [colorStops] + * @param {boolean} [globalCoord=false] + */ +var RadialGradient = function (x, y, r, colorStops, globalCoord) { + // Should do nothing more in this constructor. Because gradient can be + // declard by `color: {type: 'radial', colorStops: ...}`, where + // this constructor will not be called. + + this.x = x == null ? 0.5 : x; + + this.y = y == null ? 0.5 : y; + + this.r = r == null ? 0.5 : r; + + // Can be cloned + this.type = 'radial'; + + // If use global coord + this.global = globalCoord || false; + + Gradient.call(this, colorStops); +}; + +RadialGradient.prototype = { + + constructor: RadialGradient +}; + +inherits(RadialGradient, Gradient); + +var round$1 = Math.round; +var mathMax$1 = Math.max; +var mathMin$1 = Math.min; + +var EMPTY_OBJ = {}; + +/** + * Extend shape with parameters + */ +function extendShape(opts) { + return Path.extend(opts); +} + +/** + * Extend path + */ +function extendPath(pathData, opts) { + return extendFromString(pathData, opts); +} + +/** + * Create a path element from path data string + * @param {string} pathData + * @param {Object} opts + * @param {module:zrender/core/BoundingRect} rect + * @param {string} [layout=cover] 'center' or 'cover' + */ +function makePath(pathData, opts, rect, layout) { + var path = createFromString(pathData, opts); + var boundingRect = path.getBoundingRect(); + if (rect) { + if (layout === 'center') { + rect = centerGraphic(rect, boundingRect); + } + + resizePath(path, rect); + } + return path; +} + +/** + * Create a image element from image url + * @param {string} imageUrl image url + * @param {Object} opts options + * @param {module:zrender/core/BoundingRect} rect constrain rect + * @param {string} [layout=cover] 'center' or 'cover' + */ +function makeImage(imageUrl, rect, layout) { + var path = new ZImage({ + style: { + image: imageUrl, + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + onload: function (img) { + if (layout === 'center') { + var boundingRect = { + width: img.width, + height: img.height + }; + path.setStyle(centerGraphic(rect, boundingRect)); + } + } + }); + return path; +} + +/** + * Get position of centered element in bounding box. + * + * @param {Object} rect element local bounding box + * @param {Object} boundingRect constraint bounding box + * @return {Object} element position containing x, y, width, and height + */ +function centerGraphic(rect, boundingRect) { + // Set rect to center, keep width / height ratio. + var aspect = boundingRect.width / boundingRect.height; + var width = rect.height * aspect; + var height; + if (width <= rect.width) { + height = rect.height; + } + else { + width = rect.width; + height = width / aspect; + } + var cx = rect.x + rect.width / 2; + var cy = rect.y + rect.height / 2; + + return { + x: cx - width / 2, + y: cy - height / 2, + width: width, + height: height + }; +} + +var mergePath = mergePath$1; + +/** + * Resize a path to fit the rect + * @param {module:zrender/graphic/Path} path + * @param {Object} rect + */ +function resizePath(path, rect) { + if (!path.applyTransform) { + return; + } + + var pathRect = path.getBoundingRect(); + + var m = pathRect.calculateTransform(rect); + + path.applyTransform(m); +} + +/** + * Sub pixel optimize line for canvas + * + * @param {Object} param + * @param {Object} [param.shape] + * @param {number} [param.shape.x1] + * @param {number} [param.shape.y1] + * @param {number} [param.shape.x2] + * @param {number} [param.shape.y2] + * @param {Object} [param.style] + * @param {number} [param.style.lineWidth] + * @return {Object} Modified param + */ +function subPixelOptimizeLine(param) { + var shape = param.shape; + var lineWidth = param.style.lineWidth; + + if (round$1(shape.x1 * 2) === round$1(shape.x2 * 2)) { + shape.x1 = shape.x2 = subPixelOptimize(shape.x1, lineWidth, true); + } + if (round$1(shape.y1 * 2) === round$1(shape.y2 * 2)) { + shape.y1 = shape.y2 = subPixelOptimize(shape.y1, lineWidth, true); + } + return param; +} + +/** + * Sub pixel optimize rect for canvas + * + * @param {Object} param + * @param {Object} [param.shape] + * @param {number} [param.shape.x] + * @param {number} [param.shape.y] + * @param {number} [param.shape.width] + * @param {number} [param.shape.height] + * @param {Object} [param.style] + * @param {number} [param.style.lineWidth] + * @return {Object} Modified param + */ +function subPixelOptimizeRect(param) { + var shape = param.shape; + var lineWidth = param.style.lineWidth; + var originX = shape.x; + var originY = shape.y; + var originWidth = shape.width; + var originHeight = shape.height; + shape.x = subPixelOptimize(shape.x, lineWidth, true); + shape.y = subPixelOptimize(shape.y, lineWidth, true); + shape.width = Math.max( + subPixelOptimize(originX + originWidth, lineWidth, false) - shape.x, + originWidth === 0 ? 0 : 1 + ); + shape.height = Math.max( + subPixelOptimize(originY + originHeight, lineWidth, false) - shape.y, + originHeight === 0 ? 0 : 1 + ); + return param; +} + +/** + * Sub pixel optimize for canvas + * + * @param {number} position Coordinate, such as x, y + * @param {number} lineWidth Should be nonnegative integer. + * @param {boolean=} positiveOrNegative Default false (negative). + * @return {number} Optimized position. + */ +function subPixelOptimize(position, lineWidth, positiveOrNegative) { + // Assure that (position + lineWidth / 2) is near integer edge, + // otherwise line will be fuzzy in canvas. + var doubledPosition = round$1(position * 2); + return (doubledPosition + round$1(lineWidth)) % 2 === 0 + ? doubledPosition / 2 + : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2; +} + +function hasFillOrStroke(fillOrStroke) { + return fillOrStroke != null && fillOrStroke != 'none'; +} + +function liftColor(color) { + return typeof color === 'string' ? lift(color, -0.1) : color; +} + +/** + * @private + */ +function cacheElementStl(el) { + if (el.__hoverStlDirty) { + var stroke = el.style.stroke; + var fill = el.style.fill; + + // Create hoverStyle on mouseover + var hoverStyle = el.__hoverStl; + hoverStyle.fill = hoverStyle.fill + || (hasFillOrStroke(fill) ? liftColor(fill) : null); + hoverStyle.stroke = hoverStyle.stroke + || (hasFillOrStroke(stroke) ? liftColor(stroke) : null); + + var normalStyle = {}; + for (var name in hoverStyle) { + // See comment in `doSingleEnterHover`. + if (hoverStyle[name] != null) { + normalStyle[name] = el.style[name]; + } + } + + el.__normalStl = normalStyle; + + el.__hoverStlDirty = false; + } +} + +/** + * @private + */ +function doSingleEnterHover(el) { + if (el.__isHover) { + return; + } + + cacheElementStl(el); + + if (el.useHoverLayer) { + el.__zr && el.__zr.addHover(el, el.__hoverStl); + } + else { + var style = el.style; + var insideRollbackOpt = style.insideRollbackOpt; + + // Consider case: only `position: 'top'` is set on emphasis, then text + // color should be returned to `autoColor`, rather than remain '#fff'. + // So we should rollback then apply again after style merging. + insideRollbackOpt && rollbackInsideStyle(style); + + // styles can be: + // { + // label: { + // normal: { + // show: false, + // position: 'outside', + // fontSize: 18 + // }, + // emphasis: { + // show: true + // } + // } + // }, + // where properties of `emphasis` may not appear in `normal`. We previously use + // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`. + // But consider rich text and setOption in merge mode, it is impossible to cover + // all properties in merge. So we use merge mode when setting style here, where + // only properties that is not `null/undefined` can be set. The disadventage: + // null/undefined can not be used to remove style any more in `emphasis`. + style.extendFrom(el.__hoverStl); + + // Do not save `insideRollback`. + if (insideRollbackOpt) { + applyInsideStyle(style, style.insideOriginalTextPosition, insideRollbackOpt); + + // textFill may be rollbacked to null. + if (style.textFill == null) { + style.textFill = insideRollbackOpt.autoColor; + } + } + + el.dirty(false); + el.z2 += 1; + } + + el.__isHover = true; +} + +/** + * @inner + */ +function doSingleLeaveHover(el) { + if (!el.__isHover) { + return; + } + + var normalStl = el.__normalStl; + if (el.useHoverLayer) { + el.__zr && el.__zr.removeHover(el); + } + else { + // Consider null/undefined value, should use + // `setStyle` but not `extendFrom(stl, true)`. + normalStl && el.setStyle(normalStl); + el.z2 -= 1; + } + + el.__isHover = false; +} + +/** + * @inner + */ +function doEnterHover(el) { + el.type === 'group' + ? el.traverse(function (child) { + if (child.type !== 'group') { + doSingleEnterHover(child); + } + }) + : doSingleEnterHover(el); +} + +function doLeaveHover(el) { + el.type === 'group' + ? el.traverse(function (child) { + if (child.type !== 'group') { + doSingleLeaveHover(child); + } + }) + : doSingleLeaveHover(el); +} + +/** + * @inner + */ +function setElementHoverStl(el, hoverStl) { + // If element has sepcified hoverStyle, then use it instead of given hoverStyle + // Often used when item group has a label element and it's hoverStyle is different + el.__hoverStl = el.hoverStyle || hoverStl || {}; + el.__hoverStlDirty = true; + + if (el.__isHover) { + cacheElementStl(el); + } +} + +/** + * @inner + */ +function onElementMouseOver(e) { + if (this.__hoverSilentOnTouch && e.zrByTouch) { + return; + } + + // Only if element is not in emphasis status + !this.__isEmphasis && doEnterHover(this); +} + +/** + * @inner + */ +function onElementMouseOut(e) { + if (this.__hoverSilentOnTouch && e.zrByTouch) { + return; + } + + // Only if element is not in emphasis status + !this.__isEmphasis && doLeaveHover(this); +} + +/** + * @inner + */ +function enterEmphasis() { + this.__isEmphasis = true; + doEnterHover(this); +} + +/** + * @inner + */ +function leaveEmphasis() { + this.__isEmphasis = false; + doLeaveHover(this); +} + +/** + * Set hover style of element. + * This method can be called repeatly without side-effects. + * @param {module:zrender/Element} el + * @param {Object} [hoverStyle] + * @param {Object} [opt] + * @param {boolean} [opt.hoverSilentOnTouch=false] + * In touch device, mouseover event will be trigger on touchstart event + * (see module:zrender/dom/HandlerProxy). By this mechanism, we can + * conviniently use hoverStyle when tap on touch screen without additional + * code for compatibility. + * But if the chart/component has select feature, which usually also use + * hoverStyle, there might be conflict between 'select-highlight' and + * 'hover-highlight' especially when roam is enabled (see geo for example). + * In this case, hoverSilentOnTouch should be used to disable hover-highlight + * on touch device. + */ +function setHoverStyle(el, hoverStyle, opt) { + el.__hoverSilentOnTouch = opt && opt.hoverSilentOnTouch; + + el.type === 'group' + ? el.traverse(function (child) { + if (child.type !== 'group') { + setElementHoverStl(child, hoverStyle); + } + }) + : setElementHoverStl(el, hoverStyle); + + // Duplicated function will be auto-ignored, see Eventful.js. + el.on('mouseover', onElementMouseOver) + .on('mouseout', onElementMouseOut); + + // Emphasis, normal can be triggered manually + el.on('emphasis', enterEmphasis) + .on('normal', leaveEmphasis); +} + +/** + * @param {Object|module:zrender/graphic/Style} normalStyle + * @param {Object} emphasisStyle + * @param {module:echarts/model/Model} normalModel + * @param {module:echarts/model/Model} emphasisModel + * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props. + * @param {Object} [opt.defaultText] + * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by + * `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)` + * @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by + * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)` + * @param {module:echarts/model/Model} [opt.labelDimIndex] Fetch text by + * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)` + * @param {Object} [normalSpecified] + * @param {Object} [emphasisSpecified] + */ +function setLabelStyle( + normalStyle, emphasisStyle, + normalModel, emphasisModel, + opt, + normalSpecified, emphasisSpecified +) { + opt = opt || EMPTY_OBJ; + var labelFetcher = opt.labelFetcher; + var labelDataIndex = opt.labelDataIndex; + var labelDimIndex = opt.labelDimIndex; + + // This scenario, `label.normal.show = true; label.emphasis.show = false`, + // is not supported util someone requests. + + var showNormal = normalModel.getShallow('show'); + var showEmphasis = emphasisModel.getShallow('show'); + + // Consider performance, only fetch label when necessary. + // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set, + // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`. + var baseText = (showNormal || showEmphasis) + ? retrieve2( + labelFetcher + ? labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex) + : null, + opt.defaultText + ) + : null; + var normalStyleText = showNormal ? baseText : null; + var emphasisStyleText = showEmphasis + ? retrieve2( + labelFetcher + ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex) + : null, + baseText + ) + : null; + + // Optimize: If style.text is null, text will not be drawn. + if (normalStyleText != null || emphasisStyleText != null) { + // Always set `textStyle` even if `normalStyle.text` is null, because default + // values have to be set on `normalStyle`. + // If we set default values on `emphasisStyle`, consider case: + // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);` + // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);` + // Then the 'red' will not work on emphasis. + setTextStyle(normalStyle, normalModel, normalSpecified, opt); + setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true); + } + + normalStyle.text = normalStyleText; + emphasisStyle.text = emphasisStyleText; +} + +/** + * Set basic textStyle properties. + * @param {Object|module:zrender/graphic/Style} textStyle + * @param {module:echarts/model/Model} model + * @param {Object} [specifiedTextStyle] Can be overrided by settings in model. + * @param {Object} [opt] See `opt` of `setTextStyleCommon`. + * @param {boolean} [isEmphasis] + */ +function setTextStyle( + textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis +) { + setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis); + specifiedTextStyle && extend(textStyle, specifiedTextStyle); + textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false); + + return textStyle; +} + +/** + * Set text option in the style. + * @deprecated + * @param {Object} textStyle + * @param {module:echarts/model/Model} labelModel + * @param {string|boolean} defaultColor Default text color. + * If set as false, it will be processed as a emphasis style. + */ +function setText(textStyle, labelModel, defaultColor) { + var opt = {isRectText: true}; + var isEmphasis; + + if (defaultColor === false) { + isEmphasis = true; + } + else { + // Support setting color as 'auto' to get visual color. + opt.autoColor = defaultColor; + } + setTextStyleCommon(textStyle, labelModel, opt, isEmphasis); + textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false); +} + +/** + * { + * disableBox: boolean, Whether diable drawing box of block (outer most). + * isRectText: boolean, + * autoColor: string, specify a color when color is 'auto', + * for textFill, textStroke, textBackgroundColor, and textBorderColor. + * If autoColor specified, it is used as default textFill. + * useInsideStyle: + * `true`: Use inside style (textFill, textStroke, textStrokeWidth) + * if `textFill` is not specified. + * `false`: Do not use inside style. + * `null/undefined`: use inside style if `isRectText` is true and + * `textFill` is not specified and textPosition contains `'inside'`. + * forceRich: boolean + * } + */ +function setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) { + // Consider there will be abnormal when merge hover style to normal style if given default value. + opt = opt || EMPTY_OBJ; + + if (opt.isRectText) { + var textPosition = textStyleModel.getShallow('position') + || (isEmphasis ? null : 'inside'); + // 'outside' is not a valid zr textPostion value, but used + // in bar series, and magric type should be considered. + textPosition === 'outside' && (textPosition = 'top'); + textStyle.textPosition = textPosition; + textStyle.textOffset = textStyleModel.getShallow('offset'); + var labelRotate = textStyleModel.getShallow('rotate'); + labelRotate != null && (labelRotate *= Math.PI / 180); + textStyle.textRotation = labelRotate; + textStyle.textDistance = retrieve2( + textStyleModel.getShallow('distance'), isEmphasis ? null : 5 + ); + } + + var ecModel = textStyleModel.ecModel; + var globalTextStyle = ecModel && ecModel.option.textStyle; + + // Consider case: + // { + // data: [{ + // value: 12, + // label: { + // normal: { + // rich: { + // // no 'a' here but using parent 'a'. + // } + // } + // } + // }], + // rich: { + // a: { ... } + // } + // } + var richItemNames = getRichItemNames(textStyleModel); + var richResult; + if (richItemNames) { + richResult = {}; + for (var name in richItemNames) { + if (richItemNames.hasOwnProperty(name)) { + // Cascade is supported in rich. + var richTextStyle = textStyleModel.getModel(['rich', name]); + // In rich, never `disableBox`. + setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis); + } + } + } + textStyle.rich = richResult; + + setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true); + + if (opt.forceRich && !opt.textStyle) { + opt.textStyle = {}; + } + + return textStyle; +} + +// Consider case: +// { +// data: [{ +// value: 12, +// label: { +// normal: { +// rich: { +// // no 'a' here but using parent 'a'. +// } +// } +// } +// }], +// rich: { +// a: { ... } +// } +// } +function getRichItemNames(textStyleModel) { + // Use object to remove duplicated names. + var richItemNameMap; + while (textStyleModel && textStyleModel !== textStyleModel.ecModel) { + var rich = (textStyleModel.option || EMPTY_OBJ).rich; + if (rich) { + richItemNameMap = richItemNameMap || {}; + for (var name in rich) { + if (rich.hasOwnProperty(name)) { + richItemNameMap[name] = 1; + } + } + } + textStyleModel = textStyleModel.parentModel; + } + return richItemNameMap; +} + +function setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) { + // In merge mode, default value should not be given. + globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ; + + textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt) + || globalTextStyle.color; + textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt) + || globalTextStyle.textBorderColor; + textStyle.textStrokeWidth = retrieve2( + textStyleModel.getShallow('textBorderWidth'), + globalTextStyle.textBorderWidth + ); + + if (!isEmphasis) { + if (isBlock) { + // Always set `insideRollback`, for clearing previous. + var originalTextPosition = textStyle.textPosition; + textStyle.insideRollback = applyInsideStyle(textStyle, originalTextPosition, opt); + // Save original textPosition, because style.textPosition will be repalced by + // real location (like [10, 30]) in zrender. + textStyle.insideOriginalTextPosition = originalTextPosition; + textStyle.insideRollbackOpt = opt; + } + + // Set default finally. + if (textStyle.textFill == null) { + textStyle.textFill = opt.autoColor; + } + } + + // Do not use `getFont` here, because merge should be supported, where + // part of these properties may be changed in emphasis style, and the + // others should remain their original value got from normal style. + textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle; + textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight; + textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize; + textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily; + + textStyle.textAlign = textStyleModel.getShallow('align'); + textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign') + || textStyleModel.getShallow('baseline'); + + textStyle.textLineHeight = textStyleModel.getShallow('lineHeight'); + textStyle.textWidth = textStyleModel.getShallow('width'); + textStyle.textHeight = textStyleModel.getShallow('height'); + textStyle.textTag = textStyleModel.getShallow('tag'); + + if (!isBlock || !opt.disableBox) { + textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt); + textStyle.textPadding = textStyleModel.getShallow('padding'); + textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt); + textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth'); + textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius'); + + textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor'); + textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur'); + textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX'); + textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY'); + } + + textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor') + || globalTextStyle.textShadowColor; + textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur') + || globalTextStyle.textShadowBlur; + textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX') + || globalTextStyle.textShadowOffsetX; + textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY') + || globalTextStyle.textShadowOffsetY; +} + +function getAutoColor(color, opt) { + return color !== 'auto' ? color : (opt && opt.autoColor) ? opt.autoColor : null; +} + +function applyInsideStyle(textStyle, textPosition, opt) { + var useInsideStyle = opt.useInsideStyle; + var insideRollback; + + if (textStyle.textFill == null + && useInsideStyle !== false + && (useInsideStyle === true + || (opt.isRectText + && textPosition + // textPosition can be [10, 30] + && typeof textPosition === 'string' + && textPosition.indexOf('inside') >= 0 + ) + ) + ) { + insideRollback = { + textFill: null, + textStroke: textStyle.textStroke, + textStrokeWidth: textStyle.textStrokeWidth + }; + textStyle.textFill = '#fff'; + // Consider text with #fff overflow its container. + if (textStyle.textStroke == null) { + textStyle.textStroke = opt.autoColor; + textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2); + } + } + + return insideRollback; +} + +function rollbackInsideStyle(style) { + var insideRollback = style.insideRollback; + if (insideRollback) { + style.textFill = insideRollback.textFill; + style.textStroke = insideRollback.textStroke; + style.textStrokeWidth = insideRollback.textStrokeWidth; + } +} + +function getFont(opt, ecModel) { + // ecModel or default text style model. + var gTextStyleModel = ecModel || ecModel.getModel('textStyle'); + return [ + // FIXME in node-canvas fontWeight is before fontStyle + opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', + opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', + (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', + opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif' + ].join(' '); +} + +function animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) { + if (typeof dataIndex === 'function') { + cb = dataIndex; + dataIndex = null; + } + // Do not check 'animation' property directly here. Consider this case: + // animation model is an `itemModel`, whose does not have `isAnimationEnabled` + // but its parent model (`seriesModel`) does. + var animationEnabled = animatableModel && animatableModel.isAnimationEnabled(); + + if (animationEnabled) { + var postfix = isUpdate ? 'Update' : ''; + var duration = animatableModel.getShallow('animationDuration' + postfix); + var animationEasing = animatableModel.getShallow('animationEasing' + postfix); + var animationDelay = animatableModel.getShallow('animationDelay' + postfix); + if (typeof animationDelay === 'function') { + animationDelay = animationDelay( + dataIndex, + animatableModel.getAnimationDelayParams + ? animatableModel.getAnimationDelayParams(el, dataIndex) + : null + ); + } + if (typeof duration === 'function') { + duration = duration(dataIndex); + } + + duration > 0 + ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb) + : (el.stopAnimation(), el.attr(props), cb && cb()); + } + else { + el.stopAnimation(); + el.attr(props); + cb && cb(); + } +} + +/** + * Update graphic element properties with or without animation according to the + * configuration in series. + * + * Caution: this method will stop previous animation. + * So if do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * + * @param {module:zrender/Element} el + * @param {Object} props + * @param {module:echarts/model/Model} [animatableModel] + * @param {number} [dataIndex] + * @param {Function} [cb] + * @example + * graphic.updateProps(el, { + * position: [100, 100] + * }, seriesModel, dataIndex, function () { console.log('Animation done!'); }); + * // Or + * graphic.updateProps(el, { + * position: [100, 100] + * }, seriesModel, function () { console.log('Animation done!'); }); + */ +function updateProps(el, props, animatableModel, dataIndex, cb) { + animateOrSetProps(true, el, props, animatableModel, dataIndex, cb); +} + +/** + * Init graphic element properties with or without animation according to the + * configuration in series. + * + * Caution: this method will stop previous animation. + * So if do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * + * @param {module:zrender/Element} el + * @param {Object} props + * @param {module:echarts/model/Model} [animatableModel] + * @param {number} [dataIndex] + * @param {Function} cb + */ +function initProps(el, props, animatableModel, dataIndex, cb) { + animateOrSetProps(false, el, props, animatableModel, dataIndex, cb); +} + +/** + * Get transform matrix of target (param target), + * in coordinate of its ancestor (param ancestor) + * + * @param {module:zrender/mixin/Transformable} target + * @param {module:zrender/mixin/Transformable} [ancestor] + */ +function getTransform(target, ancestor) { + var mat = identity([]); + + while (target && target !== ancestor) { + mul$1(mat, target.getLocalTransform(), mat); + target = target.parent; + } + + return mat; +} + +/** + * Apply transform to an vertex. + * @param {Array.} target [x, y] + * @param {Array.|TypedArray.|Object} transform Can be: + * + Transform matrix: like [1, 0, 0, 1, 0, 0] + * + {position, rotation, scale}, the same as `zrender/Transformable`. + * @param {boolean=} invert Whether use invert matrix. + * @return {Array.} [x, y] + */ +function applyTransform$1(target, transform, invert$$1) { + if (transform && !isArrayLike(transform)) { + transform = Transformable.getLocalTransform(transform); + } + + if (invert$$1) { + transform = invert([], transform); + } + return applyTransform([], target, transform); +} + +/** + * @param {string} direction 'left' 'right' 'top' 'bottom' + * @param {Array.} transform Transform matrix: like [1, 0, 0, 1, 0, 0] + * @param {boolean=} invert Whether use invert matrix. + * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom' + */ +function transformDirection(direction, transform, invert$$1) { + + // Pick a base, ensure that transform result will not be (0, 0). + var hBase = (transform[4] === 0 || transform[5] === 0 || transform[0] === 0) + ? 1 : Math.abs(2 * transform[4] / transform[0]); + var vBase = (transform[4] === 0 || transform[5] === 0 || transform[2] === 0) + ? 1 : Math.abs(2 * transform[4] / transform[2]); + + var vertex = [ + direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, + direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0 + ]; + + vertex = applyTransform$1(vertex, transform, invert$$1); + + return Math.abs(vertex[0]) > Math.abs(vertex[1]) + ? (vertex[0] > 0 ? 'right' : 'left') + : (vertex[1] > 0 ? 'bottom' : 'top'); +} + +/** + * Apply group transition animation from g1 to g2. + * If no animatableModel, no animation. + */ +function groupTransition(g1, g2, animatableModel, cb) { + if (!g1 || !g2) { + return; + } + + function getElMap(g) { + var elMap = {}; + g.traverse(function (el) { + if (!el.isGroup && el.anid) { + elMap[el.anid] = el; + } + }); + return elMap; + } + function getAnimatableProps(el) { + var obj = { + position: clone$1(el.position), + rotation: el.rotation + }; + if (el.shape) { + obj.shape = extend({}, el.shape); + } + return obj; + } + var elMap1 = getElMap(g1); + + g2.traverse(function (el) { + if (!el.isGroup && el.anid) { + var oldEl = elMap1[el.anid]; + if (oldEl) { + var newProp = getAnimatableProps(el); + el.attr(getAnimatableProps(oldEl)); + updateProps(el, newProp, animatableModel, el.dataIndex); + } + // else { + // if (el.previousProps) { + // graphic.updateProps + // } + // } + } + }); +} + +/** + * @param {Array.>} points Like: [[23, 44], [53, 66], ...] + * @param {Object} rect {x, y, width, height} + * @return {Array.>} A new clipped points. + */ +function clipPointsByRect(points, rect) { + return map(points, function (point) { + var x = point[0]; + x = mathMax$1(x, rect.x); + x = mathMin$1(x, rect.x + rect.width); + var y = point[1]; + y = mathMax$1(y, rect.y); + y = mathMin$1(y, rect.y + rect.height); + return [x, y]; + }); +} + +/** + * @param {Object} targetRect {x, y, width, height} + * @param {Object} rect {x, y, width, height} + * @return {Object} A new clipped rect. If rect size are negative, return undefined. + */ +function clipRectByRect(targetRect, rect) { + var x = mathMax$1(targetRect.x, rect.x); + var x2 = mathMin$1(targetRect.x + targetRect.width, rect.x + rect.width); + var y = mathMax$1(targetRect.y, rect.y); + var y2 = mathMin$1(targetRect.y + targetRect.height, rect.y + rect.height); + + if (x2 >= x && y2 >= y) { + return { + x: x, + y: y, + width: x2 - x, + height: y2 - y + }; + } +} + +/** + * @param {string} iconStr Support 'image://' or 'path://' or direct svg path. + * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`. + * @param {Object} [rect] {x, y, width, height} + * @return {module:zrender/Element} Icon path or image element. + */ +function createIcon(iconStr, opt, rect) { + opt = extend({rectHover: true}, opt); + var style = opt.style = {strokeNoScale: true}; + rect = rect || {x: -1, y: -1, width: 2, height: 2}; + + if (iconStr) { + return iconStr.indexOf('image://') === 0 + ? ( + style.image = iconStr.slice(8), + defaults(style, rect), + new ZImage(opt) + ) + : ( + makePath( + iconStr.replace('path://', ''), + opt, + rect, + 'center' + ) + ); + } +} + + + + +var graphic = (Object.freeze || Object)({ + extendShape: extendShape, + extendPath: extendPath, + makePath: makePath, + makeImage: makeImage, + mergePath: mergePath, + resizePath: resizePath, + subPixelOptimizeLine: subPixelOptimizeLine, + subPixelOptimizeRect: subPixelOptimizeRect, + subPixelOptimize: subPixelOptimize, + setHoverStyle: setHoverStyle, + setLabelStyle: setLabelStyle, + setTextStyle: setTextStyle, + setText: setText, + getFont: getFont, + updateProps: updateProps, + initProps: initProps, + getTransform: getTransform, + applyTransform: applyTransform$1, + transformDirection: transformDirection, + groupTransition: groupTransition, + clipPointsByRect: clipPointsByRect, + clipRectByRect: clipRectByRect, + createIcon: createIcon, + Group: Group, + Image: ZImage, + Text: Text, + Circle: Circle, + Sector: Sector, + Ring: Ring, + Polygon: Polygon, + Polyline: Polyline, + Rect: Rect, + Line: Line, + BezierCurve: BezierCurve, + Arc: Arc, + CompoundPath: CompoundPath, + LinearGradient: LinearGradient, + RadialGradient: RadialGradient, + BoundingRect: BoundingRect +}); + +var PATH_COLOR = ['textStyle', 'color']; + +var textStyleMixin = { + /** + * Get color property or get color from option.textStyle.color + * @param {boolean} [isEmphasis] + * @return {string} + */ + getTextColor: function (isEmphasis) { + var ecModel = this.ecModel; + return this.getShallow('color') + || ( + (!isEmphasis && ecModel) ? ecModel.get(PATH_COLOR) : null + ); + }, + + /** + * Create font string from fontStyle, fontWeight, fontSize, fontFamily + * @return {string} + */ + getFont: function () { + return getFont({ + fontStyle: this.getShallow('fontStyle'), + fontWeight: this.getShallow('fontWeight'), + fontSize: this.getShallow('fontSize'), + fontFamily: this.getShallow('fontFamily') + }, this.ecModel); + }, + + getTextRect: function (text) { + return getBoundingRect( + text, + this.getFont(), + this.getShallow('align'), + this.getShallow('verticalAlign') || this.getShallow('baseline'), + this.getShallow('padding'), + this.getShallow('rich'), + this.getShallow('truncateText') + ); + } +}; + +var getItemStyle = makeStyleMapper( + [ + ['fill', 'color'], + ['stroke', 'borderColor'], + ['lineWidth', 'borderWidth'], + ['opacity'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'], + ['textPosition'], + ['textAlign'] + ] +); + +var itemStyleMixin = { + getItemStyle: function (excludes, includes) { + var style = getItemStyle(this, excludes, includes); + var lineDash = this.getBorderLineDash(); + lineDash && (style.lineDash = lineDash); + return style; + }, + + getBorderLineDash: function () { + var lineType = this.get('borderType'); + return (lineType === 'solid' || lineType == null) ? null + : (lineType === 'dashed' ? [5, 5] : [1, 1]); + } +}; + +/** + * @module echarts/model/Model + */ + +var mixin$1 = mixin; + +/** + * @alias module:echarts/model/Model + * @constructor + * @param {Object} option + * @param {module:echarts/model/Model} [parentModel] + * @param {module:echarts/model/Global} [ecModel] + */ +function Model(option, parentModel, ecModel) { + /** + * @type {module:echarts/model/Model} + * @readOnly + */ + this.parentModel = parentModel; + + /** + * @type {module:echarts/model/Global} + * @readOnly + */ + this.ecModel = ecModel; + + /** + * @type {Object} + * @protected + */ + this.option = option; + + // Simple optimization + // if (this.init) { + // if (arguments.length <= 4) { + // this.init(option, parentModel, ecModel, extraOpt); + // } + // else { + // this.init.apply(this, arguments); + // } + // } +} + +Model.prototype = { + + constructor: Model, + + /** + * Model 的初始化函数 + * @param {Object} option + */ + init: null, + + /** + * 从新的 Option merge + */ + mergeOption: function (option) { + merge(this.option, option, true); + }, + + /** + * @param {string|Array.} path + * @param {boolean} [ignoreParent=false] + * @return {*} + */ + get: function (path, ignoreParent) { + if (path == null) { + return this.option; + } + + return doGet( + this.option, + this.parsePath(path), + !ignoreParent && getParent(this, path) + ); + }, + + /** + * @param {string} key + * @param {boolean} [ignoreParent=false] + * @return {*} + */ + getShallow: function (key, ignoreParent) { + var option = this.option; + + var val = option == null ? option : option[key]; + var parentModel = !ignoreParent && getParent(this, key); + if (val == null && parentModel) { + val = parentModel.getShallow(key); + } + return val; + }, + + /** + * @param {string|Array.} [path] + * @param {module:echarts/model/Model} [parentModel] + * @return {module:echarts/model/Model} + */ + getModel: function (path, parentModel) { + var obj = path == null + ? this.option + : doGet(this.option, path = this.parsePath(path)); + + var thisParentModel; + parentModel = parentModel || ( + (thisParentModel = getParent(this, path)) + && thisParentModel.getModel(path) + ); + + return new Model(obj, parentModel, this.ecModel); + }, + + /** + * If model has option + */ + isEmpty: function () { + return this.option == null; + }, + + restoreData: function () {}, + + // Pending + clone: function () { + var Ctor = this.constructor; + return new Ctor(clone(this.option)); + }, + + setReadOnly: function (properties) { + + }, + + // If path is null/undefined, return null/undefined. + parsePath: function(path) { + if (typeof path === 'string') { + path = path.split('.'); + } + return path; + }, + + /** + * @param {Function} getParentMethod + * param {Array.|string} path + * return {module:echarts/model/Model} + */ + customizeGetParent: function (getParentMethod) { + set$1(this, 'getParent', getParentMethod); + }, + + isAnimationEnabled: function () { + if (!env$1.node) { + if (this.option.animation != null) { + return !!this.option.animation; + } + else if (this.parentModel) { + return this.parentModel.isAnimationEnabled(); + } + } + } +}; + +function doGet(obj, pathArr, parentModel) { + for (var i = 0; i < pathArr.length; i++) { + // Ignore empty + if (!pathArr[i]) { + continue; + } + // obj could be number/string/... (like 0) + obj = (obj && typeof obj === 'object') ? obj[pathArr[i]] : null; + if (obj == null) { + break; + } + } + if (obj == null && parentModel) { + obj = parentModel.get(pathArr); + } + return obj; +} + +// `path` can be null/undefined +function getParent(model, path) { + var getParentMethod = get(model, 'getParent'); + return getParentMethod ? getParentMethod.call(model, path) : model.parentModel; +} + +// Enable Model.extend. +enableClassExtend(Model); + +mixin$1(Model, lineStyleMixin); +mixin$1(Model, areaStyleMixin); +mixin$1(Model, textStyleMixin); +mixin$1(Model, itemStyleMixin); + +var each$3 = each$1; +var isObject$2 = isObject; + +/** + * If value is not array, then translate it to array. + * @param {*} value + * @return {Array} [value] or value + */ +function normalizeToArray(value) { + return value instanceof Array + ? value + : value == null + ? [] + : [value]; +} + +/** + * Sync default option between normal and emphasis like `position` and `show` + * In case some one will write code like + * label: { + * normal: { + * show: false, + * position: 'outside', + * fontSize: 18 + * }, + * emphasis: { + * show: true + * } + * } + * @param {Object} opt + * @param {Array.} subOpts + */ +function defaultEmphasis(opt, subOpts) { + if (opt) { + var emphasisOpt = opt.emphasis = opt.emphasis || {}; + var normalOpt = opt.normal = opt.normal || {}; + + // Default emphasis option from normal + for (var i = 0, len = subOpts.length; i < len; i++) { + var subOptName = subOpts[i]; + if (!emphasisOpt.hasOwnProperty(subOptName) + && normalOpt.hasOwnProperty(subOptName) + ) { + emphasisOpt[subOptName] = normalOpt[subOptName]; + } + } + } +} + +var TEXT_STYLE_OPTIONS = [ + 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily', + 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', + 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', + 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', + 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', + 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding' +]; + +// modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([ +// 'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter', +// 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily', +// // FIXME: deprecated, check and remove it. +// 'textStyle' +// ]); + +/** + * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] + * This helper method retieves value from data. + * @param {string|number|Date|Array|Object} dataItem + * @return {number|string|Date|Array.} + */ +function getDataItemValue(dataItem) { + // Performance sensitive. + return dataItem && (dataItem.value == null ? dataItem : dataItem.value); +} + +/** + * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] + * This helper method determine if dataItem has extra option besides value + * @param {string|number|Date|Array|Object} dataItem + */ +function isDataItemOption(dataItem) { + return isObject$2(dataItem) + && !(dataItem instanceof Array); + // // markLine data can be array + // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array)); +} + +/** + * This helper method convert value in data. + * @param {string|number|Date} value + * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'. + */ +function converDataValue(value, dimInfo) { + // Performance sensitive. + var dimType = dimInfo && dimInfo.type; + if (dimType === 'ordinal') { + return value; + } + + if (dimType === 'time' + // spead up when using timestamp + && typeof value !== 'number' + && value != null + && value !== '-' + ) { + value = +parseDate(value); + } + + // dimType defaults 'number'. + // If dimType is not ordinal and value is null or undefined or NaN or '-', + // parse to NaN. + return (value == null || value === '') + ? NaN : +value; // If string (like '-'), using '+' parse to NaN +} + +/** + * Create a model proxy to be used in tooltip for edge data, markLine data, markPoint data. + * @param {module:echarts/data/List} data + * @param {Object} opt + * @param {string} [opt.seriesIndex] + * @param {Object} [opt.name] + * @param {Object} [opt.mainType] + * @param {Object} [opt.subType] + */ + + +// PENDING A little ugly +var dataFormatMixin = { + /** + * Get params for formatter + * @param {number} dataIndex + * @param {string} [dataType] + * @return {Object} + */ + getDataParams: function (dataIndex, dataType) { + var data = this.getData(dataType); + var rawValue = this.getRawValue(dataIndex, dataType); + var rawDataIndex = data.getRawIndex(dataIndex); + var name = data.getName(dataIndex, true); + var itemOpt = data.getRawDataItem(dataIndex); + var color = data.getItemVisual(dataIndex, 'color'); + + return { + componentType: this.mainType, + componentSubType: this.subType, + seriesType: this.mainType === 'series' ? this.subType : null, + seriesIndex: this.seriesIndex, + seriesId: this.id, + seriesName: this.name, + name: name, + dataIndex: rawDataIndex, + data: itemOpt, + dataType: dataType, + value: rawValue, + color: color, + marker: getTooltipMarker(color), + + // Param name list for mapping `a`, `b`, `c`, `d`, `e` + $vars: ['seriesName', 'name', 'value'] + }; + }, + + /** + * Format label + * @param {number} dataIndex + * @param {string} [status='normal'] 'normal' or 'emphasis' + * @param {string} [dataType] + * @param {number} [dimIndex] + * @param {string} [labelProp='label'] + * @return {string} + */ + getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) { + status = status || 'normal'; + var data = this.getData(dataType); + var itemModel = data.getItemModel(dataIndex); + + var params = this.getDataParams(dataIndex, dataType); + if (dimIndex != null && (params.value instanceof Array)) { + params.value = params.value[dimIndex]; + } + + var formatter = itemModel.get([labelProp || 'label', status, 'formatter']); + + if (typeof formatter === 'function') { + params.status = status; + return formatter(params); + } + else if (typeof formatter === 'string') { + return formatTpl(formatter, params); + } + }, + + /** + * Get raw value in option + * @param {number} idx + * @param {string} [dataType] + * @return {Object} + */ + getRawValue: function (idx, dataType) { + var data = this.getData(dataType); + var dataItem = data.getRawDataItem(idx); + if (dataItem != null) { + return (isObject$2(dataItem) && !(dataItem instanceof Array)) + ? dataItem.value : dataItem; + } + }, + + /** + * Should be implemented. + * @param {number} dataIndex + * @param {boolean} [multipleSeries=false] + * @param {number} [dataType] + * @return {string} tooltip string + */ + formatTooltip: noop +}; + +/** + * Mapping to exists for merge. + * + * @public + * @param {Array.|Array.} exists + * @param {Object|Array.} newCptOptions + * @return {Array.} Result, like [{exist: ..., option: ...}, {}], + * index of which is the same as exists. + */ +function mappingToExists(exists, newCptOptions) { + // Mapping by the order by original option (but not order of + // new option) in merge mode. Because we should ensure + // some specified index (like xAxisIndex) is consistent with + // original option, which is easy to understand, espatially in + // media query. And in most case, merge option is used to + // update partial option but not be expected to change order. + newCptOptions = (newCptOptions || []).slice(); + + var result = map(exists || [], function (obj, index) { + return {exist: obj}; + }); + + // Mapping by id or name if specified. + each$3(newCptOptions, function (cptOption, index) { + if (!isObject$2(cptOption)) { + return; + } + + // id has highest priority. + for (var i = 0; i < result.length; i++) { + if (!result[i].option // Consider name: two map to one. + && cptOption.id != null + && result[i].exist.id === cptOption.id + '' + ) { + result[i].option = cptOption; + newCptOptions[index] = null; + return; + } + } + + for (var i = 0; i < result.length; i++) { + var exist = result[i].exist; + if (!result[i].option // Consider name: two map to one. + // Can not match when both ids exist but different. + && (exist.id == null || cptOption.id == null) + && cptOption.name != null + && !isIdInner(cptOption) + && !isIdInner(exist) + && exist.name === cptOption.name + '' + ) { + result[i].option = cptOption; + newCptOptions[index] = null; + return; + } + } + }); + + // Otherwise mapping by index. + each$3(newCptOptions, function (cptOption, index) { + if (!isObject$2(cptOption)) { + return; + } + + var i = 0; + for (; i < result.length; i++) { + var exist = result[i].exist; + if (!result[i].option + // Existing model that already has id should be able to + // mapped to (because after mapping performed model may + // be assigned with a id, whish should not affect next + // mapping), except those has inner id. + && !isIdInner(exist) + // Caution: + // Do not overwrite id. But name can be overwritten, + // because axis use name as 'show label text'. + // 'exist' always has id and name and we dont + // need to check it. + && cptOption.id == null + ) { + result[i].option = cptOption; + break; + } + } + + if (i >= result.length) { + result.push({option: cptOption}); + } + }); + + return result; +} + +/** + * Make id and name for mapping result (result of mappingToExists) + * into `keyInfo` field. + * + * @public + * @param {Array.} Result, like [{exist: ..., option: ...}, {}], + * which order is the same as exists. + * @return {Array.} The input. + */ +function makeIdAndName(mapResult) { + // We use this id to hash component models and view instances + // in echarts. id can be specified by user, or auto generated. + + // The id generation rule ensures new view instance are able + // to mapped to old instance when setOption are called in + // no-merge mode. So we generate model id by name and plus + // type in view id. + + // name can be duplicated among components, which is convenient + // to specify multi components (like series) by one name. + + // Ensure that each id is distinct. + var idMap = createHashMap(); + + each$3(mapResult, function (item, index) { + var existCpt = item.exist; + existCpt && idMap.set(existCpt.id, item); + }); + + each$3(mapResult, function (item, index) { + var opt = item.option; + + assert( + !opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, + 'id duplicates: ' + (opt && opt.id) + ); + + opt && opt.id != null && idMap.set(opt.id, item); + !item.keyInfo && (item.keyInfo = {}); + }); + + // Make name and id. + each$3(mapResult, function (item, index) { + var existCpt = item.exist; + var opt = item.option; + var keyInfo = item.keyInfo; + + if (!isObject$2(opt)) { + return; + } + + // name can be overwitten. Consider case: axis.name = '20km'. + // But id generated by name will not be changed, which affect + // only in that case: setOption with 'not merge mode' and view + // instance will be recreated, which can be accepted. + keyInfo.name = opt.name != null + ? opt.name + '' + : existCpt + ? existCpt.name + : '\0-'; // name may be displayed on screen, so use '-'. + + if (existCpt) { + keyInfo.id = existCpt.id; + } + else if (opt.id != null) { + keyInfo.id = opt.id + ''; + } + else { + // Consider this situatoin: + // optionA: [{name: 'a'}, {name: 'a'}, {..}] + // optionB [{..}, {name: 'a'}, {name: 'a'}] + // Series with the same name between optionA and optionB + // should be mapped. + var idNum = 0; + do { + keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++; + } + while (idMap.get(keyInfo.id)); + } + + idMap.set(keyInfo.id, item); + }); +} + +/** + * @public + * @param {Object} cptOption + * @return {boolean} + */ +function isIdInner(cptOption) { + return isObject$2(cptOption) + && cptOption.id + && (cptOption.id + '').indexOf('\0_ec_\0') === 0; +} + +/** + * A helper for removing duplicate items between batchA and batchB, + * and in themselves, and categorize by series. + * + * @param {Array.} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] + * @param {Array.} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] + * @return {Array., Array.>} result: [resultBatchA, resultBatchB] + */ +function compressBatches(batchA, batchB) { + var mapA = {}; + var mapB = {}; + + makeMap(batchA || [], mapA); + makeMap(batchB || [], mapB, mapA); + + return [mapToArray(mapA), mapToArray(mapB)]; + + function makeMap(sourceBatch, map$$1, otherMap) { + for (var i = 0, len = sourceBatch.length; i < len; i++) { + var seriesId = sourceBatch[i].seriesId; + var dataIndices = normalizeToArray(sourceBatch[i].dataIndex); + var otherDataIndices = otherMap && otherMap[seriesId]; + + for (var j = 0, lenj = dataIndices.length; j < lenj; j++) { + var dataIndex = dataIndices[j]; + + if (otherDataIndices && otherDataIndices[dataIndex]) { + otherDataIndices[dataIndex] = null; + } + else { + (map$$1[seriesId] || (map$$1[seriesId] = {}))[dataIndex] = 1; + } + } + } + } + + function mapToArray(map$$1, isData) { + var result = []; + for (var i in map$$1) { + if (map$$1.hasOwnProperty(i) && map$$1[i] != null) { + if (isData) { + result.push(+i); + } + else { + var dataIndices = mapToArray(map$$1[i], true); + dataIndices.length && result.push({seriesId: i, dataIndex: dataIndices}); + } + } + } + return result; + } +} + +/** + * @param {module:echarts/data/List} data + * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name + * each of which can be Array or primary type. + * @return {number|Array.} dataIndex If not found, return undefined/null. + */ +function queryDataIndex(data, payload) { + if (payload.dataIndexInside != null) { + return payload.dataIndexInside; + } + else if (payload.dataIndex != null) { + return isArray(payload.dataIndex) + ? map(payload.dataIndex, function (value) { + return data.indexOfRawIndex(value); + }) + : data.indexOfRawIndex(payload.dataIndex); + } + else if (payload.name != null) { + return isArray(payload.name) + ? map(payload.name, function (value) { + return data.indexOfName(value); + }) + : data.indexOfName(payload.name); + } +} + +/** + * Enable property storage to any host object. + * Notice: Serialization is not supported. + * + * For example: + * var get = modelUitl.makeGetter(); + * + * function some(hostObj) { + * get(hostObj)._someProperty = 1212; + * ... + * } + * + * @return {Function} + */ +var makeGetter = (function () { + var index = 0; + return function () { + var key = '\0__ec_prop_getter_' + index++; + return function (hostObj) { + return hostObj[key] || (hostObj[key] = {}); + }; + }; +})(); + +/** + * @param {module:echarts/model/Global} ecModel + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex, seriesId, seriesName, + * geoIndex, geoId, geoName, + * bmapIndex, bmapId, bmapName, + * xAxisIndex, xAxisId, xAxisName, + * yAxisIndex, yAxisId, yAxisName, + * gridIndex, gridId, gridName, + * ... (can be extended) + * } + * Each properties can be number|string|Array.|Array. + * For example, a finder could be + * { + * seriesIndex: 3, + * geoId: ['aa', 'cc'], + * gridName: ['xx', 'rr'] + * } + * xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify) + * If nothing or null/undefined specified, return nothing. + * @param {Object} [opt] + * @param {string} [opt.defaultMainType] + * @param {Array.} [opt.includeMainTypes] + * @return {Object} result like: + * { + * seriesModels: [seriesModel1, seriesModel2], + * seriesModel: seriesModel1, // The first model + * geoModels: [geoModel1, geoModel2], + * geoModel: geoModel1, // The first model + * ... + * } + */ +function parseFinder(ecModel, finder, opt) { + if (isString(finder)) { + var obj = {}; + obj[finder + 'Index'] = 0; + finder = obj; + } + + var defaultMainType = opt && opt.defaultMainType; + if (defaultMainType + && !has(finder, defaultMainType + 'Index') + && !has(finder, defaultMainType + 'Id') + && !has(finder, defaultMainType + 'Name') + ) { + finder[defaultMainType + 'Index'] = 0; + } + + var result = {}; + + each$3(finder, function (value, key) { + var value = finder[key]; + + // Exclude 'dataIndex' and other illgal keys. + if (key === 'dataIndex' || key === 'dataIndexInside') { + result[key] = value; + return; + } + + var parsedKey = key.match(/^(\w+)(Index|Id|Name)$/) || []; + var mainType = parsedKey[1]; + var queryType = (parsedKey[2] || '').toLowerCase(); + + if (!mainType + || !queryType + || value == null + || (queryType === 'index' && value === 'none') + || (opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0) + ) { + return; + } + + var queryParam = {mainType: mainType}; + if (queryType !== 'index' || value !== 'all') { + queryParam[queryType] = value; + } + + var models = ecModel.queryComponents(queryParam); + result[mainType + 'Models'] = models; + result[mainType + 'Model'] = models[0]; + }); + + return result; +} + +/** + * @see {module:echarts/data/helper/completeDimensions} + * @param {module:echarts/data/List} data + * @param {string|number} dataDim + * @return {string} + */ +function dataDimToCoordDim(data, dataDim) { + var dimensions = data.dimensions; + dataDim = data.getDimension(dataDim); + for (var i = 0; i < dimensions.length; i++) { + var dimItem = data.getDimensionInfo(dimensions[i]); + if (dimItem.name === dataDim) { + return dimItem.coordDim; + } + } +} + +/** + * @see {module:echarts/data/helper/completeDimensions} + * @param {module:echarts/data/List} data + * @param {string} coordDim + * @return {Array.} data dimensions on the coordDim. + */ +function coordDimToDataDim(data, coordDim) { + var dataDim = []; + each$3(data.dimensions, function (dimName) { + var dimItem = data.getDimensionInfo(dimName); + if (dimItem.coordDim === coordDim) { + dataDim[dimItem.coordDimIndex] = dimItem.name; + } + }); + return dataDim; +} + +/** + * @see {module:echarts/data/helper/completeDimensions} + * @param {module:echarts/data/List} data + * @param {string} otherDim Can be `otherDims` + * like 'label' or 'tooltip'. + * @return {Array.} data dimensions on the otherDim. + */ +function otherDimToDataDim(data, otherDim) { + var dataDim = []; + each$3(data.dimensions, function (dimName) { + var dimItem = data.getDimensionInfo(dimName); + var otherDims = dimItem.otherDims; + var dimIndex = otherDims[otherDim]; + if (dimIndex != null && dimIndex !== false) { + dataDim[dimIndex] = dimItem.name; + } + }); + return dataDim; +} + +function has(obj, prop) { + return obj && obj.hasOwnProperty(prop); +} + +var base = 0; + +var DELIMITER = '_'; + +/** + * @public + * @param {string} type + * @return {string} + */ +function getUID(type) { + // Considering the case of crossing js context, + // use Math.random to make id as unique as possible. + return [(type || ''), base++, Math.random()].join(DELIMITER); +} + +/** + * @inner + */ +function enableSubTypeDefaulter(entity) { + + var subTypeDefaulters = {}; + + entity.registerSubTypeDefaulter = function (componentType, defaulter) { + componentType = parseClassType$1(componentType); + subTypeDefaulters[componentType.main] = defaulter; + }; + + entity.determineSubType = function (componentType, option) { + var type = option.type; + if (!type) { + var componentTypeMain = parseClassType$1(componentType).main; + if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) { + type = subTypeDefaulters[componentTypeMain](option); + } + } + return type; + }; + + return entity; +} + +/** + * Topological travel on Activity Network (Activity On Vertices). + * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis']. + * + * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology. + * + * If there is circle dependencey, Error will be thrown. + * + */ +function enableTopologicalTravel(entity, dependencyGetter) { + + /** + * @public + * @param {Array.} targetNameList Target Component type list. + * Can be ['aa', 'bb', 'aa.xx'] + * @param {Array.} fullNameList By which we can build dependency graph. + * @param {Function} callback Params: componentType, dependencies. + * @param {Object} context Scope of callback. + */ + entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) { + if (!targetNameList.length) { + return; + } + + var result = makeDepndencyGraph(fullNameList); + var graph = result.graph; + var stack = result.noEntryList; + + var targetNameSet = {}; + each$1(targetNameList, function (name) { + targetNameSet[name] = true; + }); + + while (stack.length) { + var currComponentType = stack.pop(); + var currVertex = graph[currComponentType]; + var isInTargetNameSet = !!targetNameSet[currComponentType]; + if (isInTargetNameSet) { + callback.call(context, currComponentType, currVertex.originalDeps.slice()); + delete targetNameSet[currComponentType]; + } + each$1( + currVertex.successor, + isInTargetNameSet ? removeEdgeAndAdd : removeEdge + ); + } + + each$1(targetNameSet, function () { + throw new Error('Circle dependency may exists'); + }); + + function removeEdge(succComponentType) { + graph[succComponentType].entryCount--; + if (graph[succComponentType].entryCount === 0) { + stack.push(succComponentType); + } + } + + // Consider this case: legend depends on series, and we call + // chart.setOption({series: [...]}), where only series is in option. + // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will + // not be called, but only sereis.mergeOption is called. Thus legend + // have no chance to update its local record about series (like which + // name of series is available in legend). + function removeEdgeAndAdd(succComponentType) { + targetNameSet[succComponentType] = true; + removeEdge(succComponentType); + } + }; + + /** + * DepndencyGraph: {Object} + * key: conponentType, + * value: { + * successor: [conponentTypes...], + * originalDeps: [conponentTypes...], + * entryCount: {number} + * } + */ + function makeDepndencyGraph(fullNameList) { + var graph = {}; + var noEntryList = []; + + each$1(fullNameList, function (name) { + + var thisItem = createDependencyGraphItem(graph, name); + var originalDeps = thisItem.originalDeps = dependencyGetter(name); + + var availableDeps = getAvailableDependencies(originalDeps, fullNameList); + thisItem.entryCount = availableDeps.length; + if (thisItem.entryCount === 0) { + noEntryList.push(name); + } + + each$1(availableDeps, function (dependentName) { + if (indexOf(thisItem.predecessor, dependentName) < 0) { + thisItem.predecessor.push(dependentName); + } + var thatItem = createDependencyGraphItem(graph, dependentName); + if (indexOf(thatItem.successor, dependentName) < 0) { + thatItem.successor.push(name); + } + }); + }); + + return {graph: graph, noEntryList: noEntryList}; + } + + function createDependencyGraphItem(graph, name) { + if (!graph[name]) { + graph[name] = {predecessor: [], successor: []}; + } + return graph[name]; + } + + function getAvailableDependencies(originalDeps, fullNameList) { + var availableDeps = []; + each$1(originalDeps, function (dep) { + indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep); + }); + return availableDeps; + } +} + +// Layout helpers for each component positioning + +var each$4 = each$1; + +/** + * @public + */ +var LOCATION_PARAMS = [ + 'left', 'right', 'top', 'bottom', 'width', 'height' +]; + +/** + * @public + */ +var HV_NAMES = [ + ['width', 'left', 'right'], + ['height', 'top', 'bottom'] +]; + +function boxLayout(orient, group, gap, maxWidth, maxHeight) { + var x = 0; + var y = 0; + + if (maxWidth == null) { + maxWidth = Infinity; + } + if (maxHeight == null) { + maxHeight = Infinity; + } + var currentLineMaxSize = 0; + + group.eachChild(function (child, idx) { + var position = child.position; + var rect = child.getBoundingRect(); + var nextChild = group.childAt(idx + 1); + var nextChildRect = nextChild && nextChild.getBoundingRect(); + var nextX; + var nextY; + + if (orient === 'horizontal') { + var moveX = rect.width + (nextChildRect ? (-nextChildRect.x + rect.x) : 0); + nextX = x + moveX; + // Wrap when width exceeds maxWidth or meet a `newline` group + // FIXME compare before adding gap? + if (nextX > maxWidth || child.newline) { + x = 0; + nextX = moveX; + y += currentLineMaxSize + gap; + currentLineMaxSize = rect.height; + } + else { + // FIXME: consider rect.y is not `0`? + currentLineMaxSize = Math.max(currentLineMaxSize, rect.height); + } + } + else { + var moveY = rect.height + (nextChildRect ? (-nextChildRect.y + rect.y) : 0); + nextY = y + moveY; + // Wrap when width exceeds maxHeight or meet a `newline` group + if (nextY > maxHeight || child.newline) { + x += currentLineMaxSize + gap; + y = 0; + nextY = moveY; + currentLineMaxSize = rect.width; + } + else { + currentLineMaxSize = Math.max(currentLineMaxSize, rect.width); + } + } + + if (child.newline) { + return; + } + + position[0] = x; + position[1] = y; + + orient === 'horizontal' + ? (x = nextX + gap) + : (y = nextY + gap); + }); +} + +/** + * VBox or HBox layouting + * @param {string} orient + * @param {module:zrender/container/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ +var box = boxLayout; + +/** + * VBox layouting + * @param {module:zrender/container/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ +var vbox = curry(boxLayout, 'vertical'); + +/** + * HBox layouting + * @param {module:zrender/container/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ +var hbox = curry(boxLayout, 'horizontal'); + +/** + * If x or x2 is not specified or 'center' 'left' 'right', + * the width would be as long as possible. + * If y or y2 is not specified or 'middle' 'top' 'bottom', + * the height would be as long as possible. + * + * @param {Object} positionInfo + * @param {number|string} [positionInfo.x] + * @param {number|string} [positionInfo.y] + * @param {number|string} [positionInfo.x2] + * @param {number|string} [positionInfo.y2] + * @param {Object} containerRect {width, height} + * @param {string|number} margin + * @return {Object} {width, height} + */ +function getAvailableSize(positionInfo, containerRect, margin) { + var containerWidth = containerRect.width; + var containerHeight = containerRect.height; + + var x = parsePercent$1(positionInfo.x, containerWidth); + var y = parsePercent$1(positionInfo.y, containerHeight); + var x2 = parsePercent$1(positionInfo.x2, containerWidth); + var y2 = parsePercent$1(positionInfo.y2, containerHeight); + + (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0); + (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth); + (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0); + (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (y2 = containerHeight); + + margin = normalizeCssArray$1(margin || 0); + + return { + width: Math.max(x2 - x - margin[1] - margin[3], 0), + height: Math.max(y2 - y - margin[0] - margin[2], 0) + }; +} + +/** + * Parse position info. + * + * @param {Object} positionInfo + * @param {number|string} [positionInfo.left] + * @param {number|string} [positionInfo.top] + * @param {number|string} [positionInfo.right] + * @param {number|string} [positionInfo.bottom] + * @param {number|string} [positionInfo.width] + * @param {number|string} [positionInfo.height] + * @param {number|string} [positionInfo.aspect] Aspect is width / height + * @param {Object} containerRect + * @param {string|number} [margin] + * + * @return {module:zrender/core/BoundingRect} + */ +function getLayoutRect( + positionInfo, containerRect, margin +) { + margin = normalizeCssArray$1(margin || 0); + + var containerWidth = containerRect.width; + var containerHeight = containerRect.height; + + var left = parsePercent$1(positionInfo.left, containerWidth); + var top = parsePercent$1(positionInfo.top, containerHeight); + var right = parsePercent$1(positionInfo.right, containerWidth); + var bottom = parsePercent$1(positionInfo.bottom, containerHeight); + var width = parsePercent$1(positionInfo.width, containerWidth); + var height = parsePercent$1(positionInfo.height, containerHeight); + + var verticalMargin = margin[2] + margin[0]; + var horizontalMargin = margin[1] + margin[3]; + var aspect = positionInfo.aspect; + + // If width is not specified, calculate width from left and right + if (isNaN(width)) { + width = containerWidth - right - horizontalMargin - left; + } + if (isNaN(height)) { + height = containerHeight - bottom - verticalMargin - top; + } + + if (aspect != null) { + // If width and height are not given + // 1. Graph should not exceeds the container + // 2. Aspect must be keeped + // 3. Graph should take the space as more as possible + // FIXME + // Margin is not considered, because there is no case that both + // using margin and aspect so far. + if (isNaN(width) && isNaN(height)) { + if (aspect > containerWidth / containerHeight) { + width = containerWidth * 0.8; + } + else { + height = containerHeight * 0.8; + } + } + + // Calculate width or height with given aspect + if (isNaN(width)) { + width = aspect * height; + } + if (isNaN(height)) { + height = width / aspect; + } + } + + // If left is not specified, calculate left from right and width + if (isNaN(left)) { + left = containerWidth - right - width - horizontalMargin; + } + if (isNaN(top)) { + top = containerHeight - bottom - height - verticalMargin; + } + + // Align left and top + switch (positionInfo.left || positionInfo.right) { + case 'center': + left = containerWidth / 2 - width / 2 - margin[3]; + break; + case 'right': + left = containerWidth - width - horizontalMargin; + break; + } + switch (positionInfo.top || positionInfo.bottom) { + case 'middle': + case 'center': + top = containerHeight / 2 - height / 2 - margin[0]; + break; + case 'bottom': + top = containerHeight - height - verticalMargin; + break; + } + // If something is wrong and left, top, width, height are calculated as NaN + left = left || 0; + top = top || 0; + if (isNaN(width)) { + // Width may be NaN if only one value is given except width + width = containerWidth - horizontalMargin - left - (right || 0); + } + if (isNaN(height)) { + // Height may be NaN if only one value is given except height + height = containerHeight - verticalMargin - top - (bottom || 0); + } + + var rect = new BoundingRect(left + margin[3], top + margin[0], width, height); + rect.margin = margin; + return rect; +} + + +/** + * Position a zr element in viewport + * Group position is specified by either + * {left, top}, {right, bottom} + * If all properties exists, right and bottom will be igonred. + * + * Logic: + * 1. Scale (against origin point in parent coord) + * 2. Rotate (against origin point in parent coord) + * 3. Traslate (with el.position by this method) + * So this method only fixes the last step 'Traslate', which does not affect + * scaling and rotating. + * + * If be called repeatly with the same input el, the same result will be gotten. + * + * @param {module:zrender/Element} el Should have `getBoundingRect` method. + * @param {Object} positionInfo + * @param {number|string} [positionInfo.left] + * @param {number|string} [positionInfo.top] + * @param {number|string} [positionInfo.right] + * @param {number|string} [positionInfo.bottom] + * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw' + * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw' + * @param {Object} containerRect + * @param {string|number} margin + * @param {Object} [opt] + * @param {Array.} [opt.hv=[1,1]] Only horizontal or only vertical. + * @param {Array.} [opt.boundingMode='all'] + * Specify how to calculate boundingRect when locating. + * 'all': Position the boundingRect that is transformed and uioned + * both itself and its descendants. + * This mode simplies confine the elements in the bounding + * of their container (e.g., using 'right: 0'). + * 'raw': Position the boundingRect that is not transformed and only itself. + * This mode is useful when you want a element can overflow its + * container. (Consider a rotated circle needs to be located in a corner.) + * In this mode positionInfo.width/height can only be number. + */ +function positionElement(el, positionInfo, containerRect, margin, opt) { + var h = !opt || !opt.hv || opt.hv[0]; + var v = !opt || !opt.hv || opt.hv[1]; + var boundingMode = opt && opt.boundingMode || 'all'; + + if (!h && !v) { + return; + } + + var rect; + if (boundingMode === 'raw') { + rect = el.type === 'group' + ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) + : el.getBoundingRect(); + } + else { + rect = el.getBoundingRect(); + if (el.needLocalTransform()) { + var transform = el.getLocalTransform(); + // Notice: raw rect may be inner object of el, + // which should not be modified. + rect = rect.clone(); + rect.applyTransform(transform); + } + } + + // The real width and height can not be specified but calculated by the given el. + positionInfo = getLayoutRect( + defaults( + {width: rect.width, height: rect.height}, + positionInfo + ), + containerRect, + margin + ); + + // Because 'tranlate' is the last step in transform + // (see zrender/core/Transformable#getLocalTransfrom), + // we can just only modify el.position to get final result. + var elPos = el.position; + var dx = h ? positionInfo.x - rect.x : 0; + var dy = v ? positionInfo.y - rect.y : 0; + + el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]); +} + +/** + * @param {Object} option Contains some of the properties in HV_NAMES. + * @param {number} hvIdx 0: horizontal; 1: vertical. + */ +function sizeCalculable(option, hvIdx) { + return option[HV_NAMES[hvIdx][0]] != null + || (option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null); +} + +/** + * Consider Case: + * When defulat option has {left: 0, width: 100}, and we set {right: 0} + * through setOption or media query, using normal zrUtil.merge will cause + * {right: 0} does not take effect. + * + * @example + * ComponentModel.extend({ + * init: function () { + * ... + * var inputPositionParams = layout.getLayoutParams(option); + * this.mergeOption(inputPositionParams); + * }, + * mergeOption: function (newOption) { + * newOption && zrUtil.merge(thisOption, newOption, true); + * layout.mergeLayoutParam(thisOption, newOption); + * } + * }); + * + * @param {Object} targetOption + * @param {Object} newOption + * @param {Object|string} [opt] + * @param {boolean|Array.} [opt.ignoreSize=false] Used for the components + * that width (or height) should not be calculated by left and right (or top and bottom). + */ +function mergeLayoutParam(targetOption, newOption, opt) { + !isObject(opt) && (opt = {}); + + var ignoreSize = opt.ignoreSize; + !isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]); + + var hResult = merge$$1(HV_NAMES[0], 0); + var vResult = merge$$1(HV_NAMES[1], 1); + + copy(HV_NAMES[0], targetOption, hResult); + copy(HV_NAMES[1], targetOption, vResult); + + function merge$$1(names, hvIdx) { + var newParams = {}; + var newValueCount = 0; + var merged = {}; + var mergedValueCount = 0; + var enoughParamNumber = 2; + + each$4(names, function (name) { + merged[name] = targetOption[name]; + }); + each$4(names, function (name) { + // Consider case: newOption.width is null, which is + // set by user for removing width setting. + hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]); + hasValue(newParams, name) && newValueCount++; + hasValue(merged, name) && mergedValueCount++; + }); + + if (ignoreSize[hvIdx]) { + // Only one of left/right is premitted to exist. + if (hasValue(newOption, names[1])) { + merged[names[2]] = null; + } + else if (hasValue(newOption, names[2])) { + merged[names[1]] = null; + } + return merged; + } + + // Case: newOption: {width: ..., right: ...}, + // or targetOption: {right: ...} and newOption: {width: ...}, + // There is no conflict when merged only has params count + // little than enoughParamNumber. + if (mergedValueCount === enoughParamNumber || !newValueCount) { + return merged; + } + // Case: newOption: {width: ..., right: ...}, + // Than we can make sure user only want those two, and ignore + // all origin params in targetOption. + else if (newValueCount >= enoughParamNumber) { + return newParams; + } + else { + // Chose another param from targetOption by priority. + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (!hasProp(newParams, name) && hasProp(targetOption, name)) { + newParams[name] = targetOption[name]; + break; + } + } + return newParams; + } + } + + function hasProp(obj, name) { + return obj.hasOwnProperty(name); + } + + function hasValue(obj, name) { + return obj[name] != null && obj[name] !== 'auto'; + } + + function copy(names, target, source) { + each$4(names, function (name) { + target[name] = source[name]; + }); + } +} + +/** + * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. + * @param {Object} source + * @return {Object} Result contains those props. + */ +function getLayoutParams(source) { + return copyLayoutParams({}, source); +} + +/** + * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. + * @param {Object} source + * @return {Object} Result contains those props. + */ +function copyLayoutParams(target, source) { + source && target && each$4(LOCATION_PARAMS, function (name) { + source.hasOwnProperty(name) && (target[name] = source[name]); + }); + return target; +} + +var boxLayoutMixin = { + getBoxLayoutParams: function () { + return { + left: this.get('left'), + top: this.get('top'), + right: this.get('right'), + bottom: this.get('bottom'), + width: this.get('width'), + height: this.get('height') + }; + } +}; + +/** + * Component model + * + * @module echarts/model/Component + */ + +var arrayPush = Array.prototype.push; + +/** + * @alias module:echarts/model/Component + * @constructor + * @param {Object} option + * @param {module:echarts/model/Model} parentModel + * @param {module:echarts/model/Model} ecModel + */ +var ComponentModel = Model.extend({ + + type: 'component', + + /** + * @readOnly + * @type {string} + */ + id: '', + + /** + * @readOnly + */ + name: '', + + /** + * @readOnly + * @type {string} + */ + mainType: '', + + /** + * @readOnly + * @type {string} + */ + subType: '', + + /** + * @readOnly + * @type {number} + */ + componentIndex: 0, + + /** + * @type {Object} + * @protected + */ + defaultOption: null, + + /** + * @type {module:echarts/model/Global} + * @readOnly + */ + ecModel: null, + + /** + * key: componentType + * value: Component model list, can not be null. + * @type {Object.>} + * @readOnly + */ + dependentModels: [], + + /** + * @type {string} + * @readOnly + */ + uid: null, + + /** + * Support merge layout params. + * Only support 'box' now (left/right/top/bottom/width/height). + * @type {string|Object} Object can be {ignoreSize: true} + * @readOnly + */ + layoutMode: null, + + $constructor: function (option, parentModel, ecModel, extraOpt) { + Model.call(this, option, parentModel, ecModel, extraOpt); + + this.uid = getUID('componentModel'); + }, + + + init: function (option, parentModel, ecModel, extraOpt) { + this.mergeDefaultAndTheme(option, ecModel); + }, + + mergeDefaultAndTheme: function (option, ecModel) { + var layoutMode = this.layoutMode; + var inputPositionParams = layoutMode + ? getLayoutParams(option) : {}; + + var themeModel = ecModel.getTheme(); + merge(option, themeModel.get(this.mainType)); + merge(option, this.getDefaultOption()); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }, + + mergeOption: function (option, extraOpt) { + merge(this.option, option, true); + + var layoutMode = this.layoutMode; + if (layoutMode) { + mergeLayoutParam(this.option, option, layoutMode); + } + }, + + // Hooker after init or mergeOption + optionUpdated: function (newCptOption, isInit) {}, + + getDefaultOption: function () { + if (!hasOwn(this, '__defaultOption')) { + var optList = []; + var Class = this.constructor; + while (Class) { + var opt = Class.prototype.defaultOption; + opt && optList.push(opt); + Class = Class.superClass; + } + + var defaultOption = {}; + for (var i = optList.length - 1; i >= 0; i--) { + defaultOption = merge(defaultOption, optList[i], true); + } + set$1(this, '__defaultOption', defaultOption); + } + return get(this, '__defaultOption'); + }, + + getReferringComponents: function (mainType) { + return this.ecModel.queryComponents({ + mainType: mainType, + index: this.get(mainType + 'Index', true), + id: this.get(mainType + 'Id', true) + }); + } + +}); + +// Reset ComponentModel.extend, add preConstruct. +// clazzUtil.enableClassExtend( +// ComponentModel, +// function (option, parentModel, ecModel, extraOpt) { +// // Set dependentModels, componentIndex, name, id, mainType, subType. +// zrUtil.extend(this, extraOpt); + +// this.uid = componentUtil.getUID('componentModel'); + +// // this.setReadOnly([ +// // 'type', 'id', 'uid', 'name', 'mainType', 'subType', +// // 'dependentModels', 'componentIndex' +// // ]); +// } +// ); + +// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on. +enableClassManagement( + ComponentModel, {registerWhenExtend: true} +); +enableSubTypeDefaulter(ComponentModel); + +// Add capability of ComponentModel.topologicalTravel. +enableTopologicalTravel(ComponentModel, getDependencies); + +function getDependencies(componentType) { + var deps = []; + each$1(ComponentModel.getClassesByMainType(componentType), function (Clazz) { + arrayPush.apply(deps, Clazz.prototype.dependencies || []); + }); + // Ensure main type + return map(deps, function (type) { + return parseClassType$1(type).main; + }); +} + +mixin(ComponentModel, boxLayoutMixin); + +var platform = ''; +// Navigator not exists in node +if (typeof navigator !== 'undefined') { + platform = navigator.platform || ''; +} + +var globalDefault = { + // 全图默认背景 + // backgroundColor: 'rgba(0,0,0,0)', + + // https://dribbble.com/shots/1065960-Infographic-Pie-chart-visualization + // color: ['#5793f3', '#d14a61', '#fd9c35', '#675bba', '#fec42c', '#dd4444', '#d4df5a', '#cd4870'], + // 浅色 + // color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'], + // color: ['#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'], + // 深色 + color: ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83', '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'], + + // 默认需要 Grid 配置项 + // grid: {}, + // 主题,主题 + textStyle: { + // color: '#000', + // decoration: 'none', + // PENDING + fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif', + // fontFamily: 'Arial, Verdana, sans-serif', + fontSize: 12, + fontStyle: 'normal', + fontWeight: 'normal' + }, + + // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/ + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation + // Default is source-over + blendMode: null, + + animation: 'auto', + animationDuration: 1000, + animationDurationUpdate: 300, + animationEasing: 'exponentialOut', + animationEasingUpdate: 'cubicOut', + + animationThreshold: 2000, + // Configuration for progressive/incremental rendering + progressiveThreshold: 3000, + progressive: 400, + + // Threshold of if use single hover layer to optimize. + // It is recommended that `hoverLayerThreshold` is equivalent to or less than + // `progressiveThreshold`, otherwise hover will cause restart of progressive, + // which is unexpected. + // see example . + hoverLayerThreshold: 3000, + + // See: module:echarts/scale/Time + useUTC: false +}; + +var colorPaletteMixin = { + clearColorPalette: function () { + set$1(this, 'colorIdx', 0); + set$1(this, 'colorNameMap', {}); + }, + + getColorFromPalette: function (name, scope) { + scope = scope || this; + var colorIdx = get(scope, 'colorIdx') || 0; + var colorNameMap = get(scope, 'colorNameMap') || set$1(scope, 'colorNameMap', {}); + // Use `hasOwnProperty` to avoid conflict with Object.prototype. + if (colorNameMap.hasOwnProperty(name)) { + return colorNameMap[name]; + } + var colorPalette = this.get('color', true) || []; + if (!colorPalette.length) { + return; + } + + var color = colorPalette[colorIdx]; + if (name) { + colorNameMap[name] = color; + } + set$1(scope, 'colorIdx', (colorIdx + 1) % colorPalette.length); + + return color; + } +}; + +/** + * ECharts global model + * + * @module {echarts/model/Global} + */ + + +/** + * Caution: If the mechanism should be changed some day, these cases + * should be considered: + * + * (1) In `merge option` mode, if using the same option to call `setOption` + * many times, the result should be the same (try our best to ensure that). + * (2) In `merge option` mode, if a component has no id/name specified, it + * will be merged by index, and the result sequence of the components is + * consistent to the original sequence. + * (3) `reset` feature (in toolbox). Find detailed info in comments about + * `mergeOption` in module:echarts/model/OptionManager. + */ + +var each$2 = each$1; +var filter$1 = filter; +var map$1 = map; +var isArray$1 = isArray; +var indexOf$1 = indexOf; +var isObject$1 = isObject; + +var OPTION_INNER_KEY = '\0_ec_inner'; + +/** + * @alias module:echarts/model/Global + * + * @param {Object} option + * @param {module:echarts/model/Model} parentModel + * @param {Object} theme + */ +var GlobalModel = Model.extend({ + + constructor: GlobalModel, + + init: function (option, parentModel, theme, optionManager) { + theme = theme || {}; + + this.option = null; // Mark as not initialized. + + /** + * @type {module:echarts/model/Model} + * @private + */ + this._theme = new Model(theme); + + /** + * @type {module:echarts/model/OptionManager} + */ + this._optionManager = optionManager; + }, + + setOption: function (option, optionPreprocessorFuncs) { + assert( + !(OPTION_INNER_KEY in option), + 'please use chart.getOption()' + ); + + this._optionManager.setOption(option, optionPreprocessorFuncs); + + this.resetOption(null); + }, + + /** + * @param {string} type null/undefined: reset all. + * 'recreate': force recreate all. + * 'timeline': only reset timeline option + * 'media': only reset media query option + * @return {boolean} Whether option changed. + */ + resetOption: function (type) { + var optionChanged = false; + var optionManager = this._optionManager; + + if (!type || type === 'recreate') { + var baseOption = optionManager.mountOption(type === 'recreate'); + + if (!this.option || type === 'recreate') { + initBase.call(this, baseOption); + } + else { + this.restoreData(); + this.mergeOption(baseOption); + } + optionChanged = true; + } + + if (type === 'timeline' || type === 'media') { + this.restoreData(); + } + + if (!type || type === 'recreate' || type === 'timeline') { + var timelineOption = optionManager.getTimelineOption(this); + timelineOption && (this.mergeOption(timelineOption), optionChanged = true); + } + + if (!type || type === 'recreate' || type === 'media') { + var mediaOptions = optionManager.getMediaOption(this, this._api); + if (mediaOptions.length) { + each$2(mediaOptions, function (mediaOption) { + this.mergeOption(mediaOption, optionChanged = true); + }, this); + } + } + + return optionChanged; + }, + + /** + * @protected + */ + mergeOption: function (newOption) { + var option = this.option; + var componentsMap = this._componentsMap; + var newCptTypes = []; + + // 如果不存在对应的 component model 则直接 merge + each$2(newOption, function (componentOption, mainType) { + if (componentOption == null) { + return; + } + + if (!ComponentModel.hasClass(mainType)) { + option[mainType] = option[mainType] == null + ? clone(componentOption) + : merge(option[mainType], componentOption, true); + } + else { + newCptTypes.push(mainType); + } + }); + + // FIXME OPTION 同步是否要改回原来的 + ComponentModel.topologicalTravel( + newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this + ); + + this._seriesIndices = this._seriesIndices || []; + + function visitComponent(mainType, dependencies) { + var newCptOptionList = normalizeToArray(newOption[mainType]); + + var mapResult = mappingToExists( + componentsMap.get(mainType), newCptOptionList + ); + + makeIdAndName(mapResult); + + // Set mainType and complete subType. + each$2(mapResult, function (item, index) { + var opt = item.option; + if (isObject$1(opt)) { + item.keyInfo.mainType = mainType; + item.keyInfo.subType = determineSubType(mainType, opt, item.exist); + } + }); + + var dependentModels = getComponentsByTypes( + componentsMap, dependencies + ); + + option[mainType] = []; + componentsMap.set(mainType, []); + + each$2(mapResult, function (resultItem, index) { + var componentModel = resultItem.exist; + var newCptOption = resultItem.option; + + assert( + isObject$1(newCptOption) || componentModel, + 'Empty component definition' + ); + + // Consider where is no new option and should be merged using {}, + // see removeEdgeAndAdd in topologicalTravel and + // ComponentModel.getAllClassMainTypes. + if (!newCptOption) { + componentModel.mergeOption({}, this); + componentModel.optionUpdated({}, false); + } + else { + var ComponentModelClass = ComponentModel.getClass( + mainType, resultItem.keyInfo.subType, true + ); + + if (componentModel && componentModel instanceof ComponentModelClass) { + componentModel.name = resultItem.keyInfo.name; + componentModel.mergeOption(newCptOption, this); + componentModel.optionUpdated(newCptOption, false); + } + else { + // PENDING Global as parent ? + var extraOpt = extend( + { + dependentModels: dependentModels, + componentIndex: index + }, + resultItem.keyInfo + ); + componentModel = new ComponentModelClass( + newCptOption, this, this, extraOpt + ); + extend(componentModel, extraOpt); + componentModel.init(newCptOption, this, this, extraOpt); + // Call optionUpdated after init. + // newCptOption has been used as componentModel.option + // and may be merged with theme and default, so pass null + // to avoid confusion. + componentModel.optionUpdated(null, true); + } + } + + componentsMap.get(mainType)[index] = componentModel; + option[mainType][index] = componentModel.option; + }, this); + + // Backup series for filtering. + if (mainType === 'series') { + this._seriesIndices = createSeriesIndices(componentsMap.get('series')); + } + } + }, + + /** + * Get option for output (cloned option and inner info removed) + * @public + * @return {Object} + */ + getOption: function () { + var option = clone(this.option); + + each$2(option, function (opts, mainType) { + if (ComponentModel.hasClass(mainType)) { + var opts = normalizeToArray(opts); + for (var i = opts.length - 1; i >= 0; i--) { + // Remove options with inner id. + if (isIdInner(opts[i])) { + opts.splice(i, 1); + } + } + option[mainType] = opts; + } + }); + + delete option[OPTION_INNER_KEY]; + + return option; + }, + + /** + * @return {module:echarts/model/Model} + */ + getTheme: function () { + return this._theme; + }, + + /** + * @param {string} mainType + * @param {number} [idx=0] + * @return {module:echarts/model/Component} + */ + getComponent: function (mainType, idx) { + var list = this._componentsMap.get(mainType); + if (list) { + return list[idx || 0]; + } + }, + + /** + * If none of index and id and name used, return all components with mainType. + * @param {Object} condition + * @param {string} condition.mainType + * @param {string} [condition.subType] If ignore, only query by mainType + * @param {number|Array.} [condition.index] Either input index or id or name. + * @param {string|Array.} [condition.id] Either input index or id or name. + * @param {string|Array.} [condition.name] Either input index or id or name. + * @return {Array.} + */ + queryComponents: function (condition) { + var mainType = condition.mainType; + if (!mainType) { + return []; + } + + var index = condition.index; + var id = condition.id; + var name = condition.name; + + var cpts = this._componentsMap.get(mainType); + + if (!cpts || !cpts.length) { + return []; + } + + var result; + + if (index != null) { + if (!isArray$1(index)) { + index = [index]; + } + result = filter$1(map$1(index, function (idx) { + return cpts[idx]; + }), function (val) { + return !!val; + }); + } + else if (id != null) { + var isIdArray = isArray$1(id); + result = filter$1(cpts, function (cpt) { + return (isIdArray && indexOf$1(id, cpt.id) >= 0) + || (!isIdArray && cpt.id === id); + }); + } + else if (name != null) { + var isNameArray = isArray$1(name); + result = filter$1(cpts, function (cpt) { + return (isNameArray && indexOf$1(name, cpt.name) >= 0) + || (!isNameArray && cpt.name === name); + }); + } + else { + // Return all components with mainType + result = cpts.slice(); + } + + return filterBySubType(result, condition); + }, + + /** + * The interface is different from queryComponents, + * which is convenient for inner usage. + * + * @usage + * var result = findComponents( + * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}} + * ); + * var result = findComponents( + * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}} + * ); + * var result = findComponents( + * {mainType: 'series'}, + * function (model, index) {...} + * ); + * // result like [component0, componnet1, ...] + * + * @param {Object} condition + * @param {string} condition.mainType Mandatory. + * @param {string} [condition.subType] Optional. + * @param {Object} [condition.query] like {xxxIndex, xxxId, xxxName}, + * where xxx is mainType. + * If query attribute is null/undefined or has no index/id/name, + * do not filtering by query conditions, which is convenient for + * no-payload situations or when target of action is global. + * @param {Function} [condition.filter] parameter: component, return boolean. + * @return {Array.} + */ + findComponents: function (condition) { + var query = condition.query; + var mainType = condition.mainType; + + var queryCond = getQueryCond(query); + var result = queryCond + ? this.queryComponents(queryCond) + : this._componentsMap.get(mainType); + + return doFilter(filterBySubType(result, condition)); + + function getQueryCond(q) { + var indexAttr = mainType + 'Index'; + var idAttr = mainType + 'Id'; + var nameAttr = mainType + 'Name'; + return q && ( + q[indexAttr] != null + || q[idAttr] != null + || q[nameAttr] != null + ) + ? { + mainType: mainType, + // subType will be filtered finally. + index: q[indexAttr], + id: q[idAttr], + name: q[nameAttr] + } + : null; + } + + function doFilter(res) { + return condition.filter + ? filter$1(res, condition.filter) + : res; + } + }, + + /** + * @usage + * eachComponent('legend', function (legendModel, index) { + * ... + * }); + * eachComponent(function (componentType, model, index) { + * // componentType does not include subType + * // (componentType is 'xxx' but not 'xxx.aa') + * }); + * eachComponent( + * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}, + * function (model, index) {...} + * ); + * eachComponent( + * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}, + * function (model, index) {...} + * ); + * + * @param {string|Object=} mainType When mainType is object, the definition + * is the same as the method 'findComponents'. + * @param {Function} cb + * @param {*} context + */ + eachComponent: function (mainType, cb, context) { + var componentsMap = this._componentsMap; + + if (typeof mainType === 'function') { + context = cb; + cb = mainType; + componentsMap.each(function (components, componentType) { + each$2(components, function (component, index) { + cb.call(context, componentType, component, index); + }); + }); + } + else if (isString(mainType)) { + each$2(componentsMap.get(mainType), cb, context); + } + else if (isObject$1(mainType)) { + var queryResult = this.findComponents(mainType); + each$2(queryResult, cb, context); + } + }, + + /** + * @param {string} name + * @return {Array.} + */ + getSeriesByName: function (name) { + var series = this._componentsMap.get('series'); + return filter$1(series, function (oneSeries) { + return oneSeries.name === name; + }); + }, + + /** + * @param {number} seriesIndex + * @return {module:echarts/model/Series} + */ + getSeriesByIndex: function (seriesIndex) { + return this._componentsMap.get('series')[seriesIndex]; + }, + + /** + * @param {string} subType + * @return {Array.} + */ + getSeriesByType: function (subType) { + var series = this._componentsMap.get('series'); + return filter$1(series, function (oneSeries) { + return oneSeries.subType === subType; + }); + }, + + /** + * @return {Array.} + */ + getSeries: function () { + return this._componentsMap.get('series').slice(); + }, + + /** + * After filtering, series may be different + * frome raw series. + * + * @param {Function} cb + * @param {*} context + */ + eachSeries: function (cb, context) { + assertSeriesInitialized(this); + each$2(this._seriesIndices, function (rawSeriesIndex) { + var series = this._componentsMap.get('series')[rawSeriesIndex]; + cb.call(context, series, rawSeriesIndex); + }, this); + }, + + /** + * Iterate raw series before filtered. + * + * @param {Function} cb + * @param {*} context + */ + eachRawSeries: function (cb, context) { + each$2(this._componentsMap.get('series'), cb, context); + }, + + /** + * After filtering, series may be different. + * frome raw series. + * + * @parma {string} subType + * @param {Function} cb + * @param {*} context + */ + eachSeriesByType: function (subType, cb, context) { + assertSeriesInitialized(this); + each$2(this._seriesIndices, function (rawSeriesIndex) { + var series = this._componentsMap.get('series')[rawSeriesIndex]; + if (series.subType === subType) { + cb.call(context, series, rawSeriesIndex); + } + }, this); + }, + + /** + * Iterate raw series before filtered of given type. + * + * @parma {string} subType + * @param {Function} cb + * @param {*} context + */ + eachRawSeriesByType: function (subType, cb, context) { + return each$2(this.getSeriesByType(subType), cb, context); + }, + + /** + * @param {module:echarts/model/Series} seriesModel + */ + isSeriesFiltered: function (seriesModel) { + assertSeriesInitialized(this); + return indexOf(this._seriesIndices, seriesModel.componentIndex) < 0; + }, + + /** + * @return {Array.} + */ + getCurrentSeriesIndices: function () { + return (this._seriesIndices || []).slice(); + }, + + /** + * @param {Function} cb + * @param {*} context + */ + filterSeries: function (cb, context) { + assertSeriesInitialized(this); + var filteredSeries = filter$1( + this._componentsMap.get('series'), cb, context + ); + this._seriesIndices = createSeriesIndices(filteredSeries); + }, + + restoreData: function () { + var componentsMap = this._componentsMap; + + this._seriesIndices = createSeriesIndices(componentsMap.get('series')); + + var componentTypes = []; + componentsMap.each(function (components, componentType) { + componentTypes.push(componentType); + }); + + ComponentModel.topologicalTravel( + componentTypes, + ComponentModel.getAllClassMainTypes(), + function (componentType, dependencies) { + each$2(componentsMap.get(componentType), function (component) { + component.restoreData(); + }); + } + ); + } + +}); + +/** + * @inner + */ +function mergeTheme(option, theme) { + each$1(theme, function (themeItem, name) { + // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理 + if (!ComponentModel.hasClass(name)) { + if (typeof themeItem === 'object') { + option[name] = !option[name] + ? clone(themeItem) + : merge(option[name], themeItem, false); + } + else { + if (option[name] == null) { + option[name] = themeItem; + } + } + } + }); +} + +function initBase(baseOption) { + baseOption = baseOption; + + // Using OPTION_INNER_KEY to mark that this option can not be used outside, + // i.e. `chart.setOption(chart.getModel().option);` is forbiden. + this.option = {}; + this.option[OPTION_INNER_KEY] = 1; + + /** + * Init with series: [], in case of calling findSeries method + * before series initialized. + * @type {Object.>} + * @private + */ + this._componentsMap = createHashMap({series: []}); + + /** + * Mapping between filtered series list and raw series list. + * key: filtered series indices, value: raw series indices. + * @type {Array.} + * @private + */ + this._seriesIndices = null; + + mergeTheme(baseOption, this._theme.option); + + // TODO Needs clone when merging to the unexisted property + merge(baseOption, globalDefault, false); + + this.mergeOption(baseOption); +} + +/** + * @inner + * @param {Array.|string} types model types + * @return {Object} key: {string} type, value: {Array.} models + */ +function getComponentsByTypes(componentsMap, types) { + if (!isArray(types)) { + types = types ? [types] : []; + } + + var ret = {}; + each$2(types, function (type) { + ret[type] = (componentsMap.get(type) || []).slice(); + }); + + return ret; +} + +/** + * @inner + */ +function determineSubType(mainType, newCptOption, existComponent) { + var subType = newCptOption.type + ? newCptOption.type + : existComponent + ? existComponent.subType + // Use determineSubType only when there is no existComponent. + : ComponentModel.determineSubType(mainType, newCptOption); + + // tooltip, markline, markpoint may always has no subType + return subType; +} + +/** + * @inner + */ +function createSeriesIndices(seriesModels) { + return map$1(seriesModels, function (series) { + return series.componentIndex; + }) || []; +} + +/** + * @inner + */ +function filterBySubType(components, condition) { + // Using hasOwnProperty for restrict. Consider + // subType is undefined in user payload. + return condition.hasOwnProperty('subType') + ? filter$1(components, function (cpt) { + return cpt.subType === condition.subType; + }) + : components; +} + +/** + * @inner + */ +function assertSeriesInitialized(ecModel) { + // Components that use _seriesIndices should depends on series component, + // which make sure that their initialization is after series. + if (__DEV__) { + if (!ecModel._seriesIndices) { + throw new Error('Option should contains series.'); + } + } +} + +mixin(GlobalModel, colorPaletteMixin); + +var echartsAPIList = [ + 'getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed', + 'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption', + 'getViewOfComponentModel', 'getViewOfSeriesModel' +]; +// And `getCoordinateSystems` and `getComponentByElement` will be injected in echarts.js + +function ExtensionAPI(chartInstance) { + each$1(echartsAPIList, function (name) { + this[name] = bind(chartInstance[name], chartInstance); + }, this); +} + +var coordinateSystemCreators = {}; + +function CoordinateSystemManager() { + + this._coordinateSystems = []; +} + +CoordinateSystemManager.prototype = { + + constructor: CoordinateSystemManager, + + create: function (ecModel, api) { + var coordinateSystems = []; + each$1(coordinateSystemCreators, function (creater, type) { + var list = creater.create(ecModel, api); + coordinateSystems = coordinateSystems.concat(list || []); + }); + + this._coordinateSystems = coordinateSystems; + }, + + update: function (ecModel, api) { + each$1(this._coordinateSystems, function (coordSys) { + // FIXME MUST have + coordSys.update && coordSys.update(ecModel, api); + }); + }, + + getCoordinateSystems: function () { + return this._coordinateSystems.slice(); + } +}; + +CoordinateSystemManager.register = function (type, coordinateSystemCreator) { + coordinateSystemCreators[type] = coordinateSystemCreator; +}; + +CoordinateSystemManager.get = function (type) { + return coordinateSystemCreators[type]; +}; + +/** + * ECharts option manager + * + * @module {echarts/model/OptionManager} + */ + + +var each$5 = each$1; +var clone$2 = clone; +var map$2 = map; +var merge$1 = merge; + +var QUERY_REG = /^(min|max)?(.+)$/; + +/** + * TERM EXPLANATIONS: + * + * [option]: + * + * An object that contains definitions of components. For example: + * var option = { + * title: {...}, + * legend: {...}, + * visualMap: {...}, + * series: [ + * {data: [...]}, + * {data: [...]}, + * ... + * ] + * }; + * + * [rawOption]: + * + * An object input to echarts.setOption. 'rawOption' may be an + * 'option', or may be an object contains multi-options. For example: + * var option = { + * baseOption: { + * title: {...}, + * legend: {...}, + * series: [ + * {data: [...]}, + * {data: [...]}, + * ... + * ] + * }, + * timeline: {...}, + * options: [ + * {title: {...}, series: {data: [...]}}, + * {title: {...}, series: {data: [...]}}, + * ... + * ], + * media: [ + * { + * query: {maxWidth: 320}, + * option: {series: {x: 20}, visualMap: {show: false}} + * }, + * { + * query: {minWidth: 320, maxWidth: 720}, + * option: {series: {x: 500}, visualMap: {show: true}} + * }, + * { + * option: {series: {x: 1200}, visualMap: {show: true}} + * } + * ] + * }; + * + * @alias module:echarts/model/OptionManager + * @param {module:echarts/ExtensionAPI} api + */ +function OptionManager(api) { + + /** + * @private + * @type {module:echarts/ExtensionAPI} + */ + this._api = api; + + /** + * @private + * @type {Array.} + */ + this._timelineOptions = []; + + /** + * @private + * @type {Array.} + */ + this._mediaList = []; + + /** + * @private + * @type {Object} + */ + this._mediaDefault; + + /** + * -1, means default. + * empty means no media. + * @private + * @type {Array.} + */ + this._currentMediaIndices = []; + + /** + * @private + * @type {Object} + */ + this._optionBackup; + + /** + * @private + * @type {Object} + */ + this._newBaseOption; +} + +// timeline.notMerge is not supported in ec3. Firstly there is rearly +// case that notMerge is needed. Secondly supporting 'notMerge' requires +// rawOption cloned and backuped when timeline changed, which does no +// good to performance. What's more, that both timeline and setOption +// method supply 'notMerge' brings complex and some problems. +// Consider this case: +// (step1) chart.setOption({timeline: {notMerge: false}, ...}, false); +// (step2) chart.setOption({timeline: {notMerge: true}, ...}, false); + +OptionManager.prototype = { + + constructor: OptionManager, + + /** + * @public + * @param {Object} rawOption Raw option. + * @param {module:echarts/model/Global} ecModel + * @param {Array.} optionPreprocessorFuncs + * @return {Object} Init option + */ + setOption: function (rawOption, optionPreprocessorFuncs) { + rawOption = clone$2(rawOption, true); + + // FIXME + // 如果 timeline options 或者 media 中设置了某个属性,而baseOption中没有设置,则进行警告。 + + var oldOptionBackup = this._optionBackup; + var newParsedOption = parseRawOption.call( + this, rawOption, optionPreprocessorFuncs, !oldOptionBackup + ); + this._newBaseOption = newParsedOption.baseOption; + + // For setOption at second time (using merge mode); + if (oldOptionBackup) { + // Only baseOption can be merged. + mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption); + + // For simplicity, timeline options and media options do not support merge, + // that is, if you `setOption` twice and both has timeline options, the latter + // timeline opitons will not be merged to the formers, but just substitude them. + if (newParsedOption.timelineOptions.length) { + oldOptionBackup.timelineOptions = newParsedOption.timelineOptions; + } + if (newParsedOption.mediaList.length) { + oldOptionBackup.mediaList = newParsedOption.mediaList; + } + if (newParsedOption.mediaDefault) { + oldOptionBackup.mediaDefault = newParsedOption.mediaDefault; + } + } + else { + this._optionBackup = newParsedOption; + } + }, + + /** + * @param {boolean} isRecreate + * @return {Object} + */ + mountOption: function (isRecreate) { + var optionBackup = this._optionBackup; + + // TODO + // 如果没有reset功能则不clone。 + + this._timelineOptions = map$2(optionBackup.timelineOptions, clone$2); + this._mediaList = map$2(optionBackup.mediaList, clone$2); + this._mediaDefault = clone$2(optionBackup.mediaDefault); + this._currentMediaIndices = []; + + return clone$2(isRecreate + // this._optionBackup.baseOption, which is created at the first `setOption` + // called, and is merged into every new option by inner method `mergeOption` + // each time `setOption` called, can be only used in `isRecreate`, because + // its reliability is under suspicion. In other cases option merge is + // performed by `model.mergeOption`. + ? optionBackup.baseOption : this._newBaseOption + ); + }, + + /** + * @param {module:echarts/model/Global} ecModel + * @return {Object} + */ + getTimelineOption: function (ecModel) { + var option; + var timelineOptions = this._timelineOptions; + + if (timelineOptions.length) { + // getTimelineOption can only be called after ecModel inited, + // so we can get currentIndex from timelineModel. + var timelineModel = ecModel.getComponent('timeline'); + if (timelineModel) { + option = clone$2( + timelineOptions[timelineModel.getCurrentIndex()], + true + ); + } + } + + return option; + }, + + /** + * @param {module:echarts/model/Global} ecModel + * @return {Array.} + */ + getMediaOption: function (ecModel) { + var ecWidth = this._api.getWidth(); + var ecHeight = this._api.getHeight(); + var mediaList = this._mediaList; + var mediaDefault = this._mediaDefault; + var indices = []; + var result = []; + + // No media defined. + if (!mediaList.length && !mediaDefault) { + return result; + } + + // Multi media may be applied, the latter defined media has higher priority. + for (var i = 0, len = mediaList.length; i < len; i++) { + if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) { + indices.push(i); + } + } + + // FIXME + // 是否mediaDefault应该强制用户设置,否则可能修改不能回归。 + if (!indices.length && mediaDefault) { + indices = [-1]; + } + + if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) { + result = map$2(indices, function (index) { + return clone$2( + index === -1 ? mediaDefault.option : mediaList[index].option + ); + }); + } + // Otherwise return nothing. + + this._currentMediaIndices = indices; + + return result; + } +}; + +function parseRawOption(rawOption, optionPreprocessorFuncs, isNew) { + var timelineOptions = []; + var mediaList = []; + var mediaDefault; + var baseOption; + + // Compatible with ec2. + var timelineOpt = rawOption.timeline; + + if (rawOption.baseOption) { + baseOption = rawOption.baseOption; + } + + // For timeline + if (timelineOpt || rawOption.options) { + baseOption = baseOption || {}; + timelineOptions = (rawOption.options || []).slice(); + } + + // For media query + if (rawOption.media) { + baseOption = baseOption || {}; + var media = rawOption.media; + each$5(media, function (singleMedia) { + if (singleMedia && singleMedia.option) { + if (singleMedia.query) { + mediaList.push(singleMedia); + } + else if (!mediaDefault) { + // Use the first media default. + mediaDefault = singleMedia; + } + } + }); + } + + // For normal option + if (!baseOption) { + baseOption = rawOption; + } + + // Set timelineOpt to baseOption in ec3, + // which is convenient for merge option. + if (!baseOption.timeline) { + baseOption.timeline = timelineOpt; + } + + // Preprocess. + each$5([baseOption].concat(timelineOptions) + .concat(map(mediaList, function (media) { + return media.option; + })), + function (option) { + each$5(optionPreprocessorFuncs, function (preProcess) { + preProcess(option, isNew); + }); + } + ); + + return { + baseOption: baseOption, + timelineOptions: timelineOptions, + mediaDefault: mediaDefault, + mediaList: mediaList + }; +} + +/** + * @see + * Support: width, height, aspectRatio + * Can use max or min as prefix. + */ +function applyMediaQuery(query, ecWidth, ecHeight) { + var realMap = { + width: ecWidth, + height: ecHeight, + aspectratio: ecWidth / ecHeight // lowser case for convenientce. + }; + + var applicatable = true; + + each$1(query, function (value, attr) { + var matched = attr.match(QUERY_REG); + + if (!matched || !matched[1] || !matched[2]) { + return; + } + + var operator = matched[1]; + var realAttr = matched[2].toLowerCase(); + + if (!compare(realMap[realAttr], value, operator)) { + applicatable = false; + } + }); + + return applicatable; +} + +function compare(real, expect, operator) { + if (operator === 'min') { + return real >= expect; + } + else if (operator === 'max') { + return real <= expect; + } + else { // Equals + return real === expect; + } +} + +function indicesEquals(indices1, indices2) { + // indices is always order by asc and has only finite number. + return indices1.join(',') === indices2.join(','); +} + +/** + * Consider case: + * `chart.setOption(opt1);` + * Then user do some interaction like dataZoom, dataView changing. + * `chart.setOption(opt2);` + * Then user press 'reset button' in toolbox. + * + * After doing that all of the interaction effects should be reset, the + * chart should be the same as the result of invoke + * `chart.setOption(opt1); chart.setOption(opt2);`. + * + * Although it is not able ensure that + * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to + * `chart.setOption(merge(opt1, opt2));` exactly, + * this might be the only simple way to implement that feature. + * + * MEMO: We've considered some other approaches: + * 1. Each model handle its self restoration but not uniform treatment. + * (Too complex in logic and error-prone) + * 2. Use a shadow ecModel. (Performace expensive) + */ +function mergeOption(oldOption, newOption) { + newOption = newOption || {}; + + each$5(newOption, function (newCptOpt, mainType) { + if (newCptOpt == null) { + return; + } + + var oldCptOpt = oldOption[mainType]; + + if (!ComponentModel.hasClass(mainType)) { + oldOption[mainType] = merge$1(oldCptOpt, newCptOpt, true); + } + else { + newCptOpt = normalizeToArray(newCptOpt); + oldCptOpt = normalizeToArray(oldCptOpt); + + var mapResult = mappingToExists(oldCptOpt, newCptOpt); + + oldOption[mainType] = map$2(mapResult, function (item) { + return (item.option && item.exist) + ? merge$1(item.exist, item.option, true) + : (item.exist || item.option); + }); + } + }); +} + +var each$6 = each$1; +var isObject$3 = isObject; + +var POSSIBLE_STYLES = [ + 'areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', + 'chordStyle', 'label', 'labelLine' +]; + +function compatItemStyle(opt) { + var itemStyleOpt = opt && opt.itemStyle; + if (!itemStyleOpt) { + return; + } + for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) { + var styleName = POSSIBLE_STYLES[i]; + var normalItemStyleOpt = itemStyleOpt.normal; + var emphasisItemStyleOpt = itemStyleOpt.emphasis; + if (normalItemStyleOpt && normalItemStyleOpt[styleName]) { + opt[styleName] = opt[styleName] || {}; + if (!opt[styleName].normal) { + opt[styleName].normal = normalItemStyleOpt[styleName]; + } + else { + merge(opt[styleName].normal, normalItemStyleOpt[styleName]); + } + normalItemStyleOpt[styleName] = null; + } + if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) { + opt[styleName] = opt[styleName] || {}; + if (!opt[styleName].emphasis) { + opt[styleName].emphasis = emphasisItemStyleOpt[styleName]; + } + else { + merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]); + } + emphasisItemStyleOpt[styleName] = null; + } + } +} + +function compatTextStyle(opt, propName) { + var labelOptSingle = isObject$3(opt) && opt[propName]; + var textStyle = isObject$3(labelOptSingle) && labelOptSingle.textStyle; + if (textStyle) { + for (var i = 0, len = TEXT_STYLE_OPTIONS.length; i < len; i++) { + var propName = TEXT_STYLE_OPTIONS[i]; + if (textStyle.hasOwnProperty(propName)) { + labelOptSingle[propName] = textStyle[propName]; + } + } + } +} + +function compatLabelTextStyle(labelOpt) { + if (isObject$3(labelOpt)) { + compatTextStyle(labelOpt, 'normal'); + compatTextStyle(labelOpt, 'emphasis'); + } +} + +function processSeries(seriesOpt) { + if (!isObject$3(seriesOpt)) { + return; + } + + compatItemStyle(seriesOpt); + compatLabelTextStyle(seriesOpt.label); + // treemap + compatLabelTextStyle(seriesOpt.upperLabel); + // graph + compatLabelTextStyle(seriesOpt.edgeLabel); + + var markPoint = seriesOpt.markPoint; + compatItemStyle(markPoint); + compatLabelTextStyle(markPoint && markPoint.label); + + var markLine = seriesOpt.markLine; + compatItemStyle(seriesOpt.markLine); + compatLabelTextStyle(markLine && markLine.label); + + var markArea = seriesOpt.markArea; + compatLabelTextStyle(markArea && markArea.label); + + // For gauge + compatTextStyle(seriesOpt, 'axisLabel'); + compatTextStyle(seriesOpt, 'title'); + compatTextStyle(seriesOpt, 'detail'); + + var data = seriesOpt.data; + if (data) { + for (var i = 0; i < data.length; i++) { + compatItemStyle(data[i]); + compatLabelTextStyle(data[i] && data[i].label); + } + } + + // mark point data + var markPoint = seriesOpt.markPoint; + if (markPoint && markPoint.data) { + var mpData = markPoint.data; + for (var i = 0; i < mpData.length; i++) { + compatItemStyle(mpData[i]); + compatLabelTextStyle(mpData[i] && mpData[i].label); + } + } + // mark line data + var markLine = seriesOpt.markLine; + if (markLine && markLine.data) { + var mlData = markLine.data; + for (var i = 0; i < mlData.length; i++) { + if (isArray(mlData[i])) { + compatItemStyle(mlData[i][0]); + compatLabelTextStyle(mlData[i][0] && mlData[i][0].label); + compatItemStyle(mlData[i][1]); + compatLabelTextStyle(mlData[i][1] && mlData[i][1].label); + } + else { + compatItemStyle(mlData[i]); + compatLabelTextStyle(mlData[i] && mlData[i].label); + } + } + } +} + +function toArr(o) { + return isArray(o) ? o : o ? [o] : []; +} + +function toObj(o) { + return (isArray(o) ? o[0] : o) || {}; +} + +var compatStyle = function (option, isTheme) { + each$6(toArr(option.series), function (seriesOpt) { + isObject$3(seriesOpt) && processSeries(seriesOpt); + }); + + var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar']; + isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis'); + + each$6( + axes, + function (axisName) { + each$6(toArr(option[axisName]), function (axisOpt) { + if (axisOpt) { + compatTextStyle(axisOpt, 'axisLabel'); + compatTextStyle(axisOpt.axisPointer, 'label'); + } + }); + } + ); + + each$6(toArr(option.parallel), function (parallelOpt) { + var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault; + compatTextStyle(parallelAxisDefault, 'axisLabel'); + compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label'); + }); + + each$6(toArr(option.calendar), function (calendarOpt) { + compatTextStyle(calendarOpt, 'dayLabel'); + compatTextStyle(calendarOpt, 'monthLabel'); + compatTextStyle(calendarOpt, 'yearLabel'); + }); + + // radar.name.textStyle + each$6(toArr(option.radar), function (radarOpt) { + compatTextStyle(radarOpt, 'name'); + }); + + each$6(toArr(option.geo), function (geoOpt) { + if (isObject$3(geoOpt)) { + compatLabelTextStyle(geoOpt.label); + each$6(toArr(geoOpt.regions), function (regionObj) { + compatLabelTextStyle(regionObj.label); + }); + } + }); + + compatLabelTextStyle(toObj(option.timeline).label); + compatTextStyle(toObj(option.axisPointer), 'label'); + compatTextStyle(toObj(option.tooltip).axisPointer, 'label'); +}; + +// Compatitable with 2.0 + +function get$1(opt, path) { + path = path.split(','); + var obj = opt; + for (var i = 0; i < path.length; i++) { + obj = obj && obj[path[i]]; + if (obj == null) { + break; + } + } + return obj; +} + +function set$2(opt, path, val, overwrite) { + path = path.split(','); + var obj = opt; + var key; + for (var i = 0; i < path.length - 1; i++) { + key = path[i]; + if (obj[key] == null) { + obj[key] = {}; + } + obj = obj[key]; + } + if (overwrite || obj[path[i]] == null) { + obj[path[i]] = val; + } +} + +function compatLayoutProperties(option) { + each$1(LAYOUT_PROPERTIES, function (prop) { + if (prop[0] in option && !(prop[1] in option)) { + option[prop[1]] = option[prop[0]]; + } + }); +} + +var LAYOUT_PROPERTIES = [ + ['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom'] +]; + +var COMPATITABLE_COMPONENTS = [ + 'grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline' +]; + +var COMPATITABLE_SERIES = [ + 'bar', 'boxplot', 'candlestick', 'chord', 'effectScatter', + 'funnel', 'gauge', 'lines', 'graph', 'heatmap', 'line', 'map', 'parallel', + 'pie', 'radar', 'sankey', 'scatter', 'treemap' +]; + +var backwardCompat = function (option, isTheme) { + compatStyle(option, isTheme); + + // Make sure series array for model initialization. + option.series = normalizeToArray(option.series); + + each$1(option.series, function (seriesOpt) { + if (!isObject(seriesOpt)) { + return; + } + + var seriesType = seriesOpt.type; + + if (seriesType === 'pie' || seriesType === 'gauge') { + if (seriesOpt.clockWise != null) { + seriesOpt.clockwise = seriesOpt.clockWise; + } + } + if (seriesType === 'gauge') { + var pointerColor = get$1(seriesOpt, 'pointer.color'); + pointerColor != null + && set$2(seriesOpt, 'itemStyle.normal.color', pointerColor); + } + + for (var i = 0; i < COMPATITABLE_SERIES.length; i++) { + if (COMPATITABLE_SERIES[i] === seriesOpt.type) { + compatLayoutProperties(seriesOpt); + break; + } + } + }); + + // dataRange has changed to visualMap + if (option.dataRange) { + option.visualMap = option.dataRange; + } + + each$1(COMPATITABLE_COMPONENTS, function (componentName) { + var options = option[componentName]; + if (options) { + if (!isArray(options)) { + options = [options]; + } + each$1(options, function (option) { + compatLayoutProperties(option); + }); + } + }); +}; + +var SeriesModel = ComponentModel.extend({ + + type: 'series.__base__', + + /** + * @readOnly + */ + seriesIndex: 0, + + // coodinateSystem will be injected in the echarts/CoordinateSystem + coordinateSystem: null, + + /** + * @type {Object} + * @protected + */ + defaultOption: null, + + /** + * Data provided for legend + * @type {Function} + */ + // PENDING + legendDataProvider: null, + + /** + * Access path of color for visual + */ + visualColorAccessPath: 'itemStyle.normal.color', + + /** + * Support merge layout params. + * Only support 'box' now (left/right/top/bottom/width/height). + * @type {string|Object} Object can be {ignoreSize: true} + * @readOnly + */ + layoutMode: null, + + init: function (option, parentModel, ecModel, extraOpt) { + + /** + * @type {number} + * @readOnly + */ + this.seriesIndex = this.componentIndex; + + this.mergeDefaultAndTheme(option, ecModel); + + var data = this.getInitialData(option, ecModel); + if (__DEV__) { + assert(data, 'getInitialData returned invalid data.'); + } + /** + * @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph} + * @private + */ + set$1(this, 'dataBeforeProcessed', data); + + // If we reverse the order (make data firstly, and then make + // dataBeforeProcessed by cloneShallow), cloneShallow will + // cause data.graph.data !== data when using + // module:echarts/data/Graph or module:echarts/data/Tree. + // See module:echarts/data/helper/linkList + this.restoreData(); + }, + + /** + * Util for merge default and theme to option + * @param {Object} option + * @param {module:echarts/model/Global} ecModel + */ + mergeDefaultAndTheme: function (option, ecModel) { + var layoutMode = this.layoutMode; + var inputPositionParams = layoutMode + ? getLayoutParams(option) : {}; + + // Backward compat: using subType on theme. + // But if name duplicate between series subType + // (for example: parallel) add component mainType, + // add suffix 'Series'. + var themeSubType = this.subType; + if (ComponentModel.hasClass(themeSubType)) { + themeSubType += 'Series'; + } + merge( + option, + ecModel.getTheme().get(this.subType) + ); + merge(option, this.getDefaultOption()); + + // Default label emphasis `show` + defaultEmphasis(option.label, ['show']); + + this.fillDataTextStyle(option.data); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }, + + mergeOption: function (newSeriesOption, ecModel) { + newSeriesOption = merge(this.option, newSeriesOption, true); + this.fillDataTextStyle(newSeriesOption.data); + + var layoutMode = this.layoutMode; + if (layoutMode) { + mergeLayoutParam(this.option, newSeriesOption, layoutMode); + } + + var data = this.getInitialData(newSeriesOption, ecModel); + // TODO Merge data? + if (data) { + set$1(this, 'data', data); + set$1(this, 'dataBeforeProcessed', data.cloneShallow()); + } + }, + + fillDataTextStyle: function (data) { + // Default data label emphasis `show` + // FIXME Tree structure data ? + // FIXME Performance ? + if (data) { + var props = ['show']; + for (var i = 0; i < data.length; i++) { + if (data[i] && data[i].label) { + defaultEmphasis(data[i].label, props); + } + } + } + }, + + /** + * Init a data structure from data related option in series + * Must be overwritten + */ + getInitialData: function () {}, + + /** + * @param {string} [dataType] + * @return {module:echarts/data/List} + */ + getData: function (dataType) { + var data = get(this, 'data'); + return dataType == null ? data : data.getLinkedData(dataType); + }, + + /** + * @param {module:echarts/data/List} data + */ + setData: function (data) { + set$1(this, 'data', data); + }, + + /** + * Get data before processed + * @return {module:echarts/data/List} + */ + getRawData: function () { + return get(this, 'dataBeforeProcessed'); + }, + + /** + * Coord dimension to data dimension. + * + * By default the result is the same as dimensions of series data. + * But in some series data dimensions are different from coord dimensions (i.e. + * candlestick and boxplot). Override this method to handle those cases. + * + * Coord dimension to data dimension can be one-to-many + * + * @param {string} coordDim + * @return {Array.} dimensions on the axis. + */ + coordDimToDataDim: function (coordDim) { + return coordDimToDataDim(this.getData(), coordDim); + }, + + /** + * Convert data dimension to coord dimension. + * + * @param {string|number} dataDim + * @return {string} + */ + dataDimToCoordDim: function (dataDim) { + return dataDimToCoordDim(this.getData(), dataDim); + }, + + /** + * Get base axis if has coordinate system and has axis. + * By default use coordSys.getBaseAxis(); + * Can be overrided for some chart. + * @return {type} description + */ + getBaseAxis: function () { + var coordSys = this.coordinateSystem; + return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis(); + }, + + // FIXME + /** + * Default tooltip formatter + * + * @param {number} dataIndex + * @param {boolean} [multipleSeries=false] + * @param {number} [dataType] + */ + formatTooltip: function (dataIndex, multipleSeries, dataType) { + function formatArrayValue(value) { + var vertially = reduce(value, function (vertially, val, idx) { + var dimItem = data.getDimensionInfo(idx); + return vertially |= dimItem && dimItem.tooltip !== false && dimItem.tooltipName != null; + }, 0); + + var result = []; + var tooltipDims = otherDimToDataDim(data, 'tooltip'); + + tooltipDims.length + ? each$1(tooltipDims, function (dimIdx) { + setEachItem(data.get(dimIdx, dataIndex), dimIdx); + }) + // By default, all dims is used on tooltip. + : each$1(value, setEachItem); + + function setEachItem(val, dimIdx) { + var dimInfo = data.getDimensionInfo(dimIdx); + // If `dimInfo.tooltip` is not set, show tooltip. + if (!dimInfo || dimInfo.otherDims.tooltip === false) { + return; + } + var dimType = dimInfo.type; + var valStr = (vertially ? '- ' + (dimInfo.tooltipName || dimInfo.name) + ': ' : '') + + (dimType === 'ordinal' + ? val + '' + : dimType === 'time' + ? (multipleSeries ? '' : formatTime('yyyy/MM/dd hh:mm:ss', val)) + : addCommas(val) + ); + valStr && result.push(encodeHTML(valStr)); + } + + return (vertially ? '
' : '') + result.join(vertially ? '
' : ', '); + } + + var data = get(this, 'data'); + + var value = this.getRawValue(dataIndex); + var formattedValue = isArray(value) + ? formatArrayValue(value) : encodeHTML(addCommas(value)); + var name = data.getName(dataIndex); + + var color = data.getItemVisual(dataIndex, 'color'); + if (isObject(color) && color.colorStops) { + color = (color.colorStops[0] || {}).color; + } + color = color || 'transparent'; + + var colorEl = getTooltipMarker(color); + + var seriesName = this.name; + // FIXME + if (seriesName === '\0-') { + // Not show '-' + seriesName = ''; + } + seriesName = seriesName + ? encodeHTML(seriesName) + (!multipleSeries ? '
' : ': ') + : ''; + return !multipleSeries + ? seriesName + colorEl + + (name + ? encodeHTML(name) + ': ' + formattedValue + : formattedValue + ) + : colorEl + seriesName + formattedValue; + }, + + /** + * @return {boolean} + */ + isAnimationEnabled: function () { + if (env$1.node) { + return false; + } + + var animationEnabled = this.getShallow('animation'); + if (animationEnabled) { + if (this.getData().count() > this.getShallow('animationThreshold')) { + animationEnabled = false; + } + } + return animationEnabled; + }, + + restoreData: function () { + set$1(this, 'data', get(this, 'dataBeforeProcessed').cloneShallow()); + }, + + getColorFromPalette: function (name, scope) { + var ecModel = this.ecModel; + // PENDING + var color = colorPaletteMixin.getColorFromPalette.call(this, name, scope); + if (!color) { + color = ecModel.getColorFromPalette(name, scope); + } + return color; + }, + + /** + * Get data indices for show tooltip content. See tooltip. + * @abstract + * @param {Array.|string} dim + * @param {Array.} value + * @param {module:echarts/coord/single/SingleAxis} baseAxis + * @return {Object} {dataIndices, nestestValue}. + */ + getAxisTooltipData: null, + + /** + * See tooltip. + * @abstract + * @param {number} dataIndex + * @return {Array.} Point of tooltip. null/undefined can be returned. + */ + getTooltipPosition: null +}); + +mixin(SeriesModel, dataFormatMixin); +mixin(SeriesModel, colorPaletteMixin); + +var Component = function () { + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = new Group(); + + /** + * @type {string} + * @readOnly + */ + this.uid = getUID('viewComponent'); +}; + +Component.prototype = { + + constructor: Component, + + init: function (ecModel, api) {}, + + render: function (componentModel, ecModel, api, payload) {}, + + dispose: function () {} + +}; + +var componentProto = Component.prototype; +componentProto.updateView + = componentProto.updateLayout + = componentProto.updateVisual + = function (seriesModel, ecModel, api, payload) { + // Do nothing; + }; +// Enable Component.extend. +enableClassExtend(Component); + +// Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on. +enableClassManagement(Component, {registerWhenExtend: true}); + +function Chart() { + + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = new Group(); + + /** + * @type {string} + * @readOnly + */ + this.uid = getUID('viewChart'); +} + +Chart.prototype = { + + type: 'chart', + + /** + * Init the chart + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + init: function (ecModel, api) {}, + + /** + * Render the chart + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + render: function (seriesModel, ecModel, api, payload) {}, + + /** + * Highlight series or specified data item + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + highlight: function (seriesModel, ecModel, api, payload) { + toggleHighlight(seriesModel.getData(), payload, 'emphasis'); + }, + + /** + * Downplay series or specified data item + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + downplay: function (seriesModel, ecModel, api, payload) { + toggleHighlight(seriesModel.getData(), payload, 'normal'); + }, + + /** + * Remove self + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + remove: function (ecModel, api) { + this.group.removeAll(); + }, + + /** + * Dispose self + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + dispose: function () {} + + /** + * The view contains the given point. + * @interface + * @param {Array.} point + * @return {boolean} + */ + // containPoint: function () {} + +}; + +var chartProto = Chart.prototype; +chartProto.updateView + = chartProto.updateLayout + = chartProto.updateVisual + = function (seriesModel, ecModel, api, payload) { + this.render(seriesModel, ecModel, api, payload); + }; + +/** + * Set state of single element + * @param {module:zrender/Element} el + * @param {string} state + */ +function elSetState(el, state) { + if (el) { + el.trigger(state); + if (el.type === 'group') { + for (var i = 0; i < el.childCount(); i++) { + elSetState(el.childAt(i), state); + } + } + } +} +/** + * @param {module:echarts/data/List} data + * @param {Object} payload + * @param {string} state 'normal'|'emphasis' + * @inner + */ +function toggleHighlight(data, payload, state) { + var dataIndex = queryDataIndex(data, payload); + + if (dataIndex != null) { + each$1(normalizeToArray(dataIndex), function (dataIdx) { + elSetState(data.getItemGraphicEl(dataIdx), state); + }); + } + else { + data.eachItemGraphicEl(function (el) { + elSetState(el, state); + }); + } +} + +// Enable Chart.extend. +enableClassExtend(Chart, ['dispose']); + +// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on. +enableClassManagement(Chart, {registerWhenExtend: true}); + +var ORIGIN_METHOD = '\0__throttleOriginMethod'; +var RATE = '\0__throttleRate'; +var THROTTLE_TYPE = '\0__throttleType'; + +/** + * @public + * @param {(Function)} fn + * @param {number} [delay=0] Unit: ms. + * @param {boolean} [debounce=false] + * true: If call interval less than `delay`, only the last call works. + * false: If call interval less than `delay, call works on fixed rate. + * @return {(Function)} throttled fn. + */ +function throttle(fn, delay, debounce) { + + var currCall; + var lastCall = 0; + var lastExec = 0; + var timer = null; + var diff; + var scope; + var args; + var debounceNextCall; + + delay = delay || 0; + + function exec() { + lastExec = (new Date()).getTime(); + timer = null; + fn.apply(scope, args || []); + } + + var cb = function () { + currCall = (new Date()).getTime(); + scope = this; + args = arguments; + var thisDelay = debounceNextCall || delay; + var thisDebounce = debounceNextCall || debounce; + debounceNextCall = null; + diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay; + + clearTimeout(timer); + + if (thisDebounce) { + timer = setTimeout(exec, thisDelay); + } + else { + if (diff >= 0) { + exec(); + } + else { + timer = setTimeout(exec, -diff); + } + } + + lastCall = currCall; + }; + + /** + * Clear throttle. + * @public + */ + cb.clear = function () { + if (timer) { + clearTimeout(timer); + timer = null; + } + }; + + /** + * Enable debounce once. + */ + cb.debounceNextCall = function (debounceDelay) { + debounceNextCall = debounceDelay; + }; + + return cb; +} + +/** + * Create throttle method or update throttle rate. + * + * @example + * ComponentView.prototype.render = function () { + * ... + * throttle.createOrUpdate( + * this, + * '_dispatchAction', + * this.model.get('throttle'), + * 'fixRate' + * ); + * }; + * ComponentView.prototype.remove = function () { + * throttle.clear(this, '_dispatchAction'); + * }; + * ComponentView.prototype.dispose = function () { + * throttle.clear(this, '_dispatchAction'); + * }; + * + * @public + * @param {Object} obj + * @param {string} fnAttr + * @param {number} [rate] + * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce' + * @return {Function} throttled function. + */ +function createOrUpdate(obj, fnAttr, rate, throttleType) { + var fn = obj[fnAttr]; + + if (!fn) { + return; + } + + var originFn = fn[ORIGIN_METHOD] || fn; + var lastThrottleType = fn[THROTTLE_TYPE]; + var lastRate = fn[RATE]; + + if (lastRate !== rate || lastThrottleType !== throttleType) { + if (rate == null || !throttleType) { + return (obj[fnAttr] = originFn); + } + + fn = obj[fnAttr] = throttle( + originFn, rate, throttleType === 'debounce' + ); + fn[ORIGIN_METHOD] = originFn; + fn[THROTTLE_TYPE] = throttleType; + fn[RATE] = rate; + } + + return fn; +} + +/** + * Clear throttle. Example see throttle.createOrUpdate. + * + * @public + * @param {Object} obj + * @param {string} fnAttr + */ +function clear(obj, fnAttr) { + var fn = obj[fnAttr]; + if (fn && fn[ORIGIN_METHOD]) { + obj[fnAttr] = fn[ORIGIN_METHOD]; + } +} + +var seriesColor = function (ecModel) { + function encodeColor(seriesModel) { + var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.normal.color').split('.'); + var data = seriesModel.getData(); + var color = seriesModel.get(colorAccessPath) // Set in itemStyle + || seriesModel.getColorFromPalette(seriesModel.get('name')); // Default color + + // FIXME Set color function or use the platte color + data.setVisual('color', color); + + // Only visible series has each data be visual encoded + if (!ecModel.isSeriesFiltered(seriesModel)) { + if (typeof color === 'function' && !(color instanceof Gradient)) { + data.each(function (idx) { + data.setItemVisual( + idx, 'color', color(seriesModel.getDataParams(idx)) + ); + }); + } + + // itemStyle in each data item + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var color = itemModel.get(colorAccessPath, true); + if (color != null) { + data.setItemVisual(idx, 'color', color); + } + }); + } + } + ecModel.eachRawSeries(encodeColor); +}; + +var PI$1 = Math.PI; + +/** + * @param {module:echarts/ExtensionAPI} api + * @param {Object} [opts] + * @param {string} [opts.text] + * @param {string} [opts.color] + * @param {string} [opts.textColor] + * @return {module:zrender/Element} + */ +var loadingDefault = function (api, opts) { + opts = opts || {}; + defaults(opts, { + text: 'loading', + color: '#c23531', + textColor: '#000', + maskColor: 'rgba(255, 255, 255, 0.8)', + zlevel: 0 + }); + var mask = new Rect({ + style: { + fill: opts.maskColor + }, + zlevel: opts.zlevel, + z: 10000 + }); + var arc = new Arc({ + shape: { + startAngle: -PI$1 / 2, + endAngle: -PI$1 / 2 + 0.1, + r: 10 + }, + style: { + stroke: opts.color, + lineCap: 'round', + lineWidth: 5 + }, + zlevel: opts.zlevel, + z: 10001 + }); + var labelRect = new Rect({ + style: { + fill: 'none', + text: opts.text, + textPosition: 'right', + textDistance: 10, + textFill: opts.textColor + }, + zlevel: opts.zlevel, + z: 10001 + }); + + arc.animateShape(true) + .when(1000, { + endAngle: PI$1 * 3 / 2 + }) + .start('circularInOut'); + arc.animateShape(true) + .when(1000, { + startAngle: PI$1 * 3 / 2 + }) + .delay(300) + .start('circularInOut'); + + var group = new Group(); + group.add(arc); + group.add(labelRect); + group.add(mask); + // Inject resize + group.resize = function () { + var cx = api.getWidth() / 2; + var cy = api.getHeight() / 2; + arc.setShape({ + cx: cx, + cy: cy + }); + var r = arc.shape.r; + labelRect.setShape({ + x: cx - r, + y: cy - r, + width: r * 2, + height: r * 2 + }); + + mask.setShape({ + x: 0, + y: 0, + width: api.getWidth(), + height: api.getHeight() + }); + }; + group.resize(); + return group; +}; + +/*! + * ECharts, a javascript interactive chart library. + * + * Copyright (c) 2015, Baidu Inc. + * All rights reserved. + * + * LICENSE + * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt + */ + +var each = each$1; +var parseClassType = ComponentModel.parseClassType; + +var version = '3.8.0'; + +var dependencies = { + zrender: '3.7.0' +}; + +var PRIORITY_PROCESSOR_FILTER = 1000; +var PRIORITY_PROCESSOR_STATISTIC = 5000; + +var PRIORITY_VISUAL_LAYOUT = 1000; +var PRIORITY_VISUAL_GLOBAL = 2000; +var PRIORITY_VISUAL_CHART = 3000; +var PRIORITY_VISUAL_COMPONENT = 4000; +// FIXME +// necessary? +var PRIORITY_VISUAL_BRUSH = 5000; + +var PRIORITY = { + PROCESSOR: { + FILTER: PRIORITY_PROCESSOR_FILTER, + STATISTIC: PRIORITY_PROCESSOR_STATISTIC + }, + VISUAL: { + LAYOUT: PRIORITY_VISUAL_LAYOUT, + GLOBAL: PRIORITY_VISUAL_GLOBAL, + CHART: PRIORITY_VISUAL_CHART, + COMPONENT: PRIORITY_VISUAL_COMPONENT, + BRUSH: PRIORITY_VISUAL_BRUSH + } +}; + +// Main process have three entries: `setOption`, `dispatchAction` and `resize`, +// where they must not be invoked nestedly, except the only case: invoke +// dispatchAction with updateMethod "none" in main process. +// This flag is used to carry out this rule. +// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]). +var IN_MAIN_PROCESS = '__flagInMainProcess'; +var HAS_GRADIENT_OR_PATTERN_BG = '__hasGradientOrPatternBg'; +var OPTION_UPDATED = '__optionUpdated'; +var ACTION_REG = /^[a-zA-Z0-9_]+$/; + + +function createRegisterEventWithLowercaseName(method) { + return function (eventName, handler, context) { + // Event name is all lowercase + eventName = eventName && eventName.toLowerCase(); + Eventful.prototype[method].call(this, eventName, handler, context); + }; +} + +/** + * @module echarts~MessageCenter + */ +function MessageCenter() { + Eventful.call(this); +} +MessageCenter.prototype.on = createRegisterEventWithLowercaseName('on'); +MessageCenter.prototype.off = createRegisterEventWithLowercaseName('off'); +MessageCenter.prototype.one = createRegisterEventWithLowercaseName('one'); +mixin(MessageCenter, Eventful); + +/** + * @module echarts~ECharts + */ +function ECharts(dom, theme, opts) { + opts = opts || {}; + + // Get theme by name + if (typeof theme === 'string') { + theme = themeStorage[theme]; + } + + /** + * @type {string} + */ + this.id; + + /** + * Group id + * @type {string} + */ + this.group; + + /** + * @type {HTMLElement} + * @private + */ + this._dom = dom; + + var defaultRenderer = 'canvas'; + if (__DEV__) { + defaultRenderer = ( + typeof window === 'undefined' ? global : window + ).__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer; + } + + /** + * @type {module:zrender/ZRender} + * @private + */ + var zr = this._zr = init$1(dom, { + renderer: opts.renderer || defaultRenderer, + devicePixelRatio: opts.devicePixelRatio, + width: opts.width, + height: opts.height + }); + + /** + * Expect 60 pfs. + * @type {Function} + * @private + */ + this._throttledZrFlush = throttle(bind(zr.flush, zr), 17); + + var theme = clone(theme); + theme && backwardCompat(theme, true); + /** + * @type {Object} + * @private + */ + this._theme = theme; + + /** + * @type {Array.} + * @private + */ + this._chartsViews = []; + + /** + * @type {Object.} + * @private + */ + this._chartsMap = {}; + + /** + * @type {Array.} + * @private + */ + this._componentsViews = []; + + /** + * @type {Object.} + * @private + */ + this._componentsMap = {}; + + /** + * @type {module:echarts/CoordinateSystem} + * @private + */ + this._coordSysMgr = new CoordinateSystemManager(); + + /** + * @type {module:echarts/ExtensionAPI} + * @private + */ + this._api = createExtensionAPI(this); + + Eventful.call(this); + + /** + * @type {module:echarts~MessageCenter} + * @private + */ + this._messageCenter = new MessageCenter(); + + // Init mouse events + this._initEvents(); + + // In case some people write `window.onresize = chart.resize` + this.resize = bind(this.resize, this); + + // Can't dispatch action during rendering procedure + this._pendingActions = []; + // Sort on demand + function prioritySortFunc(a, b) { + return a.prio - b.prio; + } + sort(visualFuncs, prioritySortFunc); + sort(dataProcessorFuncs, prioritySortFunc); + + zr.animation.on('frame', this._onframe, this); + + // ECharts instance can be used as value. + setAsPrimitive(this); +} + +var echartsProto = ECharts.prototype; + +echartsProto._onframe = function () { + // Lazy update + if (this[OPTION_UPDATED]) { + var silent = this[OPTION_UPDATED].silent; + + this[IN_MAIN_PROCESS] = true; + + updateMethods.prepareAndUpdate.call(this); + + this[IN_MAIN_PROCESS] = false; + + this[OPTION_UPDATED] = false; + + flushPendingActions.call(this, silent); + + triggerUpdatedEvent.call(this, silent); + } +}; +/** + * @return {HTMLElement} + */ +echartsProto.getDom = function () { + return this._dom; +}; + +/** + * @return {module:zrender~ZRender} + */ +echartsProto.getZr = function () { + return this._zr; +}; + +/** + * Usage: + * chart.setOption(option, notMerge, lazyUpdate); + * chart.setOption(option, { + * notMerge: ..., + * lazyUpdate: ..., + * silent: ... + * }); + * + * @param {Object} option + * @param {Object|boolean} [opts] opts or notMerge. + * @param {boolean} [opts.notMerge=false] + * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently. + */ +echartsProto.setOption = function (option, notMerge, lazyUpdate) { + if (__DEV__) { + assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.'); + } + + var silent; + if (isObject(notMerge)) { + lazyUpdate = notMerge.lazyUpdate; + silent = notMerge.silent; + notMerge = notMerge.notMerge; + } + + this[IN_MAIN_PROCESS] = true; + + if (!this._model || notMerge) { + var optionManager = new OptionManager(this._api); + var theme = this._theme; + var ecModel = this._model = new GlobalModel(null, null, theme, optionManager); + ecModel.init(null, null, theme, optionManager); + } + + this._model.setOption(option, optionPreprocessorFuncs); + + if (lazyUpdate) { + this[OPTION_UPDATED] = {silent: silent}; + this[IN_MAIN_PROCESS] = false; + } + else { + updateMethods.prepareAndUpdate.call(this); + // Ensure zr refresh sychronously, and then pixel in canvas can be + // fetched after `setOption`. + this._zr.flush(); + + this[OPTION_UPDATED] = false; + this[IN_MAIN_PROCESS] = false; + + flushPendingActions.call(this, silent); + triggerUpdatedEvent.call(this, silent); + } +}; + +/** + * @DEPRECATED + */ +echartsProto.setTheme = function () { + console.log('ECharts#setTheme() is DEPRECATED in ECharts 3.0'); +}; + +/** + * @return {module:echarts/model/Global} + */ +echartsProto.getModel = function () { + return this._model; +}; + +/** + * @return {Object} + */ +echartsProto.getOption = function () { + return this._model && this._model.getOption(); +}; + +/** + * @return {number} + */ +echartsProto.getWidth = function () { + return this._zr.getWidth(); +}; + +/** + * @return {number} + */ +echartsProto.getHeight = function () { + return this._zr.getHeight(); +}; + +/** + * @return {number} + */ +echartsProto.getDevicePixelRatio = function () { + return this._zr.painter.dpr || window.devicePixelRatio || 1; +}; + +/** + * Get canvas which has all thing rendered + * @param {Object} opts + * @param {string} [opts.backgroundColor] + * @return {string} + */ +echartsProto.getRenderedCanvas = function (opts) { + if (!env$1.canvasSupported) { + return; + } + opts = opts || {}; + opts.pixelRatio = opts.pixelRatio || 1; + opts.backgroundColor = opts.backgroundColor + || this._model.get('backgroundColor'); + var zr = this._zr; + var list = zr.storage.getDisplayList(); + // Stop animations + each$1(list, function (el) { + el.stopAnimation(true); + }); + return zr.painter.getRenderedCanvas(opts); +}; + +/** + * Get svg data url + * @return {string} + */ +echartsProto.getSvgDataUrl = function () { + if (!env$1.svgSupported) { + return; + } + + var zr = this._zr; + var list = zr.storage.getDisplayList(); + // Stop animations + each$1(list, function (el) { + el.stopAnimation(true); + }); + + return zr.painter.pathToSvg(); +}; + +/** + * @return {string} + * @param {Object} opts + * @param {string} [opts.type='png'] + * @param {string} [opts.pixelRatio=1] + * @param {string} [opts.backgroundColor] + * @param {string} [opts.excludeComponents] + */ +echartsProto.getDataURL = function (opts) { + opts = opts || {}; + var excludeComponents = opts.excludeComponents; + var ecModel = this._model; + var excludesComponentViews = []; + var self = this; + + each(excludeComponents, function (componentType) { + ecModel.eachComponent({ + mainType: componentType + }, function (component) { + var view = self._componentsMap[component.__viewId]; + if (!view.group.ignore) { + excludesComponentViews.push(view); + view.group.ignore = true; + } + }); + }); + + var url = this._zr.painter.getType() === 'svg' + ? this.getSvgDataUrl() + : this.getRenderedCanvas(opts).toDataURL( + 'image/' + (opts && opts.type || 'png') + ); + + each(excludesComponentViews, function (view) { + view.group.ignore = false; + }); + + return url; +}; + + +/** + * @return {string} + * @param {Object} opts + * @param {string} [opts.type='png'] + * @param {string} [opts.pixelRatio=1] + * @param {string} [opts.backgroundColor] + */ +echartsProto.getConnectedDataURL = function (opts) { + if (!env$1.canvasSupported) { + return; + } + var groupId = this.group; + var mathMin = Math.min; + var mathMax = Math.max; + var MAX_NUMBER = Infinity; + if (connectedGroups[groupId]) { + var left = MAX_NUMBER; + var top = MAX_NUMBER; + var right = -MAX_NUMBER; + var bottom = -MAX_NUMBER; + var canvasList = []; + var dpr = (opts && opts.pixelRatio) || 1; + + each$1(instances, function (chart, id) { + if (chart.group === groupId) { + var canvas = chart.getRenderedCanvas( + clone(opts) + ); + var boundingRect = chart.getDom().getBoundingClientRect(); + left = mathMin(boundingRect.left, left); + top = mathMin(boundingRect.top, top); + right = mathMax(boundingRect.right, right); + bottom = mathMax(boundingRect.bottom, bottom); + canvasList.push({ + dom: canvas, + left: boundingRect.left, + top: boundingRect.top + }); + } + }); + + left *= dpr; + top *= dpr; + right *= dpr; + bottom *= dpr; + var width = right - left; + var height = bottom - top; + var targetCanvas = createCanvas(); + targetCanvas.width = width; + targetCanvas.height = height; + var zr = init$1(targetCanvas); + + each(canvasList, function (item) { + var img = new ZImage({ + style: { + x: item.left * dpr - left, + y: item.top * dpr - top, + image: item.dom + } + }); + zr.add(img); + }); + zr.refreshImmediately(); + + return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png')); + } + else { + return this.getDataURL(opts); + } +}; + +/** + * Convert from logical coordinate system to pixel coordinate system. + * See CoordinateSystem#convertToPixel. + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * geoIndex / geoId, geoName, + * bmapIndex / bmapId / bmapName, + * xAxisIndex / xAxisId / xAxisName, + * yAxisIndex / yAxisId / yAxisName, + * gridIndex / gridId / gridName, + * ... (can be extended) + * } + * @param {Array|number} value + * @return {Array|number} result + */ +echartsProto.convertToPixel = curry(doConvertPixel, 'convertToPixel'); + +/** + * Convert from pixel coordinate system to logical coordinate system. + * See CoordinateSystem#convertFromPixel. + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * geoIndex / geoId / geoName, + * bmapIndex / bmapId / bmapName, + * xAxisIndex / xAxisId / xAxisName, + * yAxisIndex / yAxisId / yAxisName + * gridIndex / gridId / gridName, + * ... (can be extended) + * } + * @param {Array|number} value + * @return {Array|number} result + */ +echartsProto.convertFromPixel = curry(doConvertPixel, 'convertFromPixel'); + +function doConvertPixel(methodName, finder, value) { + var ecModel = this._model; + var coordSysList = this._coordSysMgr.getCoordinateSystems(); + var result; + + finder = parseFinder(ecModel, finder); + + for (var i = 0; i < coordSysList.length; i++) { + var coordSys = coordSysList[i]; + if (coordSys[methodName] + && (result = coordSys[methodName](ecModel, finder, value)) != null + ) { + return result; + } + } + + if (__DEV__) { + console.warn( + 'No coordinate system that supports ' + methodName + ' found by the given finder.' + ); + } +} + +/** + * Is the specified coordinate systems or components contain the given pixel point. + * @param {string|Object} finder + * If string, e.g., 'geo', means {geoIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * geoIndex / geoId / geoName, + * bmapIndex / bmapId / bmapName, + * xAxisIndex / xAxisId / xAxisName, + * yAxisIndex / yAxisId / yAxisName, + * gridIndex / gridId / gridName, + * ... (can be extended) + * } + * @param {Array|number} value + * @return {boolean} result + */ +echartsProto.containPixel = function (finder, value) { + var ecModel = this._model; + var result; + + finder = parseFinder(ecModel, finder); + + each$1(finder, function (models, key) { + key.indexOf('Models') >= 0 && each$1(models, function (model) { + var coordSys = model.coordinateSystem; + if (coordSys && coordSys.containPoint) { + result |= !!coordSys.containPoint(value); + } + else if (key === 'seriesModels') { + var view = this._chartsMap[model.__viewId]; + if (view && view.containPoint) { + result |= view.containPoint(value, model); + } + else { + if (__DEV__) { + console.warn(key + ': ' + (view + ? 'The found component do not support containPoint.' + : 'No view mapping to the found component.' + )); + } + } + } + else { + if (__DEV__) { + console.warn(key + ': containPoint is not supported'); + } + } + }, this); + }, this); + + return !!result; +}; + +/** + * Get visual from series or data. + * @param {string|Object} finder + * If string, e.g., 'series', means {seriesIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * dataIndex / dataIndexInside + * } + * If dataIndex is not specified, series visual will be fetched, + * but not data item visual. + * If all of seriesIndex, seriesId, seriesName are not specified, + * visual will be fetched from first series. + * @param {string} visualType 'color', 'symbol', 'symbolSize' + */ +echartsProto.getVisual = function (finder, visualType) { + var ecModel = this._model; + + finder = parseFinder(ecModel, finder, {defaultMainType: 'series'}); + + var seriesModel = finder.seriesModel; + + if (__DEV__) { + if (!seriesModel) { + console.warn('There is no specified seires model'); + } + } + + var data = seriesModel.getData(); + + var dataIndexInside = finder.hasOwnProperty('dataIndexInside') + ? finder.dataIndexInside + : finder.hasOwnProperty('dataIndex') + ? data.indexOfRawIndex(finder.dataIndex) + : null; + + return dataIndexInside != null + ? data.getItemVisual(dataIndexInside, visualType) + : data.getVisual(visualType); +}; + +/** + * Get view of corresponding component model + * @param {module:echarts/model/Component} componentModel + * @return {module:echarts/view/Component} + */ +echartsProto.getViewOfComponentModel = function (componentModel) { + return this._componentsMap[componentModel.__viewId]; +}; + +/** + * Get view of corresponding series model + * @param {module:echarts/model/Series} seriesModel + * @return {module:echarts/view/Chart} + */ +echartsProto.getViewOfSeriesModel = function (seriesModel) { + return this._chartsMap[seriesModel.__viewId]; +}; + + +var updateMethods = { + + /** + * @param {Object} payload + * @private + */ + update: function (payload) { + // console.profile && console.profile('update'); + + var ecModel = this._model; + var api = this._api; + var coordSysMgr = this._coordSysMgr; + var zr = this._zr; + // update before setOption + if (!ecModel) { + return; + } + + // Fixme First time update ? + ecModel.restoreData(); + + // TODO + // Save total ecModel here for undo/redo (after restoring data and before processing data). + // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call. + + // Create new coordinate system each update + // In LineView may save the old coordinate system and use it to get the orignal point + coordSysMgr.create(this._model, this._api); + + processData.call(this, ecModel, api); + + stackSeriesData.call(this, ecModel); + + coordSysMgr.update(ecModel, api); + + doVisualEncoding.call(this, ecModel, payload); + + doRender.call(this, ecModel, payload); + + // Set background + var backgroundColor = ecModel.get('backgroundColor') || 'transparent'; + + var painter = zr.painter; + // TODO all use clearColor ? + if (painter.isSingleCanvas && painter.isSingleCanvas()) { + zr.configLayer(0, { + clearColor: backgroundColor + }); + } + else { + // In IE8 + if (!env$1.canvasSupported) { + var colorArr = parse(backgroundColor); + backgroundColor = stringify(colorArr, 'rgb'); + if (colorArr[3] === 0) { + backgroundColor = 'transparent'; + } + } + if (backgroundColor.colorStops || backgroundColor.image) { + // Gradient background + // FIXME Fixed layer? + zr.configLayer(0, { + clearColor: backgroundColor + }); + this[HAS_GRADIENT_OR_PATTERN_BG] = true; + + this._dom.style.background = 'transparent'; + } + else { + if (this[HAS_GRADIENT_OR_PATTERN_BG]) { + zr.configLayer(0, { + clearColor: null + }); + } + this[HAS_GRADIENT_OR_PATTERN_BG] = false; + + this._dom.style.background = backgroundColor; + } + } + + each(postUpdateFuncs, function (func) { + func(ecModel, api); + }); + + // console.profile && console.profileEnd('update'); + }, + + /** + * @param {Object} payload + * @private + */ + updateView: function (payload) { + var ecModel = this._model; + + // update before setOption + if (!ecModel) { + return; + } + + ecModel.eachSeries(function (seriesModel) { + seriesModel.getData().clearAllVisual(); + }); + + doVisualEncoding.call(this, ecModel, payload); + + invokeUpdateMethod.call(this, 'updateView', ecModel, payload); + }, + + /** + * @param {Object} payload + * @private + */ + updateVisual: function (payload) { + var ecModel = this._model; + + // update before setOption + if (!ecModel) { + return; + } + + ecModel.eachSeries(function (seriesModel) { + seriesModel.getData().clearAllVisual(); + }); + + doVisualEncoding.call(this, ecModel, payload, true); + + invokeUpdateMethod.call(this, 'updateVisual', ecModel, payload); + }, + + /** + * @param {Object} payload + * @private + */ + updateLayout: function (payload) { + var ecModel = this._model; + + // update before setOption + if (!ecModel) { + return; + } + + doLayout.call(this, ecModel, payload); + + invokeUpdateMethod.call(this, 'updateLayout', ecModel, payload); + }, + + /** + * @param {Object} payload + * @private + */ + prepareAndUpdate: function (payload) { + var ecModel = this._model; + + prepareView.call(this, 'component', ecModel); + + prepareView.call(this, 'chart', ecModel); + + updateMethods.update.call(this, payload); + } +}; + +/** + * @private + */ +function updateDirectly(ecIns, method, payload, mainType, subType) { + var ecModel = ecIns._model; + + // broadcast + if (!mainType) { + each(ecIns._componentsViews.concat(ecIns._chartsViews), callView); + return; + } + + var query = {}; + query[mainType + 'Id'] = payload[mainType + 'Id']; + query[mainType + 'Index'] = payload[mainType + 'Index']; + query[mainType + 'Name'] = payload[mainType + 'Name']; + + var condition = {mainType: mainType, query: query}; + subType && (condition.subType = subType); // subType may be '' by parseClassType; + + // If dispatchAction before setOption, do nothing. + ecModel && ecModel.eachComponent(condition, function (model, index) { + callView(ecIns[ + mainType === 'series' ? '_chartsMap' : '_componentsMap' + ][model.__viewId]); + }, ecIns); + + function callView(view) { + view && view.__alive && view[method] && view[method]( + view.__model, ecModel, ecIns._api, payload + ); + } +} + +/** + * Resize the chart + * @param {Object} opts + * @param {number} [opts.width] Can be 'auto' (the same as null/undefined) + * @param {number} [opts.height] Can be 'auto' (the same as null/undefined) + * @param {boolean} [opts.silent=false] + */ +echartsProto.resize = function (opts) { + if (__DEV__) { + assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.'); + } + + this[IN_MAIN_PROCESS] = true; + + this._zr.resize(opts); + + var optionChanged = this._model && this._model.resetOption('media'); + var updateMethod = optionChanged ? 'prepareAndUpdate' : 'update'; + + updateMethods[updateMethod].call(this); + + // Resize loading effect + this._loadingFX && this._loadingFX.resize(); + + this[IN_MAIN_PROCESS] = false; + + var silent = opts && opts.silent; + + flushPendingActions.call(this, silent); + + triggerUpdatedEvent.call(this, silent); +}; + +/** + * Show loading effect + * @param {string} [name='default'] + * @param {Object} [cfg] + */ +echartsProto.showLoading = function (name, cfg) { + if (isObject(name)) { + cfg = name; + name = ''; + } + name = name || 'default'; + + this.hideLoading(); + if (!loadingEffects[name]) { + if (__DEV__) { + console.warn('Loading effects ' + name + ' not exists.'); + } + return; + } + var el = loadingEffects[name](this._api, cfg); + var zr = this._zr; + this._loadingFX = el; + + zr.add(el); +}; + +/** + * Hide loading effect + */ +echartsProto.hideLoading = function () { + this._loadingFX && this._zr.remove(this._loadingFX); + this._loadingFX = null; +}; + +/** + * @param {Object} eventObj + * @return {Object} + */ +echartsProto.makeActionFromEvent = function (eventObj) { + var payload = extend({}, eventObj); + payload.type = eventActionMap[eventObj.type]; + return payload; +}; + +/** + * @pubilc + * @param {Object} payload + * @param {string} [payload.type] Action type + * @param {Object|boolean} [opt] If pass boolean, means opt.silent + * @param {boolean} [opt.silent=false] Whether trigger events. + * @param {boolean} [opt.flush=undefined] + * true: Flush immediately, and then pixel in canvas can be fetched + * immediately. Caution: it might affect performance. + * false: Not not flush. + * undefined: Auto decide whether perform flush. + */ +echartsProto.dispatchAction = function (payload, opt) { + if (!isObject(opt)) { + opt = {silent: !!opt}; + } + + if (!actions[payload.type]) { + return; + } + + // Avoid dispatch action before setOption. Especially in `connect`. + if (!this._model) { + return; + } + + // May dispatchAction in rendering procedure + if (this[IN_MAIN_PROCESS]) { + this._pendingActions.push(payload); + return; + } + + doDispatchAction.call(this, payload, opt.silent); + + if (opt.flush) { + this._zr.flush(true); + } + else if (opt.flush !== false && env$1.browser.weChat) { + // In WeChat embeded browser, `requestAnimationFrame` and `setInterval` + // hang when sliding page (on touch event), which cause that zr does not + // refresh util user interaction finished, which is not expected. + // But `dispatchAction` may be called too frequently when pan on touch + // screen, which impacts performance if do not throttle them. + this._throttledZrFlush(); + } + + flushPendingActions.call(this, opt.silent); + + triggerUpdatedEvent.call(this, opt.silent); +}; + +function doDispatchAction(payload, silent) { + var payloadType = payload.type; + var escapeConnect = payload.escapeConnect; + var actionWrap = actions[payloadType]; + var actionInfo = actionWrap.actionInfo; + + var cptType = (actionInfo.update || 'update').split(':'); + var updateMethod = cptType.pop(); + cptType = cptType[0] != null && parseClassType(cptType[0]); + + this[IN_MAIN_PROCESS] = true; + + var payloads = [payload]; + var batched = false; + // Batch action + if (payload.batch) { + batched = true; + payloads = map(payload.batch, function (item) { + item = defaults(extend({}, item), payload); + item.batch = null; + return item; + }); + } + + var eventObjBatch = []; + var eventObj; + var isHighDown = payloadType === 'highlight' || payloadType === 'downplay'; + + each(payloads, function (batchItem) { + // Action can specify the event by return it. + eventObj = actionWrap.action(batchItem, this._model, this._api); + // Emit event outside + eventObj = eventObj || extend({}, batchItem); + // Convert type to eventType + eventObj.type = actionInfo.event || eventObj.type; + eventObjBatch.push(eventObj); + + // light update does not perform data process, layout and visual. + if (isHighDown) { + // method, payload, mainType, subType + updateDirectly(this, updateMethod, batchItem, 'series'); + } + else if (cptType) { + updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub); + } + }, this); + + if (updateMethod !== 'none' && !isHighDown && !cptType) { + // Still dirty + if (this[OPTION_UPDATED]) { + // FIXME Pass payload ? + updateMethods.prepareAndUpdate.call(this, payload); + this[OPTION_UPDATED] = false; + } + else { + updateMethods[updateMethod].call(this, payload); + } + } + + // Follow the rule of action batch + if (batched) { + eventObj = { + type: actionInfo.event || payloadType, + escapeConnect: escapeConnect, + batch: eventObjBatch + }; + } + else { + eventObj = eventObjBatch[0]; + } + + this[IN_MAIN_PROCESS] = false; + + !silent && this._messageCenter.trigger(eventObj.type, eventObj); +} + +function flushPendingActions(silent) { + var pendingActions = this._pendingActions; + while (pendingActions.length) { + var payload = pendingActions.shift(); + doDispatchAction.call(this, payload, silent); + } +} + +function triggerUpdatedEvent(silent) { + !silent && this.trigger('updated'); +} + +/** + * Register event + * @method + */ +echartsProto.on = createRegisterEventWithLowercaseName('on'); +echartsProto.off = createRegisterEventWithLowercaseName('off'); +echartsProto.one = createRegisterEventWithLowercaseName('one'); + +/** + * @param {string} methodName + * @private + */ +function invokeUpdateMethod(methodName, ecModel, payload) { + var api = this._api; + + // Update all components + each(this._componentsViews, function (component) { + var componentModel = component.__model; + component[methodName](componentModel, ecModel, api, payload); + + updateZ(componentModel, component); + }, this); + + // Upate all charts + ecModel.eachSeries(function (seriesModel, idx) { + var chart = this._chartsMap[seriesModel.__viewId]; + chart[methodName](seriesModel, ecModel, api, payload); + + updateZ(seriesModel, chart); + + updateProgressiveAndBlend(seriesModel, chart); + }, this); + + // If use hover layer + updateHoverLayerStatus(this._zr, ecModel); + + // Post render + each(postUpdateFuncs, function (func) { + func(ecModel, api); + }); +} + +/** + * Prepare view instances of charts and components + * @param {module:echarts/model/Global} ecModel + * @private + */ +function prepareView(type, ecModel) { + var isComponent = type === 'component'; + var viewList = isComponent ? this._componentsViews : this._chartsViews; + var viewMap = isComponent ? this._componentsMap : this._chartsMap; + var zr = this._zr; + + for (var i = 0; i < viewList.length; i++) { + viewList[i].__alive = false; + } + + ecModel[isComponent ? 'eachComponent' : 'eachSeries'](function (componentType, model) { + if (isComponent) { + if (componentType === 'series') { + return; + } + } + else { + model = componentType; + } + + // Consider: id same and type changed. + var viewId = '_ec_' + model.id + '_' + model.type; + var view = viewMap[viewId]; + if (!view) { + var classType = parseClassType(model.type); + var Clazz = isComponent + ? Component.getClass(classType.main, classType.sub) + : Chart.getClass(classType.sub); + if (Clazz) { + view = new Clazz(); + view.init(ecModel, this._api); + viewMap[viewId] = view; + viewList.push(view); + zr.add(view.group); + } + else { + // Error + return; + } + } + + model.__viewId = view.__id = viewId; + view.__alive = true; + view.__model = model; + view.group.__ecComponentInfo = { + mainType: model.mainType, + index: model.componentIndex + }; + }, this); + + for (var i = 0; i < viewList.length;) { + var view = viewList[i]; + if (!view.__alive) { + zr.remove(view.group); + view.dispose(ecModel, this._api); + viewList.splice(i, 1); + delete viewMap[view.__id]; + view.__id = view.group.__ecComponentInfo = null; + } + else { + i++; + } + } +} + +/** + * Processor data in each series + * + * @param {module:echarts/model/Global} ecModel + * @private + */ +function processData(ecModel, api) { + each(dataProcessorFuncs, function (process) { + process.func(ecModel, api); + }); +} + +/** + * @private + */ +function stackSeriesData(ecModel) { + var stackedDataMap = {}; + ecModel.eachSeries(function (series) { + var stack = series.get('stack'); + var data = series.getData(); + if (stack && data.type === 'list') { + var previousStack = stackedDataMap[stack]; + // Avoid conflict with Object.prototype + if (stackedDataMap.hasOwnProperty(stack) && previousStack) { + data.stackedOn = previousStack; + } + stackedDataMap[stack] = data; + } + }); +} + +/** + * Layout before each chart render there series, special visual encoding stage + * + * @param {module:echarts/model/Global} ecModel + * @private + */ +function doLayout(ecModel, payload) { + var api = this._api; + each(visualFuncs, function (visual) { + if (visual.isLayout) { + visual.func(ecModel, api, payload); + } + }); +} + +/** + * Encode visual infomation from data after data processing + * + * @param {module:echarts/model/Global} ecModel + * @param {object} layout + * @param {boolean} [excludesLayout] + * @private + */ +function doVisualEncoding(ecModel, payload, excludesLayout) { + var api = this._api; + ecModel.clearColorPalette(); + ecModel.eachSeries(function (seriesModel) { + seriesModel.clearColorPalette(); + }); + each(visualFuncs, function (visual) { + (!excludesLayout || !visual.isLayout) + && visual.func(ecModel, api, payload); + }); +} + +/** + * Render each chart and component + * @private + */ +function doRender(ecModel, payload) { + var api = this._api; + // Render all components + each(this._componentsViews, function (componentView) { + var componentModel = componentView.__model; + componentView.render(componentModel, ecModel, api, payload); + + updateZ(componentModel, componentView); + }, this); + + each(this._chartsViews, function (chart) { + chart.__alive = false; + }, this); + + // Render all charts + ecModel.eachSeries(function (seriesModel, idx) { + var chartView = this._chartsMap[seriesModel.__viewId]; + chartView.__alive = true; + chartView.render(seriesModel, ecModel, api, payload); + + chartView.group.silent = !!seriesModel.get('silent'); + + updateZ(seriesModel, chartView); + + updateProgressiveAndBlend(seriesModel, chartView); + + }, this); + + // If use hover layer + updateHoverLayerStatus(this._zr, ecModel); + + // Remove groups of unrendered charts + each(this._chartsViews, function (chart) { + if (!chart.__alive) { + chart.remove(ecModel, api); + } + }, this); +} + +var MOUSE_EVENT_NAMES = [ + 'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', + 'mousedown', 'mouseup', 'globalout', 'contextmenu' +]; +/** + * @private + */ +echartsProto._initEvents = function () { + each(MOUSE_EVENT_NAMES, function (eveName) { + this._zr.on(eveName, function (e) { + var ecModel = this.getModel(); + var el = e.target; + var params; + + // no e.target when 'globalout'. + if (eveName === 'globalout') { + params = {}; + } + else if (el && el.dataIndex != null) { + var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex); + params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType) || {}; + } + // If element has custom eventData of components + else if (el && el.eventData) { + params = extend({}, el.eventData); + } + + if (params) { + params.event = e; + params.type = eveName; + this.trigger(eveName, params); + } + + }, this); + }, this); + + each(eventActionMap, function (actionType, eventType) { + this._messageCenter.on(eventType, function (event) { + this.trigger(eventType, event); + }, this); + }, this); +}; + +/** + * @return {boolean} + */ +echartsProto.isDisposed = function () { + return this._disposed; +}; + +/** + * Clear + */ +echartsProto.clear = function () { + this.setOption({ series: [] }, true); +}; + +/** + * Dispose instance + */ +echartsProto.dispose = function () { + if (this._disposed) { + if (__DEV__) { + console.warn('Instance ' + this.id + ' has been disposed'); + } + return; + } + this._disposed = true; + + var api = this._api; + var ecModel = this._model; + + each(this._componentsViews, function (component) { + component.dispose(ecModel, api); + }); + each(this._chartsViews, function (chart) { + chart.dispose(ecModel, api); + }); + + // Dispose after all views disposed + this._zr.dispose(); + + delete instances[this.id]; +}; + +mixin(ECharts, Eventful); + +function updateHoverLayerStatus(zr, ecModel) { + var storage = zr.storage; + var elCount = 0; + storage.traverse(function (el) { + if (!el.isGroup) { + elCount++; + } + }); + if (elCount > ecModel.get('hoverLayerThreshold') && !env$1.node) { + storage.traverse(function (el) { + if (!el.isGroup) { + el.useHoverLayer = true; + } + }); + } +} + +/** + * Update chart progressive and blend. + * @param {module:echarts/model/Series|module:echarts/model/Component} model + * @param {module:echarts/view/Component|module:echarts/view/Chart} view + */ +function updateProgressiveAndBlend(seriesModel, chartView) { + // Progressive configuration + var elCount = 0; + chartView.group.traverse(function (el) { + if (el.type !== 'group' && !el.ignore) { + elCount++; + } + }); + var frameDrawNum = +seriesModel.get('progressive'); + var needProgressive = elCount > seriesModel.get('progressiveThreshold') && frameDrawNum && !env$1.node; + if (needProgressive) { + chartView.group.traverse(function (el) { + // FIXME marker and other components + if (!el.isGroup) { + el.progressive = needProgressive ? + Math.floor(elCount++ / frameDrawNum) : -1; + if (needProgressive) { + el.stopAnimation(true); + } + } + }); + } + + // Blend configration + var blendMode = seriesModel.get('blendMode') || null; + if (__DEV__) { + if (!env$1.canvasSupported && blendMode && blendMode !== 'source-over') { + console.warn('Only canvas support blendMode'); + } + } + chartView.group.traverse(function (el) { + // FIXME marker and other components + if (!el.isGroup) { + el.setStyle('blend', blendMode); + } + }); +} + +/** + * @param {module:echarts/model/Series|module:echarts/model/Component} model + * @param {module:echarts/view/Component|module:echarts/view/Chart} view + */ +function updateZ(model, view) { + var z = model.get('z'); + var zlevel = model.get('zlevel'); + // Set z and zlevel + view.group.traverse(function (el) { + if (el.type !== 'group') { + z != null && (el.z = z); + zlevel != null && (el.zlevel = zlevel); + } + }); +} + +function createExtensionAPI(ecInstance) { + var coordSysMgr = ecInstance._coordSysMgr; + return extend(new ExtensionAPI(ecInstance), { + // Inject methods + getCoordinateSystems: bind( + coordSysMgr.getCoordinateSystems, coordSysMgr + ), + getComponentByElement: function (el) { + while (el) { + var modelInfo = el.__ecComponentInfo; + if (modelInfo != null) { + return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index); + } + el = el.parent; + } + } + }); +} + +/** + * @type {Object} key: actionType. + * @inner + */ +var actions = {}; + +/** + * Map eventType to actionType + * @type {Object} + */ +var eventActionMap = {}; + +/** + * Data processor functions of each stage + * @type {Array.>} + * @inner + */ +var dataProcessorFuncs = []; + +/** + * @type {Array.} + * @inner + */ +var optionPreprocessorFuncs = []; + +/** + * @type {Array.} + * @inner + */ +var postUpdateFuncs = []; + +/** + * Visual encoding functions of each stage + * @type {Array.>} + * @inner + */ +var visualFuncs = []; +/** + * Theme storage + * @type {Object.} + */ +var themeStorage = {}; +/** + * Loading effects + */ +var loadingEffects = {}; + + +var instances = {}; +var connectedGroups = {}; + +var idBase = new Date() - 0; +var groupIdBase = new Date() - 0; +var DOM_ATTRIBUTE_KEY = '_echarts_instance_'; + +function enableConnect(chart) { + var STATUS_PENDING = 0; + var STATUS_UPDATING = 1; + var STATUS_UPDATED = 2; + var STATUS_KEY = '__connectUpdateStatus'; + + function updateConnectedChartsStatus(charts, status) { + for (var i = 0; i < charts.length; i++) { + var otherChart = charts[i]; + otherChart[STATUS_KEY] = status; + } + } + + each$1(eventActionMap, function (actionType, eventType) { + chart._messageCenter.on(eventType, function (event) { + if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) { + if (event && event.escapeConnect) { + return; + } + + var action = chart.makeActionFromEvent(event); + var otherCharts = []; + + each$1(instances, function (otherChart) { + if (otherChart !== chart && otherChart.group === chart.group) { + otherCharts.push(otherChart); + } + }); + + updateConnectedChartsStatus(otherCharts, STATUS_PENDING); + each(otherCharts, function (otherChart) { + if (otherChart[STATUS_KEY] !== STATUS_UPDATING) { + otherChart.dispatchAction(action); + } + }); + updateConnectedChartsStatus(otherCharts, STATUS_UPDATED); + } + }); + }); +} + +/** + * @param {HTMLElement} dom + * @param {Object} [theme] + * @param {Object} opts + * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default + * @param {string} [opts.renderer] Currently only 'canvas' is supported. + * @param {number} [opts.width] Use clientWidth of the input `dom` by default. + * Can be 'auto' (the same as null/undefined) + * @param {number} [opts.height] Use clientHeight of the input `dom` by default. + * Can be 'auto' (the same as null/undefined) + */ +function init(dom, theme, opts) { + if (__DEV__) { + // Check version + if ((version$1.replace('.', '') - 0) < (dependencies.zrender.replace('.', '') - 0)) { + throw new Error( + 'zrender/src ' + version$1 + + ' is too old for ECharts ' + version + + '. Current version need ZRender ' + + dependencies.zrender + '+' + ); + } + + if (!dom) { + throw new Error('Initialize failed: invalid dom.'); + } + } + + var existInstance = getInstanceByDom(dom); + if (existInstance) { + if (__DEV__) { + console.warn('There is a chart instance already initialized on the dom.'); + } + return existInstance; + } + + if (__DEV__) { + if (isDom(dom) + && dom.nodeName.toUpperCase() !== 'CANVAS' + && ( + (!dom.clientWidth && (!opts || opts.width == null)) + || (!dom.clientHeight && (!opts || opts.height == null)) + ) + ) { + console.warn('Can\'t get dom width or height'); + } + } + + var chart = new ECharts(dom, theme, opts); + chart.id = 'ec_' + idBase++; + instances[chart.id] = chart; + + if (dom.setAttribute) { + dom.setAttribute(DOM_ATTRIBUTE_KEY, chart.id); + } + else { + dom[DOM_ATTRIBUTE_KEY] = chart.id; + } + + enableConnect(chart); + + return chart; +} + +/** + * @return {string|Array.} groupId + */ +function connect(groupId) { + // Is array of charts + if (isArray(groupId)) { + var charts = groupId; + groupId = null; + // If any chart has group + each$1(charts, function (chart) { + if (chart.group != null) { + groupId = chart.group; + } + }); + groupId = groupId || ('g_' + groupIdBase++); + each$1(charts, function (chart) { + chart.group = groupId; + }); + } + connectedGroups[groupId] = true; + return groupId; +} + +/** + * @DEPRECATED + * @return {string} groupId + */ +function disConnect(groupId) { + connectedGroups[groupId] = false; +} + +/** + * @return {string} groupId + */ +var disconnect = disConnect; + +/** + * Dispose a chart instance + * @param {module:echarts~ECharts|HTMLDomElement|string} chart + */ +function dispose(chart) { + if (typeof chart === 'string') { + chart = instances[chart]; + } + else if (!(chart instanceof ECharts)){ + // Try to treat as dom + chart = getInstanceByDom(chart); + } + if ((chart instanceof ECharts) && !chart.isDisposed()) { + chart.dispose(); + } +} + +/** + * @param {HTMLElement} dom + * @return {echarts~ECharts} + */ +function getInstanceByDom(dom) { + var key; + if (dom.getAttribute) { + key = dom.getAttribute(DOM_ATTRIBUTE_KEY); + } + else { + key = dom[DOM_ATTRIBUTE_KEY]; + } + return instances[key]; +} + +/** + * @param {string} key + * @return {echarts~ECharts} + */ +function getInstanceById(key) { + return instances[key]; +} + +/** + * Register theme + */ +function registerTheme(name, theme) { + themeStorage[name] = theme; +} + +/** + * Register option preprocessor + * @param {Function} preprocessorFunc + */ +function registerPreprocessor(preprocessorFunc) { + optionPreprocessorFuncs.push(preprocessorFunc); +} + +/** + * @param {number} [priority=1000] + * @param {Function} processorFunc + */ +function registerProcessor(priority, processorFunc) { + if (typeof priority === 'function') { + processorFunc = priority; + priority = PRIORITY_PROCESSOR_FILTER; + } + if (__DEV__) { + if (isNaN(priority)) { + throw new Error('Unkown processor priority'); + } + } + dataProcessorFuncs.push({ + prio: priority, + func: processorFunc + }); +} + +/** + * Register postUpdater + * @param {Function} postUpdateFunc + */ +function registerPostUpdate(postUpdateFunc) { + postUpdateFuncs.push(postUpdateFunc); +} + +/** + * Usage: + * registerAction('someAction', 'someEvent', function () { ... }); + * registerAction('someAction', function () { ... }); + * registerAction( + * {type: 'someAction', event: 'someEvent', update: 'updateView'}, + * function () { ... } + * ); + * + * @param {(string|Object)} actionInfo + * @param {string} actionInfo.type + * @param {string} [actionInfo.event] + * @param {string} [actionInfo.update] + * @param {string} [eventName] + * @param {Function} action + */ +function registerAction(actionInfo, eventName, action) { + if (typeof eventName === 'function') { + action = eventName; + eventName = ''; + } + var actionType = isObject(actionInfo) + ? actionInfo.type + : ([actionInfo, actionInfo = { + event: eventName + }][0]); + + // Event name is all lowercase + actionInfo.event = (actionInfo.event || actionType).toLowerCase(); + eventName = actionInfo.event; + + // Validate action type and event name. + assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName)); + + if (!actions[actionType]) { + actions[actionType] = {action: action, actionInfo: actionInfo}; + } + eventActionMap[eventName] = actionType; +} + +/** + * @param {string} type + * @param {*} CoordinateSystem + */ +function registerCoordinateSystem(type, CoordinateSystem$$1) { + CoordinateSystemManager.register(type, CoordinateSystem$$1); +} + +/** + * Get dimensions of specified coordinate system. + * @param {string} type + * @return {Array.} + */ +function getCoordinateSystemDimensions(type) { + var coordSysCreator = CoordinateSystemManager.get(type); + if (coordSysCreator) { + return coordSysCreator.getDimensionsInfo + ? coordSysCreator.getDimensionsInfo() + : coordSysCreator.dimensions.slice(); + } +} + +/** + * Layout is a special stage of visual encoding + * Most visual encoding like color are common for different chart + * But each chart has it's own layout algorithm + * + * @param {number} [priority=1000] + * @param {Function} layoutFunc + */ +function registerLayout(priority, layoutFunc) { + if (typeof priority === 'function') { + layoutFunc = priority; + priority = PRIORITY_VISUAL_LAYOUT; + } + if (__DEV__) { + if (isNaN(priority)) { + throw new Error('Unkown layout priority'); + } + } + visualFuncs.push({ + prio: priority, + func: layoutFunc, + isLayout: true + }); +} + +/** + * @param {number} [priority=3000] + * @param {Function} visualFunc + */ +function registerVisual(priority, visualFunc) { + if (typeof priority === 'function') { + visualFunc = priority; + priority = PRIORITY_VISUAL_CHART; + } + if (__DEV__) { + if (isNaN(priority)) { + throw new Error('Unkown visual priority'); + } + } + visualFuncs.push({ + prio: priority, + func: visualFunc + }); +} + +/** + * @param {string} name + */ +function registerLoading(name, loadingFx) { + loadingEffects[name] = loadingFx; +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendComponentModel(opts/*, superClass*/) { + // var Clazz = ComponentModel; + // if (superClass) { + // var classType = parseClassType(superClass); + // Clazz = ComponentModel.getClass(classType.main, classType.sub, true); + // } + return ComponentModel.extend(opts); +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendComponentView(opts/*, superClass*/) { + // var Clazz = ComponentView; + // if (superClass) { + // var classType = parseClassType(superClass); + // Clazz = ComponentView.getClass(classType.main, classType.sub, true); + // } + return Component.extend(opts); +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendSeriesModel(opts/*, superClass*/) { + // var Clazz = SeriesModel; + // if (superClass) { + // superClass = 'series.' + superClass.replace('series.', ''); + // var classType = parseClassType(superClass); + // Clazz = ComponentModel.getClass(classType.main, classType.sub, true); + // } + return SeriesModel.extend(opts); +} + +/** + * @param {Object} opts + * @param {string} [superClass] + */ +function extendChartView(opts/*, superClass*/) { + // var Clazz = ChartView; + // if (superClass) { + // superClass = superClass.replace('series.', ''); + // var classType = parseClassType(superClass); + // Clazz = ChartView.getClass(classType.main, true); + // } + return Chart.extend(opts); +} + +/** + * ZRender need a canvas context to do measureText. + * But in node environment canvas may be created by node-canvas. + * So we need to specify how to create a canvas instead of using document.createElement('canvas') + * + * Be careful of using it in the browser. + * + * @param {Function} creator + * @example + * var Canvas = require('canvas'); + * var echarts = require('echarts'); + * echarts.setCanvasCreator(function () { + * // Small size is enough. + * return new Canvas(32, 32); + * }); + */ +function setCanvasCreator(creator) { + $inject$1.createCanvas(creator); +} + +registerVisual(PRIORITY_VISUAL_GLOBAL, seriesColor); +registerPreprocessor(backwardCompat); +registerLoading('default', loadingDefault); + +// Default actions + +registerAction({ + type: 'highlight', + event: 'highlight', + update: 'highlight' +}, noop); + +registerAction({ + type: 'downplay', + event: 'downplay', + update: 'downplay' +}, noop); + + +// -------- +// Exports +// -------- + + + + + +var $inject = { + registerMap: function (f) { + exports.registerMap = f; + }, + getMap: function (f) { + exports.getMap = f; + }, + parseGeoJSON: function (f) { + exports.parseGeoJSON = f; + } +}; + +function defaultKeyGetter(item) { + return item; +} + +/** + * @param {Array} oldArr + * @param {Array} newArr + * @param {Function} oldKeyGetter + * @param {Function} newKeyGetter + * @param {Object} [context] Can be visited by this.context in callback. + */ +function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) { + this._old = oldArr; + this._new = newArr; + + this._oldKeyGetter = oldKeyGetter || defaultKeyGetter; + this._newKeyGetter = newKeyGetter || defaultKeyGetter; + + this.context = context; +} + +DataDiffer.prototype = { + + constructor: DataDiffer, + + /** + * Callback function when add a data + */ + add: function (func) { + this._add = func; + return this; + }, + + /** + * Callback function when update a data + */ + update: function (func) { + this._update = func; + return this; + }, + + /** + * Callback function when remove a data + */ + remove: function (func) { + this._remove = func; + return this; + }, + + execute: function () { + var oldArr = this._old; + var newArr = this._new; + + var oldDataIndexMap = {}; + var newDataIndexMap = {}; + var oldDataKeyArr = []; + var newDataKeyArr = []; + var i; + + initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this); + initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this); + + // Travel by inverted order to make sure order consistency + // when duplicate keys exists (consider newDataIndex.pop() below). + // For performance consideration, these code below do not look neat. + for (i = 0; i < oldArr.length; i++) { + var key = oldDataKeyArr[i]; + var idx = newDataIndexMap[key]; + + // idx can never be empty array here. see 'set null' logic below. + if (idx != null) { + // Consider there is duplicate key (for example, use dataItem.name as key). + // We should make sure every item in newArr and oldArr can be visited. + var len = idx.length; + if (len) { + len === 1 && (newDataIndexMap[key] = null); + idx = idx.unshift(); + } + else { + newDataIndexMap[key] = null; + } + this._update && this._update(idx, i); + } + else { + this._remove && this._remove(i); + } + } + + for (var i = 0; i < newDataKeyArr.length; i++) { + var key = newDataKeyArr[i]; + if (newDataIndexMap.hasOwnProperty(key)) { + var idx = newDataIndexMap[key]; + if (idx == null) { + continue; + } + // idx can never be empty array here. see 'set null' logic above. + if (!idx.length) { + this._add && this._add(idx); + } + else { + for (var j = 0, len = idx.length; j < len; j++) { + this._add && this._add(idx[j]); + } + } + } + } + } +}; + +function initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) { + for (var i = 0; i < arr.length; i++) { + // Add prefix to avoid conflict with Object.prototype. + var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i); + var existence = map[key]; + if (existence == null) { + keyArr.push(key); + map[key] = i; + } + else { + if (!existence.length) { + map[key] = existence = [existence]; + } + existence.push(i); + } + } +} + +/** + * List for data storage + * @module echarts/data/List + */ + +var isObject$4 = isObject; + +var UNDEFINED = 'undefined'; +var globalObj = typeof window === UNDEFINED ? global : window; + +var dataCtors = { + 'float': typeof globalObj.Float64Array === UNDEFINED + ? Array : globalObj.Float64Array, + 'int': typeof globalObj.Int32Array === UNDEFINED + ? Array : globalObj.Int32Array, + // Ordinal data type can be string or int + 'ordinal': Array, + 'number': Array, + 'time': Array +}; + +var TRANSFERABLE_PROPERTIES = [ + 'stackedOn', 'hasItemOption', '_nameList', '_idList', '_rawData' +]; + +function transferProperties(a, b) { + each$1(TRANSFERABLE_PROPERTIES.concat(b.__wrappedMethods || []), function (propName) { + if (b.hasOwnProperty(propName)) { + a[propName] = b[propName]; + } + }); + + a.__wrappedMethods = b.__wrappedMethods; +} + +function DefaultDataProvider(dataArray) { + this._array = dataArray || []; +} + +DefaultDataProvider.prototype.pure = false; + +DefaultDataProvider.prototype.count = function () { + return this._array.length; +}; +DefaultDataProvider.prototype.getItem = function (idx) { + return this._array[idx]; +}; + +/** + * @constructor + * @alias module:echarts/data/List + * + * @param {Array.} dimensions + * For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...]. + * Dimensions should be concrete names like x, y, z, lng, lat, angle, radius + * @param {module:echarts/model/Model} hostModel + */ +var List = function (dimensions, hostModel) { + + dimensions = dimensions || ['x', 'y']; + + var dimensionInfos = {}; + var dimensionNames = []; + for (var i = 0; i < dimensions.length; i++) { + var dimensionName; + var dimensionInfo = {}; + if (typeof dimensions[i] === 'string') { + dimensionName = dimensions[i]; + dimensionInfo = { + name: dimensionName, + coordDim: dimensionName, + coordDimIndex: 0, + stackable: false, + // Type can be 'float', 'int', 'number' + // Default is number, Precision of float may not enough + type: 'number' + }; + } + else { + dimensionInfo = dimensions[i]; + dimensionName = dimensionInfo.name; + dimensionInfo.type = dimensionInfo.type || 'number'; + if (!dimensionInfo.coordDim) { + dimensionInfo.coordDim = dimensionName; + dimensionInfo.coordDimIndex = 0; + } + } + dimensionInfo.otherDims = dimensionInfo.otherDims || {}; + dimensionNames.push(dimensionName); + dimensionInfos[dimensionName] = dimensionInfo; + } + + /** + * @readOnly + * @type {Array.} + */ + this.dimensions = dimensionNames; + + /** + * Infomation of each data dimension, like data type. + * @type {Object} + */ + this._dimensionInfos = dimensionInfos; + + /** + * @type {module:echarts/model/Model} + */ + this.hostModel = hostModel; + + /** + * @type {module:echarts/model/Model} + */ + this.dataType; + + /** + * Indices stores the indices of data subset after filtered. + * This data subset will be used in chart. + * @type {Array.} + * @readOnly + */ + this.indices = []; + + /** + * Data storage + * @type {Object.} + * @private + */ + this._storage = {}; + + /** + * @type {Array.} + */ + this._nameList = []; + /** + * @type {Array.} + */ + this._idList = []; + + /** + * Models of data option is stored sparse for optimizing memory cost + * @type {Array.} + * @private + */ + this._optionModels = []; + + /** + * @param {module:echarts/data/List} + */ + this.stackedOn = null; + + /** + * Global visual properties after visual coding + * @type {Object} + * @private + */ + this._visual = {}; + + /** + * Globel layout properties. + * @type {Object} + * @private + */ + this._layout = {}; + + /** + * Item visual properties after visual coding + * @type {Array.} + * @private + */ + this._itemVisuals = []; + + /** + * Item layout properties after layout + * @type {Array.} + * @private + */ + this._itemLayouts = []; + + /** + * Graphic elemnents + * @type {Array.} + * @private + */ + this._graphicEls = []; + + /** + * @type {Array.} + * @private + */ + this._rawData; + + /** + * @type {Object} + * @private + */ + this._extent; +}; + +var listProto = List.prototype; + +listProto.type = 'list'; + +/** + * If each data item has it's own option + * @type {boolean} + */ +listProto.hasItemOption = true; + +/** + * Get dimension name + * @param {string|number} dim + * Dimension can be concrete names like x, y, z, lng, lat, angle, radius + * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius' + * @return {string} Concrete dim name. + */ +listProto.getDimension = function (dim) { + if (!isNaN(dim)) { + dim = this.dimensions[dim] || dim; + } + return dim; +}; + +/** + * Get type and stackable info of particular dimension + * @param {string|number} dim + * Dimension can be concrete names like x, y, z, lng, lat, angle, radius + * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius' + */ +listProto.getDimensionInfo = function (dim) { + return clone(this._dimensionInfos[this.getDimension(dim)]); +}; + +/** + * Initialize from data + * @param {Array.} data + * @param {Array.} [nameList] + * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number + */ +listProto.initData = function (data, nameList, dimValueGetter) { + data = data || []; + + var isDataArray = isArray(data); + if (isDataArray) { + data = new DefaultDataProvider(data); + } + if (__DEV__) { + if (!isDataArray && (typeof data.getItem != 'function' || typeof data.count != 'function')) { + throw new Error('Inavlid data provider.'); + } + } + + this._rawData = data; + + // Clear + var storage = this._storage = {}; + var indices = this.indices = []; + + var dimensions = this.dimensions; + var dimensionInfoMap = this._dimensionInfos; + + var size = data.count(); + + var idList = []; + var nameRepeatCount = {}; + var nameDimIdx; + + nameList = nameList || []; + + // Init storage + for (var i = 0; i < dimensions.length; i++) { + var dimInfo = dimensionInfoMap[dimensions[i]]; + dimInfo.otherDims.itemName === 0 && (nameDimIdx = i); + var DataCtor = dataCtors[dimInfo.type]; + storage[dimensions[i]] = new DataCtor(size); + } + + var self = this; + if (!dimValueGetter) { + self.hasItemOption = false; + } + // Default dim value getter + dimValueGetter = dimValueGetter || function (dataItem, dimName, dataIndex, dimIndex) { + var value = getDataItemValue(dataItem); + // If any dataItem is like { value: 10 } + if (isDataItemOption(dataItem)) { + self.hasItemOption = true; + } + return converDataValue( + (value instanceof Array) + ? value[dimIndex] + // If value is a single number or something else not array. + : value, + dimensionInfoMap[dimName] + ); + }; + + for (var i = 0; i < size; i++) { + // NOTICE: Try not to write things into dataItem + var dataItem = data.getItem(i); + // Each data item is value + // [1, 2] + // 2 + // Bar chart, line chart which uses category axis + // only gives the 'y' value. 'x' value is the indices of cateogry + // Use a tempValue to normalize the value to be a (x, y) value + + // Store the data by dimensions + for (var k = 0; k < dimensions.length; k++) { + var dim = dimensions[k]; + var dimStorage = storage[dim]; + // PENDING NULL is empty or zero + dimStorage[i] = dimValueGetter(dataItem, dim, i, k); + } + + indices.push(i); + } + + // Use the name in option and create id + for (var i = 0; i < size; i++) { + var dataItem = data.getItem(i); + if (!nameList[i] && dataItem) { + if (dataItem.name != null) { + nameList[i] = dataItem.name; + } + else if (nameDimIdx != null) { + nameList[i] = storage[dimensions[nameDimIdx]][i]; + } + } + var name = nameList[i] || ''; + // Try using the id in option + var id = dataItem && dataItem.id; + + if (!id && name) { + // Use name as id and add counter to avoid same name + nameRepeatCount[name] = nameRepeatCount[name] || 0; + id = name; + if (nameRepeatCount[name] > 0) { + id += '__ec__' + nameRepeatCount[name]; + } + nameRepeatCount[name]++; + } + id && (idList[i] = id); + } + + this._nameList = nameList; + this._idList = idList; +}; + +/** + * @return {number} + */ +listProto.count = function () { + return this.indices.length; +}; + +/** + * Get value. Return NaN if idx is out of range. + * @param {string} dim Dim must be concrete name. + * @param {number} idx + * @param {boolean} stack + * @return {number} + */ +listProto.get = function (dim, idx, stack) { + var storage = this._storage; + var dataIndex = this.indices[idx]; + + // If value not exists + if (dataIndex == null || !storage[dim]) { + return NaN; + } + + var value = storage[dim][dataIndex]; + // FIXME ordinal data type is not stackable + if (stack) { + var dimensionInfo = this._dimensionInfos[dim]; + if (dimensionInfo && dimensionInfo.stackable) { + var stackedOn = this.stackedOn; + while (stackedOn) { + // Get no stacked data of stacked on + var stackedValue = stackedOn.get(dim, idx); + // Considering positive stack, negative stack and empty data + if ((value >= 0 && stackedValue > 0) // Positive stack + || (value <= 0 && stackedValue < 0) // Negative stack + ) { + value += stackedValue; + } + stackedOn = stackedOn.stackedOn; + } + } + } + return value; +}; + +/** + * Get value for multi dimensions. + * @param {Array.} [dimensions] If ignored, using all dimensions. + * @param {number} idx + * @param {boolean} stack + * @return {number} + */ +listProto.getValues = function (dimensions, idx, stack) { + var values = []; + + if (!isArray(dimensions)) { + stack = idx; + idx = dimensions; + dimensions = this.dimensions; + } + + for (var i = 0, len = dimensions.length; i < len; i++) { + values.push(this.get(dimensions[i], idx, stack)); + } + + return values; +}; + +/** + * If value is NaN. Inlcuding '-' + * @param {string} dim + * @param {number} idx + * @return {number} + */ +listProto.hasValue = function (idx) { + var dimensions = this.dimensions; + var dimensionInfos = this._dimensionInfos; + for (var i = 0, len = dimensions.length; i < len; i++) { + if ( + // Ordinal type can be string or number + dimensionInfos[dimensions[i]].type !== 'ordinal' + && isNaN(this.get(dimensions[i], idx)) + ) { + return false; + } + } + return true; +}; + +/** + * Get extent of data in one dimension + * @param {string} dim + * @param {boolean} stack + * @param {Function} filter + */ +listProto.getDataExtent = function (dim, stack, filter$$1) { + dim = this.getDimension(dim); + var dimData = this._storage[dim]; + var dimInfo = this.getDimensionInfo(dim); + stack = (dimInfo && dimInfo.stackable) && stack; + var dimExtent = (this._extent || (this._extent = {}))[dim + (!!stack)]; + var value; + if (dimExtent) { + return dimExtent; + } + // var dimInfo = this._dimensionInfos[dim]; + if (dimData) { + var min = Infinity; + var max = -Infinity; + // var isOrdinal = dimInfo.type === 'ordinal'; + for (var i = 0, len = this.count(); i < len; i++) { + value = this.get(dim, i, stack); + // FIXME + // if (isOrdinal && typeof value === 'string') { + // value = zrUtil.indexOf(dimData, value); + // } + if (!filter$$1 || filter$$1(value, dim, i)) { + value < min && (min = value); + value > max && (max = value); + } + } + return (this._extent[dim + !!stack] = [min, max]); + } + else { + return [Infinity, -Infinity]; + } +}; + +/** + * Get sum of data in one dimension + * @param {string} dim + * @param {boolean} stack + */ +listProto.getSum = function (dim, stack) { + var dimData = this._storage[dim]; + var sum = 0; + if (dimData) { + for (var i = 0, len = this.count(); i < len; i++) { + var value = this.get(dim, i, stack); + if (!isNaN(value)) { + sum += value; + } + } + } + return sum; +}; + +/** + * Retreive the index with given value + * @param {number} idx + * @param {number} value + * @return {number} + */ +// FIXME Precision of float value +listProto.indexOf = function (dim, value) { + var storage = this._storage; + var dimData = storage[dim]; + var indices = this.indices; + + if (dimData) { + for (var i = 0, len = indices.length; i < len; i++) { + var rawIndex = indices[i]; + if (dimData[rawIndex] === value) { + return i; + } + } + } + return -1; +}; + +/** + * Retreive the index with given name + * @param {number} idx + * @param {number} name + * @return {number} + */ +listProto.indexOfName = function (name) { + var indices = this.indices; + var nameList = this._nameList; + + for (var i = 0, len = indices.length; i < len; i++) { + var rawIndex = indices[i]; + if (nameList[rawIndex] === name) { + return i; + } + } + + return -1; +}; + +/** + * Retreive the index with given raw data index + * @param {number} idx + * @param {number} name + * @return {number} + */ +listProto.indexOfRawIndex = function (rawIndex) { + // Indices are ascending + var indices = this.indices; + + // If rawIndex === dataIndex + var rawDataIndex = indices[rawIndex]; + if (rawDataIndex != null && rawDataIndex === rawIndex) { + return rawIndex; + } + + var left = 0; + var right = indices.length - 1; + while (left <= right) { + var mid = (left + right) / 2 | 0; + if (indices[mid] < rawIndex) { + left = mid + 1; + } + else if (indices[mid] > rawIndex) { + right = mid - 1; + } + else { + return mid; + } + } + return -1; +}; + +/** + * Retreive the index of nearest value + * @param {string} dim + * @param {number} value + * @param {boolean} stack If given value is after stacked + * @param {number} [maxDistance=Infinity] + * @return {Array.} Considere multiple points has the same value. + */ +listProto.indicesOfNearest = function (dim, value, stack, maxDistance) { + var storage = this._storage; + var dimData = storage[dim]; + var nearestIndices = []; + + if (!dimData) { + return nearestIndices; + } + + if (maxDistance == null) { + maxDistance = Infinity; + } + + var minDist = Number.MAX_VALUE; + var minDiff = -1; + for (var i = 0, len = this.count(); i < len; i++) { + var diff = value - this.get(dim, i, stack); + var dist = Math.abs(diff); + if (diff <= maxDistance && dist <= minDist) { + // For the case of two data are same on xAxis, which has sequence data. + // Show the nearest index + // https://github.com/ecomfe/echarts/issues/2869 + if (dist < minDist || (diff >= 0 && minDiff < 0)) { + minDist = dist; + minDiff = diff; + nearestIndices.length = 0; + } + nearestIndices.push(i); + } + } + return nearestIndices; +}; + +/** + * Get raw data index + * @param {number} idx + * @return {number} + */ +listProto.getRawIndex = function (idx) { + var rawIdx = this.indices[idx]; + return rawIdx == null ? -1 : rawIdx; +}; + +/** + * Get raw data item + * @param {number} idx + * @return {number} + */ +listProto.getRawDataItem = function (idx) { + return this._rawData.getItem(this.getRawIndex(idx)); +}; + +/** + * @param {number} idx + * @param {boolean} [notDefaultIdx=false] + * @return {string} + */ +listProto.getName = function (idx) { + return this._nameList[this.indices[idx]] || ''; +}; + +/** + * @param {number} idx + * @param {boolean} [notDefaultIdx=false] + * @return {string} + */ +listProto.getId = function (idx) { + return this._idList[this.indices[idx]] || (this.getRawIndex(idx) + ''); +}; + + +function normalizeDimensions(dimensions) { + if (!isArray(dimensions)) { + dimensions = [dimensions]; + } + return dimensions; +} + +/** + * Data iteration + * @param {string|Array.} + * @param {Function} cb + * @param {boolean} [stack=false] + * @param {*} [context=this] + * + * @example + * list.each('x', function (x, idx) {}); + * list.each(['x', 'y'], function (x, y, idx) {}); + * list.each(function (idx) {}) + */ +listProto.each = function (dims, cb, stack, context) { + if (typeof dims === 'function') { + context = stack; + stack = cb; + cb = dims; + dims = []; + } + + dims = map(normalizeDimensions(dims), this.getDimension, this); + + var value = []; + var dimSize = dims.length; + var indices = this.indices; + + context = context || this; + + for (var i = 0; i < indices.length; i++) { + // Simple optimization + switch (dimSize) { + case 0: + cb.call(context, i); + break; + case 1: + cb.call(context, this.get(dims[0], i, stack), i); + break; + case 2: + cb.call(context, this.get(dims[0], i, stack), this.get(dims[1], i, stack), i); + break; + default: + for (var k = 0; k < dimSize; k++) { + value[k] = this.get(dims[k], i, stack); + } + // Index + value[k] = i; + cb.apply(context, value); + } + } +}; + +/** + * Data filter + * @param {string|Array.} + * @param {Function} cb + * @param {boolean} [stack=false] + * @param {*} [context=this] + */ +listProto.filterSelf = function (dimensions, cb, stack, context) { + if (typeof dimensions === 'function') { + context = stack; + stack = cb; + cb = dimensions; + dimensions = []; + } + + dimensions = map( + normalizeDimensions(dimensions), this.getDimension, this + ); + + var newIndices = []; + var value = []; + var dimSize = dimensions.length; + var indices = this.indices; + + context = context || this; + + for (var i = 0; i < indices.length; i++) { + var keep; + // Simple optimization + if (!dimSize) { + keep = cb.call(context, i); + } + else if (dimSize === 1) { + keep = cb.call( + context, this.get(dimensions[0], i, stack), i + ); + } + else { + for (var k = 0; k < dimSize; k++) { + value[k] = this.get(dimensions[k], i, stack); + } + value[k] = i; + keep = cb.apply(context, value); + } + if (keep) { + newIndices.push(indices[i]); + } + } + + this.indices = newIndices; + + // Reset data extent + this._extent = {}; + + return this; +}; + +/** + * Data mapping to a plain array + * @param {string|Array.} [dimensions] + * @param {Function} cb + * @param {boolean} [stack=false] + * @param {*} [context=this] + * @return {Array} + */ +listProto.mapArray = function (dimensions, cb, stack, context) { + if (typeof dimensions === 'function') { + context = stack; + stack = cb; + cb = dimensions; + dimensions = []; + } + + var result = []; + this.each(dimensions, function () { + result.push(cb && cb.apply(this, arguments)); + }, stack, context); + return result; +}; + +function cloneListForMapAndSample(original, excludeDimensions) { + var allDimensions = original.dimensions; + var list = new List( + map(allDimensions, original.getDimensionInfo, original), + original.hostModel + ); + // FIXME If needs stackedOn, value may already been stacked + transferProperties(list, original); + + var storage = list._storage = {}; + var originalStorage = original._storage; + // Init storage + for (var i = 0; i < allDimensions.length; i++) { + var dim = allDimensions[i]; + var dimStore = originalStorage[dim]; + if (indexOf(excludeDimensions, dim) >= 0) { + storage[dim] = new dimStore.constructor( + originalStorage[dim].length + ); + } + else { + // Direct reference for other dimensions + storage[dim] = originalStorage[dim]; + } + } + return list; +} + +/** + * Data mapping to a new List with given dimensions + * @param {string|Array.} dimensions + * @param {Function} cb + * @param {boolean} [stack=false] + * @param {*} [context=this] + * @return {Array} + */ +listProto.map = function (dimensions, cb, stack, context) { + dimensions = map( + normalizeDimensions(dimensions), this.getDimension, this + ); + + var list = cloneListForMapAndSample(this, dimensions); + // Following properties are all immutable. + // So we can reference to the same value + var indices = list.indices = this.indices; + + var storage = list._storage; + + var tmpRetValue = []; + this.each(dimensions, function () { + var idx = arguments[arguments.length - 1]; + var retValue = cb && cb.apply(this, arguments); + if (retValue != null) { + // a number + if (typeof retValue === 'number') { + tmpRetValue[0] = retValue; + retValue = tmpRetValue; + } + for (var i = 0; i < retValue.length; i++) { + var dim = dimensions[i]; + var dimStore = storage[dim]; + var rawIdx = indices[idx]; + if (dimStore) { + dimStore[rawIdx] = retValue[i]; + } + } + } + }, stack, context); + + return list; +}; + +/** + * Large data down sampling on given dimension + * @param {string} dimension + * @param {number} rate + * @param {Function} sampleValue + * @param {Function} sampleIndex Sample index for name and id + */ +listProto.downSample = function (dimension, rate, sampleValue, sampleIndex) { + var list = cloneListForMapAndSample(this, [dimension]); + var storage = this._storage; + var targetStorage = list._storage; + + var originalIndices = this.indices; + var indices = list.indices = []; + + var frameValues = []; + var frameIndices = []; + var frameSize = Math.floor(1 / rate); + + var dimStore = targetStorage[dimension]; + var len = this.count(); + // Copy data from original data + for (var i = 0; i < storage[dimension].length; i++) { + targetStorage[dimension][i] = storage[dimension][i]; + } + for (var i = 0; i < len; i += frameSize) { + // Last frame + if (frameSize > len - i) { + frameSize = len - i; + frameValues.length = frameSize; + } + for (var k = 0; k < frameSize; k++) { + var idx = originalIndices[i + k]; + frameValues[k] = dimStore[idx]; + frameIndices[k] = idx; + } + var value = sampleValue(frameValues); + var idx = frameIndices[sampleIndex(frameValues, value) || 0]; + // Only write value on the filtered data + dimStore[idx] = value; + indices.push(idx); + } + + return list; +}; + +/** + * Get model of one data item. + * + * @param {number} idx + */ +// FIXME Model proxy ? +listProto.getItemModel = function (idx) { + var hostModel = this.hostModel; + idx = this.indices[idx]; + return new Model(this._rawData.getItem(idx), hostModel, hostModel && hostModel.ecModel); +}; + +/** + * Create a data differ + * @param {module:echarts/data/List} otherList + * @return {module:echarts/data/DataDiffer} + */ +listProto.diff = function (otherList) { + var idList = this._idList; + var otherIdList = otherList && otherList._idList; + var val; + // Use prefix to avoid index to be the same as otherIdList[idx], + // which will cause weird udpate animation. + var prefix = 'e\0\0'; + + return new DataDiffer( + otherList ? otherList.indices : [], + this.indices, + function (idx) { + return (val = otherIdList[idx]) != null ? val : prefix + idx; + }, + function (idx) { + return (val = idList[idx]) != null ? val : prefix + idx; + } + ); +}; +/** + * Get visual property. + * @param {string} key + */ +listProto.getVisual = function (key) { + var visual = this._visual; + return visual && visual[key]; +}; + +/** + * Set visual property + * @param {string|Object} key + * @param {*} [value] + * + * @example + * setVisual('color', color); + * setVisual({ + * 'color': color + * }); + */ +listProto.setVisual = function (key, val) { + if (isObject$4(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + this.setVisual(name, key[name]); + } + } + return; + } + this._visual = this._visual || {}; + this._visual[key] = val; +}; + +/** + * Set layout property. + * @param {string|Object} key + * @param {*} [val] + */ +listProto.setLayout = function (key, val) { + if (isObject$4(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + this.setLayout(name, key[name]); + } + } + return; + } + this._layout[key] = val; +}; + +/** + * Get layout property. + * @param {string} key. + * @return {*} + */ +listProto.getLayout = function (key) { + return this._layout[key]; +}; + +/** + * Get layout of single data item + * @param {number} idx + */ +listProto.getItemLayout = function (idx) { + return this._itemLayouts[idx]; +}; + +/** + * Set layout of single data item + * @param {number} idx + * @param {Object} layout + * @param {boolean=} [merge=false] + */ +listProto.setItemLayout = function (idx, layout, merge$$1) { + this._itemLayouts[idx] = merge$$1 + ? extend(this._itemLayouts[idx] || {}, layout) + : layout; +}; + +/** + * Clear all layout of single data item + */ +listProto.clearItemLayouts = function () { + this._itemLayouts.length = 0; +}; + +/** + * Get visual property of single data item + * @param {number} idx + * @param {string} key + * @param {boolean} [ignoreParent=false] + */ +listProto.getItemVisual = function (idx, key, ignoreParent) { + var itemVisual = this._itemVisuals[idx]; + var val = itemVisual && itemVisual[key]; + if (val == null && !ignoreParent) { + // Use global visual property + return this.getVisual(key); + } + return val; +}; + +/** + * Set visual property of single data item + * + * @param {number} idx + * @param {string|Object} key + * @param {*} [value] + * + * @example + * setItemVisual(0, 'color', color); + * setItemVisual(0, { + * 'color': color + * }); + */ +listProto.setItemVisual = function (idx, key, value) { + var itemVisual = this._itemVisuals[idx] || {}; + this._itemVisuals[idx] = itemVisual; + + if (isObject$4(key)) { + for (var name in key) { + if (key.hasOwnProperty(name)) { + itemVisual[name] = key[name]; + } + } + return; + } + itemVisual[key] = value; +}; + +/** + * Clear itemVisuals and list visual. + */ +listProto.clearAllVisual = function () { + this._visual = {}; + this._itemVisuals = []; +}; + +var setItemDataAndSeriesIndex = function (child) { + child.seriesIndex = this.seriesIndex; + child.dataIndex = this.dataIndex; + child.dataType = this.dataType; +}; +/** + * Set graphic element relative to data. It can be set as null + * @param {number} idx + * @param {module:zrender/Element} [el] + */ +listProto.setItemGraphicEl = function (idx, el) { + var hostModel = this.hostModel; + + if (el) { + // Add data index and series index for indexing the data by element + // Useful in tooltip + el.dataIndex = idx; + el.dataType = this.dataType; + el.seriesIndex = hostModel && hostModel.seriesIndex; + if (el.type === 'group') { + el.traverse(setItemDataAndSeriesIndex, el); + } + } + + this._graphicEls[idx] = el; +}; + +/** + * @param {number} idx + * @return {module:zrender/Element} + */ +listProto.getItemGraphicEl = function (idx) { + return this._graphicEls[idx]; +}; + +/** + * @param {Function} cb + * @param {*} context + */ +listProto.eachItemGraphicEl = function (cb, context) { + each$1(this._graphicEls, function (el, idx) { + if (el) { + cb && cb.call(context, el, idx); + } + }); +}; + +/** + * Shallow clone a new list except visual and layout properties, and graph elements. + * New list only change the indices. + */ +listProto.cloneShallow = function () { + var dimensionInfoList = map(this.dimensions, this.getDimensionInfo, this); + var list = new List(dimensionInfoList, this.hostModel); + + // FIXME + list._storage = this._storage; + + transferProperties(list, this); + + + // Clone will not change the data extent and indices + list.indices = this.indices.slice(); + + if (this._extent) { + list._extent = extend({}, this._extent); + } + + return list; +}; + +/** + * Wrap some method to add more feature + * @param {string} methodName + * @param {Function} injectFunction + */ +listProto.wrapMethod = function (methodName, injectFunction) { + var originalMethod = this[methodName]; + if (typeof originalMethod !== 'function') { + return; + } + this.__wrappedMethods = this.__wrappedMethods || []; + this.__wrappedMethods.push(methodName); + this[methodName] = function () { + var res = originalMethod.apply(this, arguments); + return injectFunction.apply(this, [res].concat(slice(arguments))); + }; +}; + +// Methods that create a new list based on this list should be listed here. +// Notice that those method should `RETURN` the new list. +listProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map']; +// Methods that change indices of this list should be listed here. +listProto.CHANGABLE_METHODS = ['filterSelf']; + +/** + * Complete dimensions by data (guess dimension). + */ + +var each$7 = each$1; +var isString$1 = isString; +var defaults$1 = defaults; + +var OTHER_DIMS = {tooltip: 1, label: 1, itemName: 1}; + +/** + * Complete the dimensions array, by user defined `dimension` and `encode`, + * and guessing from the data structure. + * If no 'value' dimension specified, the first no-named dimension will be + * named as 'value'. + * + * @param {Array.} sysDims Necessary dimensions, like ['x', 'y'], which + * provides not only dim template, but also default order. + * `name` of each item provides default coord name. + * [{dimsDef: []}, ...] can be specified to give names. + * @param {Array} data Data list. [[1, 2, 3], [2, 3, 4]]. + * @param {Object} [opt] + * @param {Array.} [opt.dimsDef] option.series.dimensions User defined dimensions + * For example: ['asdf', {name, type}, ...]. + * @param {Object} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3} + * @param {string} [opt.extraPrefix] Prefix of name when filling the left dimensions. + * @param {string} [opt.extraFromZero] If specified, extra dim names will be: + * extraPrefix + 0, extraPrefix + extraBaseIndex + 1 ... + * If not specified, extra dim names will be: + * extraPrefix, extraPrefix + 0, extraPrefix + 1 ... + * @param {number} [opt.dimCount] If not specified, guess by the first data item. + * @return {Array.} [{ + * name: string mandatory, + * coordDim: string mandatory, + * coordDimIndex: number mandatory, + * type: string optional, + * tooltipName: string optional, + * otherDims: { + * tooltip: number optional, + * label: number optional + * }, + * isExtraCoord: boolean true or undefined. + * other props ... + * }] + */ +function completeDimensions(sysDims, data, opt) { + data = data || []; + opt = opt || {}; + sysDims = (sysDims || []).slice(); + var dimsDef = (opt.dimsDef || []).slice(); + var encodeDef = createHashMap(opt.encodeDef); + var dataDimNameMap = createHashMap(); + var coordDimNameMap = createHashMap(); + // var valueCandidate; + var result = []; + + var dimCount = opt.dimCount; + if (dimCount == null) { + var value0 = retrieveValue(data[0]); + dimCount = Math.max( + isArray(value0) && value0.length || 1, + sysDims.length, + dimsDef.length + ); + each$7(sysDims, function (sysDimItem) { + var sysDimItemDimsDef = sysDimItem.dimsDef; + sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length)); + }); + } + + // Apply user defined dims (`name` and `type`) and init result. + for (var i = 0; i < dimCount; i++) { + var dimDefItem = isString$1(dimsDef[i]) ? {name: dimsDef[i]} : (dimsDef[i] || {}); + var userDimName = dimDefItem.name; + var resultItem = result[i] = {otherDims: {}}; + // Name will be applied later for avoiding duplication. + if (userDimName != null && dataDimNameMap.get(userDimName) == null) { + // Only if `series.dimensions` is defined in option, tooltipName + // will be set, and dimension will be diplayed vertically in + // tooltip by default. + resultItem.name = resultItem.tooltipName = userDimName; + dataDimNameMap.set(userDimName, i); + } + dimDefItem.type != null && (resultItem.type = dimDefItem.type); + } + + // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`. + encodeDef.each(function (dataDims, coordDim) { + dataDims = encodeDef.set(coordDim, normalizeToArray(dataDims).slice()); + each$7(dataDims, function (resultDimIdx, coordDimIndex) { + // The input resultDimIdx can be dim name or index. + isString$1(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx)); + if (resultDimIdx != null && resultDimIdx < dimCount) { + dataDims[coordDimIndex] = resultDimIdx; + applyDim(result[resultDimIdx], coordDim, coordDimIndex); + } + }); + }); + + // Apply templetes and default order from `sysDims`. + var availDimIdx = 0; + each$7(sysDims, function (sysDimItem, sysDimIndex) { + var coordDim; + var sysDimItem; + var sysDimItemDimsDef; + var sysDimItemOtherDims; + if (isString$1(sysDimItem)) { + coordDim = sysDimItem; + sysDimItem = {}; + } + else { + coordDim = sysDimItem.name; + sysDimItem = clone(sysDimItem); + // `coordDimIndex` should not be set directly. + sysDimItemDimsDef = sysDimItem.dimsDef; + sysDimItemOtherDims = sysDimItem.otherDims; + sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex + = sysDimItem.dimsDef = sysDimItem.otherDims = null; + } + + var dataDims = normalizeToArray(encodeDef.get(coordDim)); + // dimensions provides default dim sequences. + if (!dataDims.length) { + for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) { + while (availDimIdx < result.length && result[availDimIdx].coordDim != null) { + availDimIdx++; + } + availDimIdx < result.length && dataDims.push(availDimIdx++); + } + } + // Apply templates. + each$7(dataDims, function (resultDimIdx, coordDimIndex) { + var resultItem = result[resultDimIdx]; + applyDim(defaults$1(resultItem, sysDimItem), coordDim, coordDimIndex); + if (resultItem.name == null && sysDimItemDimsDef) { + resultItem.name = resultItem.tooltipName = sysDimItemDimsDef[coordDimIndex]; + } + sysDimItemOtherDims && defaults$1(resultItem.otherDims, sysDimItemOtherDims); + }); + }); + + // Make sure the first extra dim is 'value'. + var extra = opt.extraPrefix || 'value'; + + // Set dim `name` and other `coordDim` and other props. + for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) { + var resultItem = result[resultDimIdx] = result[resultDimIdx] || {}; + var coordDim = resultItem.coordDim; + + coordDim == null && ( + resultItem.coordDim = genName(extra, coordDimNameMap, opt.extraFromZero), + resultItem.coordDimIndex = 0, + resultItem.isExtraCoord = true + ); + + resultItem.name == null && (resultItem.name = genName( + resultItem.coordDim, + dataDimNameMap + )); + + resultItem.type == null && guessOrdinal(data, resultDimIdx) + && (resultItem.type = 'ordinal'); + } + + return result; + + function applyDim(resultItem, coordDim, coordDimIndex) { + if (OTHER_DIMS[coordDim]) { + resultItem.otherDims[coordDim] = coordDimIndex; + } + else { + resultItem.coordDim = coordDim; + resultItem.coordDimIndex = coordDimIndex; + coordDimNameMap.set(coordDim, true); + } + } + + function genName(name, map$$1, fromZero) { + if (fromZero || map$$1.get(name) != null) { + var i = 0; + while (map$$1.get(name + i) != null) { + i++; + } + name += i; + } + map$$1.set(name, true); + return name; + } +} + +// The rule should not be complex, otherwise user might not +// be able to known where the data is wrong. +var guessOrdinal = completeDimensions.guessOrdinal = function (data, dimIndex) { + for (var i = 0, len = data.length; i < len; i++) { + var value = retrieveValue(data[i]); + + if (!isArray(value)) { + return false; + } + + var value = value[dimIndex]; + // Consider usage convenience, '1', '2' will be treated as "number". + // `isFinit('')` get `true`. + if (value != null && isFinite(value) && value !== '') { + return false; + } + else if (isString$1(value) && value !== '-') { + return true; + } + } + return false; +}; + +function retrieveValue(o) { + return isArray(o) ? o : isObject(o) ? o.value: o; +} + +function firstDataNotNull(data) { + var i = 0; + while (i < data.length && data[i] == null) { + i++; + } + return data[i]; +} +function ifNeedCompleteOrdinalData(data) { + var sampleItem = firstDataNotNull(data); + return sampleItem != null + && !isArray(getDataItemValue(sampleItem)); +} + +/** + * Helper function to create a list from option data + */ +function createListFromArray(data, seriesModel, ecModel) { + // If data is undefined + data = data || []; + + if (__DEV__) { + if (!isArray(data)) { + throw new Error('Invalid data.'); + } + } + + var coordSysName = seriesModel.get('coordinateSystem'); + var creator = creators[coordSysName]; + var registeredCoordSys = CoordinateSystemManager.get(coordSysName); + var completeDimOpt = { + encodeDef: seriesModel.get('encode'), + dimsDef: seriesModel.get('dimensions') + }; + + // FIXME + var axesInfo = creator && creator(data, seriesModel, ecModel, completeDimOpt); + var dimensions = axesInfo && axesInfo.dimensions; + if (!dimensions) { + // Get dimensions from registered coordinate system + dimensions = (registeredCoordSys && ( + registeredCoordSys.getDimensionsInfo + ? registeredCoordSys.getDimensionsInfo() + : registeredCoordSys.dimensions.slice() + )) || ['x', 'y']; + dimensions = completeDimensions(dimensions, data, completeDimOpt); + } + + var categoryIndex = axesInfo ? axesInfo.categoryIndex : -1; + + var list = new List(dimensions, seriesModel); + + var nameList = createNameList(axesInfo, data); + + var categories = {}; + var dimValueGetter = (categoryIndex >= 0 && ifNeedCompleteOrdinalData(data)) + ? function (itemOpt, dimName, dataIndex, dimIndex) { + // If any dataItem is like { value: 10 } + if (isDataItemOption(itemOpt)) { + list.hasItemOption = true; + } + + // Use dataIndex as ordinal value in categoryAxis + return dimIndex === categoryIndex + ? dataIndex + : converDataValue(getDataItemValue(itemOpt), dimensions[dimIndex]); + } + : function (itemOpt, dimName, dataIndex, dimIndex) { + var value = getDataItemValue(itemOpt); + var val = converDataValue(value && value[dimIndex], dimensions[dimIndex]); + // If any dataItem is like { value: 10 } + if (isDataItemOption(itemOpt)) { + list.hasItemOption = true; + } + + var categoryAxesModels = axesInfo && axesInfo.categoryAxesModels; + if (categoryAxesModels && categoryAxesModels[dimName]) { + // If given value is a category string + if (typeof val === 'string') { + // Lazy get categories + categories[dimName] = categories[dimName] + || categoryAxesModels[dimName].getCategories(); + val = indexOf(categories[dimName], val); + if (val < 0 && !isNaN(val)) { + // In case some one write '1', '2' istead of 1, 2 + val = +val; + } + } + } + return val; + }; + + list.hasItemOption = false; + list.initData(data, nameList, dimValueGetter); + + return list; +} + +function isStackable(axisType) { + return axisType !== 'category' && axisType !== 'time'; +} + +function getDimTypeByAxis(axisType) { + return axisType === 'category' + ? 'ordinal' + : axisType === 'time' + ? 'time' + : 'float'; +} + +/** + * Creaters for each coord system. + */ +var creators = { + + cartesian2d: function (data, seriesModel, ecModel, completeDimOpt) { + + var axesModels = map(['xAxis', 'yAxis'], function (name) { + return ecModel.queryComponents({ + mainType: name, + index: seriesModel.get(name + 'Index'), + id: seriesModel.get(name + 'Id') + })[0]; + }); + var xAxisModel = axesModels[0]; + var yAxisModel = axesModels[1]; + + if (__DEV__) { + if (!xAxisModel) { + throw new Error('xAxis "' + retrieve( + seriesModel.get('xAxisIndex'), + seriesModel.get('xAxisId'), + 0 + ) + '" not found'); + } + if (!yAxisModel) { + throw new Error('yAxis "' + retrieve( + seriesModel.get('xAxisIndex'), + seriesModel.get('yAxisId'), + 0 + ) + '" not found'); + } + } + + var xAxisType = xAxisModel.get('type'); + var yAxisType = yAxisModel.get('type'); + + var dimensions = [ + { + name: 'x', + type: getDimTypeByAxis(xAxisType), + stackable: isStackable(xAxisType) + }, + { + name: 'y', + // If two category axes + type: getDimTypeByAxis(yAxisType), + stackable: isStackable(yAxisType) + } + ]; + + var isXAxisCateogry = xAxisType === 'category'; + var isYAxisCategory = yAxisType === 'category'; + + dimensions = completeDimensions(dimensions, data, completeDimOpt); + + var categoryAxesModels = {}; + if (isXAxisCateogry) { + categoryAxesModels.x = xAxisModel; + } + if (isYAxisCategory) { + categoryAxesModels.y = yAxisModel; + } + return { + dimensions: dimensions, + categoryIndex: isXAxisCateogry ? 0 : (isYAxisCategory ? 1 : -1), + categoryAxesModels: categoryAxesModels + }; + }, + + singleAxis: function (data, seriesModel, ecModel, completeDimOpt) { + + var singleAxisModel = ecModel.queryComponents({ + mainType: 'singleAxis', + index: seriesModel.get('singleAxisIndex'), + id: seriesModel.get('singleAxisId') + })[0]; + + if (__DEV__) { + if (!singleAxisModel) { + throw new Error('singleAxis should be specified.'); + } + } + + var singleAxisType = singleAxisModel.get('type'); + var isCategory = singleAxisType === 'category'; + + var dimensions = [{ + name: 'single', + type: getDimTypeByAxis(singleAxisType), + stackable: isStackable(singleAxisType) + }]; + + dimensions = completeDimensions(dimensions, data, completeDimOpt); + + var categoryAxesModels = {}; + if (isCategory) { + categoryAxesModels.single = singleAxisModel; + } + + return { + dimensions: dimensions, + categoryIndex: isCategory ? 0 : -1, + categoryAxesModels: categoryAxesModels + }; + }, + + polar: function (data, seriesModel, ecModel, completeDimOpt) { + var polarModel = ecModel.queryComponents({ + mainType: 'polar', + index: seriesModel.get('polarIndex'), + id: seriesModel.get('polarId') + })[0]; + + var angleAxisModel = polarModel.findAxisModel('angleAxis'); + var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); + + if (__DEV__) { + if (!angleAxisModel) { + throw new Error('angleAxis option not found'); + } + if (!radiusAxisModel) { + throw new Error('radiusAxis option not found'); + } + } + + var radiusAxisType = radiusAxisModel.get('type'); + var angleAxisType = angleAxisModel.get('type'); + + var dimensions = [ + { + name: 'radius', + type: getDimTypeByAxis(radiusAxisType), + stackable: isStackable(radiusAxisType) + }, + { + name: 'angle', + type: getDimTypeByAxis(angleAxisType), + stackable: isStackable(angleAxisType) + } + ]; + var isAngleAxisCateogry = angleAxisType === 'category'; + var isRadiusAxisCateogry = radiusAxisType === 'category'; + + dimensions = completeDimensions(dimensions, data, completeDimOpt); + + var categoryAxesModels = {}; + if (isRadiusAxisCateogry) { + categoryAxesModels.radius = radiusAxisModel; + } + if (isAngleAxisCateogry) { + categoryAxesModels.angle = angleAxisModel; + } + return { + dimensions: dimensions, + categoryIndex: isAngleAxisCateogry ? 1 : (isRadiusAxisCateogry ? 0 : -1), + categoryAxesModels: categoryAxesModels + }; + }, + + geo: function (data, seriesModel, ecModel, completeDimOpt) { + // TODO Region + // 多个散点图系列在同一个地区的时候 + return { + dimensions: completeDimensions([ + {name: 'lng'}, + {name: 'lat'} + ], data, completeDimOpt) + }; + } +}; + +function createNameList(result, data) { + var nameList = []; + + var categoryDim = result && result.dimensions[result.categoryIndex]; + var categoryAxisModel; + if (categoryDim) { + categoryAxisModel = result.categoryAxesModels[categoryDim.name]; + } + + if (categoryAxisModel) { + // FIXME Two category axis + var categories = categoryAxisModel.getCategories(); + if (categories) { + var dataLen = data.length; + // Ordered data is given explicitly like + // [[3, 0.2], [1, 0.3], [2, 0.15]] + // or given scatter data, + // pick the category + if (isArray(data[0]) && data[0].length > 1) { + nameList = []; + for (var i = 0; i < dataLen; i++) { + nameList[i] = categories[data[i][result.categoryIndex || 0]]; + } + } + else { + nameList = categories.slice(0); + } + } + } + + return nameList; +} + +/** + * // Scale class management + * @module echarts/scale/Scale + */ + +/** + * @param {Object} [setting] + */ +function Scale(setting) { + this._setting = setting || {}; + + /** + * Extent + * @type {Array.} + * @protected + */ + this._extent = [Infinity, -Infinity]; + + /** + * Step is calculated in adjustExtent + * @type {Array.} + * @protected + */ + this._interval = 0; + + this.init && this.init.apply(this, arguments); +} + +var scaleProto$1 = Scale.prototype; + +/** + * Parse input val to valid inner number. + * @param {*} val + * @return {number} + */ +scaleProto$1.parse = function (val) { + // Notice: This would be a trap here, If the implementation + // of this method depends on extent, and this method is used + // before extent set (like in dataZoom), it would be wrong. + // Nevertheless, parse does not depend on extent generally. + return val; +}; + +scaleProto$1.getSetting = function (name) { + return this._setting[name]; +}; + +scaleProto$1.contain = function (val) { + var extent = this._extent; + return val >= extent[0] && val <= extent[1]; +}; + +/** + * Normalize value to linear [0, 1], return 0.5 if extent span is 0 + * @param {number} val + * @return {number} + */ +scaleProto$1.normalize = function (val) { + var extent = this._extent; + if (extent[1] === extent[0]) { + return 0.5; + } + return (val - extent[0]) / (extent[1] - extent[0]); +}; + +/** + * Scale normalized value + * @param {number} val + * @return {number} + */ +scaleProto$1.scale = function (val) { + var extent = this._extent; + return val * (extent[1] - extent[0]) + extent[0]; +}; + +/** + * Set extent from data + * @param {Array.} other + */ +scaleProto$1.unionExtent = function (other) { + var extent = this._extent; + other[0] < extent[0] && (extent[0] = other[0]); + other[1] > extent[1] && (extent[1] = other[1]); + // not setExtent because in log axis it may transformed to power + // this.setExtent(extent[0], extent[1]); +}; + +/** + * Set extent from data + * @param {module:echarts/data/List} data + * @param {string} dim + */ +scaleProto$1.unionExtentFromData = function (data, dim) { + this.unionExtent(data.getDataExtent(dim, true)); +}; + +/** + * Get extent + * @return {Array.} + */ +scaleProto$1.getExtent = function () { + return this._extent.slice(); +}; + +/** + * Set extent + * @param {number} start + * @param {number} end + */ +scaleProto$1.setExtent = function (start, end) { + var thisExtent = this._extent; + if (!isNaN(start)) { + thisExtent[0] = start; + } + if (!isNaN(end)) { + thisExtent[1] = end; + } +}; + +/** + * @return {Array.} + */ +scaleProto$1.getTicksLabels = function () { + var labels = []; + var ticks = this.getTicks(); + for (var i = 0; i < ticks.length; i++) { + labels.push(this.getLabel(ticks[i])); + } + return labels; +}; + +/** + * When axis extent depends on data and no data exists, + * axis ticks should not be drawn, which is named 'blank'. + */ +scaleProto$1.isBlank = function () { + return this._isBlank; +}, + +/** + * When axis extent depends on data and no data exists, + * axis ticks should not be drawn, which is named 'blank'. + */ +scaleProto$1.setBlank = function (isBlank) { + this._isBlank = isBlank; +}; + + +enableClassExtend(Scale); +enableClassManagement(Scale, { + registerWhenExtend: true +}); + +/** + * Linear continuous scale + * @module echarts/coord/scale/Ordinal + * + * http://en.wikipedia.org/wiki/Level_of_measurement + */ + +// FIXME only one data + +var scaleProto = Scale.prototype; + +var OrdinalScale = Scale.extend({ + + type: 'ordinal', + + init: function (data, extent) { + this._data = data; + this._extent = extent || [0, data.length - 1]; + }, + + parse: function (val) { + return typeof val === 'string' + ? indexOf(this._data, val) + // val might be float. + : Math.round(val); + }, + + contain: function (rank) { + rank = this.parse(rank); + return scaleProto.contain.call(this, rank) + && this._data[rank] != null; + }, + + /** + * Normalize given rank or name to linear [0, 1] + * @param {number|string} [val] + * @return {number} + */ + normalize: function (val) { + return scaleProto.normalize.call(this, this.parse(val)); + }, + + scale: function (val) { + return Math.round(scaleProto.scale.call(this, val)); + }, + + /** + * @return {Array} + */ + getTicks: function () { + var ticks = []; + var extent = this._extent; + var rank = extent[0]; + + while (rank <= extent[1]) { + ticks.push(rank); + rank++; + } + + return ticks; + }, + + /** + * Get item on rank n + * @param {number} n + * @return {string} + */ + getLabel: function (n) { + return this._data[n]; + }, + + /** + * @return {number} + */ + count: function () { + return this._extent[1] - this._extent[0] + 1; + }, + + /** + * @override + */ + unionExtentFromData: function (data, dim) { + this.unionExtent(data.getDataExtent(dim, false)); + }, + + niceTicks: noop, + niceExtent: noop +}); + +/** + * @return {module:echarts/scale/Time} + */ +OrdinalScale.create = function () { + return new OrdinalScale(); +}; + +/** + * For testable. + */ + +var roundNumber$1 = round; + +/** + * @param {Array.} extent Both extent[0] and extent[1] should be valid number. + * Should be extent[0] < extent[1]. + * @param {number} splitNumber splitNumber should be >= 1. + * @param {number} [minInterval] + * @param {number} [maxInterval] + * @return {Object} {interval, intervalPrecision, niceTickExtent} + */ +function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) { + var result = {}; + var span = extent[1] - extent[0]; + + var interval = result.interval = nice(span / splitNumber, true); + if (minInterval != null && interval < minInterval) { + interval = result.interval = minInterval; + } + if (maxInterval != null && interval > maxInterval) { + interval = result.interval = maxInterval; + } + // Tow more digital for tick. + var precision = result.intervalPrecision = getIntervalPrecision(interval); + // Niced extent inside original extent + var niceTickExtent = result.niceTickExtent = [ + roundNumber$1(Math.ceil(extent[0] / interval) * interval, precision), + roundNumber$1(Math.floor(extent[1] / interval) * interval, precision) + ]; + + fixExtent(niceTickExtent, extent); + + return result; +} + +/** + * @param {number} interval + * @return {number} interval precision + */ +function getIntervalPrecision(interval) { + // Tow more digital for tick. + return getPrecisionSafe(interval) + 2; +} + +function clamp(niceTickExtent, idx, extent) { + niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]); +} + +// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent. +function fixExtent(niceTickExtent, extent) { + !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]); + !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]); + clamp(niceTickExtent, 0, extent); + clamp(niceTickExtent, 1, extent); + if (niceTickExtent[0] > niceTickExtent[1]) { + niceTickExtent[0] = niceTickExtent[1]; + } +} + +function intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) { + var ticks = []; + + // If interval is 0, return []; + if (!interval) { + return ticks; + } + + // Consider this case: using dataZoom toolbox, zoom and zoom. + var safeLimit = 10000; + + if (extent[0] < niceTickExtent[0]) { + ticks.push(extent[0]); + } + var tick = niceTickExtent[0]; + + while (tick <= niceTickExtent[1]) { + ticks.push(tick); + // Avoid rounding error + tick = roundNumber$1(tick + interval, intervalPrecision); + if (tick === ticks[ticks.length - 1]) { + // Consider out of safe float point, e.g., + // -3711126.9907707 + 2e-10 === -3711126.9907707 + break; + } + if (ticks.length > safeLimit) { + return []; + } + } + // Consider this case: the last item of ticks is smaller + // than niceTickExtent[1] and niceTickExtent[1] === extent[1]. + if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) { + ticks.push(extent[1]); + } + + return ticks; +} + +/** + * Interval scale + * @module echarts/scale/Interval + */ + + +var roundNumber = round; + +/** + * @alias module:echarts/coord/scale/Interval + * @constructor + */ +var IntervalScale = Scale.extend({ + + type: 'interval', + + _interval: 0, + + _intervalPrecision: 2, + + setExtent: function (start, end) { + var thisExtent = this._extent; + //start,end may be a Number like '25',so... + if (!isNaN(start)) { + thisExtent[0] = parseFloat(start); + } + if (!isNaN(end)) { + thisExtent[1] = parseFloat(end); + } + }, + + unionExtent: function (other) { + var extent = this._extent; + other[0] < extent[0] && (extent[0] = other[0]); + other[1] > extent[1] && (extent[1] = other[1]); + + // unionExtent may called by it's sub classes + IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]); + }, + /** + * Get interval + */ + getInterval: function () { + return this._interval; + }, + + /** + * Set interval + */ + setInterval: function (interval) { + this._interval = interval; + // Dropped auto calculated niceExtent and use user setted extent + // We assume user wan't to set both interval, min, max to get a better result + this._niceExtent = this._extent.slice(); + + this._intervalPrecision = getIntervalPrecision(interval); + }, + + /** + * @return {Array.} + */ + getTicks: function () { + return intervalScaleGetTicks( + this._interval, this._extent, this._niceExtent, this._intervalPrecision + ); + }, + + /** + * @return {Array.} + */ + getTicksLabels: function () { + var labels = []; + var ticks = this.getTicks(); + for (var i = 0; i < ticks.length; i++) { + labels.push(this.getLabel(ticks[i])); + } + return labels; + }, + + /** + * @param {number} data + * @param {Object} [opt] + * @param {number|string} [opt.precision] If 'auto', use nice presision. + * @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2. + * @return {string} + */ + getLabel: function (data, opt) { + if (data == null) { + return ''; + } + + var precision = opt && opt.precision; + + if (precision == null) { + precision = getPrecisionSafe(data) || 0; + } + else if (precision === 'auto') { + // Should be more precise then tick. + precision = this._intervalPrecision; + } + + // (1) If `precision` is set, 12.005 should be display as '12.00500'. + // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'. + data = roundNumber(data, precision, true); + + return addCommas(data); + }, + + /** + * Update interval and extent of intervals for nice ticks + * + * @param {number} [splitNumber = 5] Desired number of ticks + * @param {number} [minInterval] + * @param {number} [maxInterval] + */ + niceTicks: function (splitNumber, minInterval, maxInterval) { + splitNumber = splitNumber || 5; + var extent = this._extent; + var span = extent[1] - extent[0]; + if (!isFinite(span)) { + return; + } + // User may set axis min 0 and data are all negative + // FIXME If it needs to reverse ? + if (span < 0) { + span = -span; + extent.reverse(); + } + + var result = intervalScaleNiceTicks( + extent, splitNumber, minInterval, maxInterval + ); + + this._intervalPrecision = result.intervalPrecision; + this._interval = result.interval; + this._niceExtent = result.niceTickExtent; + }, + + /** + * Nice extent. + * @param {Object} opt + * @param {number} [opt.splitNumber = 5] Given approx tick number + * @param {boolean} [opt.fixMin=false] + * @param {boolean} [opt.fixMax=false] + * @param {boolean} [opt.minInterval] + * @param {boolean} [opt.maxInterval] + */ + niceExtent: function (opt) { + var extent = this._extent; + // If extent start and end are same, expand them + if (extent[0] === extent[1]) { + if (extent[0] !== 0) { + // Expand extent + var expandSize = extent[0]; + // In the fowllowing case + // Axis has been fixed max 100 + // Plus data are all 100 and axis extent are [100, 100]. + // Extend to the both side will cause expanded max is larger than fixed max. + // So only expand to the smaller side. + if (!opt.fixMax) { + extent[1] += expandSize / 2; + extent[0] -= expandSize / 2; + } + else { + extent[0] -= expandSize / 2; + } + } + else { + extent[1] = 1; + } + } + var span = extent[1] - extent[0]; + // If there are no data and extent are [Infinity, -Infinity] + if (!isFinite(span)) { + extent[0] = 0; + extent[1] = 1; + } + + this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); + + // var extent = this._extent; + var interval = this._interval; + + if (!opt.fixMin) { + extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval); + } + if (!opt.fixMax) { + extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval); + } + } +}); + +/** + * @return {module:echarts/scale/Time} + */ +IntervalScale.create = function () { + return new IntervalScale(); +}; + +// [About UTC and local time zone]: +// In most cases, `number.parseDate` will treat input data string as local time +// (except time zone is specified in time string). And `format.formateTime` returns +// local time by default. option.useUTC is false by default. This design have +// concidered these common case: +// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed +// in local time by default. +// (2) By default, the input data string (e.g., '2011-01-02') should be displayed +// as its original time, without any time difference. + +var intervalScaleProto = IntervalScale.prototype; + +var mathCeil = Math.ceil; +var mathFloor = Math.floor; +var ONE_SECOND = 1000; +var ONE_MINUTE = ONE_SECOND * 60; +var ONE_HOUR = ONE_MINUTE * 60; +var ONE_DAY = ONE_HOUR * 24; + +// FIXME 公用? +var bisect = function (a, x, lo, hi) { + while (lo < hi) { + var mid = lo + hi >>> 1; + if (a[mid][1] < x) { + lo = mid + 1; + } + else { + hi = mid; + } + } + return lo; +}; + +/** + * @alias module:echarts/coord/scale/Time + * @constructor + */ +var TimeScale = IntervalScale.extend({ + type: 'time', + + /** + * @override + */ + getLabel: function (val) { + var stepLvl = this._stepLvl; + + var date = new Date(val); + + return formatTime(stepLvl[0], date, this.getSetting('useUTC')); + }, + + /** + * @override + */ + niceExtent: function (opt) { + var extent = this._extent; + // If extent start and end are same, expand them + if (extent[0] === extent[1]) { + // Expand extent + extent[0] -= ONE_DAY; + extent[1] += ONE_DAY; + } + // If there are no data and extent are [Infinity, -Infinity] + if (extent[1] === -Infinity && extent[0] === Infinity) { + var d = new Date(); + extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate()); + extent[0] = extent[1] - ONE_DAY; + } + + this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); + + // var extent = this._extent; + var interval = this._interval; + + if (!opt.fixMin) { + extent[0] = round(mathFloor(extent[0] / interval) * interval); + } + if (!opt.fixMax) { + extent[1] = round(mathCeil(extent[1] / interval) * interval); + } + }, + + /** + * @override + */ + niceTicks: function (approxTickNum, minInterval, maxInterval) { + approxTickNum = approxTickNum || 10; + + var extent = this._extent; + var span = extent[1] - extent[0]; + var approxInterval = span / approxTickNum; + + if (minInterval != null && approxInterval < minInterval) { + approxInterval = minInterval; + } + if (maxInterval != null && approxInterval > maxInterval) { + approxInterval = maxInterval; + } + + var scaleLevelsLen = scaleLevels.length; + var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen); + + var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)]; + var interval = level[1]; + // Same with interval scale if span is much larger than 1 year + if (level[0] === 'year') { + var yearSpan = span / interval; + + // From "Nice Numbers for Graph Labels" of Graphic Gems + // var niceYearSpan = numberUtil.nice(yearSpan, false); + var yearStep = nice(yearSpan / approxTickNum, true); + + interval *= yearStep; + } + + var timezoneOffset = this.getSetting('useUTC') + ? 0 : (new Date(+extent[0] || +extent[1])).getTimezoneOffset() * 60 * 1000; + var niceExtent = [ + Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset), + Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset) + ]; + + fixExtent(niceExtent, extent); + + this._stepLvl = level; + // Interval will be used in getTicks + this._interval = interval; + this._niceExtent = niceExtent; + }, + + parse: function (val) { + // val might be float. + return +parseDate(val); + } +}); + +each$1(['contain', 'normalize'], function (methodName) { + TimeScale.prototype[methodName] = function (val) { + return intervalScaleProto[methodName].call(this, this.parse(val)); + }; +}); + +// Steps from d3 +var scaleLevels = [ + // Format interval + ['hh:mm:ss', ONE_SECOND], // 1s + ['hh:mm:ss', ONE_SECOND * 5], // 5s + ['hh:mm:ss', ONE_SECOND * 10], // 10s + ['hh:mm:ss', ONE_SECOND * 15], // 15s + ['hh:mm:ss', ONE_SECOND * 30], // 30s + ['hh:mm\nMM-dd', ONE_MINUTE], // 1m + ['hh:mm\nMM-dd', ONE_MINUTE * 5], // 5m + ['hh:mm\nMM-dd', ONE_MINUTE * 10], // 10m + ['hh:mm\nMM-dd', ONE_MINUTE * 15], // 15m + ['hh:mm\nMM-dd', ONE_MINUTE * 30], // 30m + ['hh:mm\nMM-dd', ONE_HOUR], // 1h + ['hh:mm\nMM-dd', ONE_HOUR * 2], // 2h + ['hh:mm\nMM-dd', ONE_HOUR * 6], // 6h + ['hh:mm\nMM-dd', ONE_HOUR * 12], // 12h + ['MM-dd\nyyyy', ONE_DAY], // 1d + ['MM-dd\nyyyy', ONE_DAY * 2], // 2d + ['MM-dd\nyyyy', ONE_DAY * 3], // 3d + ['MM-dd\nyyyy', ONE_DAY * 4], // 4d + ['MM-dd\nyyyy', ONE_DAY * 5], // 5d + ['MM-dd\nyyyy', ONE_DAY * 6], // 6d + ['week', ONE_DAY * 7], // 7d + ['MM-dd\nyyyy', ONE_DAY * 10], // 10d + ['week', ONE_DAY * 14], // 2w + ['week', ONE_DAY * 21], // 3w + ['month', ONE_DAY * 31], // 1M + ['week', ONE_DAY * 42], // 6w + ['month', ONE_DAY * 62], // 2M + ['week', ONE_DAY * 42], // 10w + ['quarter', ONE_DAY * 380 / 4], // 3M + ['month', ONE_DAY * 31 * 4], // 4M + ['month', ONE_DAY * 31 * 5], // 5M + ['half-year', ONE_DAY * 380 / 2], // 6M + ['month', ONE_DAY * 31 * 8], // 8M + ['month', ONE_DAY * 31 * 10], // 10M + ['year', ONE_DAY * 380] // 1Y +]; + +/** + * @param {module:echarts/model/Model} + * @return {module:echarts/scale/Time} + */ +TimeScale.create = function (model) { + return new TimeScale({useUTC: model.ecModel.get('useUTC')}); +}; + +/** + * Log scale + * @module echarts/scale/Log + */ + +// Use some method of IntervalScale +var scaleProto$2 = Scale.prototype; +var intervalScaleProto$1 = IntervalScale.prototype; + +var getPrecisionSafe$1 = getPrecisionSafe; +var roundingErrorFix = round; + +var mathFloor$1 = Math.floor; +var mathCeil$1 = Math.ceil; +var mathPow$1 = Math.pow; + +var mathLog = Math.log; + +var LogScale = Scale.extend({ + + type: 'log', + + base: 10, + + $constructor: function () { + Scale.apply(this, arguments); + this._originalScale = new IntervalScale(); + }, + + /** + * @return {Array.} + */ + getTicks: function () { + var originalScale = this._originalScale; + var extent = this._extent; + var originalExtent = originalScale.getExtent(); + + return map(intervalScaleProto$1.getTicks.call(this), function (val) { + var powVal = round(mathPow$1(this.base, val)); + + // Fix #4158 + powVal = (val === extent[0] && originalScale.__fixMin) + ? fixRoundingError(powVal, originalExtent[0]) + : powVal; + powVal = (val === extent[1] && originalScale.__fixMax) + ? fixRoundingError(powVal, originalExtent[1]) + : powVal; + + return powVal; + }, this); + }, + + /** + * @param {number} val + * @return {string} + */ + getLabel: intervalScaleProto$1.getLabel, + + /** + * @param {number} val + * @return {number} + */ + scale: function (val) { + val = scaleProto$2.scale.call(this, val); + return mathPow$1(this.base, val); + }, + + /** + * @param {number} start + * @param {number} end + */ + setExtent: function (start, end) { + var base = this.base; + start = mathLog(start) / mathLog(base); + end = mathLog(end) / mathLog(base); + intervalScaleProto$1.setExtent.call(this, start, end); + }, + + /** + * @return {number} end + */ + getExtent: function () { + var base = this.base; + var extent = scaleProto$2.getExtent.call(this); + extent[0] = mathPow$1(base, extent[0]); + extent[1] = mathPow$1(base, extent[1]); + + // Fix #4158 + var originalScale = this._originalScale; + var originalExtent = originalScale.getExtent(); + originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0])); + originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1])); + + return extent; + }, + + /** + * @param {Array.} extent + */ + unionExtent: function (extent) { + this._originalScale.unionExtent(extent); + + var base = this.base; + extent[0] = mathLog(extent[0]) / mathLog(base); + extent[1] = mathLog(extent[1]) / mathLog(base); + scaleProto$2.unionExtent.call(this, extent); + }, + + /** + * @override + */ + unionExtentFromData: function (data, dim) { + this.unionExtent(data.getDataExtent(dim, true, function (val) { + return val > 0; + })); + }, + + /** + * Update interval and extent of intervals for nice ticks + * @param {number} [approxTickNum = 10] Given approx tick number + */ + niceTicks: function (approxTickNum) { + approxTickNum = approxTickNum || 10; + var extent = this._extent; + var span = extent[1] - extent[0]; + if (span === Infinity || span <= 0) { + return; + } + + var interval = quantity(span); + var err = approxTickNum / span * interval; + + // Filter ticks to get closer to the desired count. + if (err <= 0.5) { + interval *= 10; + } + + // Interval should be integer + while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) { + interval *= 10; + } + + var niceExtent = [ + round(mathCeil$1(extent[0] / interval) * interval), + round(mathFloor$1(extent[1] / interval) * interval) + ]; + + this._interval = interval; + this._niceExtent = niceExtent; + }, + + /** + * Nice extent. + * @override + */ + niceExtent: function (opt) { + intervalScaleProto$1.niceExtent.call(this, opt); + + var originalScale = this._originalScale; + originalScale.__fixMin = opt.fixMin; + originalScale.__fixMax = opt.fixMax; + } + +}); + +each$1(['contain', 'normalize'], function (methodName) { + LogScale.prototype[methodName] = function (val) { + val = mathLog(val) / mathLog(this.base); + return scaleProto$2[methodName].call(this, val); + }; +}); + +LogScale.create = function () { + return new LogScale(); +}; + +function fixRoundingError(val, originalVal) { + return roundingErrorFix(val, getPrecisionSafe$1(originalVal)); +} + +/** + * Get axis scale extent before niced. + * Item of returned array can only be number (including Infinity and NaN). + */ +function getScaleExtent(scale, model) { + var scaleType = scale.type; + + var min = model.getMin(); + var max = model.getMax(); + var fixMin = min != null; + var fixMax = max != null; + var originalExtent = scale.getExtent(); + + var axisDataLen; + var boundaryGap; + var span; + if (scaleType === 'ordinal') { + axisDataLen = (model.get('data') || []).length; + } + else { + boundaryGap = model.get('boundaryGap'); + if (!isArray(boundaryGap)) { + boundaryGap = [boundaryGap || 0, boundaryGap || 0]; + } + if (typeof boundaryGap[0] === 'boolean') { + if (__DEV__) { + console.warn('Boolean type for boundaryGap is only ' + + 'allowed for ordinal axis. Please use string in ' + + 'percentage instead, e.g., "20%". Currently, ' + + 'boundaryGap is set to be 0.'); + } + boundaryGap = [0, 0]; + } + boundaryGap[0] = parsePercent$1(boundaryGap[0], 1); + boundaryGap[1] = parsePercent$1(boundaryGap[1], 1); + span = (originalExtent[1] - originalExtent[0]) + || Math.abs(originalExtent[0]); + } + + // Notice: When min/max is not set (that is, when there are null/undefined, + // which is the most common case), these cases should be ensured: + // (1) For 'ordinal', show all axis.data. + // (2) For others: + // + `boundaryGap` is applied (if min/max set, boundaryGap is + // disabled). + // + If `needCrossZero`, min/max should be zero, otherwise, min/max should + // be the result that originalExtent enlarged by boundaryGap. + // (3) If no data, it should be ensured that `scale.setBlank` is set. + + // FIXME + // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used? + // (2) When `needCrossZero` and all data is positive/negative, should it be ensured + // that the results processed by boundaryGap are positive/negative? + + if (min == null) { + min = scaleType === 'ordinal' + ? (axisDataLen ? 0 : NaN) + : originalExtent[0] - boundaryGap[0] * span; + } + if (max == null) { + max = scaleType === 'ordinal' + ? (axisDataLen ? axisDataLen - 1 : NaN) + : originalExtent[1] + boundaryGap[1] * span; + } + + if (min === 'dataMin') { + min = originalExtent[0]; + } + else if (typeof min === 'function') { + min = min({ + min: originalExtent[0], + max: originalExtent[1] + }); + } + + if (max === 'dataMax') { + max = originalExtent[1]; + } + else if (typeof max === 'function') { + max = max({ + min: originalExtent[0], + max: originalExtent[1] + }); + } + + (min == null || !isFinite(min)) && (min = NaN); + (max == null || !isFinite(max)) && (max = NaN); + + scale.setBlank(eqNaN(min) || eqNaN(max)); + + // Evaluate if axis needs cross zero + if (model.getNeedCrossZero()) { + // Axis is over zero and min is not set + if (min > 0 && max > 0 && !fixMin) { + min = 0; + } + // Axis is under zero and max is not set + if (min < 0 && max < 0 && !fixMax) { + max = 0; + } + } + + return [min, max]; +} + +function niceScaleExtent(scale, model) { + var extent = getScaleExtent(scale, model); + var fixMin = model.getMin() != null; + var fixMax = model.getMax() != null; + var splitNumber = model.get('splitNumber'); + + if (scale.type === 'log') { + scale.base = model.get('logBase'); + } + + var scaleType = scale.type; + scale.setExtent(extent[0], extent[1]); + scale.niceExtent({ + splitNumber: splitNumber, + fixMin: fixMin, + fixMax: fixMax, + minInterval: (scaleType === 'interval' || scaleType === 'time') + ? model.get('minInterval') : null, + maxInterval: (scaleType === 'interval' || scaleType === 'time') + ? model.get('maxInterval') : null + }); + + // If some one specified the min, max. And the default calculated interval + // is not good enough. He can specify the interval. It is often appeared + // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard + // to be 60. + // FIXME + var interval = model.get('interval'); + if (interval != null) { + scale.setInterval && scale.setInterval(interval); + } +} + +/** + * @param {module:echarts/model/Model} model + * @param {string} [axisType] Default retrieve from model.type + * @return {module:echarts/scale/*} + */ +function createScaleByModel(model, axisType) { + axisType = axisType || model.get('type'); + if (axisType) { + switch (axisType) { + // Buildin scale + case 'category': + return new OrdinalScale( + model.getCategories(), [Infinity, -Infinity] + ); + case 'value': + return new IntervalScale(); + // Extended scale, like time and log + default: + return (Scale.getClass(axisType) || IntervalScale).create(model); + } + } +} + +/** + * Check if the axis corss 0 + */ +function ifAxisCrossZero(axis) { + var dataExtent = axis.scale.getExtent(); + var min = dataExtent[0]; + var max = dataExtent[1]; + return !((min > 0 && max > 0) || (min < 0 && max < 0)); +} + +/** + * @param {Array.} tickCoords In axis self coordinate. + * @param {Array.} labels + * @param {string} font + * @param {number} axisRotate 0: towards right horizontally, clock-wise is negative. + * @param {number} [labelRotate=0] 0: towards right horizontally, clock-wise is negative. + * @return {number} + */ +function getAxisLabelInterval(tickCoords, labels, font, axisRotate, labelRotate) { + var textSpaceTakenRect; + var autoLabelInterval = 0; + var accumulatedLabelInterval = 0; + var rotation = (axisRotate - labelRotate) / 180 * Math.PI; + + var step = 1; + if (labels.length > 40) { + // Simple optimization for large amount of labels + step = Math.floor(labels.length / 40); + } + + for (var i = 0; i < tickCoords.length; i += step) { + var tickCoord = tickCoords[i]; + + // Not precise, do not consider align and vertical align + // and each distance from axis line yet. + var rect = getBoundingRect( + labels[i], font, 'center', 'top' + ); + rect.x += tickCoord * Math.cos(rotation); + rect.y += tickCoord * Math.sin(rotation); + + // Magic number + rect.width *= 1.3; + rect.height *= 1.3; + + if (!textSpaceTakenRect) { + textSpaceTakenRect = rect.clone(); + } + // There is no space for current label; + else if (textSpaceTakenRect.intersect(rect)) { + accumulatedLabelInterval++; + autoLabelInterval = Math.max(autoLabelInterval, accumulatedLabelInterval); + } + else { + textSpaceTakenRect.union(rect); + // Reset + accumulatedLabelInterval = 0; + } + } + if (autoLabelInterval === 0 && step > 1) { + return step; + } + return (autoLabelInterval + 1) * step - 1; +} + +/** + * @param {Object} axis + * @param {Function} labelFormatter + * @return {Array.} + */ +function getFormattedLabels(axis, labelFormatter) { + var scale = axis.scale; + var labels = scale.getTicksLabels(); + var ticks = scale.getTicks(); + if (typeof labelFormatter === 'string') { + labelFormatter = (function (tpl) { + return function (val) { + return tpl.replace('{value}', val != null ? val : ''); + }; + })(labelFormatter); + // Consider empty array + return map(labels, labelFormatter); + } + else if (typeof labelFormatter === 'function') { + return map(ticks, function (tick, idx) { + return labelFormatter( + getAxisRawValue(axis, tick), + idx + ); + }, this); + } + else { + return labels; + } +} + +function getAxisRawValue(axis, value) { + // In category axis with data zoom, tick is not the original + // index of axis.data. So tick should not be exposed to user + // in category axis. + return axis.type === 'category' ? axis.scale.getLabel(value) : value; +} + +function getName(obj) { + if (isObject(obj) && obj.value != null) { + return obj.value; + } + else { + return obj + ''; + } +} + +var axisModelCommonMixin = { + + /** + * Format labels + * @return {Array.} + */ + getFormattedLabels: function () { + return getFormattedLabels( + this.axis, + this.get('axisLabel.formatter') + ); + }, + + /** + * Get categories + */ + getCategories: function () { + return this.get('type') === 'category' + && map(this.get('data'), getName); + }, + + /** + * @param {boolean} origin + * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN + */ + getMin: function (origin) { + var option = this.option; + var min = (!origin && option.rangeStart != null) + ? option.rangeStart : option.min; + + if (this.axis + && min != null + && min !== 'dataMin' + && typeof min !== 'function' + && !eqNaN(min) + ) { + min = this.axis.scale.parse(min); + } + return min; + }, + + /** + * @param {boolean} origin + * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN + */ + getMax: function (origin) { + var option = this.option; + var max = (!origin && option.rangeEnd != null) + ? option.rangeEnd : option.max; + + if (this.axis + && max != null + && max !== 'dataMax' + && typeof max !== 'function' + && !eqNaN(max) + ) { + max = this.axis.scale.parse(max); + } + return max; + }, + + /** + * @return {boolean} + */ + getNeedCrossZero: function () { + var option = this.option; + return (option.rangeStart != null || option.rangeEnd != null) + ? false : !option.scale; + }, + + /** + * Should be implemented by each axis model if necessary. + * @return {module:echarts/model/Component} coordinate system model + */ + getCoordSysModel: noop, + + /** + * @param {number} rangeStart Can only be finite number or null/undefined or NaN. + * @param {number} rangeEnd Can only be finite number or null/undefined or NaN. + */ + setRange: function (rangeStart, rangeEnd) { + this.option.rangeStart = rangeStart; + this.option.rangeEnd = rangeEnd; + }, + + /** + * Reset range + */ + resetRange: function () { + // rangeStart and rangeEnd is readonly. + this.option.rangeStart = this.option.rangeEnd = null; + } +}; + +// Symbol factory + +/** + * Triangle shape + * @inner + */ +var Triangle = extendShape({ + type: 'triangle', + shape: { + cx: 0, + cy: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var cx = shape.cx; + var cy = shape.cy; + var width = shape.width / 2; + var height = shape.height / 2; + path.moveTo(cx, cy - height); + path.lineTo(cx + width, cy + height); + path.lineTo(cx - width, cy + height); + path.closePath(); + } +}); + +/** + * Diamond shape + * @inner + */ +var Diamond = extendShape({ + type: 'diamond', + shape: { + cx: 0, + cy: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var cx = shape.cx; + var cy = shape.cy; + var width = shape.width / 2; + var height = shape.height / 2; + path.moveTo(cx, cy - height); + path.lineTo(cx + width, cy); + path.lineTo(cx, cy + height); + path.lineTo(cx - width, cy); + path.closePath(); + } +}); + +/** + * Pin shape + * @inner + */ +var Pin = extendShape({ + type: 'pin', + shape: { + // x, y on the cusp + x: 0, + y: 0, + width: 0, + height: 0 + }, + + buildPath: function (path, shape) { + var x = shape.x; + var y = shape.y; + var w = shape.width / 5 * 3; + // Height must be larger than width + var h = Math.max(w, shape.height); + var r = w / 2; + + // Dist on y with tangent point and circle center + var dy = r * r / (h - r); + var cy = y - h + r + dy; + var angle = Math.asin(dy / r); + // Dist on x with tangent point and circle center + var dx = Math.cos(angle) * r; + + var tanX = Math.sin(angle); + var tanY = Math.cos(angle); + + var cpLen = r * 0.6; + var cpLen2 = r * 0.7; + + path.moveTo(x - dx, cy + dy); + + path.arc( + x, cy, r, + Math.PI - angle, + Math.PI * 2 + angle + ); + path.bezierCurveTo( + x + dx - tanX * cpLen, cy + dy + tanY * cpLen, + x, y - cpLen2, + x, y + ); + path.bezierCurveTo( + x, y - cpLen2, + x - dx + tanX * cpLen, cy + dy + tanY * cpLen, + x - dx, cy + dy + ); + path.closePath(); + } +}); + +/** + * Arrow shape + * @inner + */ +var Arrow = extendShape({ + + type: 'arrow', + + shape: { + x: 0, + y: 0, + width: 0, + height: 0 + }, + + buildPath: function (ctx, shape) { + var height = shape.height; + var width = shape.width; + var x = shape.x; + var y = shape.y; + var dx = width / 3 * 2; + ctx.moveTo(x, y); + ctx.lineTo(x + dx, y + height); + ctx.lineTo(x, y + height / 4 * 3); + ctx.lineTo(x - dx, y + height); + ctx.lineTo(x, y); + ctx.closePath(); + } +}); + +/** + * Map of path contructors + * @type {Object.} + */ +var symbolCtors = { + + line: Line, + + rect: Rect, + + roundRect: Rect, + + square: Rect, + + circle: Circle, + + diamond: Diamond, + + pin: Pin, + + arrow: Arrow, + + triangle: Triangle +}; + +var symbolShapeMakers = { + + line: function (x, y, w, h, shape) { + // FIXME + shape.x1 = x; + shape.y1 = y + h / 2; + shape.x2 = x + w; + shape.y2 = y + h / 2; + }, + + rect: function (x, y, w, h, shape) { + shape.x = x; + shape.y = y; + shape.width = w; + shape.height = h; + }, + + roundRect: function (x, y, w, h, shape) { + shape.x = x; + shape.y = y; + shape.width = w; + shape.height = h; + shape.r = Math.min(w, h) / 4; + }, + + square: function (x, y, w, h, shape) { + var size = Math.min(w, h); + shape.x = x; + shape.y = y; + shape.width = size; + shape.height = size; + }, + + circle: function (x, y, w, h, shape) { + // Put circle in the center of square + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.r = Math.min(w, h) / 2; + }, + + diamond: function (x, y, w, h, shape) { + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.width = w; + shape.height = h; + }, + + pin: function (x, y, w, h, shape) { + shape.x = x + w / 2; + shape.y = y + h / 2; + shape.width = w; + shape.height = h; + }, + + arrow: function (x, y, w, h, shape) { + shape.x = x + w / 2; + shape.y = y + h / 2; + shape.width = w; + shape.height = h; + }, + + triangle: function (x, y, w, h, shape) { + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.width = w; + shape.height = h; + } +}; + +var symbolBuildProxies = {}; +each$1(symbolCtors, function (Ctor, name) { + symbolBuildProxies[name] = new Ctor(); +}); + +var SymbolClz = extendShape({ + + type: 'symbol', + + shape: { + symbolType: '', + x: 0, + y: 0, + width: 0, + height: 0 + }, + + beforeBrush: function () { + var style = this.style; + var shape = this.shape; + // FIXME + if (shape.symbolType === 'pin' && style.textPosition === 'inside') { + style.textPosition = ['50%', '40%']; + style.textAlign = 'center'; + style.textVerticalAlign = 'middle'; + } + }, + + buildPath: function (ctx, shape, inBundle) { + var symbolType = shape.symbolType; + var proxySymbol = symbolBuildProxies[symbolType]; + if (shape.symbolType !== 'none') { + if (!proxySymbol) { + // Default rect + symbolType = 'rect'; + proxySymbol = symbolBuildProxies[symbolType]; + } + symbolShapeMakers[symbolType]( + shape.x, shape.y, shape.width, shape.height, proxySymbol.shape + ); + proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle); + } + } +}); + +// Provide setColor helper method to avoid determine if set the fill or stroke outside +function symbolPathSetColor(color, innerColor) { + if (this.type !== 'image') { + var symbolStyle = this.style; + var symbolShape = this.shape; + if (symbolShape && symbolShape.symbolType === 'line') { + symbolStyle.stroke = color; + } + else if (this.__isEmptyBrush) { + symbolStyle.stroke = color; + symbolStyle.fill = innerColor || '#fff'; + } + else { + // FIXME 判断图形默认是填充还是描边,使用 onlyStroke ? + symbolStyle.fill && (symbolStyle.fill = color); + symbolStyle.stroke && (symbolStyle.stroke = color); + } + this.dirty(false); + } +} + +/** + * Create a symbol element with given symbol configuration: shape, x, y, width, height, color + * @param {string} symbolType + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @param {string} color + * @param {boolean} [keepAspect=false] whether to keep the ratio of w/h, + * for path and image only. + */ +function createSymbol(symbolType, x, y, w, h, color, keepAspect) { + // TODO Support image object, DynamicImage. + + var isEmpty = symbolType.indexOf('empty') === 0; + if (isEmpty) { + symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6); + } + var symbolPath; + + if (symbolType.indexOf('image://') === 0) { + symbolPath = makeImage( + symbolType.slice(8), + new BoundingRect(x, y, w, h), + keepAspect ? 'center' : 'cover' + ); + } + else if (symbolType.indexOf('path://') === 0) { + symbolPath = makePath( + symbolType.slice(7), + {}, + new BoundingRect(x, y, w, h), + keepAspect ? 'center' : 'cover' + ); + } + else { + symbolPath = new SymbolClz({ + shape: { + symbolType: symbolType, + x: x, + y: y, + width: w, + height: h + } + }); + } + + symbolPath.__isEmptyBrush = isEmpty; + + symbolPath.setColor = symbolPathSetColor; + + symbolPath.setColor(color); + + return symbolPath; +} + +/** + * Create a muti dimension List structure from seriesModel. + * @param {module:echarts/model/Model} seriesModel + * @return {module:echarts/data/List} list + */ +function createList(seriesModel) { + var data = seriesModel.get('data'); + return createListFromArray(data, seriesModel, seriesModel.ecModel); +} + +/** + * Create scale + * @param {Array.} dataExtent + * @param {Object|module:echarts/Model} option + */ +function createScale(dataExtent, option) { + var axisModel = option; + if (!(option instanceof Model)) { + axisModel = new Model(option); + mixin(axisModel, axisModelCommonMixin); + } + + var scale = createScaleByModel(axisModel); + scale.setExtent(dataExtent[0], dataExtent[1]); + + niceScaleExtent(scale, axisModel); + return scale; +} + +/** + * Mixin common methods to axis model, + * + * Inlcude methods + * `getFormattedLabels() => Array.` + * `getCategories() => Array.` + * `getMin(origin: boolean) => number` + * `getMax(origin: boolean) => number` + * `getNeedCrossZero() => boolean` + * `setRange(start: number, end: number)` + * `resetRange()` + */ +function mixinAxisModelCommonMethods(Model$$1) { + mixin(Model$$1, axisModelCommonMixin); +} + +var helper = (Object.freeze || Object)({ + createList: createList, + createScale: createScale, + mixinAxisModelCommonMethods: mixinAxisModelCommonMethods, + completeDimensions: completeDimensions, + createSymbol: createSymbol +}); + +var linearMap$1 = linearMap; + +function fixExtentWithBands(extent, nTick) { + var size = extent[1] - extent[0]; + var len = nTick; + var margin = size / len / 2; + extent[0] += margin; + extent[1] -= margin; +} + +var normalizedExtent = [0, 1]; +/** + * @name module:echarts/coord/CartesianAxis + * @constructor + */ +var Axis = function (dim, scale, extent) { + + /** + * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius' + * @type {string} + */ + this.dim = dim; + + /** + * Axis scale + * @type {module:echarts/coord/scale/*} + */ + this.scale = scale; + + /** + * @type {Array.} + * @private + */ + this._extent = extent || [0, 0]; + + /** + * @type {boolean} + */ + this.inverse = false; + + /** + * Usually true when axis has a ordinal scale + * @type {boolean} + */ + this.onBand = false; + + /** + * @private + * @type {number} + */ + this._labelInterval; +}; + +Axis.prototype = { + + constructor: Axis, + + /** + * If axis extent contain given coord + * @param {number} coord + * @return {boolean} + */ + contain: function (coord) { + var extent = this._extent; + var min = Math.min(extent[0], extent[1]); + var max = Math.max(extent[0], extent[1]); + return coord >= min && coord <= max; + }, + + /** + * If axis extent contain given data + * @param {number} data + * @return {boolean} + */ + containData: function (data) { + return this.contain(this.dataToCoord(data)); + }, + + /** + * Get coord extent. + * @return {Array.} + */ + getExtent: function () { + return this._extent.slice(); + }, + + /** + * Get precision used for formatting + * @param {Array.} [dataExtent] + * @return {number} + */ + getPixelPrecision: function (dataExtent) { + return getPixelPrecision( + dataExtent || this.scale.getExtent(), + this._extent + ); + }, + + /** + * Set coord extent + * @param {number} start + * @param {number} end + */ + setExtent: function (start, end) { + var extent = this._extent; + extent[0] = start; + extent[1] = end; + }, + + /** + * Convert data to coord. Data is the rank if it has a ordinal scale + * @param {number} data + * @param {boolean} clamp + * @return {number} + */ + dataToCoord: function (data, clamp) { + var extent = this._extent; + var scale = this.scale; + data = scale.normalize(data); + + if (this.onBand && scale.type === 'ordinal') { + extent = extent.slice(); + fixExtentWithBands(extent, scale.count()); + } + + return linearMap$1(data, normalizedExtent, extent, clamp); + }, + + /** + * Convert coord to data. Data is the rank if it has a ordinal scale + * @param {number} coord + * @param {boolean} clamp + * @return {number} + */ + coordToData: function (coord, clamp) { + var extent = this._extent; + var scale = this.scale; + + if (this.onBand && scale.type === 'ordinal') { + extent = extent.slice(); + fixExtentWithBands(extent, scale.count()); + } + + var t = linearMap$1(coord, extent, normalizedExtent, clamp); + + return this.scale.scale(t); + }, + + /** + * Convert pixel point to data in axis + * @param {Array.} point + * @param {boolean} clamp + * @return {number} data + */ + pointToData: function (point, clamp) { + // Should be implemented in derived class if necessary. + }, + + /** + * @return {Array.} + */ + getTicksCoords: function (alignWithLabel) { + if (this.onBand && !alignWithLabel) { + var bands = this.getBands(); + var coords = []; + for (var i = 0; i < bands.length; i++) { + coords.push(bands[i][0]); + } + if (bands[i - 1]) { + coords.push(bands[i - 1][1]); + } + return coords; + } + else { + return map(this.scale.getTicks(), this.dataToCoord, this); + } + }, + + /** + * Coords of labels are on the ticks or on the middle of bands + * @return {Array.} + */ + getLabelsCoords: function () { + return map(this.scale.getTicks(), this.dataToCoord, this); + }, + + /** + * Get bands. + * + * If axis has labels [1, 2, 3, 4]. Bands on the axis are + * |---1---|---2---|---3---|---4---|. + * + * @return {Array} + */ + // FIXME Situation when labels is on ticks + getBands: function () { + var extent = this.getExtent(); + var bands = []; + var len = this.scale.count(); + var start = extent[0]; + var end = extent[1]; + var span = end - start; + + for (var i = 0; i < len; i++) { + bands.push([ + span * i / len + start, + span * (i + 1) / len + start + ]); + } + return bands; + }, + + /** + * Get width of band + * @return {number} + */ + getBandWidth: function () { + var axisExtent = this._extent; + var dataExtent = this.scale.getExtent(); + + var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0); + // Fix #2728, avoid NaN when only one data. + len === 0 && (len = 1); + + var size = Math.abs(axisExtent[1] - axisExtent[0]); + + return Math.abs(size) / len; + }, + + /** + * @abstract + * @return {boolean} Is horizontal + */ + isHorizontal: null, + + /** + * @abstract + * @return {number} Get axis rotate, by degree. + */ + getRotate: null, + + /** + * Get interval of the axis label. + * To get precise result, at least one of `getRotate` and `isHorizontal` + * should be implemented. + * @return {number} + */ + getLabelInterval: function () { + var labelInterval = this._labelInterval; + if (!labelInterval) { + var axisModel = this.model; + var labelModel = axisModel.getModel('axisLabel'); + labelInterval = labelModel.get('interval'); + + if (this.type === 'category' + && (labelInterval == null || labelInterval === 'auto') + ) { + labelInterval = getAxisLabelInterval( + map(this.scale.getTicks(), this.dataToCoord, this), + axisModel.getFormattedLabels(), + labelModel.getFont(), + this.getRotate + ? this.getRotate() + : (this.isHorizontal && !this.isHorizontal()) + ? 90 + : 0, + labelModel.get('rotate') + ); + } + + this._labelInterval = labelInterval; + } + return labelInterval; + } + +}; + +/** + * Do not mount those modules on 'src/echarts' for better tree shaking. + */ + +var ecUtil = {}; +each$1([ + 'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter', + 'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction', + 'extend', 'defaults', 'clone', 'merge' + ], + function (name) { + ecUtil[name] = zrUtil[name]; + } +); + +// GEXF File Parser +// http://gexf.net/1.2draft/gexf-12draft-primer.pdf + +function parse$1(xml) { + var doc; + if (typeof xml === 'string') { + var parser = new DOMParser(); + doc = parser.parseFromString(xml, 'text/xml'); + } + else { + doc = xml; + } + if (!doc || doc.getElementsByTagName('parsererror').length) { + return null; + } + + var gexfRoot = getChildByTagName(doc, 'gexf'); + + if (!gexfRoot) { + return null; + } + + var graphRoot = getChildByTagName(gexfRoot, 'graph'); + + var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes')); + var attributesMap = {}; + for (var i = 0; i < attributes.length; i++) { + attributesMap[attributes[i].id] = attributes[i]; + } + + return { + nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap), + links: parseEdges(getChildByTagName(graphRoot, 'edges')) + }; +} + +function parseAttributes(parent) { + return parent ? map(getChildrenByTagName(parent, 'attribute'), function (attribDom) { + return { + id: getAttr(attribDom, 'id'), + title: getAttr(attribDom, 'title'), + type: getAttr(attribDom, 'type') + }; + }) : []; +} + +function parseNodes(parent, attributesMap) { + return parent ? map(getChildrenByTagName(parent, 'node'), function (nodeDom) { + + var id = getAttr(nodeDom, 'id'); + var label = getAttr(nodeDom, 'label'); + + var node = { + id: id, + name: label, + itemStyle: { + normal: {} + } + }; + + var vizSizeDom = getChildByTagName(nodeDom, 'viz:size'); + var vizPosDom = getChildByTagName(nodeDom, 'viz:position'); + var vizColorDom = getChildByTagName(nodeDom, 'viz:color'); + // var vizShapeDom = getChildByTagName(nodeDom, 'viz:shape'); + + var attvaluesDom = getChildByTagName(nodeDom, 'attvalues'); + + if (vizSizeDom) { + node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value')); + } + if (vizPosDom) { + node.x = parseFloat(getAttr(vizPosDom, 'x')); + node.y = parseFloat(getAttr(vizPosDom, 'y')); + // z + } + if (vizColorDom) { + node.itemStyle.normal.color = 'rgb(' +[ + getAttr(vizColorDom, 'r') | 0, + getAttr(vizColorDom, 'g') | 0, + getAttr(vizColorDom, 'b') | 0 + ].join(',') + ')'; + } + // if (vizShapeDom) { + // node.shape = getAttr(vizShapeDom, 'shape'); + // } + if (attvaluesDom) { + var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue'); + + node.attributes = {}; + + for (var j = 0; j < attvalueDomList.length; j++) { + var attvalueDom = attvalueDomList[j]; + var attId = getAttr(attvalueDom, 'for'); + var attValue = getAttr(attvalueDom, 'value'); + var attribute = attributesMap[attId]; + + if (attribute) { + switch (attribute.type) { + case 'integer': + case 'long': + attValue = parseInt(attValue, 10); + break; + case 'float': + case 'double': + attValue = parseFloat(attValue); + break; + case 'boolean': + attValue = attValue.toLowerCase() == 'true'; + break; + default: + } + node.attributes[attId] = attValue; + } + } + } + + return node; + }) : []; +} + +function parseEdges(parent) { + return parent ? map(getChildrenByTagName(parent, 'edge'), function (edgeDom) { + var id = getAttr(edgeDom, 'id'); + var label = getAttr(edgeDom, 'label'); + + var sourceId = getAttr(edgeDom, 'source'); + var targetId = getAttr(edgeDom, 'target'); + + var edge = { + id: id, + name: label, + source: sourceId, + target: targetId, + lineStyle: { + normal: {} + } + }; + + var lineStyle = edge.lineStyle.normal; + + var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness'); + var vizColorDom = getChildByTagName(edgeDom, 'viz:color'); + // var vizShapeDom = getChildByTagName(edgeDom, 'viz:shape'); + + if (vizThicknessDom) { + lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value')); + } + if (vizColorDom) { + lineStyle.color = 'rgb(' + [ + getAttr(vizColorDom, 'r') | 0, + getAttr(vizColorDom, 'g') | 0, + getAttr(vizColorDom, 'b') | 0 + ].join(',') + ')'; + } + // if (vizShapeDom) { + // edge.shape = vizShapeDom.getAttribute('shape'); + // } + + return edge; + }) : []; +} + +function getAttr(el, attrName) { + return el.getAttribute(attrName); +} + +function getChildByTagName (parent, tagName) { + var node = parent.firstChild; + + while (node) { + if ( + node.nodeType != 1 || + node.nodeName.toLowerCase() != tagName.toLowerCase() + ) { + node = node.nextSibling; + } else { + return node; + } + } + + return null; +} + +function getChildrenByTagName (parent, tagName) { + var node = parent.firstChild; + var children = []; + while (node) { + if (node.nodeName.toLowerCase() == tagName.toLowerCase()) { + children.push(node); + } + node = node.nextSibling; + } + + return children; +} + + +var gexf = (Object.freeze || Object)({ + parse: parse$1 +}); + +/** + * Copyright (c) 2010-2015, Michael Bostock + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * The name Michael Bostock may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @see + * @see + * @param {Array.} ascArr + */ +var quantile = function(ascArr, p) { + var H = (ascArr.length - 1) * p + 1, + h = Math.floor(H), + v = +ascArr[h - 1], + e = H - h; + return e ? v + e * (ascArr[h] - v) : v; +}; + +/** + * See: + * + * + * + * Helper method for preparing data. + * + * @param {Array.} rawData like + * [ + * [12,232,443], (raw data set for the first box) + * [3843,5545,1232], (raw datat set for the second box) + * ... + * ] + * @param {Object} [opt] + * + * @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier. + * default 1.5, means Q1 - 1.5 * (Q3 - Q1). + * If 'none'/0 passed, min bound will not be used. + * @param {(number|string)} [opt.layout='horizontal'] + * Box plot layout, can be 'horizontal' or 'vertical' + * @return {Object} { + * boxData: Array.> + * outliers: Array.> + * axisData: Array. + * } + */ +var prepareBoxplotData = function (rawData, opt) { + opt = opt || []; + var boxData = []; + var outliers = []; + var axisData = []; + var boundIQR = opt.boundIQR; + var useExtreme = boundIQR === 'none' || boundIQR === 0; + + for (var i = 0; i < rawData.length; i++) { + axisData.push(i + ''); + var ascList = asc(rawData[i].slice()); + + var Q1 = quantile(ascList, 0.25); + var Q2 = quantile(ascList, 0.5); + var Q3 = quantile(ascList, 0.75); + var min = ascList[0]; + var max = ascList[ascList.length - 1]; + + var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1); + + var low = useExtreme + ? min + : Math.max(min, Q1 - bound); + var high = useExtreme + ? max + : Math.min(max, Q3 + bound); + + boxData.push([low, Q1, Q2, Q3, high]); + + for (var j = 0; j < ascList.length; j++) { + var dataItem = ascList[j]; + if (dataItem < low || dataItem > high) { + var outlier = [i, dataItem]; + opt.layout === 'vertical' && outlier.reverse(); + outliers.push(outlier); + } + } + } + return { + boxData: boxData, + outliers: outliers, + axisData: axisData + }; +}; + +var version$2 = '1.0.0'; + + + + +var index = (Object.freeze || Object)({ + version: version$2, + gexf: gexf, + prepareBoxplotData: prepareBoxplotData +}); + +SeriesModel.extend({ + + type: 'series.line', + + dependencies: ['grid', 'polar'], + + getInitialData: function (option, ecModel) { + if (__DEV__) { + var coordSys = option.coordinateSystem; + if (coordSys !== 'polar' && coordSys !== 'cartesian2d') { + throw new Error('Line not support coordinateSystem besides cartesian and polar'); + } + } + return createListFromArray(option.data, this, ecModel); + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + + hoverAnimation: true, + // stack: null + // xAxisIndex: 0, + // yAxisIndex: 0, + + // polarIndex: 0, + + // If clip the overflow value + clipOverflow: true, + // cursor: null, + + label: { + normal: { + position: 'top' + } + }, + // itemStyle: { + // normal: {}, + // emphasis: {} + // }, + lineStyle: { + normal: { + width: 2, + type: 'solid' + } + }, + // areaStyle: {}, + // false, 'start', 'end', 'middle' + step: false, + + // Disabled if step is true + smooth: false, + smoothMonotone: null, + // 拐点图形类型 + symbol: 'emptyCircle', + // 拐点图形大小 + symbolSize: 4, + // 拐点图形旋转控制 + symbolRotate: null, + + // 是否显示 symbol, 只有在 tooltip hover 的时候显示 + showSymbol: true, + // 标志图形默认只有主轴显示(随主轴标签间隔隐藏策略) + showAllSymbol: false, + + // 是否连接断点 + connectNulls: false, + + // 数据过滤,'average', 'max', 'min', 'sum' + sampling: 'none', + + animationEasing: 'linear', + + // Disable progressive + progressive: 0, + hoverLayerThreshold: Infinity + } +}); + +/** + * @module echarts/chart/helper/Symbol + */ + +function findLabelValueDim(data) { + var valueDim; + var labelDims = otherDimToDataDim(data, 'label'); + + if (labelDims.length) { + valueDim = labelDims[0]; + } + else { + // Get last value dim + var dimensions = data.dimensions.slice(); + var dataType; + while (dimensions.length && ( + valueDim = dimensions.pop(), + dataType = data.getDimensionInfo(valueDim).type, + dataType === 'ordinal' || dataType === 'time' + )) {} // jshint ignore:line + } + + return valueDim; +} + +/** + * @module echarts/chart/helper/Symbol + */ + +function getSymbolSize(data, idx) { + var symbolSize = data.getItemVisual(idx, 'symbolSize'); + return symbolSize instanceof Array + ? symbolSize.slice() + : [+symbolSize, +symbolSize]; +} + +function getScale(symbolSize) { + return [symbolSize[0] / 2, symbolSize[1] / 2]; +} + +/** + * @constructor + * @alias {module:echarts/chart/helper/Symbol} + * @param {module:echarts/data/List} data + * @param {number} idx + * @extends {module:zrender/graphic/Group} + */ +function SymbolClz$1(data, idx, seriesScope) { + Group.call(this); + + this.updateData(data, idx, seriesScope); +} + +var symbolProto = SymbolClz$1.prototype; + +function driftSymbol(dx, dy) { + this.parent.drift(dx, dy); +} + +symbolProto._createSymbol = function (symbolType, data, idx, symbolSize) { + // Remove paths created before + this.removeAll(); + + var color = data.getItemVisual(idx, 'color'); + + // var symbolPath = createSymbol( + // symbolType, -0.5, -0.5, 1, 1, color + // ); + // If width/height are set too small (e.g., set to 1) on ios10 + // and macOS Sierra, a circle stroke become a rect, no matter what + // the scale is set. So we set width/height as 2. See #4150. + var symbolPath = createSymbol( + symbolType, -1, -1, 2, 2, color + ); + + symbolPath.attr({ + z2: 100, + culling: true, + scale: getScale(symbolSize) + }); + // Rewrite drift method + symbolPath.drift = driftSymbol; + + this._symbolType = symbolType; + + this.add(symbolPath); +}; + +/** + * Stop animation + * @param {boolean} toLastFrame + */ +symbolProto.stopSymbolAnimation = function (toLastFrame) { + this.childAt(0).stopAnimation(toLastFrame); +}; + +/** + * FIXME: + * Caution: This method breaks the encapsulation of this module, + * but it indeed brings convenience. So do not use the method + * unless you detailedly know all the implements of `Symbol`, + * especially animation. + * + * Get symbol path element. + */ +symbolProto.getSymbolPath = function () { + return this.childAt(0); +}; + +/** + * Get scale(aka, current symbol size). + * Including the change caused by animation + */ +symbolProto.getScale = function () { + return this.childAt(0).scale; +}; + +/** + * Highlight symbol + */ +symbolProto.highlight = function () { + this.childAt(0).trigger('emphasis'); +}; + +/** + * Downplay symbol + */ +symbolProto.downplay = function () { + this.childAt(0).trigger('normal'); +}; + +/** + * @param {number} zlevel + * @param {number} z + */ +symbolProto.setZ = function (zlevel, z) { + var symbolPath = this.childAt(0); + symbolPath.zlevel = zlevel; + symbolPath.z = z; +}; + +symbolProto.setDraggable = function (draggable) { + var symbolPath = this.childAt(0); + symbolPath.draggable = draggable; + symbolPath.cursor = draggable ? 'move' : 'pointer'; +}; + +/** + * Update symbol properties + * @param {module:echarts/data/List} data + * @param {number} idx + * @param {Object} [seriesScope] + * @param {Object} [seriesScope.itemStyle] + * @param {Object} [seriesScope.hoverItemStyle] + * @param {Object} [seriesScope.symbolRotate] + * @param {Object} [seriesScope.symbolOffset] + * @param {module:echarts/model/Model} [seriesScope.labelModel] + * @param {module:echarts/model/Model} [seriesScope.hoverLabelModel] + * @param {boolean} [seriesScope.hoverAnimation] + * @param {Object} [seriesScope.cursorStyle] + * @param {module:echarts/model/Model} [seriesScope.itemModel] + * @param {string} [seriesScope.symbolInnerColor] + * @param {Object} [seriesScope.fadeIn=false] + */ +symbolProto.updateData = function (data, idx, seriesScope) { + this.silent = false; + + var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; + var seriesModel = data.hostModel; + var symbolSize = getSymbolSize(data, idx); + var isInit = symbolType !== this._symbolType; + + if (isInit) { + this._createSymbol(symbolType, data, idx, symbolSize); + } + else { + var symbolPath = this.childAt(0); + symbolPath.silent = false; + updateProps(symbolPath, { + scale: getScale(symbolSize) + }, seriesModel, idx); + } + + this._updateCommon(data, idx, symbolSize, seriesScope); + + if (isInit) { + var symbolPath = this.childAt(0); + var fadeIn = seriesScope && seriesScope.fadeIn; + + var target = {scale: symbolPath.scale.slice()}; + fadeIn && (target.style = {opacity: symbolPath.style.opacity}); + + symbolPath.scale = [0, 0]; + fadeIn && (symbolPath.style.opacity = 0); + + initProps(symbolPath, target, seriesModel, idx); + } + + this._seriesModel = seriesModel; +}; + +// Update common properties +var normalStyleAccessPath = ['itemStyle', 'normal']; +var emphasisStyleAccessPath = ['itemStyle', 'emphasis']; +var normalLabelAccessPath = ['label', 'normal']; +var emphasisLabelAccessPath = ['label', 'emphasis']; + +/** + * @param {module:echarts/data/List} data + * @param {number} idx + * @param {Array.} symbolSize + * @param {Object} [seriesScope] + */ +symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) { + var symbolPath = this.childAt(0); + var seriesModel = data.hostModel; + var color = data.getItemVisual(idx, 'color'); + + // Reset style + if (symbolPath.type !== 'image') { + symbolPath.useStyle({ + strokeNoScale: true + }); + } + + var itemStyle = seriesScope && seriesScope.itemStyle; + var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle; + var symbolRotate = seriesScope && seriesScope.symbolRotate; + var symbolOffset = seriesScope && seriesScope.symbolOffset; + var labelModel = seriesScope && seriesScope.labelModel; + var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel; + var hoverAnimation = seriesScope && seriesScope.hoverAnimation; + var cursorStyle = seriesScope && seriesScope.cursorStyle; + + if (!seriesScope || data.hasItemOption) { + var itemModel = (seriesScope && seriesScope.itemModel) + ? seriesScope.itemModel : data.getItemModel(idx); + + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']); + hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle(); + + symbolRotate = itemModel.getShallow('symbolRotate'); + symbolOffset = itemModel.getShallow('symbolOffset'); + + labelModel = itemModel.getModel(normalLabelAccessPath); + hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath); + hoverAnimation = itemModel.getShallow('hoverAnimation'); + cursorStyle = itemModel.getShallow('cursor'); + } + else { + hoverItemStyle = extend({}, hoverItemStyle); + } + + var elStyle = symbolPath.style; + + symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0); + + if (symbolOffset) { + symbolPath.attr('position', [ + parsePercent$1(symbolOffset[0], symbolSize[0]), + parsePercent$1(symbolOffset[1], symbolSize[1]) + ]); + } + + cursorStyle && symbolPath.attr('cursor', cursorStyle); + + // PENDING setColor before setStyle!!! + symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor); + + symbolPath.setStyle(itemStyle); + + var opacity = data.getItemVisual(idx, 'opacity'); + if (opacity != null) { + elStyle.opacity = opacity; + } + + var useNameLabel = seriesScope && seriesScope.useNameLabel; + var valueDim = !useNameLabel && findLabelValueDim(data); + + if (useNameLabel || valueDim != null) { + setLabelStyle( + elStyle, hoverItemStyle, labelModel, hoverLabelModel, + { + labelFetcher: seriesModel, + labelDataIndex: idx, + defaultText: useNameLabel ? data.getName(idx) : data.get(valueDim, idx), + isRectText: true, + autoColor: color + } + ); + } + + symbolPath.off('mouseover') + .off('mouseout') + .off('emphasis') + .off('normal'); + + symbolPath.hoverStyle = hoverItemStyle; + + // FIXME + // Do not use symbol.trigger('emphasis'), but use symbol.highlight() instead. + setHoverStyle(symbolPath); + + var scale = getScale(symbolSize); + + if (hoverAnimation && seriesModel.isAnimationEnabled()) { + var onEmphasis = function() { + var ratio = scale[1] / scale[0]; + this.animateTo({ + scale: [ + Math.max(scale[0] * 1.1, scale[0] + 3), + Math.max(scale[1] * 1.1, scale[1] + 3 * ratio) + ] + }, 400, 'elasticOut'); + }; + var onNormal = function() { + this.animateTo({ + scale: scale + }, 400, 'elasticOut'); + }; + symbolPath.on('mouseover', onEmphasis) + .on('mouseout', onNormal) + .on('emphasis', onEmphasis) + .on('normal', onNormal); + } +}; + +/** + * @param {Function} cb + * @param {Object} [opt] + * @param {Object} [opt.keepLabel=true] + */ +symbolProto.fadeOut = function (cb, opt) { + var symbolPath = this.childAt(0); + // Avoid mistaken hover when fading out + this.silent = symbolPath.silent = true; + // Not show text when animating + !(opt && opt.keepLabel) && (symbolPath.style.text = null); + + updateProps( + symbolPath, + { + style: {opacity: 0}, + scale: [0, 0] + }, + this._seriesModel, + this.dataIndex, + cb + ); +}; + +inherits(SymbolClz$1, Group); + +/** + * @module echarts/chart/helper/SymbolDraw + */ + +/** + * @constructor + * @alias module:echarts/chart/helper/SymbolDraw + * @param {module:zrender/graphic/Group} [symbolCtor] + */ +function SymbolDraw(symbolCtor) { + this.group = new Group(); + + this._symbolCtor = symbolCtor || SymbolClz$1; +} + +var symbolDrawProto = SymbolDraw.prototype; + +function symbolNeedsDraw(data, idx, isIgnore) { + var point = data.getItemLayout(idx); + // Is an object + // if (point && point.hasOwnProperty('point')) { + // point = point.point; + // } + return point && !isNaN(point[0]) && !isNaN(point[1]) && !(isIgnore && isIgnore(idx)) + && data.getItemVisual(idx, 'symbol') !== 'none'; +} +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + * @param {Array.} [isIgnore] + */ +symbolDrawProto.updateData = function (data, isIgnore) { + var group = this.group; + var seriesModel = data.hostModel; + var oldData = this._data; + + var SymbolCtor = this._symbolCtor; + + var seriesScope = { + itemStyle: seriesModel.getModel('itemStyle.normal').getItemStyle(['color']), + hoverItemStyle: seriesModel.getModel('itemStyle.emphasis').getItemStyle(), + symbolRotate: seriesModel.get('symbolRotate'), + symbolOffset: seriesModel.get('symbolOffset'), + hoverAnimation: seriesModel.get('hoverAnimation'), + + labelModel: seriesModel.getModel('label.normal'), + hoverLabelModel: seriesModel.getModel('label.emphasis'), + cursorStyle: seriesModel.get('cursor') + }; + + data.diff(oldData) + .add(function (newIdx) { + var point = data.getItemLayout(newIdx); + if (symbolNeedsDraw(data, newIdx, isIgnore)) { + var symbolEl = new SymbolCtor(data, newIdx, seriesScope); + symbolEl.attr('position', point); + data.setItemGraphicEl(newIdx, symbolEl); + group.add(symbolEl); + } + }) + .update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + var point = data.getItemLayout(newIdx); + if (!symbolNeedsDraw(data, newIdx, isIgnore)) { + group.remove(symbolEl); + return; + } + if (!symbolEl) { + symbolEl = new SymbolCtor(data, newIdx); + symbolEl.attr('position', point); + } + else { + symbolEl.updateData(data, newIdx, seriesScope); + updateProps(symbolEl, { + position: point + }, seriesModel); + } + + // Add back + group.add(symbolEl); + + data.setItemGraphicEl(newIdx, symbolEl); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && el.fadeOut(function () { + group.remove(el); + }); + }) + .execute(); + + this._data = data; +}; + +symbolDrawProto.updateLayout = function () { + var data = this._data; + if (data) { + // Not use animation + data.eachItemGraphicEl(function (el, idx) { + var point = data.getItemLayout(idx); + el.attr('position', point); + }); + } +}; + +symbolDrawProto.remove = function (enableAnimation) { + var group = this.group; + var data = this._data; + if (data) { + if (enableAnimation) { + data.eachItemGraphicEl(function (el) { + el.fadeOut(function () { + group.remove(el); + }); + }); + } + else { + group.removeAll(); + } + } +}; + +// var arrayDiff = require('zrender/src/core/arrayDiff'); +// 'zrender/src/core/arrayDiff' has been used before, but it did +// not do well in performance when roam with fixed dataZoom window. + +function sign$1(val) { + return val >= 0 ? 1 : -1; +} + +function getStackedOnPoint(coordSys, data, idx) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var valueStart = baseAxis.onZero + ? 0 : valueAxis.scale.getExtent()[0]; + + var valueDim = valueAxis.dim; + var baseDataOffset = valueDim === 'x' || valueDim === 'radius' ? 1 : 0; + + var stackedOnSameSign; + var stackedOn = data.stackedOn; + var val = data.get(valueDim, idx); + // Find first stacked value with same sign + while (stackedOn && + sign$1(stackedOn.get(valueDim, idx)) === sign$1(val) + ) { + stackedOnSameSign = stackedOn; + break; + } + var stackedData = []; + stackedData[baseDataOffset] = data.get(baseAxis.dim, idx); + stackedData[1 - baseDataOffset] = stackedOnSameSign + ? stackedOnSameSign.get(valueDim, idx, true) : valueStart; + + return coordSys.dataToPoint(stackedData); +} + +// function convertToIntId(newIdList, oldIdList) { +// // Generate int id instead of string id. +// // Compare string maybe slow in score function of arrDiff + +// // Assume id in idList are all unique +// var idIndicesMap = {}; +// var idx = 0; +// for (var i = 0; i < newIdList.length; i++) { +// idIndicesMap[newIdList[i]] = idx; +// newIdList[i] = idx++; +// } +// for (var i = 0; i < oldIdList.length; i++) { +// var oldId = oldIdList[i]; +// // Same with newIdList +// if (idIndicesMap[oldId]) { +// oldIdList[i] = idIndicesMap[oldId]; +// } +// else { +// oldIdList[i] = idx++; +// } +// } +// } + +function diffData(oldData, newData) { + var diffResult = []; + + newData.diff(oldData) + .add(function (idx) { + diffResult.push({cmd: '+', idx: idx}); + }) + .update(function (newIdx, oldIdx) { + diffResult.push({cmd: '=', idx: oldIdx, idx1: newIdx}); + }) + .remove(function (idx) { + diffResult.push({cmd: '-', idx: idx}); + }) + .execute(); + + return diffResult; +} + +var lineAnimationDiff = function ( + oldData, newData, + oldStackedOnPoints, newStackedOnPoints, + oldCoordSys, newCoordSys +) { + var diff = diffData(oldData, newData); + + // var newIdList = newData.mapArray(newData.getId); + // var oldIdList = oldData.mapArray(oldData.getId); + + // convertToIntId(newIdList, oldIdList); + + // // FIXME One data ? + // diff = arrayDiff(oldIdList, newIdList); + + var currPoints = []; + var nextPoints = []; + // Points for stacking base line + var currStackedPoints = []; + var nextStackedPoints = []; + + var status = []; + var sortedIndices = []; + var rawIndices = []; + var dims = newCoordSys.dimensions; + for (var i = 0; i < diff.length; i++) { + var diffItem = diff[i]; + var pointAdded = true; + + // FIXME, animation is not so perfect when dataZoom window moves fast + // Which is in case remvoing or add more than one data in the tail or head + switch (diffItem.cmd) { + case '=': + var currentPt = oldData.getItemLayout(diffItem.idx); + var nextPt = newData.getItemLayout(diffItem.idx1); + // If previous data is NaN, use next point directly + if (isNaN(currentPt[0]) || isNaN(currentPt[1])) { + currentPt = nextPt.slice(); + } + currPoints.push(currentPt); + nextPoints.push(nextPt); + + currStackedPoints.push(oldStackedOnPoints[diffItem.idx]); + nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]); + + rawIndices.push(newData.getRawIndex(diffItem.idx1)); + break; + case '+': + var idx = diffItem.idx; + currPoints.push( + oldCoordSys.dataToPoint([ + newData.get(dims[0], idx, true), newData.get(dims[1], idx, true) + ]) + ); + + nextPoints.push(newData.getItemLayout(idx).slice()); + + currStackedPoints.push( + getStackedOnPoint(oldCoordSys, newData, idx) + ); + nextStackedPoints.push(newStackedOnPoints[idx]); + + rawIndices.push(newData.getRawIndex(idx)); + break; + case '-': + var idx = diffItem.idx; + var rawIndex = oldData.getRawIndex(idx); + // Data is replaced. In the case of dynamic data queue + // FIXME FIXME FIXME + if (rawIndex !== idx) { + currPoints.push(oldData.getItemLayout(idx)); + nextPoints.push(newCoordSys.dataToPoint([ + oldData.get(dims[0], idx, true), oldData.get(dims[1], idx, true) + ])); + + currStackedPoints.push(oldStackedOnPoints[idx]); + nextStackedPoints.push( + getStackedOnPoint( + newCoordSys, oldData, idx + ) + ); + + rawIndices.push(rawIndex); + } + else { + pointAdded = false; + } + } + + // Original indices + if (pointAdded) { + status.push(diffItem); + sortedIndices.push(sortedIndices.length); + } + } + + // Diff result may be crossed if all items are changed + // Sort by data index + sortedIndices.sort(function (a, b) { + return rawIndices[a] - rawIndices[b]; + }); + + var sortedCurrPoints = []; + var sortedNextPoints = []; + + var sortedCurrStackedPoints = []; + var sortedNextStackedPoints = []; + + var sortedStatus = []; + for (var i = 0; i < sortedIndices.length; i++) { + var idx = sortedIndices[i]; + sortedCurrPoints[i] = currPoints[idx]; + sortedNextPoints[i] = nextPoints[idx]; + + sortedCurrStackedPoints[i] = currStackedPoints[idx]; + sortedNextStackedPoints[i] = nextStackedPoints[idx]; + + sortedStatus[i] = status[idx]; + } + + return { + current: sortedCurrPoints, + next: sortedNextPoints, + + stackedOnCurrent: sortedCurrStackedPoints, + stackedOnNext: sortedNextStackedPoints, + + status: sortedStatus + }; +}; + +// Poly path support NaN point + +var vec2Min = min; +var vec2Max = max; + +var scaleAndAdd$1 = scaleAndAdd; +var v2Copy = copy; + +// Temporary variable +var v = []; +var cp0 = []; +var cp1 = []; + +function isPointNull(p) { + return isNaN(p[0]) || isNaN(p[1]); +} + +function drawSegment( + ctx, points, start, segLen, allLen, + dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls +) { + var prevIdx = 0; + var idx = start; + for (var k = 0; k < segLen; k++) { + var p = points[idx]; + if (idx >= allLen || idx < 0) { + break; + } + if (isPointNull(p)) { + if (connectNulls) { + idx += dir; + continue; + } + break; + } + + if (idx === start) { + ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]); + v2Copy(cp0, p); + } + else { + if (smooth > 0) { + var nextIdx = idx + dir; + var nextP = points[nextIdx]; + if (connectNulls) { + // Find next point not null + while (nextP && isPointNull(points[nextIdx])) { + nextIdx += dir; + nextP = points[nextIdx]; + } + } + + var ratioNextSeg = 0.5; + var prevP = points[prevIdx]; + var nextP = points[nextIdx]; + // Last point + if (!nextP || isPointNull(nextP)) { + v2Copy(cp1, p); + } + else { + // If next data is null in not connect case + if (isPointNull(nextP) && !connectNulls) { + nextP = p; + } + + sub(v, nextP, prevP); + + var lenPrevSeg; + var lenNextSeg; + if (smoothMonotone === 'x' || smoothMonotone === 'y') { + var dim = smoothMonotone === 'x' ? 0 : 1; + lenPrevSeg = Math.abs(p[dim] - prevP[dim]); + lenNextSeg = Math.abs(p[dim] - nextP[dim]); + } + else { + lenPrevSeg = dist(p, prevP); + lenNextSeg = dist(p, nextP); + } + + // Use ratio of seg length + ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg); + + scaleAndAdd$1(cp1, p, v, -smooth * (1 - ratioNextSeg)); + } + // Smooth constraint + vec2Min(cp0, cp0, smoothMax); + vec2Max(cp0, cp0, smoothMin); + vec2Min(cp1, cp1, smoothMax); + vec2Max(cp1, cp1, smoothMin); + + ctx.bezierCurveTo( + cp0[0], cp0[1], + cp1[0], cp1[1], + p[0], p[1] + ); + // cp0 of next segment + scaleAndAdd$1(cp0, p, v, smooth * ratioNextSeg); + } + else { + ctx.lineTo(p[0], p[1]); + } + } + + prevIdx = idx; + idx += dir; + } + + return k; +} + +function getBoundingBox(points, smoothConstraint) { + var ptMin = [Infinity, Infinity]; + var ptMax = [-Infinity, -Infinity]; + if (smoothConstraint) { + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + if (pt[0] < ptMin[0]) { ptMin[0] = pt[0]; } + if (pt[1] < ptMin[1]) { ptMin[1] = pt[1]; } + if (pt[0] > ptMax[0]) { ptMax[0] = pt[0]; } + if (pt[1] > ptMax[1]) { ptMax[1] = pt[1]; } + } + } + return { + min: smoothConstraint ? ptMin : ptMax, + max: smoothConstraint ? ptMax : ptMin + }; +} + +var Polyline$1 = Path.extend({ + + type: 'ec-polyline', + + shape: { + points: [], + + smooth: 0, + + smoothConstraint: true, + + smoothMonotone: null, + + connectNulls: false + }, + + style: { + fill: null, + + stroke: '#000' + }, + + brush: fixClipWithShadow(Path.prototype.brush), + + buildPath: function (ctx, shape) { + var points = shape.points; + + var i = 0; + var len$$1 = points.length; + + var result = getBoundingBox(points, shape.smoothConstraint); + + if (shape.connectNulls) { + // Must remove first and last null values avoid draw error in polygon + for (; len$$1 > 0; len$$1--) { + if (!isPointNull(points[len$$1 - 1])) { + break; + } + } + for (; i < len$$1; i++) { + if (!isPointNull(points[i])) { + break; + } + } + } + while (i < len$$1) { + i += drawSegment( + ctx, points, i, len$$1, len$$1, + 1, result.min, result.max, shape.smooth, + shape.smoothMonotone, shape.connectNulls + ) + 1; + } + } +}); + +var Polygon$1 = Path.extend({ + + type: 'ec-polygon', + + shape: { + points: [], + + // Offset between stacked base points and points + stackedOnPoints: [], + + smooth: 0, + + stackedOnSmooth: 0, + + smoothConstraint: true, + + smoothMonotone: null, + + connectNulls: false + }, + + brush: fixClipWithShadow(Path.prototype.brush), + + buildPath: function (ctx, shape) { + var points = shape.points; + var stackedOnPoints = shape.stackedOnPoints; + + var i = 0; + var len$$1 = points.length; + var smoothMonotone = shape.smoothMonotone; + var bbox = getBoundingBox(points, shape.smoothConstraint); + var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint); + + if (shape.connectNulls) { + // Must remove first and last null values avoid draw error in polygon + for (; len$$1 > 0; len$$1--) { + if (!isPointNull(points[len$$1 - 1])) { + break; + } + } + for (; i < len$$1; i++) { + if (!isPointNull(points[i])) { + break; + } + } + } + while (i < len$$1) { + var k = drawSegment( + ctx, points, i, len$$1, len$$1, + 1, bbox.min, bbox.max, shape.smooth, + smoothMonotone, shape.connectNulls + ); + drawSegment( + ctx, stackedOnPoints, i + k - 1, k, len$$1, + -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth, + smoothMonotone, shape.connectNulls + ); + i += k + 1; + + ctx.closePath(); + } + } +}); + +// FIXME step not support polar + +function isPointsSame(points1, points2) { + if (points1.length !== points2.length) { + return; + } + for (var i = 0; i < points1.length; i++) { + var p1 = points1[i]; + var p2 = points2[i]; + if (p1[0] !== p2[0] || p1[1] !== p2[1]) { + return; + } + } + return true; +} + +function getSmooth(smooth) { + return typeof (smooth) === 'number' ? smooth : (smooth ? 0.3 : 0); +} + +function getAxisExtentWithGap(axis) { + var extent = axis.getGlobalExtent(); + if (axis.onBand) { + // Remove extra 1px to avoid line miter in clipped edge + var halfBandWidth = axis.getBandWidth() / 2 - 1; + var dir = extent[1] > extent[0] ? 1 : -1; + extent[0] += dir * halfBandWidth; + extent[1] -= dir * halfBandWidth; + } + return extent; +} + +function sign(val) { + return val >= 0 ? 1 : -1; +} + +/** + * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys + * @param {module:echarts/data/List} data + * @param {Array.>} points + * @private + */ +function getStackedOnPoints(coordSys, data) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + + var valueStart = 0; + if (!baseAxis.onZero) { + var extent = valueAxis.scale.getExtent(); + if (extent[0] > 0) { + // Both positive + valueStart = extent[0]; + } + else if (extent[1] < 0) { + // Both negative + valueStart = extent[1]; + } + // If is one positive, and one negative, onZero shall be true + } + + var valueDim = valueAxis.dim; + + var baseDataOffset = valueDim === 'x' || valueDim === 'radius' ? 1 : 0; + + return data.mapArray([valueDim], function (val, idx) { + var stackedOnSameSign; + var stackedOn = data.stackedOn; + // Find first stacked value with same sign + while (stackedOn && + sign(stackedOn.get(valueDim, idx)) === sign(val) + ) { + stackedOnSameSign = stackedOn; + break; + } + var stackedData = []; + stackedData[baseDataOffset] = data.get(baseAxis.dim, idx); + stackedData[1 - baseDataOffset] = stackedOnSameSign + ? stackedOnSameSign.get(valueDim, idx, true) : valueStart; + + return coordSys.dataToPoint(stackedData); + }, true); +} + +function createGridClipShape(cartesian, hasAnimation, seriesModel) { + var xExtent = getAxisExtentWithGap(cartesian.getAxis('x')); + var yExtent = getAxisExtentWithGap(cartesian.getAxis('y')); + var isHorizontal = cartesian.getBaseAxis().isHorizontal(); + + var x = Math.min(xExtent[0], xExtent[1]); + var y = Math.min(yExtent[0], yExtent[1]); + var width = Math.max(xExtent[0], xExtent[1]) - x; + var height = Math.max(yExtent[0], yExtent[1]) - y; + var lineWidth = seriesModel.get('lineStyle.normal.width') || 2; + // Expand clip shape to avoid clipping when line value exceeds axis + var expandSize = seriesModel.get('clipOverflow') ? lineWidth / 2 : Math.max(width, height); + if (isHorizontal) { + y -= expandSize; + height += expandSize * 2; + } + else { + x -= expandSize; + width += expandSize * 2; + } + + var clipPath = new Rect({ + shape: { + x: x, + y: y, + width: width, + height: height + } + }); + + if (hasAnimation) { + clipPath.shape[isHorizontal ? 'width' : 'height'] = 0; + initProps(clipPath, { + shape: { + width: width, + height: height + } + }, seriesModel); + } + + return clipPath; +} + +function createPolarClipShape(polar, hasAnimation, seriesModel) { + var angleAxis = polar.getAngleAxis(); + var radiusAxis = polar.getRadiusAxis(); + + var radiusExtent = radiusAxis.getExtent(); + var angleExtent = angleAxis.getExtent(); + + var RADIAN = Math.PI / 180; + + var clipPath = new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: radiusExtent[0], + r: radiusExtent[1], + startAngle: -angleExtent[0] * RADIAN, + endAngle: -angleExtent[1] * RADIAN, + clockwise: angleAxis.inverse + } + }); + + if (hasAnimation) { + clipPath.shape.endAngle = -angleExtent[0] * RADIAN; + initProps(clipPath, { + shape: { + endAngle: -angleExtent[1] * RADIAN + } + }, seriesModel); + } + + return clipPath; +} + +function createClipShape(coordSys, hasAnimation, seriesModel) { + return coordSys.type === 'polar' + ? createPolarClipShape(coordSys, hasAnimation, seriesModel) + : createGridClipShape(coordSys, hasAnimation, seriesModel); +} + +function turnPointsIntoStep(points, coordSys, stepTurnAt) { + var baseAxis = coordSys.getBaseAxis(); + var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1; + + var stepPoints = []; + for (var i = 0; i < points.length - 1; i++) { + var nextPt = points[i + 1]; + var pt = points[i]; + stepPoints.push(pt); + + var stepPt = []; + switch (stepTurnAt) { + case 'end': + stepPt[baseIndex] = nextPt[baseIndex]; + stepPt[1 - baseIndex] = pt[1 - baseIndex]; + // default is start + stepPoints.push(stepPt); + break; + case 'middle': + // default is start + var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2; + var stepPt2 = []; + stepPt[baseIndex] = stepPt2[baseIndex] = middle; + stepPt[1 - baseIndex] = pt[1 - baseIndex]; + stepPt2[1 - baseIndex] = nextPt[1 - baseIndex]; + stepPoints.push(stepPt); + stepPoints.push(stepPt2); + break; + default: + stepPt[baseIndex] = pt[baseIndex]; + stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; + // default is start + stepPoints.push(stepPt); + } + } + // Last points + points[i] && stepPoints.push(points[i]); + return stepPoints; +} + +function getVisualGradient(data, coordSys) { + var visualMetaList = data.getVisual('visualMeta'); + if (!visualMetaList || !visualMetaList.length || !data.count()) { + // When data.count() is 0, gradient range can not be calculated. + return; + } + + var visualMeta; + for (var i = visualMetaList.length - 1; i >= 0; i--) { + // Can only be x or y + if (visualMetaList[i].dimension < 2) { + visualMeta = visualMetaList[i]; + break; + } + } + if (!visualMeta || coordSys.type !== 'cartesian2d') { + if (__DEV__) { + console.warn('Visual map on line style only support x or y dimension.'); + } + return; + } + + // If the area to be rendered is bigger than area defined by LinearGradient, + // the canvas spec prescribes that the color of the first stop and the last + // stop should be used. But if two stops are added at offset 0, in effect + // browsers use the color of the second stop to render area outside + // LinearGradient. So we can only infinitesimally extend area defined in + // LinearGradient to render `outerColors`. + + var dimension = visualMeta.dimension; + var dimName = data.dimensions[dimension]; + var axis = coordSys.getAxis(dimName); + + // dataToCoor mapping may not be linear, but must be monotonic. + var colorStops = map(visualMeta.stops, function (stop) { + return { + coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)), + color: stop.color + }; + }); + var stopLen = colorStops.length; + var outerColors = visualMeta.outerColors.slice(); + + if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) { + colorStops.reverse(); + outerColors.reverse(); + } + + var tinyExtent = 10; // Arbitrary value: 10px + var minCoord = colorStops[0].coord - tinyExtent; + var maxCoord = colorStops[stopLen - 1].coord + tinyExtent; + var coordSpan = maxCoord - minCoord; + + if (coordSpan < 1e-3) { + return 'transparent'; + } + + each$1(colorStops, function (stop) { + stop.offset = (stop.coord - minCoord) / coordSpan; + }); + colorStops.push({ + offset: stopLen ? colorStops[stopLen - 1].offset : 0.5, + color: outerColors[1] || 'transparent' + }); + colorStops.unshift({ // notice colorStops.length have been changed. + offset: stopLen ? colorStops[0].offset : 0.5, + color: outerColors[0] || 'transparent' + }); + + // zrUtil.each(colorStops, function (colorStop) { + // // Make sure each offset has rounded px to avoid not sharp edge + // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start); + // }); + + var gradient = new LinearGradient(0, 0, 0, 0, colorStops, true); + gradient[dimName] = minCoord; + gradient[dimName + '2'] = maxCoord; + + return gradient; +} + +Chart.extend({ + + type: 'line', + + init: function () { + var lineGroup = new Group(); + + var symbolDraw = new SymbolDraw(); + this.group.add(symbolDraw.group); + + this._symbolDraw = symbolDraw; + this._lineGroup = lineGroup; + }, + + render: function (seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var group = this.group; + var data = seriesModel.getData(); + var lineStyleModel = seriesModel.getModel('lineStyle.normal'); + var areaStyleModel = seriesModel.getModel('areaStyle.normal'); + + var points = data.mapArray(data.getItemLayout, true); + + var isCoordSysPolar = coordSys.type === 'polar'; + var prevCoordSys = this._coordSys; + + var symbolDraw = this._symbolDraw; + var polyline = this._polyline; + var polygon = this._polygon; + + var lineGroup = this._lineGroup; + + var hasAnimation = seriesModel.get('animation'); + + var isAreaChart = !areaStyleModel.isEmpty(); + var stackedOnPoints = getStackedOnPoints(coordSys, data); + + var showSymbol = seriesModel.get('showSymbol'); + + var isSymbolIgnore = showSymbol && !isCoordSysPolar && !seriesModel.get('showAllSymbol') + && this._getSymbolIgnoreFunc(data, coordSys); + + // Remove temporary symbols + var oldData = this._data; + oldData && oldData.eachItemGraphicEl(function (el, idx) { + if (el.__temp) { + group.remove(el); + oldData.setItemGraphicEl(idx, null); + } + }); + + // Remove previous created symbols if showSymbol changed to false + if (!showSymbol) { + symbolDraw.remove(); + } + + group.add(lineGroup); + + // FIXME step not support polar + var step = !isCoordSysPolar && seriesModel.get('step'); + // Initialization animation or coordinate system changed + if ( + !(polyline && prevCoordSys.type === coordSys.type && step === this._step) + ) { + showSymbol && symbolDraw.updateData(data, isSymbolIgnore); + + if (step) { + // TODO If stacked series is not step + points = turnPointsIntoStep(points, coordSys, step); + stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step); + } + + polyline = this._newPolyline(points, coordSys, hasAnimation); + if (isAreaChart) { + polygon = this._newPolygon( + points, stackedOnPoints, + coordSys, hasAnimation + ); + } + lineGroup.setClipPath(createClipShape(coordSys, true, seriesModel)); + } + else { + if (isAreaChart && !polygon) { + // If areaStyle is added + polygon = this._newPolygon( + points, stackedOnPoints, + coordSys, hasAnimation + ); + } + else if (polygon && !isAreaChart) { + // If areaStyle is removed + lineGroup.remove(polygon); + polygon = this._polygon = null; + } + + // Update clipPath + lineGroup.setClipPath(createClipShape(coordSys, false, seriesModel)); + + // Always update, or it is wrong in the case turning on legend + // because points are not changed + showSymbol && symbolDraw.updateData(data, isSymbolIgnore); + + // Stop symbol animation and sync with line points + // FIXME performance? + data.eachItemGraphicEl(function (el) { + el.stopAnimation(true); + }); + + // In the case data zoom triggerred refreshing frequently + // Data may not change if line has a category axis. So it should animate nothing + if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) + || !isPointsSame(this._points, points) + ) { + if (hasAnimation) { + this._updateAnimation( + data, stackedOnPoints, coordSys, api, step + ); + } + else { + // Not do it in update with animation + if (step) { + // TODO If stacked series is not step + points = turnPointsIntoStep(points, coordSys, step); + stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step); + } + + polyline.setShape({ + points: points + }); + polygon && polygon.setShape({ + points: points, + stackedOnPoints: stackedOnPoints + }); + } + } + } + + var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color'); + + polyline.useStyle(defaults( + // Use color in lineStyle first + lineStyleModel.getLineStyle(), + { + fill: 'none', + stroke: visualColor, + lineJoin: 'bevel' + } + )); + + var smooth = seriesModel.get('smooth'); + smooth = getSmooth(seriesModel.get('smooth')); + polyline.setShape({ + smooth: smooth, + smoothMonotone: seriesModel.get('smoothMonotone'), + connectNulls: seriesModel.get('connectNulls') + }); + + if (polygon) { + var stackedOn = data.stackedOn; + var stackedOnSmooth = 0; + + polygon.useStyle(defaults( + areaStyleModel.getAreaStyle(), + { + fill: visualColor, + opacity: 0.7, + lineJoin: 'bevel' + } + )); + + if (stackedOn) { + var stackedOnSeries = stackedOn.hostModel; + stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth')); + } + + polygon.setShape({ + smooth: smooth, + stackedOnSmooth: stackedOnSmooth, + smoothMonotone: seriesModel.get('smoothMonotone'), + connectNulls: seriesModel.get('connectNulls') + }); + } + + this._data = data; + // Save the coordinate system for transition animation when data changed + this._coordSys = coordSys; + this._stackedOnPoints = stackedOnPoints; + this._points = points; + this._step = step; + }, + + dispose: function () {}, + + highlight: function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload); + + if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) { + var symbol = data.getItemGraphicEl(dataIndex); + if (!symbol) { + // Create a temporary symbol if it is not exists + var pt = data.getItemLayout(dataIndex); + if (!pt) { + // Null data + return; + } + symbol = new SymbolClz$1(data, dataIndex); + symbol.position = pt; + symbol.setZ( + seriesModel.get('zlevel'), + seriesModel.get('z') + ); + symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]); + symbol.__temp = true; + data.setItemGraphicEl(dataIndex, symbol); + + // Stop scale animation + symbol.stopSymbolAnimation(true); + + this.group.add(symbol); + } + symbol.highlight(); + } + else { + // Highlight whole series + Chart.prototype.highlight.call( + this, seriesModel, ecModel, api, payload + ); + } + }, + + downplay: function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload); + if (dataIndex != null && dataIndex >= 0) { + var symbol = data.getItemGraphicEl(dataIndex); + if (symbol) { + if (symbol.__temp) { + data.setItemGraphicEl(dataIndex, null); + this.group.remove(symbol); + } + else { + symbol.downplay(); + } + } + } + else { + // FIXME + // can not downplay completely. + // Downplay whole series + Chart.prototype.downplay.call( + this, seriesModel, ecModel, api, payload + ); + } + }, + + /** + * @param {module:zrender/container/Group} group + * @param {Array.>} points + * @private + */ + _newPolyline: function (points) { + var polyline = this._polyline; + // Remove previous created polyline + if (polyline) { + this._lineGroup.remove(polyline); + } + + polyline = new Polyline$1({ + shape: { + points: points + }, + silent: true, + z2: 10 + }); + + this._lineGroup.add(polyline); + + this._polyline = polyline; + + return polyline; + }, + + /** + * @param {module:zrender/container/Group} group + * @param {Array.>} stackedOnPoints + * @param {Array.>} points + * @private + */ + _newPolygon: function (points, stackedOnPoints) { + var polygon = this._polygon; + // Remove previous created polygon + if (polygon) { + this._lineGroup.remove(polygon); + } + + polygon = new Polygon$1({ + shape: { + points: points, + stackedOnPoints: stackedOnPoints + }, + silent: true + }); + + this._lineGroup.add(polygon); + + this._polygon = polygon; + return polygon; + }, + /** + * @private + */ + _getSymbolIgnoreFunc: function (data, coordSys) { + var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; + // `getLabelInterval` is provided by echarts/component/axis + if (categoryAxis && categoryAxis.isLabelIgnored) { + return bind(categoryAxis.isLabelIgnored, categoryAxis); + } + }, + + /** + * @private + */ + // FIXME Two value axis + _updateAnimation: function (data, stackedOnPoints, coordSys, api, step) { + var polyline = this._polyline; + var polygon = this._polygon; + var seriesModel = data.hostModel; + + var diff = lineAnimationDiff( + this._data, data, + this._stackedOnPoints, stackedOnPoints, + this._coordSys, coordSys + ); + + var current = diff.current; + var stackedOnCurrent = diff.stackedOnCurrent; + var next = diff.next; + var stackedOnNext = diff.stackedOnNext; + if (step) { + // TODO If stacked series is not step + current = turnPointsIntoStep(diff.current, coordSys, step); + stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step); + next = turnPointsIntoStep(diff.next, coordSys, step); + stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step); + } + // `diff.current` is subset of `current` (which should be ensured by + // turnPointsIntoStep), so points in `__points` can be updated when + // points in `current` are update during animation. + polyline.shape.__points = diff.current; + polyline.shape.points = current; + + updateProps(polyline, { + shape: { + points: next + } + }, seriesModel); + + if (polygon) { + polygon.setShape({ + points: current, + stackedOnPoints: stackedOnCurrent + }); + updateProps(polygon, { + shape: { + points: next, + stackedOnPoints: stackedOnNext + } + }, seriesModel); + } + + var updatedDataInfo = []; + var diffStatus = diff.status; + + for (var i = 0; i < diffStatus.length; i++) { + var cmd = diffStatus[i].cmd; + if (cmd === '=') { + var el = data.getItemGraphicEl(diffStatus[i].idx1); + if (el) { + updatedDataInfo.push({ + el: el, + ptIdx: i // Index of points + }); + } + } + } + + if (polyline.animators && polyline.animators.length) { + polyline.animators[0].during(function () { + for (var i = 0; i < updatedDataInfo.length; i++) { + var el = updatedDataInfo[i].el; + el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]); + } + }); + } + }, + + remove: function (ecModel) { + var group = this.group; + var oldData = this._data; + this._lineGroup.removeAll(); + this._symbolDraw.remove(true); + // Remove temporary created elements when highlighting + oldData && oldData.eachItemGraphicEl(function (el, idx) { + if (el.__temp) { + group.remove(el); + oldData.setItemGraphicEl(idx, null); + } + }); + + this._polyline = + this._polygon = + this._coordSys = + this._points = + this._stackedOnPoints = + this._data = null; + } +}); + +var visualSymbol = function (seriesType, defaultSymbolType, legendSymbol, ecModel, api) { + + // Encoding visual for all series include which is filtered for legend drawing + ecModel.eachRawSeriesByType(seriesType, function (seriesModel) { + var data = seriesModel.getData(); + + var symbolType = seriesModel.get('symbol') || defaultSymbolType; + var symbolSize = seriesModel.get('symbolSize'); + + data.setVisual({ + legendSymbol: legendSymbol || symbolType, + symbol: symbolType, + symbolSize: symbolSize + }); + + // Only visible series has each data be visual encoded + if (!ecModel.isSeriesFiltered(seriesModel)) { + if (typeof symbolSize === 'function') { + data.each(function (idx) { + var rawValue = seriesModel.getRawValue(idx); + // FIXME + var params = seriesModel.getDataParams(idx); + data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params)); + }); + } + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var itemSymbolType = itemModel.getShallow('symbol', true); + var itemSymbolSize = itemModel.getShallow('symbolSize', true); + // If has item symbol + if (itemSymbolType != null) { + data.setItemVisual(idx, 'symbol', itemSymbolType); + } + if (itemSymbolSize != null) { + // PENDING Transform symbolSize ? + data.setItemVisual(idx, 'symbolSize', itemSymbolSize); + } + }); + } + }); +}; + +var layoutPoints = function (seriesType, ecModel) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + + if (!coordSys) { + return; + } + + var dims = []; + var coordDims = coordSys.dimensions; + for (var i = 0; i < coordDims.length; i++) { + dims.push(seriesModel.coordDimToDataDim(coordSys.dimensions[i])[0]); + } + + if (dims.length === 1) { + data.each(dims[0], function (x, idx) { + // Also {Array.}, not undefined to avoid if...else... statement + data.setItemLayout(idx, isNaN(x) ? [NaN, NaN] : coordSys.dataToPoint(x)); + }); + } + else if (dims.length === 2) { + data.each(dims, function (x, y, idx) { + // Also {Array.}, not undefined to avoid if...else... statement + data.setItemLayout( + idx, (isNaN(x) || isNaN(y)) ? [NaN, NaN] : coordSys.dataToPoint([x, y]) + ); + }, true); + } + }); +}; + +var samplers = { + average: function (frame) { + var sum = 0; + var count = 0; + for (var i = 0; i < frame.length; i++) { + if (!isNaN(frame[i])) { + sum += frame[i]; + count++; + } + } + // Return NaN if count is 0 + return count === 0 ? NaN : sum / count; + }, + sum: function (frame) { + var sum = 0; + for (var i = 0; i < frame.length; i++) { + // Ignore NaN + sum += frame[i] || 0; + } + return sum; + }, + max: function (frame) { + var max = -Infinity; + for (var i = 0; i < frame.length; i++) { + frame[i] > max && (max = frame[i]); + } + return max; + }, + min: function (frame) { + var min = Infinity; + for (var i = 0; i < frame.length; i++) { + frame[i] < min && (min = frame[i]); + } + return min; + }, + // TODO + // Median + nearest: function (frame) { + return frame[0]; + } +}; + +var indexSampler = function (frame, value) { + return Math.round(frame.length / 2); +}; + +var dataSample = function (seriesType, ecModel, api) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var data = seriesModel.getData(); + var sampling = seriesModel.get('sampling'); + var coordSys = seriesModel.coordinateSystem; + // Only cartesian2d support down sampling + if (coordSys.type === 'cartesian2d' && sampling) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var extent = baseAxis.getExtent(); + // Coordinste system has been resized + var size = extent[1] - extent[0]; + var rate = Math.round(data.count() / size); + if (rate > 1) { + var sampler; + if (typeof sampling === 'string') { + sampler = samplers[sampling]; + } + else if (typeof sampling === 'function') { + sampler = sampling; + } + if (sampler) { + data = data.downSample( + valueAxis.dim, 1 / rate, sampler, indexSampler + ); + seriesModel.setData(data); + } + } + } + }, this); +}; + +/** + * Cartesian coordinate system + * @module echarts/coord/Cartesian + * + */ + +function dimAxisMapper(dim) { + return this._axes[dim]; +} + +/** + * @alias module:echarts/coord/Cartesian + * @constructor + */ +var Cartesian = function (name) { + this._axes = {}; + + this._dimList = []; + + /** + * @type {string} + */ + this.name = name || ''; +}; + +Cartesian.prototype = { + + constructor: Cartesian, + + type: 'cartesian', + + /** + * Get axis + * @param {number|string} dim + * @return {module:echarts/coord/Cartesian~Axis} + */ + getAxis: function (dim) { + return this._axes[dim]; + }, + + /** + * Get axes list + * @return {Array.} + */ + getAxes: function () { + return map(this._dimList, dimAxisMapper, this); + }, + + /** + * Get axes list by given scale type + */ + getAxesByScale: function (scaleType) { + scaleType = scaleType.toLowerCase(); + return filter( + this.getAxes(), + function (axis) { + return axis.scale.type === scaleType; + } + ); + }, + + /** + * Add axis + * @param {module:echarts/coord/Cartesian.Axis} + */ + addAxis: function (axis) { + var dim = axis.dim; + + this._axes[dim] = axis; + + this._dimList.push(dim); + }, + + /** + * Convert data to coord in nd space + * @param {Array.|Object.} val + * @return {Array.|Object.} + */ + dataToCoord: function (val) { + return this._dataCoordConvert(val, 'dataToCoord'); + }, + + /** + * Convert coord in nd space to data + * @param {Array.|Object.} val + * @return {Array.|Object.} + */ + coordToData: function (val) { + return this._dataCoordConvert(val, 'coordToData'); + }, + + _dataCoordConvert: function (input, method) { + var dimList = this._dimList; + + var output = input instanceof Array ? [] : {}; + + for (var i = 0; i < dimList.length; i++) { + var dim = dimList[i]; + var axis = this._axes[dim]; + + output[dim] = axis[method](input[dim]); + } + + return output; + } +}; + +function Cartesian2D(name) { + + Cartesian.call(this, name); +} + +Cartesian2D.prototype = { + + constructor: Cartesian2D, + + type: 'cartesian2d', + + /** + * @type {Array.} + * @readOnly + */ + dimensions: ['x', 'y'], + + /** + * Base axis will be used on stacking. + * + * @return {module:echarts/coord/cartesian/Axis2D} + */ + getBaseAxis: function () { + return this.getAxesByScale('ordinal')[0] + || this.getAxesByScale('time')[0] + || this.getAxis('x'); + }, + + /** + * If contain point + * @param {Array.} point + * @return {boolean} + */ + containPoint: function (point) { + var axisX = this.getAxis('x'); + var axisY = this.getAxis('y'); + return axisX.contain(axisX.toLocalCoord(point[0])) + && axisY.contain(axisY.toLocalCoord(point[1])); + }, + + /** + * If contain data + * @param {Array.} data + * @return {boolean} + */ + containData: function (data) { + return this.getAxis('x').containData(data[0]) + && this.getAxis('y').containData(data[1]); + }, + + /** + * @param {Array.} data + * @param {boolean} [clamp=false] + * @return {Array.} + */ + dataToPoint: function (data, clamp) { + var xAxis = this.getAxis('x'); + var yAxis = this.getAxis('y'); + return [ + xAxis.toGlobalCoord(xAxis.dataToCoord(data[0], clamp)), + yAxis.toGlobalCoord(yAxis.dataToCoord(data[1], clamp)) + ]; + }, + + /** + * @param {Array.} point + * @param {boolean} [clamp=false] + * @return {Array.} + */ + pointToData: function (point, clamp) { + var xAxis = this.getAxis('x'); + var yAxis = this.getAxis('y'); + return [ + xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp), + yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp) + ]; + }, + + /** + * Get other axis + * @param {module:echarts/coord/cartesian/Axis2D} axis + */ + getOtherAxis: function (axis) { + return this.getAxis(axis.dim === 'x' ? 'y' : 'x'); + } + +}; + +inherits(Cartesian2D, Cartesian); + +/** + * Extend axis 2d + * @constructor module:echarts/coord/cartesian/Axis2D + * @extends {module:echarts/coord/cartesian/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + * @param {string} position + */ +var Axis2D = function (dim, scale, coordExtent, axisType, position) { + Axis.call(this, dim, scale, coordExtent); + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * Axis position + * - 'top' + * - 'bottom' + * - 'left' + * - 'right' + */ + this.position = position || 'bottom'; +}; + +Axis2D.prototype = { + + constructor: Axis2D, + + /** + * Index of axis, can be used as key + */ + index: 0, + /** + * If axis is on the zero position of the other axis + * @type {boolean} + */ + onZero: false, + + /** + * Axis model + * @param {module:echarts/coord/cartesian/AxisModel} + */ + model: null, + + isHorizontal: function () { + var position = this.position; + return position === 'top' || position === 'bottom'; + }, + + /** + * Each item cooresponds to this.getExtent(), which + * means globalExtent[0] may greater than globalExtent[1], + * unless `asc` is input. + * + * @param {boolean} [asc] + * @return {Array.} + */ + getGlobalExtent: function (asc) { + var ret = this.getExtent(); + ret[0] = this.toGlobalCoord(ret[0]); + ret[1] = this.toGlobalCoord(ret[1]); + asc && ret[0] > ret[1] && ret.reverse(); + return ret; + }, + + getOtherAxis: function () { + this.grid.getOtherAxis(); + }, + + /** + * If label is ignored. + * Automatically used when axis is category and label can not be all shown + * @param {number} idx + * @return {boolean} + */ + isLabelIgnored: function (idx) { + if (this.type === 'category') { + var labelInterval = this.getLabelInterval(); + return ((typeof labelInterval === 'function') + && !labelInterval(idx, this.scale.getLabel(idx))) + || idx % (labelInterval + 1); + } + }, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp); + }, + + /** + * Transform global coord to local coord, + * i.e. var localCoord = axis.toLocalCoord(80); + * designate by module:echarts/coord/cartesian/Grid. + * @type {Function} + */ + toLocalCoord: null, + + /** + * Transform global coord to local coord, + * i.e. var globalCoord = axis.toLocalCoord(40); + * designate by module:echarts/coord/cartesian/Grid. + * @type {Function} + */ + toGlobalCoord: null + +}; + +inherits(Axis2D, Axis); + +var defaultOption = { + show: true, + zlevel: 0, // 一级层叠 + z: 0, // 二级层叠 + // 反向坐标轴 + inverse: false, + + // 坐标轴名字,默认为空 + name: '', + // 坐标轴名字位置,支持'start' | 'middle' | 'end' + nameLocation: 'end', + // 坐标轴名字旋转,degree。 + nameRotate: null, // Adapt to axis rotate, when nameLocation is 'middle'. + nameTruncate: { + maxWidth: null, + ellipsis: '...', + placeholder: '.' + }, + // 坐标轴文字样式,默认取全局样式 + nameTextStyle: {}, + // 文字与轴线距离 + nameGap: 15, + + silent: false, // Default false to support tooltip. + triggerEvent: false, // Default false to avoid legacy user event listener fail. + + tooltip: { + show: false + }, + + axisPointer: {}, + + // 坐标轴线 + axisLine: { + // 默认显示,属性show控制显示与否 + show: true, + onZero: true, + onZeroAxisIndex: null, + // 属性lineStyle控制线条样式 + lineStyle: { + color: '#333', + width: 1, + type: 'solid' + }, + // 坐标轴两端的箭头 + symbol: ['none', 'none'], + symbolSize: [10, 15] + }, + // 坐标轴小标记 + axisTick: { + // 属性show控制显示与否,默认显示 + show: true, + // 控制小标记是否在grid里 + inside: false, + // 属性length控制线长 + length: 5, + // 属性lineStyle控制线条样式 + lineStyle: { + width: 1 + } + }, + // 坐标轴文本标签,详见axis.axisLabel + axisLabel: { + show: true, + // 控制文本标签是否在grid里 + inside: false, + rotate: 0, + showMinLabel: null, // true | false | null (auto) + showMaxLabel: null, // true | false | null (auto) + margin: 8, + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + fontSize: 12 + }, + // 分隔线 + splitLine: { + // 默认显示,属性show控制显示与否 + show: true, + // 属性lineStyle(详见lineStyle)控制线条样式 + lineStyle: { + color: ['#ccc'], + width: 1, + type: 'solid' + } + }, + // 分隔区域 + splitArea: { + // 默认不显示,属性show控制显示与否 + show: false, + // 属性areaStyle(详见areaStyle)控制区域样式 + areaStyle: { + color: ['rgba(250,250,250,0.3)','rgba(200,200,200,0.3)'] + } + } +}; + +var axisDefault = {}; + +axisDefault.categoryAxis = merge({ + // 类目起始和结束两端空白策略 + boundaryGap: true, + // splitArea: { + // show: false + // }, + splitLine: { + show: false + }, + // 坐标轴小标记 + axisTick: { + // If tick is align with label when boundaryGap is true + alignWithLabel: false, + interval: 'auto' + }, + // 坐标轴文本标签,详见axis.axisLabel + axisLabel: { + interval: 'auto' + } +}, defaultOption); + +axisDefault.valueAxis = merge({ + // 数值起始和结束两端空白策略 + boundaryGap: [0, 0], + // 最小值, 设置成 'dataMin' 则从数据中计算最小值 + // min: null, + // 最大值,设置成 'dataMax' 则从数据中计算最大值 + // max: null, + // Readonly prop, specifies start value of the range when using data zoom. + // rangeStart: null + // Readonly prop, specifies end value of the range when using data zoom. + // rangeEnd: null + // 脱离0值比例,放大聚焦到最终_min,_max区间 + // scale: false, + // 分割段数,默认为5 + splitNumber: 5 + // Minimum interval + // minInterval: null + // maxInterval: null +}, defaultOption); + +// FIXME +axisDefault.timeAxis = defaults({ + scale: true, + min: 'dataMin', + max: 'dataMax' +}, axisDefault.valueAxis); + +axisDefault.logAxis = defaults({ + scale: true, + logBase: 10 +}, axisDefault.valueAxis); + +// FIXME axisType is fixed ? +var AXIS_TYPES = ['value', 'category', 'time', 'log']; + +/** + * Generate sub axis model class + * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel' + * @param {module:echarts/model/Component} BaseAxisModelClass + * @param {Function} axisTypeDefaulter + * @param {Object} [extraDefaultOption] + */ +var axisModelCreator = function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) { + + each$1(AXIS_TYPES, function (axisType) { + + BaseAxisModelClass.extend({ + + type: axisName + 'Axis.' + axisType, + + mergeDefaultAndTheme: function (option, ecModel) { + var layoutMode = this.layoutMode; + var inputPositionParams = layoutMode + ? getLayoutParams(option) : {}; + + var themeModel = ecModel.getTheme(); + merge(option, themeModel.get(axisType + 'Axis')); + merge(option, this.getDefaultOption()); + + option.type = axisTypeDefaulter(axisName, option); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }, + + defaultOption: mergeAll( + [ + {}, + axisDefault[axisType + 'Axis'], + extraDefaultOption + ], + true + ) + }); + }); + + ComponentModel.registerSubTypeDefaulter( + axisName + 'Axis', + curry(axisTypeDefaulter, axisName) + ); +}; + +var AxisModel = ComponentModel.extend({ + + type: 'cartesian2dAxis', + + /** + * @type {module:echarts/coord/cartesian/Axis2D} + */ + axis: null, + + /** + * @override + */ + init: function () { + AxisModel.superApply(this, 'init', arguments); + this.resetRange(); + }, + + /** + * @override + */ + mergeOption: function () { + AxisModel.superApply(this, 'mergeOption', arguments); + this.resetRange(); + }, + + /** + * @override + */ + restoreData: function () { + AxisModel.superApply(this, 'restoreData', arguments); + this.resetRange(); + }, + + /** + * @override + * @return {module:echarts/model/Component} + */ + getCoordSysModel: function () { + return this.ecModel.queryComponents({ + mainType: 'grid', + index: this.option.gridIndex, + id: this.option.gridId + })[0]; + } + +}); + +function getAxisType(axisDim, option) { + // Default axis with data is category axis + return option.type || (option.data ? 'category' : 'value'); +} + +merge(AxisModel.prototype, axisModelCommonMixin); + +var extraOption = { + // gridIndex: 0, + // gridId: '', + + // Offset is for multiple axis on the same position + offset: 0 +}; + +axisModelCreator('x', AxisModel, getAxisType, extraOption); +axisModelCreator('y', AxisModel, getAxisType, extraOption); + +// Grid 是在有直角坐标系的时候必须要存在的 +// 所以这里也要被 Cartesian2D 依赖 + +ComponentModel.extend({ + + type: 'grid', + + dependencies: ['xAxis', 'yAxis'], + + layoutMode: 'box', + + /** + * @type {module:echarts/coord/cartesian/Grid} + */ + coordinateSystem: null, + + defaultOption: { + show: false, + zlevel: 0, + z: 0, + left: '10%', + top: 60, + right: '10%', + bottom: 60, + // If grid size contain label + containLabel: false, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 1, + borderColor: '#ccc' + } +}); + +/** + * Grid is a region which contains at most 4 cartesian systems + * + * TODO Default cartesian + */ + +// Depends on GridModel, AxisModel, which performs preprocess. +var each$8 = each$1; +var ifAxisCrossZero$1 = ifAxisCrossZero; +var niceScaleExtent$1 = niceScaleExtent; + +/** + * Check if the axis is used in the specified grid + * @inner + */ +function isAxisUsedInTheGrid(axisModel, gridModel, ecModel) { + return axisModel.getCoordSysModel() === gridModel; +} + +function rotateTextRect(textRect, rotate) { + var rotateRadians = rotate * Math.PI / 180; + var boundingBox = textRect.plain(); + var beforeWidth = boundingBox.width; + var beforeHeight = boundingBox.height; + var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians); + var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians); + var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight); + + return rotatedRect; +} + +function getLabelUnionRect(axis) { + var axisModel = axis.model; + var labels = axisModel.getFormattedLabels(); + var axisLabelModel = axisModel.getModel('axisLabel'); + var rect; + var step = 1; + var labelCount = labels.length; + if (labelCount > 40) { + // Simple optimization for large amount of labels + step = Math.ceil(labelCount / 40); + } + for (var i = 0; i < labelCount; i += step) { + if (!axis.isLabelIgnored(i)) { + var unrotatedSingleRect = axisLabelModel.getTextRect(labels[i]); + var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0); + + rect ? rect.union(singleRect) : (rect = singleRect); + } + } + return rect; +} + +function Grid(gridModel, ecModel, api) { + /** + * @type {Object.} + * @private + */ + this._coordsMap = {}; + + /** + * @type {Array.} + * @private + */ + this._coordsList = []; + + /** + * @type {Object.} + * @private + */ + this._axesMap = {}; + + /** + * @type {Array.} + * @private + */ + this._axesList = []; + + this._initCartesian(gridModel, ecModel, api); + + this.model = gridModel; +} + +var gridProto = Grid.prototype; + +gridProto.type = 'grid'; + +gridProto.axisPointerEnabled = true; + +gridProto.getRect = function () { + return this._rect; +}; + +gridProto.update = function (ecModel, api) { + + var axesMap = this._axesMap; + + this._updateScale(ecModel, this.model); + + each$8(axesMap.x, function (xAxis) { + niceScaleExtent$1(xAxis.scale, xAxis.model); + }); + each$8(axesMap.y, function (yAxis) { + niceScaleExtent$1(yAxis.scale, yAxis.model); + }); + each$8(axesMap.x, function (xAxis) { + fixAxisOnZero(axesMap, 'y', xAxis); + }); + each$8(axesMap.y, function (yAxis) { + fixAxisOnZero(axesMap, 'x', yAxis); + }); + + // Resize again if containLabel is enabled + // FIXME It may cause getting wrong grid size in data processing stage + this.resize(this.model, api); +}; + +function fixAxisOnZero(axesMap, otherAxisDim, axis) { + // onZero can not be enabled in these two situations: + // 1. When any other axis is a category axis. + // 2. When no axis is cross 0 point. + var axes = axesMap[otherAxisDim]; + + if (!axis.onZero) { + return; + } + + var onZeroAxisIndex = axis.onZeroAxisIndex; + + // If target axis is specified. + if (onZeroAxisIndex != null) { + var otherAxis = axes[onZeroAxisIndex]; + if (otherAxis && canNotOnZeroToAxis(otherAxis)) { + axis.onZero = false; + } + return; + } + + for (var idx in axes) { + if (axes.hasOwnProperty(idx)) { + var otherAxis = axes[idx]; + if (otherAxis && !canNotOnZeroToAxis(otherAxis)) { + onZeroAxisIndex = +idx; + break; + } + } + } + + if (onZeroAxisIndex == null) { + axis.onZero = false; + } + axis.onZeroAxisIndex = onZeroAxisIndex; +} + +function canNotOnZeroToAxis(axis) { + return axis.type === 'category' || axis.type === 'time' || !ifAxisCrossZero$1(axis); +} + +/** + * Resize the grid + * @param {module:echarts/coord/cartesian/GridModel} gridModel + * @param {module:echarts/ExtensionAPI} api + */ +gridProto.resize = function (gridModel, api, ignoreContainLabel) { + + var gridRect = getLayoutRect( + gridModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + + this._rect = gridRect; + + var axesList = this._axesList; + + adjustAxes(); + + // Minus label size + if (!ignoreContainLabel && gridModel.get('containLabel')) { + each$8(axesList, function (axis) { + if (!axis.model.get('axisLabel.inside')) { + var labelUnionRect = getLabelUnionRect(axis); + if (labelUnionRect) { + var dim = axis.isHorizontal() ? 'height' : 'width'; + var margin = axis.model.get('axisLabel.margin'); + gridRect[dim] -= labelUnionRect[dim] + margin; + if (axis.position === 'top') { + gridRect.y += labelUnionRect.height + margin; + } + else if (axis.position === 'left') { + gridRect.x += labelUnionRect.width + margin; + } + } + } + }); + + adjustAxes(); + } + + function adjustAxes() { + each$8(axesList, function (axis) { + var isHorizontal = axis.isHorizontal(); + var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height]; + var idx = axis.inverse ? 1 : 0; + axis.setExtent(extent[idx], extent[1 - idx]); + updateAxisTransfrom(axis, isHorizontal ? gridRect.x : gridRect.y); + }); + } +}; + +/** + * @param {string} axisType + * @param {number} [axisIndex] + */ +gridProto.getAxis = function (axisType, axisIndex) { + var axesMapOnDim = this._axesMap[axisType]; + if (axesMapOnDim != null) { + if (axisIndex == null) { + // Find first axis + for (var name in axesMapOnDim) { + if (axesMapOnDim.hasOwnProperty(name)) { + return axesMapOnDim[name]; + } + } + } + return axesMapOnDim[axisIndex]; + } +}; + +/** + * @return {Array.} + */ +gridProto.getAxes = function () { + return this._axesList.slice(); +}; + +/** + * Usage: + * grid.getCartesian(xAxisIndex, yAxisIndex); + * grid.getCartesian(xAxisIndex); + * grid.getCartesian(null, yAxisIndex); + * grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...}); + * + * @param {number|Object} [xAxisIndex] + * @param {number} [yAxisIndex] + */ +gridProto.getCartesian = function (xAxisIndex, yAxisIndex) { + if (xAxisIndex != null && yAxisIndex != null) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + return this._coordsMap[key]; + } + + if (isObject(xAxisIndex)) { + yAxisIndex = xAxisIndex.yAxisIndex; + xAxisIndex = xAxisIndex.xAxisIndex; + } + // When only xAxisIndex or yAxisIndex given, find its first cartesian. + for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) { + if (coordList[i].getAxis('x').index === xAxisIndex + || coordList[i].getAxis('y').index === yAxisIndex + ) { + return coordList[i]; + } + } +}; + +gridProto.getCartesians = function () { + return this._coordsList.slice(); +}; + +/** + * @implements + * see {module:echarts/CoodinateSystem} + */ +gridProto.convertToPixel = function (ecModel, finder, value) { + var target = this._findConvertTarget(ecModel, finder); + + return target.cartesian + ? target.cartesian.dataToPoint(value) + : target.axis + ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) + : null; +}; + +/** + * @implements + * see {module:echarts/CoodinateSystem} + */ +gridProto.convertFromPixel = function (ecModel, finder, value) { + var target = this._findConvertTarget(ecModel, finder); + + return target.cartesian + ? target.cartesian.pointToData(value) + : target.axis + ? target.axis.coordToData(target.axis.toLocalCoord(value)) + : null; +}; + +/** + * @inner + */ +gridProto._findConvertTarget = function (ecModel, finder) { + var seriesModel = finder.seriesModel; + var xAxisModel = finder.xAxisModel + || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]); + var yAxisModel = finder.yAxisModel + || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]); + var gridModel = finder.gridModel; + var coordsList = this._coordsList; + var cartesian; + var axis; + + if (seriesModel) { + cartesian = seriesModel.coordinateSystem; + indexOf(coordsList, cartesian) < 0 && (cartesian = null); + } + else if (xAxisModel && yAxisModel) { + cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); + } + else if (xAxisModel) { + axis = this.getAxis('x', xAxisModel.componentIndex); + } + else if (yAxisModel) { + axis = this.getAxis('y', yAxisModel.componentIndex); + } + // Lowest priority. + else if (gridModel) { + var grid = gridModel.coordinateSystem; + if (grid === this) { + cartesian = this._coordsList[0]; + } + } + + return {cartesian: cartesian, axis: axis}; +}; + +/** + * @implements + * see {module:echarts/CoodinateSystem} + */ +gridProto.containPoint = function (point) { + var coord = this._coordsList[0]; + if (coord) { + return coord.containPoint(point); + } +}; + +/** + * Initialize cartesian coordinate systems + * @private + */ +gridProto._initCartesian = function (gridModel, ecModel, api) { + var axisPositionUsed = { + left: false, + right: false, + top: false, + bottom: false + }; + + var axesMap = { + x: {}, + y: {} + }; + var axesCount = { + x: 0, + y: 0 + }; + + /// Create axis + ecModel.eachComponent('xAxis', createAxisCreator('x'), this); + ecModel.eachComponent('yAxis', createAxisCreator('y'), this); + + if (!axesCount.x || !axesCount.y) { + // Roll back when there no either x or y axis + this._axesMap = {}; + this._axesList = []; + return; + } + + this._axesMap = axesMap; + + /// Create cartesian2d + each$8(axesMap.x, function (xAxis, xAxisIndex) { + each$8(axesMap.y, function (yAxis, yAxisIndex) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + var cartesian = new Cartesian2D(key); + + cartesian.grid = this; + cartesian.model = gridModel; + + this._coordsMap[key] = cartesian; + this._coordsList.push(cartesian); + + cartesian.addAxis(xAxis); + cartesian.addAxis(yAxis); + }, this); + }, this); + + function createAxisCreator(axisType) { + return function (axisModel, idx) { + if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) { + return; + } + + var axisPosition = axisModel.get('position'); + if (axisType === 'x') { + // Fix position + if (axisPosition !== 'top' && axisPosition !== 'bottom') { + // Default bottom of X + axisPosition = 'bottom'; + if (axisPositionUsed[axisPosition]) { + axisPosition = axisPosition === 'top' ? 'bottom' : 'top'; + } + } + } + else { + // Fix position + if (axisPosition !== 'left' && axisPosition !== 'right') { + // Default left of Y + axisPosition = 'left'; + if (axisPositionUsed[axisPosition]) { + axisPosition = axisPosition === 'left' ? 'right' : 'left'; + } + } + } + axisPositionUsed[axisPosition] = true; + + var axis = new Axis2D( + axisType, createScaleByModel(axisModel), + [0, 0], + axisModel.get('type'), + axisPosition + ); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + + axis.onZero = axisModel.get('axisLine.onZero'); + axis.onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex'); + + // Inject axis into axisModel + axisModel.axis = axis; + + // Inject axisModel into axis + axis.model = axisModel; + + // Inject grid info axis + axis.grid = this; + + // Index of axis, can be used as key + axis.index = idx; + + this._axesList.push(axis); + + axesMap[axisType][idx] = axis; + axesCount[axisType]++; + }; + } +}; + +/** + * Update cartesian properties from series + * @param {module:echarts/model/Option} option + * @private + */ +gridProto._updateScale = function (ecModel, gridModel) { + // Reset scale + each$1(this._axesList, function (axis) { + axis.scale.setExtent(Infinity, -Infinity); + }); + ecModel.eachSeries(function (seriesModel) { + if (isCartesian2D(seriesModel)) { + var axesModels = findAxesModels(seriesModel, ecModel); + var xAxisModel = axesModels[0]; + var yAxisModel = axesModels[1]; + + if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel) + || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel) + ) { + return; + } + + var cartesian = this.getCartesian( + xAxisModel.componentIndex, yAxisModel.componentIndex + ); + var data = seriesModel.getData(); + var xAxis = cartesian.getAxis('x'); + var yAxis = cartesian.getAxis('y'); + + if (data.type === 'list') { + unionExtent(data, xAxis, seriesModel); + unionExtent(data, yAxis, seriesModel); + } + } + }, this); + + function unionExtent(data, axis, seriesModel) { + each$8(seriesModel.coordDimToDataDim(axis.dim), function (dim) { + axis.scale.unionExtentFromData(data, dim); + }); + } +}; + +/** + * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined + * @return {Object} {baseAxes: [], otherAxes: []} + */ +gridProto.getTooltipAxes = function (dim) { + var baseAxes = []; + var otherAxes = []; + + each$8(this.getCartesians(), function (cartesian) { + var baseAxis = (dim != null && dim !== 'auto') + ? cartesian.getAxis(dim) : cartesian.getBaseAxis(); + var otherAxis = cartesian.getOtherAxis(baseAxis); + indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis); + indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis); + }); + + return {baseAxes: baseAxes, otherAxes: otherAxes}; +}; + +/** + * @inner + */ +function updateAxisTransfrom(axis, coordBase) { + var axisExtent = axis.getExtent(); + var axisExtentSum = axisExtent[0] + axisExtent[1]; + + // Fast transform + axis.toGlobalCoord = axis.dim === 'x' + ? function (coord) { + return coord + coordBase; + } + : function (coord) { + return axisExtentSum - coord + coordBase; + }; + axis.toLocalCoord = axis.dim === 'x' + ? function (coord) { + return coord - coordBase; + } + : function (coord) { + return axisExtentSum - coord + coordBase; + }; +} + +var axesTypes = ['xAxis', 'yAxis']; +/** + * @inner + */ +function findAxesModels(seriesModel, ecModel) { + return map(axesTypes, function (axisType) { + var axisModel = seriesModel.getReferringComponents(axisType)[0]; + + if (__DEV__) { + if (!axisModel) { + throw new Error(axisType + ' "' + retrieve( + seriesModel.get(axisType + 'Index'), + seriesModel.get(axisType + 'Id'), + 0 + ) + '" not found'); + } + } + return axisModel; + }); +} + +/** + * @inner + */ +function isCartesian2D(seriesModel) { + return seriesModel.get('coordinateSystem') === 'cartesian2d'; +} + +Grid.create = function (ecModel, api) { + var grids = []; + ecModel.eachComponent('grid', function (gridModel, idx) { + var grid = new Grid(gridModel, ecModel, api); + grid.name = 'grid_' + idx; + // dataSampling requires axis extent, so resize + // should be performed in create stage. + grid.resize(gridModel, api, true); + + gridModel.coordinateSystem = grid; + + grids.push(grid); + }); + + // Inject the coordinateSystems into seriesModel + ecModel.eachSeries(function (seriesModel) { + if (!isCartesian2D(seriesModel)) { + return; + } + + var axesModels = findAxesModels(seriesModel, ecModel); + var xAxisModel = axesModels[0]; + var yAxisModel = axesModels[1]; + + var gridModel = xAxisModel.getCoordSysModel(); + + if (__DEV__) { + if (!gridModel) { + throw new Error( + 'Grid "' + retrieve( + xAxisModel.get('gridIndex'), + xAxisModel.get('gridId'), + 0 + ) + '" not found' + ); + } + if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) { + throw new Error('xAxis and yAxis must use the same grid'); + } + } + + var grid = gridModel.coordinateSystem; + + seriesModel.coordinateSystem = grid.getCartesian( + xAxisModel.componentIndex, yAxisModel.componentIndex + ); + }); + + return grids; +}; + +// For deciding which dimensions to use when creating list data +Grid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions; + +CoordinateSystemManager.register('cartesian2d', Grid); + +var PI$2 = Math.PI; + +function makeAxisEventDataBase(axisModel) { + var eventData = { + componentType: axisModel.mainType + }; + eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex; + return eventData; +} + +/** + * A final axis is translated and rotated from a "standard axis". + * So opt.position and opt.rotation is required. + * + * A standard axis is and axis from [0, 0] to [0, axisExtent[1]], + * for example: (0, 0) ------------> (0, 50) + * + * nameDirection or tickDirection or labelDirection is 1 means tick + * or label is below the standard axis, whereas is -1 means above + * the standard axis. labelOffset means offset between label and axis, + * which is useful when 'onZero', where axisLabel is in the grid and + * label in outside grid. + * + * Tips: like always, + * positive rotation represents anticlockwise, and negative rotation + * represents clockwise. + * The direction of position coordinate is the same as the direction + * of screen coordinate. + * + * Do not need to consider axis 'inverse', which is auto processed by + * axis extent. + * + * @param {module:zrender/container/Group} group + * @param {Object} axisModel + * @param {Object} opt Standard axis parameters. + * @param {Array.} opt.position [x, y] + * @param {number} opt.rotation by radian + * @param {number} [opt.nameDirection=1] 1 or -1 Used when nameLocation is 'middle' or 'center'. + * @param {number} [opt.tickDirection=1] 1 or -1 + * @param {number} [opt.labelDirection=1] 1 or -1 + * @param {number} [opt.labelOffset=0] Usefull when onZero. + * @param {string} [opt.axisLabelShow] default get from axisModel. + * @param {string} [opt.axisName] default get from axisModel. + * @param {number} [opt.axisNameAvailableWidth] + * @param {number} [opt.labelRotate] by degree, default get from axisModel. + * @param {number} [opt.labelInterval] Default label interval when label + * interval from model is null or 'auto'. + * @param {number} [opt.strokeContainThreshold] Default label interval when label + * @param {number} [opt.nameTruncateMaxWidth] + */ +var AxisBuilder = function (axisModel, opt) { + + /** + * @readOnly + */ + this.opt = opt; + + /** + * @readOnly + */ + this.axisModel = axisModel; + + // Default value + defaults( + opt, + { + labelOffset: 0, + nameDirection: 1, + tickDirection: 1, + labelDirection: 1, + silent: true + } + ); + + /** + * @readOnly + */ + this.group = new Group(); + + // FIXME Not use a seperate text group? + var dumbGroup = new Group({ + position: opt.position.slice(), + rotation: opt.rotation + }); + + // this.group.add(dumbGroup); + // this._dumbGroup = dumbGroup; + + dumbGroup.updateTransform(); + this._transform = dumbGroup.transform; + + this._dumbGroup = dumbGroup; +}; + +AxisBuilder.prototype = { + + constructor: AxisBuilder, + + hasBuilder: function (name) { + return !!builders[name]; + }, + + add: function (name) { + builders[name].call(this); + }, + + getGroup: function () { + return this.group; + } + +}; + +var builders = { + + /** + * @private + */ + axisLine: function () { + var opt = this.opt; + var axisModel = this.axisModel; + + if (!axisModel.get('axisLine.show')) { + return; + } + + var extent = this.axisModel.axis.getExtent(); + + var matrix = this._transform; + var pt1 = [extent[0], 0]; + var pt2 = [extent[1], 0]; + if (matrix) { + applyTransform(pt1, pt1, matrix); + applyTransform(pt2, pt2, matrix); + } + + var lineStyle = extend( + { + lineCap: 'round' + }, + axisModel.getModel('axisLine.lineStyle').getLineStyle() + ); + + this.group.add(new Line(subPixelOptimizeLine({ + // Id for animation + anid: 'line', + + shape: { + x1: pt1[0], + y1: pt1[1], + x2: pt2[0], + y2: pt2[1] + }, + style: lineStyle, + strokeContainThreshold: opt.strokeContainThreshold || 5, + silent: true, + z2: 1 + }))); + + var arrows = axisModel.get('axisLine.symbol'); + var arrowSize = axisModel.get('axisLine.symbolSize'); + + if (arrows != null) { + if (typeof arrows === 'string') { + // Use the same arrow for start and end point + arrows = [arrows, arrows]; + } + if (typeof arrowSize === 'string' + || typeof arrowSize === 'number' + ) { + // Use the same size for width and height + arrowSize = [arrowSize, arrowSize]; + } + + var symbolWidth = arrowSize[0]; + var symbolHeight = arrowSize[1]; + + each$1([ + [opt.rotation + Math.PI / 2, pt1], + [opt.rotation - Math.PI / 2, pt2] + ], function (item, index) { + if (arrows[index] !== 'none' && arrows[index] != null) { + var symbol = createSymbol( + arrows[index], + -symbolWidth / 2, + -symbolHeight / 2, + symbolWidth, + symbolHeight, + lineStyle.stroke, + true + ); + symbol.attr({ + rotation: item[0], + position: item[1], + silent: true + }); + this.group.add(symbol); + } + }, this); + } + }, + + /** + * @private + */ + axisTickLabel: function () { + var axisModel = this.axisModel; + var opt = this.opt; + + var tickEls = buildAxisTick(this, axisModel, opt); + var labelEls = buildAxisLabel(this, axisModel, opt); + + fixMinMaxLabelShow(axisModel, labelEls, tickEls); + }, + + /** + * @private + */ + axisName: function () { + var opt = this.opt; + var axisModel = this.axisModel; + var name = retrieve(opt.axisName, axisModel.get('name')); + + if (!name) { + return; + } + + var nameLocation = axisModel.get('nameLocation'); + var nameDirection = opt.nameDirection; + var textStyleModel = axisModel.getModel('nameTextStyle'); + var gap = axisModel.get('nameGap') || 0; + + var extent = this.axisModel.axis.getExtent(); + var gapSignal = extent[0] > extent[1] ? -1 : 1; + var pos = [ + nameLocation === 'start' + ? extent[0] - gapSignal * gap + : nameLocation === 'end' + ? extent[1] + gapSignal * gap + : (extent[0] + extent[1]) / 2, // 'middle' + // Reuse labelOffset. + isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0 + ]; + + var labelLayout; + + var nameRotation = axisModel.get('nameRotate'); + if (nameRotation != null) { + nameRotation = nameRotation * PI$2 / 180; // To radian. + } + + var axisNameAvailableWidth; + + if (isNameLocationCenter(nameLocation)) { + labelLayout = innerTextLayout( + opt.rotation, + nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis. + nameDirection + ); + } + else { + labelLayout = endTextLayout( + opt, nameLocation, nameRotation || 0, extent + ); + + axisNameAvailableWidth = opt.axisNameAvailableWidth; + if (axisNameAvailableWidth != null) { + axisNameAvailableWidth = Math.abs( + axisNameAvailableWidth / Math.sin(labelLayout.rotation) + ); + !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null); + } + } + + var textFont = textStyleModel.getFont(); + + var truncateOpt = axisModel.get('nameTruncate', true) || {}; + var ellipsis = truncateOpt.ellipsis; + var maxWidth = retrieve( + opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth + ); + // FIXME + // truncate rich text? (consider performance) + var truncatedText = (ellipsis != null && maxWidth != null) + ? truncateText$1( + name, maxWidth, textFont, ellipsis, + {minChar: 2, placeholder: truncateOpt.placeholder} + ) + : name; + + var tooltipOpt = axisModel.get('tooltip', true); + + var mainType = axisModel.mainType; + var formatterParams = { + componentType: mainType, + name: name, + $vars: ['name'] + }; + formatterParams[mainType + 'Index'] = axisModel.componentIndex; + + var textEl = new Text({ + // Id for animation + anid: 'name', + + __fullText: name, + __truncatedText: truncatedText, + + position: pos, + rotation: labelLayout.rotation, + silent: isSilent(axisModel), + z2: 1, + tooltip: (tooltipOpt && tooltipOpt.show) + ? extend({ + content: name, + formatter: function () { + return name; + }, + formatterParams: formatterParams + }, tooltipOpt) + : null + }); + + setTextStyle(textEl.style, textStyleModel, { + text: truncatedText, + textFont: textFont, + textFill: textStyleModel.getTextColor() + || axisModel.get('axisLine.lineStyle.color'), + textAlign: labelLayout.textAlign, + textVerticalAlign: labelLayout.textVerticalAlign + }); + + if (axisModel.get('triggerEvent')) { + textEl.eventData = makeAxisEventDataBase(axisModel); + textEl.eventData.targetType = 'axisName'; + textEl.eventData.name = name; + } + + // FIXME + this._dumbGroup.add(textEl); + textEl.updateTransform(); + + this.group.add(textEl); + + textEl.decomposeTransform(); + } + +}; + +/** + * @public + * @static + * @param {Object} opt + * @param {number} axisRotation in radian + * @param {number} textRotation in radian + * @param {number} direction + * @return {Object} { + * rotation, // according to axis + * textAlign, + * textVerticalAlign + * } + */ +var innerTextLayout = AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) { + var rotationDiff = remRadian(textRotation - axisRotation); + var textAlign; + var textVerticalAlign; + + if (isRadianAroundZero(rotationDiff)) { // Label is parallel with axis line. + textVerticalAlign = direction > 0 ? 'top' : 'bottom'; + textAlign = 'center'; + } + else if (isRadianAroundZero(rotationDiff - PI$2)) { // Label is inverse parallel with axis line. + textVerticalAlign = direction > 0 ? 'bottom' : 'top'; + textAlign = 'center'; + } + else { + textVerticalAlign = 'middle'; + + if (rotationDiff > 0 && rotationDiff < PI$2) { + textAlign = direction > 0 ? 'right' : 'left'; + } + else { + textAlign = direction > 0 ? 'left' : 'right'; + } + } + + return { + rotation: rotationDiff, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +}; + +function endTextLayout(opt, textPosition, textRotate, extent) { + var rotationDiff = remRadian(textRotate - opt.rotation); + var textAlign; + var textVerticalAlign; + var inverse = extent[0] > extent[1]; + var onLeft = (textPosition === 'start' && !inverse) + || (textPosition !== 'start' && inverse); + + if (isRadianAroundZero(rotationDiff - PI$2 / 2)) { + textVerticalAlign = onLeft ? 'bottom' : 'top'; + textAlign = 'center'; + } + else if (isRadianAroundZero(rotationDiff - PI$2 * 1.5)) { + textVerticalAlign = onLeft ? 'top' : 'bottom'; + textAlign = 'center'; + } + else { + textVerticalAlign = 'middle'; + if (rotationDiff < PI$2 * 1.5 && rotationDiff > PI$2 / 2) { + textAlign = onLeft ? 'left' : 'right'; + } + else { + textAlign = onLeft ? 'right' : 'left'; + } + } + + return { + rotation: rotationDiff, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; +} + +function isSilent(axisModel) { + var tooltipOpt = axisModel.get('tooltip'); + return axisModel.get('silent') + // Consider mouse cursor, add these restrictions. + || !( + axisModel.get('triggerEvent') || (tooltipOpt && tooltipOpt.show) + ); +} + +function fixMinMaxLabelShow(axisModel, labelEls, tickEls) { + // If min or max are user set, we need to check + // If the tick on min(max) are overlap on their neighbour tick + // If they are overlapped, we need to hide the min(max) tick label + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + // FIXME + // Have not consider onBand yet, where tick els is more than label els. + + labelEls = labelEls || []; + tickEls = tickEls || []; + + var firstLabel = labelEls[0]; + var nextLabel = labelEls[1]; + var lastLabel = labelEls[labelEls.length - 1]; + var prevLabel = labelEls[labelEls.length - 2]; + + var firstTick = tickEls[0]; + var nextTick = tickEls[1]; + var lastTick = tickEls[tickEls.length - 1]; + var prevTick = tickEls[tickEls.length - 2]; + + if (showMinLabel === false) { + ignoreEl(firstLabel); + ignoreEl(firstTick); + } + else if (isTwoLabelOverlapped(firstLabel, nextLabel)) { + if (showMinLabel) { + ignoreEl(nextLabel); + ignoreEl(nextTick); + } + else { + ignoreEl(firstLabel); + ignoreEl(firstTick); + } + } + + if (showMaxLabel === false) { + ignoreEl(lastLabel); + ignoreEl(lastTick); + } + else if (isTwoLabelOverlapped(prevLabel, lastLabel)) { + if (showMaxLabel) { + ignoreEl(prevLabel); + ignoreEl(prevTick); + } + else { + ignoreEl(lastLabel); + ignoreEl(lastTick); + } + } +} + +function ignoreEl(el) { + el && (el.ignore = true); +} + +function isTwoLabelOverlapped(current, next, labelLayout) { + // current and next has the same rotation. + var firstRect = current && current.getBoundingRect().clone(); + var nextRect = next && next.getBoundingRect().clone(); + + if (!firstRect || !nextRect) { + return; + } + + // When checking intersect of two rotated labels, we use mRotationBack + // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`. + var mRotationBack = identity([]); + rotate(mRotationBack, mRotationBack, -current.rotation); + + firstRect.applyTransform(mul$1([], mRotationBack, current.getLocalTransform())); + nextRect.applyTransform(mul$1([], mRotationBack, next.getLocalTransform())); + + return firstRect.intersect(nextRect); +} + +function isNameLocationCenter(nameLocation) { + return nameLocation === 'middle' || nameLocation === 'center'; +} + +/** + * @static + */ +var ifIgnoreOnTick$1 = AxisBuilder.ifIgnoreOnTick = function ( + axis, + i, + interval, + ticksCnt, + showMinLabel, + showMaxLabel +) { + if (i === 0 && showMinLabel || i === ticksCnt - 1 && showMaxLabel) { + return false; + } + + // FIXME + // Have not consider label overlap (if label is too long) yet. + + var rawTick; + var scale$$1 = axis.scale; + return scale$$1.type === 'ordinal' + && ( + typeof interval === 'function' + ? ( + rawTick = scale$$1.getTicks()[i], + !interval(rawTick, scale$$1.getLabel(rawTick)) + ) + : i % (interval + 1) + ); +}; + +/** + * @static + */ +var getInterval$1 = AxisBuilder.getInterval = function (model, labelInterval) { + var interval = model.get('interval'); + if (interval == null || interval == 'auto') { + interval = labelInterval; + } + return interval; +}; + +function buildAxisTick(axisBuilder, axisModel, opt) { + var axis = axisModel.axis; + + if (!axisModel.get('axisTick.show') || axis.scale.isBlank()) { + return; + } + + var tickModel = axisModel.getModel('axisTick'); + + var lineStyleModel = tickModel.getModel('lineStyle'); + var tickLen = tickModel.get('length'); + + var tickInterval = getInterval$1(tickModel, opt.labelInterval); + var ticksCoords = axis.getTicksCoords(tickModel.get('alignWithLabel')); + // FIXME + // Corresponds to ticksCoords ? + var ticks = axis.scale.getTicks(); + + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + var pt1 = []; + var pt2 = []; + var matrix = axisBuilder._transform; + + var tickEls = []; + + var ticksCnt = ticksCoords.length; + for (var i = 0; i < ticksCnt; i++) { + // Only ordinal scale support tick interval + if (ifIgnoreOnTick$1( + axis, i, tickInterval, ticksCnt, + showMinLabel, showMaxLabel + )) { + continue; + } + + var tickCoord = ticksCoords[i]; + + pt1[0] = tickCoord; + pt1[1] = 0; + pt2[0] = tickCoord; + pt2[1] = opt.tickDirection * tickLen; + + if (matrix) { + applyTransform(pt1, pt1, matrix); + applyTransform(pt2, pt2, matrix); + } + // Tick line, Not use group transform to have better line draw + var tickEl = new Line(subPixelOptimizeLine({ + // Id for animation + anid: 'tick_' + ticks[i], + + shape: { + x1: pt1[0], + y1: pt1[1], + x2: pt2[0], + y2: pt2[1] + }, + style: defaults( + lineStyleModel.getLineStyle(), + { + stroke: axisModel.get('axisLine.lineStyle.color') + } + ), + z2: 2, + silent: true + })); + axisBuilder.group.add(tickEl); + tickEls.push(tickEl); + } + + return tickEls; +} + +function buildAxisLabel(axisBuilder, axisModel, opt) { + var axis = axisModel.axis; + var show = retrieve(opt.axisLabelShow, axisModel.get('axisLabel.show')); + + if (!show || axis.scale.isBlank()) { + return; + } + + var labelModel = axisModel.getModel('axisLabel'); + var labelMargin = labelModel.get('margin'); + var ticks = axis.scale.getTicks(); + var labels = axisModel.getFormattedLabels(); + + // Special label rotate. + var labelRotation = ( + retrieve(opt.labelRotate, labelModel.get('rotate')) || 0 + ) * PI$2 / 180; + + var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection); + var categoryData = axisModel.get('data'); + + var labelEls = []; + var silent = isSilent(axisModel); + var triggerEvent = axisModel.get('triggerEvent'); + + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + each$1(ticks, function (tickVal, index) { + if (ifIgnoreOnTick$1( + axis, index, opt.labelInterval, ticks.length, + showMinLabel, showMaxLabel + )) { + return; + } + + var itemLabelModel = labelModel; + if (categoryData && categoryData[tickVal] && categoryData[tickVal].textStyle) { + itemLabelModel = new Model( + categoryData[tickVal].textStyle, labelModel, axisModel.ecModel + ); + } + + var textColor = itemLabelModel.getTextColor() + || axisModel.get('axisLine.lineStyle.color'); + + var tickCoord = axis.dataToCoord(tickVal); + var pos = [ + tickCoord, + opt.labelOffset + opt.labelDirection * labelMargin + ]; + var labelStr = axis.scale.getLabel(tickVal); + + var textEl = new Text({ + // Id for animation + anid: 'label_' + tickVal, + position: pos, + rotation: labelLayout.rotation, + silent: silent, + z2: 10 + }); + + setTextStyle(textEl.style, itemLabelModel, { + text: labels[index], + textAlign: itemLabelModel.getShallow('align', true) + || labelLayout.textAlign, + textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true) + || itemLabelModel.getShallow('baseline', true) + || labelLayout.textVerticalAlign, + textFill: typeof textColor === 'function' + ? textColor( + // (1) In category axis with data zoom, tick is not the original + // index of axis.data. So tick should not be exposed to user + // in category axis. + // (2) Compatible with previous version, which always returns labelStr. + // But in interval scale labelStr is like '223,445', which maked + // user repalce ','. So we modify it to return original val but remain + // it as 'string' to avoid error in replacing. + axis.type === 'category' ? labelStr : axis.type === 'value' ? tickVal + '' : tickVal, + index + ) + : textColor + }); + + // Pack data for mouse event + if (triggerEvent) { + textEl.eventData = makeAxisEventDataBase(axisModel); + textEl.eventData.targetType = 'axisLabel'; + textEl.eventData.value = labelStr; + } + + // FIXME + axisBuilder._dumbGroup.add(textEl); + textEl.updateTransform(); + + labelEls.push(textEl); + axisBuilder.group.add(textEl); + + textEl.decomposeTransform(); + + }); + + return labelEls; +} + +var each$9 = each$1; +var curry$1 = curry; + +// Build axisPointerModel, mergin tooltip.axisPointer model for each axis. +// allAxesInfo should be updated when setOption performed. +function collect(ecModel, api) { + var result = { + /** + * key: makeKey(axis.model) + * value: { + * axis, + * coordSys, + * axisPointerModel, + * triggerTooltip, + * involveSeries, + * snap, + * seriesModels, + * seriesDataCount + * } + */ + axesInfo: {}, + seriesInvolved: false, + /** + * key: makeKey(coordSys.model) + * value: Object: key makeKey(axis.model), value: axisInfo + */ + coordSysAxesInfo: {}, + coordSysMap: {} + }; + + collectAxesInfo(result, ecModel, api); + + // Check seriesInvolved for performance, in case too many series in some chart. + result.seriesInvolved && collectSeriesInfo(result, ecModel); + + return result; +} + +function collectAxesInfo(result, ecModel, api) { + var globalTooltipModel = ecModel.getComponent('tooltip'); + var globalAxisPointerModel = ecModel.getComponent('axisPointer'); + // links can only be set on global. + var linksOption = globalAxisPointerModel.get('link', true) || []; + var linkGroups = []; + + // Collect axes info. + each$9(api.getCoordinateSystems(), function (coordSys) { + // Some coordinate system do not support axes, like geo. + if (!coordSys.axisPointerEnabled) { + return; + } + + var coordSysKey = makeKey(coordSys.model); + var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {}; + result.coordSysMap[coordSysKey] = coordSys; + + // Set tooltip (like 'cross') is a convienent way to show axisPointer + // for user. So we enable seting tooltip on coordSys model. + var coordSysModel = coordSys.model; + var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel); + + each$9(coordSys.getAxes(), curry$1(saveTooltipAxisInfo, false, null)); + + // If axis tooltip used, choose tooltip axis for each coordSys. + // Notice this case: coordSys is `grid` but not `cartesian2D` here. + if (coordSys.getTooltipAxes + && globalTooltipModel + // If tooltip.showContent is set as false, tooltip will not + // show but axisPointer will show as normal. + && baseTooltipModel.get('show') + ) { + // Compatible with previous logic. But series.tooltip.trigger: 'axis' + // or series.data[n].tooltip.trigger: 'axis' are not support any more. + var triggerAxis = baseTooltipModel.get('trigger') === 'axis'; + var cross = baseTooltipModel.get('axisPointer.type') === 'cross'; + var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get('axisPointer.axis')); + if (triggerAxis || cross) { + each$9(tooltipAxes.baseAxes, curry$1( + saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis + )); + } + if (cross) { + each$9(tooltipAxes.otherAxes, curry$1(saveTooltipAxisInfo, 'cross', false)); + } + } + + // fromTooltip: true | false | 'cross' + // triggerTooltip: true | false | null + function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) { + var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel); + + var axisPointerShow = axisPointerModel.get('show'); + if (!axisPointerShow || ( + axisPointerShow === 'auto' + && !fromTooltip + && !isHandleTrigger(axisPointerModel) + )) { + return; + } + + if (triggerTooltip == null) { + triggerTooltip = axisPointerModel.get('triggerTooltip'); + } + + axisPointerModel = fromTooltip + ? makeAxisPointerModel( + axis, baseTooltipModel, globalAxisPointerModel, ecModel, + fromTooltip, triggerTooltip + ) + : axisPointerModel; + + var snap = axisPointerModel.get('snap'); + var key = makeKey(axis.model); + var involveSeries = triggerTooltip || snap || axis.type === 'category'; + + // If result.axesInfo[key] exist, override it (tooltip has higher priority). + var axisInfo = result.axesInfo[key] = { + key: key, + axis: axis, + coordSys: coordSys, + axisPointerModel: axisPointerModel, + triggerTooltip: triggerTooltip, + involveSeries: involveSeries, + snap: snap, + useHandle: isHandleTrigger(axisPointerModel), + seriesModels: [] + }; + axesInfoInCoordSys[key] = axisInfo; + result.seriesInvolved |= involveSeries; + + var groupIndex = getLinkGroupIndex(linksOption, axis); + if (groupIndex != null) { + var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {axesInfo: {}}); + linkGroup.axesInfo[key] = axisInfo; + linkGroup.mapper = linksOption[groupIndex].mapper; + axisInfo.linkGroup = linkGroup; + } + } + }); +} + +function makeAxisPointerModel( + axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip +) { + var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer'); + var volatileOption = {}; + + each$9( + [ + 'type', 'snap', 'lineStyle', 'shadowStyle', 'label', + 'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z' + ], + function (field) { + volatileOption[field] = clone(tooltipAxisPointerModel.get(field)); + } + ); + + // category axis do not auto snap, otherwise some tick that do not + // has value can not be hovered. value/time/log axis default snap if + // triggered from tooltip and trigger tooltip. + volatileOption.snap = axis.type !== 'category' && !!triggerTooltip; + + // Compatibel with previous behavior, tooltip axis do not show label by default. + // Only these properties can be overrided from tooltip to axisPointer. + if (tooltipAxisPointerModel.get('type') === 'cross') { + volatileOption.type = 'line'; + } + var labelOption = volatileOption.label || (volatileOption.label = {}); + // Follow the convention, do not show label when triggered by tooltip by default. + labelOption.show == null && (labelOption.show = false); + + if (fromTooltip === 'cross') { + // When 'cross', both axes show labels. + labelOption.show = true; + // If triggerTooltip, this is a base axis, which should better not use cross style + // (cross style is dashed by default) + if (!triggerTooltip) { + var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle'); + crossStyle && defaults(labelOption, crossStyle.textStyle); + } + } + + return axis.model.getModel( + 'axisPointer', + new Model(volatileOption, globalAxisPointerModel, ecModel) + ); +} + +function collectSeriesInfo(result, ecModel) { + // Prepare data for axis trigger + ecModel.eachSeries(function (seriesModel) { + + // Notice this case: this coordSys is `cartesian2D` but not `grid`. + var coordSys = seriesModel.coordinateSystem; + var seriesTooltipTrigger = seriesModel.get('tooltip.trigger', true); + var seriesTooltipShow = seriesModel.get('tooltip.show', true); + if (!coordSys + || seriesTooltipTrigger === 'none' + || seriesTooltipTrigger === false + || seriesTooltipTrigger === 'item' + || seriesTooltipShow === false + || seriesModel.get('axisPointer.show', true) === false + ) { + return; + } + + each$9(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) { + var axis = axisInfo.axis; + if (coordSys.getAxis(axis.dim) === axis) { + axisInfo.seriesModels.push(seriesModel); + axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0); + axisInfo.seriesDataCount += seriesModel.getData().count(); + } + }); + + }, this); +} + +/** + * For example: + * { + * axisPointer: { + * links: [{ + * xAxisIndex: [2, 4], + * yAxisIndex: 'all' + * }, { + * xAxisId: ['a5', 'a7'], + * xAxisName: 'xxx' + * }] + * } + * } + */ +function getLinkGroupIndex(linksOption, axis) { + var axisModel = axis.model; + var dim = axis.dim; + for (var i = 0; i < linksOption.length; i++) { + var linkOption = linksOption[i] || {}; + if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id) + || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex) + || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name) + ) { + return i; + } + } +} + +function checkPropInLink(linkPropValue, axisPropValue) { + return linkPropValue === 'all' + || (isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0) + || linkPropValue === axisPropValue; +} + +function fixValue(axisModel) { + var axisInfo = getAxisInfo(axisModel); + if (!axisInfo) { + return; + } + + var axisPointerModel = axisInfo.axisPointerModel; + var scale = axisInfo.axis.scale; + var option = axisPointerModel.option; + var status = axisPointerModel.get('status'); + var value = axisPointerModel.get('value'); + + // Parse init value for category and time axis. + if (value != null) { + value = scale.parse(value); + } + + var useHandle = isHandleTrigger(axisPointerModel); + // If `handle` used, `axisPointer` will always be displayed, so value + // and status should be initialized. + if (status == null) { + option.status = useHandle ? 'show' : 'hide'; + } + + var extent = scale.getExtent().slice(); + extent[0] > extent[1] && extent.reverse(); + + if (// Pick a value on axis when initializing. + value == null + // If both `handle` and `dataZoom` are used, value may be out of axis extent, + // where we should re-pick a value to keep `handle` displaying normally. + || value > extent[1] + ) { + // Make handle displayed on the end of the axis when init, which looks better. + value = extent[1]; + } + if (value < extent[0]) { + value = extent[0]; + } + + option.value = value; + + if (useHandle) { + option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show'; + } +} + +function getAxisInfo(axisModel) { + var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo; + return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)]; +} + +function getAxisPointerModel(axisModel) { + var axisInfo = getAxisInfo(axisModel); + return axisInfo && axisInfo.axisPointerModel; +} + +function isHandleTrigger(axisPointerModel) { + return !!axisPointerModel.get('handle.show'); +} + +/** + * @param {module:echarts/model/Model} model + * @return {string} unique key + */ +function makeKey(model) { + return model.type + '||' + model.id; +} + +/** + * Base class of AxisView. + */ +var AxisView = extendComponentView({ + + type: 'axis', + + /** + * @private + */ + _axisPointer: null, + + /** + * @protected + * @type {string} + */ + axisPointerClass: null, + + /** + * @override + */ + render: function (axisModel, ecModel, api, payload) { + // FIXME + // This process should proformed after coordinate systems updated + // (axis scale updated), and should be performed each time update. + // So put it here temporarily, although it is not appropriate to + // put a model-writing procedure in `view`. + this.axisPointerClass && fixValue(axisModel); + + AxisView.superApply(this, 'render', arguments); + + updateAxisPointer(this, axisModel, ecModel, api, payload, true); + }, + + /** + * Action handler. + * @public + * @param {module:echarts/coord/cartesian/AxisModel} axisModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @param {Object} payload + */ + updateAxisPointer: function (axisModel, ecModel, api, payload, force) { + updateAxisPointer(this, axisModel, ecModel, api, payload, false); + }, + + /** + * @override + */ + remove: function (ecModel, api) { + var axisPointer = this._axisPointer; + axisPointer && axisPointer.remove(api); + AxisView.superApply(this, 'remove', arguments); + }, + + /** + * @override + */ + dispose: function (ecModel, api) { + disposeAxisPointer(this, api); + AxisView.superApply(this, 'dispose', arguments); + } + +}); + +function updateAxisPointer(axisView, axisModel, ecModel, api, payload, forceRender) { + var Clazz = AxisView.getAxisPointerClass(axisView.axisPointerClass); + if (!Clazz) { + return; + } + var axisPointerModel = getAxisPointerModel(axisModel); + axisPointerModel + ? (axisView._axisPointer || (axisView._axisPointer = new Clazz())) + .render(axisModel, axisPointerModel, api, forceRender) + : disposeAxisPointer(axisView, api); +} + +function disposeAxisPointer(axisView, ecModel, api) { + var axisPointer = axisView._axisPointer; + axisPointer && axisPointer.dispose(ecModel, api); + axisView._axisPointer = null; +} + +var axisPointerClazz = []; + +AxisView.registerAxisPointerClass = function (type, clazz) { + if (__DEV__) { + if (axisPointerClazz[type]) { + throw new Error('axisPointer ' + type + ' exists'); + } + } + axisPointerClazz[type] = clazz; +}; + +AxisView.getAxisPointerClass = function (type) { + return type && axisPointerClazz[type]; +}; + +/** + * @param {Object} opt {labelInside} + * @return {Object} { + * position, rotation, labelDirection, labelOffset, + * tickDirection, labelRotate, labelInterval, z2 + * } + */ +function layout(gridModel, axisModel, opt) { + opt = opt || {}; + var grid = gridModel.coordinateSystem; + var axis = axisModel.axis; + var layout = {}; + + var rawAxisPosition = axis.position; + var axisPosition = axis.onZero ? 'onZero' : rawAxisPosition; + var axisDim = axis.dim; + + var rect = grid.getRect(); + var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height]; + var idx = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2}; + var axisOffset = axisModel.get('offset') || 0; + + var posBound = axisDim === 'x' + ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] + : [rectBound[0] - axisOffset, rectBound[1] + axisOffset]; + + if (axis.onZero) { + var otherAxis = grid.getAxis(axisDim === 'x' ? 'y' : 'x', axis.onZeroAxisIndex); + var onZeroCoord = otherAxis.toGlobalCoord(otherAxis.dataToCoord(0)); + posBound[idx['onZero']] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]); + } + + // Axis position + layout.position = [ + axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0], + axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3] + ]; + + // Axis rotation + layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1); + + // Tick and label direction, x y is axisDim + var dirMap = {top: -1, bottom: 1, left: -1, right: 1}; + + layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition]; + layout.labelOffset = axis.onZero ? posBound[idx[rawAxisPosition]] - posBound[idx['onZero']] : 0; + + if (axisModel.get('axisTick.inside')) { + layout.tickDirection = -layout.tickDirection; + } + if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) { + layout.labelDirection = -layout.labelDirection; + } + + // Special label rotation + var labelRotate = axisModel.get('axisLabel.rotate'); + layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate; + + // label interval when auto mode. + layout.labelInterval = axis.getLabelInterval(); + + // Over splitLine and splitArea + layout.z2 = 1; + + return layout; +} + +var ifIgnoreOnTick = AxisBuilder.ifIgnoreOnTick; +var getInterval = AxisBuilder.getInterval; + +var axisBuilderAttrs = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; +var selfBuilderAttrs = [ + 'splitArea', 'splitLine' +]; + +// function getAlignWithLabel(model, axisModel) { +// var alignWithLabel = model.get('alignWithLabel'); +// if (alignWithLabel === 'auto') { +// alignWithLabel = axisModel.get('axisTick.alignWithLabel'); +// } +// return alignWithLabel; +// } + +var CartesianAxisView = AxisView.extend({ + + type: 'cartesianAxis', + + axisPointerClass: 'CartesianAxisPointer', + + /** + * @override + */ + render: function (axisModel, ecModel, api, payload) { + + this.group.removeAll(); + + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + + this.group.add(this._axisGroup); + + if (!axisModel.get('show')) { + return; + } + + var gridModel = axisModel.getCoordSysModel(); + + var layout$$1 = layout(gridModel, axisModel); + + var axisBuilder = new AxisBuilder(axisModel, layout$$1); + + each$1(axisBuilderAttrs, axisBuilder.add, axisBuilder); + + this._axisGroup.add(axisBuilder.getGroup()); + + each$1(selfBuilderAttrs, function (name) { + if (axisModel.get(name + '.show')) { + this['_' + name](axisModel, gridModel, layout$$1.labelInterval); + } + }, this); + + groupTransition(oldAxisGroup, this._axisGroup, axisModel); + + CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload); + }, + + /** + * @param {module:echarts/coord/cartesian/AxisModel} axisModel + * @param {module:echarts/coord/cartesian/GridModel} gridModel + * @param {number|Function} labelInterval + * @private + */ + _splitLine: function (axisModel, gridModel, labelInterval) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitLineModel = axisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + + var lineInterval = getInterval(splitLineModel, labelInterval); + + lineColors = isArray(lineColors) ? lineColors : [lineColors]; + + var gridRect = gridModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + + var lineCount = 0; + + var ticksCoords = axis.getTicksCoords( + // splitLineModel.get('alignWithLabel') + ); + var ticks = axis.scale.getTicks(); + + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + var p1 = []; + var p2 = []; + // Simple optimization + // Batching the lines if color are the same + var lineStyle = lineStyleModel.getLineStyle(); + for (var i = 0; i < ticksCoords.length; i++) { + if (ifIgnoreOnTick( + axis, i, lineInterval, ticksCoords.length, + showMinLabel, showMaxLabel + )) { + continue; + } + + var tickCoord = axis.toGlobalCoord(ticksCoords[i]); + + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } + else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + + var colorIndex = (lineCount++) % lineColors.length; + this._axisGroup.add(new Line(subPixelOptimizeLine({ + anid: 'line_' + ticks[i], + + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + style: defaults({ + stroke: lineColors[colorIndex] + }, lineStyle), + silent: true + }))); + } + }, + + /** + * @param {module:echarts/coord/cartesian/AxisModel} axisModel + * @param {module:echarts/coord/cartesian/GridModel} gridModel + * @param {number|Function} labelInterval + * @private + */ + _splitArea: function (axisModel, gridModel, labelInterval) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitAreaModel = axisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + + var gridRect = gridModel.coordinateSystem.getRect(); + + var ticksCoords = axis.getTicksCoords( + // splitAreaModel.get('alignWithLabel') + ); + var ticks = axis.scale.getTicks(); + + var prevX = axis.toGlobalCoord(ticksCoords[0]); + var prevY = axis.toGlobalCoord(ticksCoords[0]); + + var count = 0; + + var areaInterval = getInterval(splitAreaModel, labelInterval); + + var areaStyle = areaStyleModel.getAreaStyle(); + areaColors = isArray(areaColors) ? areaColors : [areaColors]; + + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + for (var i = 1; i < ticksCoords.length; i++) { + if (ifIgnoreOnTick( + axis, i, areaInterval, ticksCoords.length, + showMinLabel, showMaxLabel + )) { + continue; + } + + var tickCoord = axis.toGlobalCoord(ticksCoords[i]); + + var x; + var y; + var width; + var height; + if (axis.isHorizontal()) { + x = prevX; + y = gridRect.y; + width = tickCoord - x; + height = gridRect.height; + } + else { + x = gridRect.x; + y = prevY; + width = gridRect.width; + height = tickCoord - y; + } + + var colorIndex = (count++) % areaColors.length; + this._axisGroup.add(new Rect({ + anid: 'area_' + ticks[i], + + shape: { + x: x, + y: y, + width: width, + height: height + }, + style: defaults({ + fill: areaColors[colorIndex] + }, areaStyle), + silent: true + })); + + prevX = x + width; + prevY = y + height; + } + } +}); + +CartesianAxisView.extend({ + type: 'xAxis' +}); +CartesianAxisView.extend({ + type: 'yAxis' +}); + +// Grid view +extendComponentView({ + + type: 'grid', + + render: function (gridModel, ecModel) { + this.group.removeAll(); + if (gridModel.get('show')) { + this.group.add(new Rect({ + shape: gridModel.coordinateSystem.getRect(), + style: defaults({ + fill: gridModel.get('backgroundColor') + }, gridModel.getItemStyle()), + silent: true, + z2: -1 + })); + } + } + +}); + +registerPreprocessor(function (option) { + // Only create grid when need + if (option.xAxis && option.yAxis && !option.grid) { + option.grid = {}; + } +}); + +// In case developer forget to include grid component +registerVisual(curry( + visualSymbol, 'line', 'circle', 'line' +)); +registerLayout(curry( + layoutPoints, 'line' +)); + +// Down sample after filter +registerProcessor(PRIORITY.PROCESSOR.STATISTIC, curry( + dataSample, 'line' +)); + +var STACK_PREFIX = '__ec_stack_'; + +function getSeriesStackId(seriesModel) { + return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex; +} + +function getAxisKey(axis) { + return axis.dim + axis.index; +} + +/** + * @param {Object} opt + * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently. + * @param {number} opt.count Positive interger. + * @param {number} [opt.barWidth] + * @param {number} [opt.barMaxWidth] + * @param {number} [opt.barGap] + * @param {number} [opt.barCategoryGap] + * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined. + */ +function getLayoutOnAxis(opt, api) { + var params = []; + var baseAxis = opt.axis; + var axisKey = 'axis0'; + + if (baseAxis.type !== 'category') { + return; + } + var bandWidth = baseAxis.getBandWidth(); + + for (var i = 0; i < opt.count || 0; i++) { + params.push(defaults({ + bandWidth: bandWidth, + axisKey: axisKey, + stackId: STACK_PREFIX + i + }, opt)); + } + var widthAndOffsets = doCalBarWidthAndOffset(params, api); + + var result = []; + for (var i = 0; i < opt.count; i++) { + var item = widthAndOffsets[axisKey][STACK_PREFIX + i]; + item.offsetCenter = item.offset + item.width / 2; + result.push(item); + } + + return result; +} + +function calBarWidthAndOffset(barSeries, api) { + var seriesInfoList = map(barSeries, function (seriesModel) { + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var axisExtent = baseAxis.getExtent(); + var bandWidth = baseAxis.type === 'category' + ? baseAxis.getBandWidth() + : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count()); + + var barWidth = parsePercent$1( + seriesModel.get('barWidth'), bandWidth + ); + var barMaxWidth = parsePercent$1( + seriesModel.get('barMaxWidth'), bandWidth + ); + var barGap = seriesModel.get('barGap'); + var barCategoryGap = seriesModel.get('barCategoryGap'); + + return { + bandWidth: bandWidth, + barWidth: barWidth, + barMaxWidth: barMaxWidth, + barGap: barGap, + barCategoryGap: barCategoryGap, + axisKey: getAxisKey(baseAxis), + stackId: getSeriesStackId(seriesModel) + }; + }); + + return doCalBarWidthAndOffset(seriesInfoList, api); +} + +function doCalBarWidthAndOffset(seriesInfoList, api) { + // Columns info on each category axis. Key is cartesian name + var columnsMap = {}; + + each$1(seriesInfoList, function (seriesInfo, idx) { + var axisKey = seriesInfo.axisKey; + var bandWidth = seriesInfo.bandWidth; + var columnsOnAxis = columnsMap[axisKey] || { + bandWidth: bandWidth, + remainedWidth: bandWidth, + autoWidthCount: 0, + categoryGap: '20%', + gap: '30%', + stacks: {} + }; + var stacks = columnsOnAxis.stacks; + columnsMap[axisKey] = columnsOnAxis; + + var stackId = seriesInfo.stackId; + + if (!stacks[stackId]) { + columnsOnAxis.autoWidthCount++; + } + stacks[stackId] = stacks[stackId] || { + width: 0, + maxWidth: 0 + }; + + // Caution: In a single coordinate system, these barGrid attributes + // will be shared by series. Consider that they have default values, + // only the attributes set on the last series will work. + // Do not change this fact unless there will be a break change. + + // TODO + var barWidth = seriesInfo.barWidth; + if (barWidth && !stacks[stackId].width) { + // See #6312, do not restrict width. + stacks[stackId].width = barWidth; + barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth); + columnsOnAxis.remainedWidth -= barWidth; + } + + var barMaxWidth = seriesInfo.barMaxWidth; + barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); + var barGap = seriesInfo.barGap; + (barGap != null) && (columnsOnAxis.gap = barGap); + var barCategoryGap = seriesInfo.barCategoryGap; + (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap); + }); + + var result = {}; + + each$1(columnsMap, function (columnsOnAxis, coordSysName) { + + result[coordSysName] = {}; + + var stacks = columnsOnAxis.stacks; + var bandWidth = columnsOnAxis.bandWidth; + var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth); + var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1); + + var remainedWidth = columnsOnAxis.remainedWidth; + var autoWidthCount = columnsOnAxis.autoWidthCount; + var autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + // Find if any auto calculated bar exceeded maxBarWidth + each$1(stacks, function (column, stack) { + var maxWidth = column.maxWidth; + if (maxWidth && maxWidth < autoWidth) { + maxWidth = Math.min(maxWidth, remainedWidth); + if (column.width) { + maxWidth = Math.min(maxWidth, column.width); + } + remainedWidth -= maxWidth; + column.width = maxWidth; + autoWidthCount--; + } + }); + + // Recalculate width again + autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + var widthSum = 0; + var lastColumn; + each$1(stacks, function (column, idx) { + if (!column.width) { + column.width = autoWidth; + } + lastColumn = column; + widthSum += column.width * (1 + barGapPercent); + }); + if (lastColumn) { + widthSum -= lastColumn.width * barGapPercent; + } + + var offset = -widthSum / 2; + each$1(stacks, function (column, stackId) { + result[coordSysName][stackId] = result[coordSysName][stackId] || { + offset: offset, + width: column.width + }; + + offset += column.width * (1 + barGapPercent); + }); + }); + + return result; +} + +/** + * @param {string} seriesType + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ +function barLayoutGrid(seriesType, ecModel, api) { + + var barWidthAndOffset = calBarWidthAndOffset( + filter( + ecModel.getSeriesByType(seriesType), + function (seriesModel) { + return !ecModel.isSeriesFiltered(seriesModel) + && seriesModel.coordinateSystem + && seriesModel.coordinateSystem.type === 'cartesian2d'; + } + ) + ); + + var lastStackCoords = {}; + var lastStackCoordsOrigin = {}; + + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + + // Check series coordinate, do layout for cartesian2d only + if (seriesModel.coordinateSystem.type !== 'cartesian2d') { + return; + } + + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + + var stackId = getSeriesStackId(seriesModel); + var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId]; + var columnOffset = columnLayoutInfo.offset; + var columnWidth = columnLayoutInfo.width; + var valueAxis = cartesian.getOtherAxis(baseAxis); + + var barMinHeight = seriesModel.get('barMinHeight') || 0; + + var valueAxisStart = baseAxis.onZero + ? valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)) + : valueAxis.getGlobalExtent()[0]; + + var coordDims = [ + seriesModel.coordDimToDataDim('x')[0], + seriesModel.coordDimToDataDim('y')[0] + ]; + var coords = data.mapArray(coordDims, function (x, y) { + return cartesian.dataToPoint([x, y]); + }, true); + + lastStackCoords[stackId] = lastStackCoords[stackId] || []; + lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243 + + data.setLayout({ + offset: columnOffset, + size: columnWidth + }); + + data.each(seriesModel.coordDimToDataDim(valueAxis.dim)[0], function (value, idx) { + if (isNaN(value)) { + return; + } + + if (!lastStackCoords[stackId][idx]) { + lastStackCoords[stackId][idx] = { + p: valueAxisStart, // Positive stack + n: valueAxisStart // Negative stack + }; + lastStackCoordsOrigin[stackId][idx] = { + p: valueAxisStart, // Positive stack + n: valueAxisStart // Negative stack + }; + } + var sign = value >= 0 ? 'p' : 'n'; + var coord = coords[idx]; + var lastCoord = lastStackCoords[stackId][idx][sign]; + var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign]; + var x; + var y; + var width; + var height; + + if (valueAxis.isHorizontal()) { + x = lastCoord; + y = coord[1] + columnOffset; + width = coord[0] - lastCoordOrigin; + height = columnWidth; + + lastStackCoordsOrigin[stackId][idx][sign] += width; + if (Math.abs(width) < barMinHeight) { + width = (width < 0 ? -1 : 1) * barMinHeight; + } + lastStackCoords[stackId][idx][sign] += width; + } + else { + x = coord[0] + columnOffset; + y = lastCoord; + width = columnWidth; + height = coord[1] - lastCoordOrigin; + + lastStackCoordsOrigin[stackId][idx][sign] += height; + if (Math.abs(height) < barMinHeight) { + // Include zero to has a positive bar + height = (height <= 0 ? -1 : 1) * barMinHeight; + } + lastStackCoords[stackId][idx][sign] += height; + } + + data.setItemLayout(idx, { + x: x, + y: y, + width: width, + height: height + }); + }, true); + + }, this); +} + +barLayoutGrid.getLayoutOnAxis = getLayoutOnAxis; + +var BaseBarSeries = SeriesModel.extend({ + + type: 'series.__base_bar__', + + getInitialData: function (option, ecModel) { + return createListFromArray(option.data, this, ecModel); + }, + + getMarkerPosition: function (value) { + var coordSys = this.coordinateSystem; + if (coordSys) { + // PENDING if clamp ? + var pt = coordSys.dataToPoint(value, true); + var data = this.getData(); + var offset = data.getLayout('offset'); + var size = data.getLayout('size'); + var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1; + pt[offsetIndex] += offset + size / 2; + return pt; + } + return [NaN, NaN]; + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + // stack: null + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // 最小高度改为0 + barMinHeight: 0, + // 最小角度为0,仅对极坐标系下的柱状图有效 + barMinAngle: 0, + // cursor: null, + + // barMaxWidth: null, + // 默认自适应 + // barWidth: null, + // 柱间距离,默认为柱形宽度的30%,可设固定值 + // barGap: '30%', + // 类目间柱形距离,默认为类目间距的20%,可设固定值 + // barCategoryGap: '20%', + // label: { + // normal: { + // show: false + // } + // }, + itemStyle: { + // normal: { + // color: '各异' + // }, + // emphasis: {} + } + } +}); + +BaseBarSeries.extend({ + + type: 'series.bar', + + dependencies: ['grid', 'polar'], + + brushSelector: 'rect' +}); + +function setLabel( + normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside +) { + var labelModel = itemModel.getModel('label.normal'); + var hoverLabelModel = itemModel.getModel('label.emphasis'); + + setLabelStyle( + normalStyle, hoverStyle, labelModel, hoverLabelModel, + { + labelFetcher: seriesModel, + labelDataIndex: dataIndex, + defaultText: seriesModel.getRawValue(dataIndex), + isRectText: true, + autoColor: color + } + ); + + fixPosition(normalStyle); + fixPosition(hoverStyle); +} + +function fixPosition(style, labelPositionOutside) { + if (style.textPosition === 'outside') { + style.textPosition = labelPositionOutside; + } +} + +var getBarItemStyle = makeStyleMapper( + [ + ['fill', 'color'], + ['stroke', 'borderColor'], + ['lineWidth', 'borderWidth'], + // Compatitable with 2 + ['stroke', 'barBorderColor'], + ['lineWidth', 'barBorderWidth'], + ['opacity'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'] + ] +); + +var barItemStyle = { + getBarItemStyle: function (excludes) { + var style = getBarItemStyle(this, excludes); + if (this.getBorderLineDash) { + var lineDash = this.getBorderLineDash(); + lineDash && (style.lineDash = lineDash); + } + return style; + } +}; + +var BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'normal', 'barBorderWidth']; + +// FIXME +// Just for compatible with ec2. +extend(Model.prototype, barItemStyle); + +extendChartView({ + + type: 'bar', + + render: function (seriesModel, ecModel, api) { + var coordinateSystemType = seriesModel.get('coordinateSystem'); + + if (coordinateSystemType === 'cartesian2d' + || coordinateSystemType === 'polar' + ) { + this._render(seriesModel, ecModel, api); + } + else if (__DEV__) { + console.warn('Only cartesian2d and polar supported for bar.'); + } + + return this.group; + }, + + dispose: noop, + + _render: function (seriesModel, ecModel, api) { + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + + var coord = seriesModel.coordinateSystem; + var baseAxis = coord.getBaseAxis(); + var isHorizontalOrRadial; + + if (coord.type === 'cartesian2d') { + isHorizontalOrRadial = baseAxis.isHorizontal(); + } + else if (coord.type === 'polar') { + isHorizontalOrRadial = baseAxis.dim === 'angle'; + } + + var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null; + + data.diff(oldData) + .add(function (dataIndex) { + if (!data.hasValue(dataIndex)) { + return; + } + + var itemModel = data.getItemModel(dataIndex); + var layout = getLayout[coord.type](data, dataIndex, itemModel); + var el = elementCreator[coord.type]( + data, dataIndex, itemModel, layout, isHorizontalOrRadial, animationModel + ); + data.setItemGraphicEl(dataIndex, el); + group.add(el); + + updateStyle( + el, data, dataIndex, itemModel, layout, + seriesModel, isHorizontalOrRadial, coord.type === 'polar' + ); + }) + .update(function (newIndex, oldIndex) { + var el = oldData.getItemGraphicEl(oldIndex); + + if (!data.hasValue(newIndex)) { + group.remove(el); + return; + } + + var itemModel = data.getItemModel(newIndex); + var layout = getLayout[coord.type](data, newIndex, itemModel); + + if (el) { + updateProps(el, {shape: layout}, animationModel, newIndex); + } + else { + el = elementCreator[coord.type]( + data, newIndex, itemModel, layout, isHorizontalOrRadial, animationModel, true + ); + } + + data.setItemGraphicEl(newIndex, el); + // Add back + group.add(el); + + updateStyle( + el, data, newIndex, itemModel, layout, + seriesModel, isHorizontalOrRadial, coord.type === 'polar' + ); + }) + .remove(function (dataIndex) { + var el = oldData.getItemGraphicEl(dataIndex); + if (coord.type === 'cartesian2d') { + el && removeRect(dataIndex, animationModel, el); + } + else { + el && removeSector(dataIndex, animationModel, el); + } + }) + .execute(); + + this._data = data; + }, + + remove: function (ecModel, api) { + var group = this.group; + var data = this._data; + if (ecModel.get('animation')) { + if (data) { + data.eachItemGraphicEl(function (el) { + if (el.type === 'sector') { + removeSector(el.dataIndex, ecModel, el); + } + else { + removeRect(el.dataIndex, ecModel, el); + } + }); + } + } + else { + group.removeAll(); + } + } +}); + +var elementCreator = { + + cartesian2d: function ( + data, dataIndex, itemModel, layout, isHorizontal, + animationModel, isUpdate + ) { + var rect = new Rect({shape: extend({}, layout)}); + + // Animation + if (animationModel) { + var rectShape = rect.shape; + var animateProperty = isHorizontal ? 'height' : 'width'; + var animateTarget = {}; + rectShape[animateProperty] = 0; + animateTarget[animateProperty] = layout[animateProperty]; + graphic[isUpdate ? 'updateProps' : 'initProps'](rect, { + shape: animateTarget + }, animationModel, dataIndex); + } + + return rect; + }, + + polar: function ( + data, dataIndex, itemModel, layout, isRadial, + animationModel, isUpdate + ) { + var sector = new Sector({shape: extend({}, layout)}); + + // Animation + if (animationModel) { + var sectorShape = sector.shape; + var animateProperty = isRadial ? 'r' : 'endAngle'; + var animateTarget = {}; + sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle; + animateTarget[animateProperty] = layout[animateProperty]; + graphic[isUpdate ? 'updateProps' : 'initProps'](sector, { + shape: animateTarget + }, animationModel, dataIndex); + } + + return sector; + } +}; + +function removeRect(dataIndex, animationModel, el) { + // Not show text when animating + el.style.text = null; + updateProps(el, { + shape: { + width: 0 + } + }, animationModel, dataIndex, function () { + el.parent && el.parent.remove(el); + }); +} + +function removeSector(dataIndex, animationModel, el) { + // Not show text when animating + el.style.text = null; + updateProps(el, { + shape: { + r: el.shape.r0 + } + }, animationModel, dataIndex, function () { + el.parent && el.parent.remove(el); + }); +} + +var getLayout = { + cartesian2d: function (data, dataIndex, itemModel) { + var layout = data.getItemLayout(dataIndex); + var fixedLineWidth = getLineWidth(itemModel, layout); + + // fix layout with lineWidth + var signX = layout.width > 0 ? 1 : -1; + var signY = layout.height > 0 ? 1 : -1; + return { + x: layout.x + signX * fixedLineWidth / 2, + y: layout.y + signY * fixedLineWidth / 2, + width: layout.width - signX * fixedLineWidth, + height: layout.height - signY * fixedLineWidth + }; + }, + + polar: function (data, dataIndex, itemModel) { + var layout = data.getItemLayout(dataIndex); + return { + cx: layout.cx, + cy: layout.cy, + r0: layout.r0, + r: layout.r, + startAngle: layout.startAngle, + endAngle: layout.endAngle + }; + } +}; + +function updateStyle( + el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar +) { + var color = data.getItemVisual(dataIndex, 'color'); + var opacity = data.getItemVisual(dataIndex, 'opacity'); + var itemStyleModel = itemModel.getModel('itemStyle.normal'); + var hoverStyle = itemModel.getModel('itemStyle.emphasis').getBarItemStyle(); + + if (!isPolar) { + el.setShape('r', itemStyleModel.get('barBorderRadius') || 0); + } + + el.useStyle(defaults( + { + fill: color, + opacity: opacity + }, + itemStyleModel.getBarItemStyle() + )); + + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && el.attr('cursor', cursorStyle); + + var labelPositionOutside = isHorizontal + ? (layout.height > 0 ? 'bottom' : 'top') + : (layout.width > 0 ? 'left' : 'right'); + + if (!isPolar) { + setLabel( + el.style, hoverStyle, itemModel, color, + seriesModel, dataIndex, labelPositionOutside + ); + } + + setHoverStyle(el, hoverStyle); +} + +// In case width or height are too small. +function getLineWidth(itemModel, rawLayout) { + var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0; + return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height)); +} + +// In case developer forget to include grid component +registerLayout(curry(barLayoutGrid, 'bar')); + +// Visual coding for legend +registerVisual(function (ecModel) { + ecModel.eachSeriesByType('bar', function (seriesModel) { + var data = seriesModel.getData(); + data.setVisual('legendSymbol', 'roundRect'); + }); +}); + +/** + * Data selectable mixin for chart series. + * To eanble data select, option of series must have `selectedMode`. + * And each data item will use `selected` to toggle itself selected status + */ + +var selectableMixin = { + + updateSelectedMap: function (targetList) { + this._targetList = targetList.slice(); + this._selectTargetMap = reduce(targetList || [], function (targetMap, target) { + targetMap.set(target.name, target); + return targetMap; + }, createHashMap()); + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + // PENGING If selectedMode is null ? + select: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + var selectedMode = this.get('selectedMode'); + if (selectedMode === 'single') { + this._selectTargetMap.each(function (target) { + target.selected = false; + }); + } + target && (target.selected = true); + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + unSelect: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + // var selectedMode = this.get('selectedMode'); + // selectedMode !== 'single' && target && (target.selected = false); + target && (target.selected = false); + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + toggleSelected: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + if (target != null) { + this[target.selected ? 'unSelect' : 'select'](name, id); + return target.selected; + } + }, + + /** + * Either name or id should be passed as input here. + * If both of them are defined, id is used. + * + * @param {string|undefined} name name of data + * @param {number|undefined} id dataIndex of data + */ + isSelected: function (name, id) { + var target = id != null + ? this._targetList[id] + : this._selectTargetMap.get(name); + return target && target.selected; + } +}; + +var PieSeries = extendSeriesModel({ + + type: 'series.pie', + + // Overwrite + init: function (option) { + PieSeries.superApply(this, 'init', arguments); + + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + + this.updateSelectedMap(option.data); + + this._defaultLabelLine(option); + }, + + // Overwrite + mergeOption: function (newOption) { + PieSeries.superCall(this, 'mergeOption', newOption); + this.updateSelectedMap(this.option.data); + }, + + getInitialData: function (option, ecModel) { + var dimensions = completeDimensions(['value'], option.data); + var list = new List(dimensions, this); + list.initData(option.data); + return list; + }, + + // Overwrite + getDataParams: function (dataIndex) { + var data = this.getData(); + var params = PieSeries.superCall(this, 'getDataParams', dataIndex); + // FIXME toFixed? + + var valueList = []; + data.each('value', function (value) { + valueList.push(value); + }); + + params.percent = getPercentWithPrecision( + valueList, + dataIndex, + data.hostModel.get('percentPrecision') + ); + + params.$vars.push('percent'); + return params; + }, + + _defaultLabelLine: function (option) { + // Extend labelLine emphasis + defaultEmphasis(option.labelLine, ['show']); + + var labelLineNormalOpt = option.labelLine.normal; + var labelLineEmphasisOpt = option.labelLine.emphasis; + // Not show label line if `label.normal.show = false` + labelLineNormalOpt.show = labelLineNormalOpt.show + && option.label.normal.show; + labelLineEmphasisOpt.show = labelLineEmphasisOpt.show + && option.label.emphasis.show; + }, + + defaultOption: { + zlevel: 0, + z: 2, + legendHoverLink: true, + + hoverAnimation: true, + // 默认全局居中 + center: ['50%', '50%'], + radius: [0, '75%'], + // 默认顺时针 + clockwise: true, + startAngle: 90, + // 最小角度改为0 + minAngle: 0, + // 选中时扇区偏移量 + selectedOffset: 10, + // 高亮扇区偏移量 + hoverOffset: 10, + + // If use strategy to avoid label overlapping + avoidLabelOverlap: true, + // 选择模式,默认关闭,可选single,multiple + // selectedMode: false, + // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积) + // roseType: null, + + percentPrecision: 2, + + // If still show when all data zero. + stillShowZeroSum: true, + + // cursor: null, + + label: { + normal: { + // If rotate around circle + rotate: false, + show: true, + // 'outer', 'inside', 'center' + position: 'outer' + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + // 默认使用全局文本样式,详见TEXTSTYLE + // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数 + }, + emphasis: {} + }, + // Enabled when label.normal.position is 'outer' + labelLine: { + normal: { + show: true, + // 引导线两段中的第一段长度 + length: 15, + // 引导线两段中的第二段长度 + length2: 15, + smooth: false, + lineStyle: { + // color: 各异, + width: 1, + type: 'solid' + } + } + }, + itemStyle: { + normal: { + borderWidth: 1 + }, + emphasis: {} + }, + + // Animation type canbe expansion, scale + animationType: 'expansion', + + animationEasing: 'cubicOut', + + data: [] + } +}); + +mixin(PieSeries, selectableMixin); + +/** + * @param {module:echarts/model/Series} seriesModel + * @param {boolean} hasAnimation + * @inner + */ +function updateDataSelected(uid, seriesModel, hasAnimation, api) { + var data = seriesModel.getData(); + var dataIndex = this.dataIndex; + var name = data.getName(dataIndex); + var selectedOffset = seriesModel.get('selectedOffset'); + + api.dispatchAction({ + type: 'pieToggleSelect', + from: uid, + name: name, + seriesId: seriesModel.id + }); + + data.each(function (idx) { + toggleItemSelected( + data.getItemGraphicEl(idx), + data.getItemLayout(idx), + seriesModel.isSelected(data.getName(idx)), + selectedOffset, + hasAnimation + ); + }); +} + +/** + * @param {module:zrender/graphic/Sector} el + * @param {Object} layout + * @param {boolean} isSelected + * @param {number} selectedOffset + * @param {boolean} hasAnimation + * @inner + */ +function toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) { + var midAngle = (layout.startAngle + layout.endAngle) / 2; + + var dx = Math.cos(midAngle); + var dy = Math.sin(midAngle); + + var offset = isSelected ? selectedOffset : 0; + var position = [dx * offset, dy * offset]; + + hasAnimation + // animateTo will stop revious animation like update transition + ? el.animate() + .when(200, { + position: position + }) + .start('bounceOut') + : el.attr('position', position); +} + +/** + * Piece of pie including Sector, Label, LabelLine + * @constructor + * @extends {module:zrender/graphic/Group} + */ +function PiePiece(data, idx) { + + Group.call(this); + + var sector = new Sector({ + z2: 2 + }); + var polyline = new Polyline(); + var text = new Text(); + this.add(sector); + this.add(polyline); + this.add(text); + + this.updateData(data, idx, true); + + // Hover to change label and labelLine + function onEmphasis() { + polyline.ignore = polyline.hoverIgnore; + text.ignore = text.hoverIgnore; + } + function onNormal() { + polyline.ignore = polyline.normalIgnore; + text.ignore = text.normalIgnore; + } + this.on('emphasis', onEmphasis) + .on('normal', onNormal) + .on('mouseover', onEmphasis) + .on('mouseout', onNormal); +} + +var piePieceProto = PiePiece.prototype; + +piePieceProto.updateData = function (data, idx, firstCreate) { + + var sector = this.childAt(0); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var sectorShape = extend({}, layout); + sectorShape.label = null; + + if (firstCreate) { + sector.setShape(sectorShape); + + var animationType = seriesModel.getShallow('animationType'); + if (animationType === 'scale') { + sector.shape.r = layout.r0; + initProps(sector, { + shape: { + r: layout.r + } + }, seriesModel, idx); + } + // Expansion + else { + sector.shape.endAngle = layout.startAngle; + updateProps(sector, { + shape: { + endAngle: layout.endAngle + } + }, seriesModel, idx); + } + + } + else { + updateProps(sector, { + shape: sectorShape + }, seriesModel, idx); + } + + // Update common style + var itemStyleModel = itemModel.getModel('itemStyle'); + var visualColor = data.getItemVisual(idx, 'color'); + + sector.useStyle( + defaults( + { + lineJoin: 'bevel', + fill: visualColor + }, + itemStyleModel.getModel('normal').getItemStyle() + ) + ); + sector.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle(); + + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && sector.attr('cursor', cursorStyle); + + // Toggle selected + toggleItemSelected( + this, + data.getItemLayout(idx), + itemModel.get('selected'), + seriesModel.get('selectedOffset'), + seriesModel.get('animation') + ); + + function onEmphasis() { + // Sector may has animation of updating data. Force to move to the last frame + // Or it may stopped on the wrong shape + sector.stopAnimation(true); + sector.animateTo({ + shape: { + r: layout.r + seriesModel.get('hoverOffset') + } + }, 300, 'elasticOut'); + } + function onNormal() { + sector.stopAnimation(true); + sector.animateTo({ + shape: { + r: layout.r + } + }, 300, 'elasticOut'); + } + sector.off('mouseover').off('mouseout').off('emphasis').off('normal'); + if (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled()) { + sector + .on('mouseover', onEmphasis) + .on('mouseout', onNormal) + .on('emphasis', onEmphasis) + .on('normal', onNormal); + } + + this._updateLabel(data, idx); + + setHoverStyle(this); +}; + +piePieceProto._updateLabel = function (data, idx) { + + var labelLine = this.childAt(1); + var labelText = this.childAt(2); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var labelLayout = layout.label; + var visualColor = data.getItemVisual(idx, 'color'); + + updateProps(labelLine, { + shape: { + points: labelLayout.linePoints || [ + [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y] + ] + } + }, seriesModel, idx); + + updateProps(labelText, { + style: { + x: labelLayout.x, + y: labelLayout.y + } + }, seriesModel, idx); + labelText.attr({ + rotation: labelLayout.rotation, + origin: [labelLayout.x, labelLayout.y], + z2: 10 + }); + + var labelModel = itemModel.getModel('label.normal'); + var labelHoverModel = itemModel.getModel('label.emphasis'); + var labelLineModel = itemModel.getModel('labelLine.normal'); + var labelLineHoverModel = itemModel.getModel('labelLine.emphasis'); + var visualColor = data.getItemVisual(idx, 'color'); + + setLabelStyle( + labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, + { + labelFetcher: data.hostModel, + labelDataIndex: idx, + defaultText: data.getName(idx), + autoColor: visualColor, + useInsideStyle: !!labelLayout.inside + }, + { + textAlign: labelLayout.textAlign, + textVerticalAlign: labelLayout.verticalAlign, + opacity: data.getItemVisual(idx, 'opacity') + } + ); + + labelText.ignore = labelText.normalIgnore = !labelModel.get('show'); + labelText.hoverIgnore = !labelHoverModel.get('show'); + + labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show'); + labelLine.hoverIgnore = !labelLineHoverModel.get('show'); + + // Default use item visual color + labelLine.setStyle({ + stroke: visualColor, + opacity: data.getItemVisual(idx, 'opacity') + }); + labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle()); + + labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle(); + + var smooth = labelLineModel.get('smooth'); + if (smooth && smooth === true) { + smooth = 0.4; + } + labelLine.setShape({ + smooth: smooth + }); +}; + +inherits(PiePiece, Group); + + +// Pie view +var PieView = Chart.extend({ + + type: 'pie', + + init: function () { + var sectorGroup = new Group(); + this._sectorGroup = sectorGroup; + }, + + render: function (seriesModel, ecModel, api, payload) { + if (payload && (payload.from === this.uid)) { + return; + } + + var data = seriesModel.getData(); + var oldData = this._data; + var group = this.group; + + var hasAnimation = ecModel.get('animation'); + var isFirstRender = !oldData; + var animationType = seriesModel.get('animationType'); + + var onSectorClick = curry( + updateDataSelected, this.uid, seriesModel, hasAnimation, api + ); + + var selectedMode = seriesModel.get('selectedMode'); + + data.diff(oldData) + .add(function (idx) { + var piePiece = new PiePiece(data, idx); + // Default expansion animation + if (isFirstRender && animationType !== 'scale') { + piePiece.eachChild(function (child) { + child.stopAnimation(true); + }); + } + + selectedMode && piePiece.on('click', onSectorClick); + + data.setItemGraphicEl(idx, piePiece); + + group.add(piePiece); + }) + .update(function (newIdx, oldIdx) { + var piePiece = oldData.getItemGraphicEl(oldIdx); + + piePiece.updateData(data, newIdx); + + piePiece.off('click'); + selectedMode && piePiece.on('click', onSectorClick); + group.add(piePiece); + data.setItemGraphicEl(newIdx, piePiece); + }) + .remove(function (idx) { + var piePiece = oldData.getItemGraphicEl(idx); + group.remove(piePiece); + }) + .execute(); + + if ( + hasAnimation && isFirstRender && data.count() > 0 + // Default expansion animation + && animationType !== 'scale' + ) { + var shape = data.getItemLayout(0); + var r = Math.max(api.getWidth(), api.getHeight()) / 2; + + var removeClipPath = bind(group.removeClipPath, group); + group.setClipPath(this._createClipPath( + shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel + )); + } + + this._data = data; + }, + + dispose: function () {}, + + _createClipPath: function ( + cx, cy, r, startAngle, clockwise, cb, seriesModel + ) { + var clipPath = new Sector({ + shape: { + cx: cx, + cy: cy, + r0: 0, + r: r, + startAngle: startAngle, + endAngle: startAngle, + clockwise: clockwise + } + }); + + initProps(clipPath, { + shape: { + endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2 + } + }, seriesModel, cb); + + return clipPath; + }, + + /** + * @implement + */ + containPoint: function (point, seriesModel) { + var data = seriesModel.getData(); + var itemLayout = data.getItemLayout(0); + if (itemLayout) { + var dx = point[0] - itemLayout.cx; + var dy = point[1] - itemLayout.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + return radius <= itemLayout.r && radius >= itemLayout.r0; + } + } + +}); + +var createDataSelectAction = function (seriesType, actionInfos) { + each$1(actionInfos, function (actionInfo) { + actionInfo.update = 'updateView'; + /** + * @payload + * @property {string} seriesName + * @property {string} name + */ + registerAction(actionInfo, function (payload, ecModel) { + var selected = {}; + ecModel.eachComponent( + {mainType: 'series', subType: seriesType, query: payload}, + function (seriesModel) { + if (seriesModel[actionInfo.method]) { + seriesModel[actionInfo.method]( + payload.name, + payload.dataIndex + ); + } + var data = seriesModel.getData(); + // Create selected map + data.each(function (idx) { + var name = data.getName(idx); + selected[name] = seriesModel.isSelected(name) + || false; + }); + } + ); + return { + name: payload.name, + selected: selected + }; + }); + }); +}; + +// Pick color from palette for each data item. +// Applicable for charts that require applying color palette +// in data level (like pie, funnel, chord). + +var dataColor = function (seriesType, ecModel) { + // Pie and funnel may use diferrent scope + var paletteScope = {}; + ecModel.eachRawSeriesByType(seriesType, function (seriesModel) { + var dataAll = seriesModel.getRawData(); + var idxMap = {}; + if (!ecModel.isSeriesFiltered(seriesModel)) { + var data = seriesModel.getData(); + data.each(function (idx) { + var rawIdx = data.getRawIndex(idx); + idxMap[rawIdx] = idx; + }); + dataAll.each(function (rawIdx) { + var filteredIdx = idxMap[rawIdx]; + + // If series.itemStyle.normal.color is a function. itemVisual may be encoded + var singleDataColor = filteredIdx != null + && data.getItemVisual(filteredIdx, 'color', true); + + if (!singleDataColor) { + // FIXME Performance + var itemModel = dataAll.getItemModel(rawIdx); + var color = itemModel.get('itemStyle.normal.color') + || seriesModel.getColorFromPalette(dataAll.getName(rawIdx), paletteScope); + // Legend may use the visual info in data before processed + dataAll.setItemVisual(rawIdx, 'color', color); + + // Data is not filtered + if (filteredIdx != null) { + data.setItemVisual(filteredIdx, 'color', color); + } + } + else { + // Set data all color for legend + dataAll.setItemVisual(rawIdx, 'color', singleDataColor); + } + }); + } + }); +}; + +// FIXME emphasis label position is not same with normal label position + +function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) { + list.sort(function (a, b) { + return a.y - b.y; + }); + + // 压 + function shiftDown(start, end, delta, dir) { + for (var j = start; j < end; j++) { + list[j].y += delta; + if (j > start + && j + 1 < end + && list[j + 1].y > list[j].y + list[j].height + ) { + shiftUp(j, delta / 2); + return; + } + } + + shiftUp(end - 1, delta / 2); + } + + // 弹 + function shiftUp(end, delta) { + for (var j = end; j >= 0; j--) { + list[j].y -= delta; + if (j > 0 + && list[j].y > list[j - 1].y + list[j - 1].height + ) { + break; + } + } + } + + function changeX(list, isDownList, cx, cy, r, dir) { + var lastDeltaX = dir > 0 + ? isDownList // 右侧 + ? Number.MAX_VALUE // 下 + : 0 // 上 + : isDownList // 左侧 + ? Number.MAX_VALUE // 下 + : 0; // 上 + + for (var i = 0, l = list.length; i < l; i++) { + // Not change x for center label + if (list[i].position === 'center') { + continue; + } + var deltaY = Math.abs(list[i].y - cy); + var length = list[i].len; + var length2 = list[i].len2; + var deltaX = (deltaY < r + length) + ? Math.sqrt( + (r + length + length2) * (r + length + length2) + - deltaY * deltaY + ) + : Math.abs(list[i].x - cx); + if (isDownList && deltaX >= lastDeltaX) { + // 右下,左下 + deltaX = lastDeltaX - 10; + } + if (!isDownList && deltaX <= lastDeltaX) { + // 右上,左上 + deltaX = lastDeltaX + 10; + } + + list[i].x = cx + deltaX * dir; + lastDeltaX = deltaX; + } + } + + var lastY = 0; + var delta; + var len = list.length; + var upList = []; + var downList = []; + for (var i = 0; i < len; i++) { + delta = list[i].y - lastY; + if (delta < 0) { + shiftDown(i, len, -delta, dir); + } + lastY = list[i].y + list[i].height; + } + if (viewHeight - lastY < 0) { + shiftUp(len - 1, lastY - viewHeight); + } + for (var i = 0; i < len; i++) { + if (list[i].y >= cy) { + downList.push(list[i]); + } + else { + upList.push(list[i]); + } + } + changeX(upList, false, cx, cy, r, dir); + changeX(downList, true, cx, cy, r, dir); +} + +function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) { + var leftList = []; + var rightList = []; + for (var i = 0; i < labelLayoutList.length; i++) { + if (labelLayoutList[i].x < cx) { + leftList.push(labelLayoutList[i]); + } + else { + rightList.push(labelLayoutList[i]); + } + } + + adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight); + adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight); + + for (var i = 0; i < labelLayoutList.length; i++) { + var linePoints = labelLayoutList[i].linePoints; + if (linePoints) { + var dist = linePoints[1][0] - linePoints[2][0]; + if (labelLayoutList[i].x < cx) { + linePoints[2][0] = labelLayoutList[i].x + 3; + } + else { + linePoints[2][0] = labelLayoutList[i].x - 3; + } + linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y; + linePoints[1][0] = linePoints[2][0] + dist; + } + } +} + +var labelLayout = function (seriesModel, r, viewWidth, viewHeight) { + var data = seriesModel.getData(); + var labelLayoutList = []; + var cx; + var cy; + var hasLabelRotate = false; + + data.each(function (idx) { + var layout = data.getItemLayout(idx); + + var itemModel = data.getItemModel(idx); + var labelModel = itemModel.getModel('label.normal'); + // Use position in normal or emphasis + var labelPosition = labelModel.get('position') || itemModel.get('label.emphasis.position'); + + var labelLineModel = itemModel.getModel('labelLine.normal'); + var labelLineLen = labelLineModel.get('length'); + var labelLineLen2 = labelLineModel.get('length2'); + + var midAngle = (layout.startAngle + layout.endAngle) / 2; + var dx = Math.cos(midAngle); + var dy = Math.sin(midAngle); + + var textX; + var textY; + var linePoints; + var textAlign; + + cx = layout.cx; + cy = layout.cy; + + var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner'; + if (labelPosition === 'center') { + textX = layout.cx; + textY = layout.cy; + textAlign = 'center'; + } + else { + var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx; + var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy; + + textX = x1 + dx * 3; + textY = y1 + dy * 3; + + if (!isLabelInside) { + // For roseType + var x2 = x1 + dx * (labelLineLen + r - layout.r); + var y2 = y1 + dy * (labelLineLen + r - layout.r); + var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2); + var y3 = y2; + + textX = x3 + (dx < 0 ? -5 : 5); + textY = y3; + linePoints = [[x1, y1], [x2, y2], [x3, y3]]; + } + + textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right'); + } + var font = labelModel.getFont(); + + var labelRotate = labelModel.get('rotate') + ? (dx < 0 ? -midAngle + Math.PI : -midAngle) : 0; + var text = seriesModel.getFormattedLabel(idx, 'normal') + || data.getName(idx); + var textRect = getBoundingRect( + text, font, textAlign, 'top' + ); + hasLabelRotate = !!labelRotate; + layout.label = { + x: textX, + y: textY, + position: labelPosition, + height: textRect.height, + len: labelLineLen, + len2: labelLineLen2, + linePoints: linePoints, + textAlign: textAlign, + verticalAlign: 'middle', + rotation: labelRotate, + inside: isLabelInside + }; + + // Not layout the inside label + if (!isLabelInside) { + labelLayoutList.push(layout.label); + } + }); + if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) { + avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight); + } +}; + +var PI2$4 = Math.PI * 2; +var RADIAN = Math.PI / 180; + +var pieLayout = function (seriesType, ecModel, api, payload) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var center = seriesModel.get('center'); + var radius = seriesModel.get('radius'); + + if (!isArray(radius)) { + radius = [0, radius]; + } + if (!isArray(center)) { + center = [center, center]; + } + + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], width); + var cy = parsePercent$1(center[1], height); + var r0 = parsePercent$1(radius[0], size / 2); + var r = parsePercent$1(radius[1], size / 2); + + var data = seriesModel.getData(); + + var startAngle = -seriesModel.get('startAngle') * RADIAN; + + var minAngle = seriesModel.get('minAngle') * RADIAN; + + var validDataCount = 0; + data.each('value', function (value) { + !isNaN(value) && validDataCount++; + }); + + var sum = data.getSum('value'); + // Sum may be 0 + var unitRadian = Math.PI / (sum || validDataCount) * 2; + + var clockwise = seriesModel.get('clockwise'); + + var roseType = seriesModel.get('roseType'); + var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); + + // [0...max] + var extent = data.getDataExtent('value'); + extent[0] = 0; + + // In the case some sector angle is smaller than minAngle + var restAngle = PI2$4; + var valueSumLargerThanMinAngle = 0; + + var currentAngle = startAngle; + var dir = clockwise ? 1 : -1; + + data.each('value', function (value, idx) { + var angle; + if (isNaN(value)) { + data.setItemLayout(idx, { + angle: NaN, + startAngle: NaN, + endAngle: NaN, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: r0, + r: roseType + ? NaN + : r + }); + return; + } + + // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样? + if (roseType !== 'area') { + angle = (sum === 0 && stillShowZeroSum) + ? unitRadian : (value * unitRadian); + } + else { + angle = PI2$4 / validDataCount; + } + + if (angle < minAngle) { + angle = minAngle; + restAngle -= minAngle; + } + else { + valueSumLargerThanMinAngle += value; + } + + var endAngle = currentAngle + dir * angle; + data.setItemLayout(idx, { + angle: angle, + startAngle: currentAngle, + endAngle: endAngle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: r0, + r: roseType + ? linearMap(value, extent, [r0, r]) + : r + }); + + currentAngle = endAngle; + }, true); + + // Some sector is constrained by minAngle + // Rest sectors needs recalculate angle + if (restAngle < PI2$4 && validDataCount) { + // Average the angle if rest angle is not enough after all angles is + // Constrained by minAngle + if (restAngle <= 1e-3) { + var angle = PI2$4 / validDataCount; + data.each('value', function (value, idx) { + if (!isNaN(value)) { + var layout = data.getItemLayout(idx); + layout.angle = angle; + layout.startAngle = startAngle + dir * idx * angle; + layout.endAngle = startAngle + dir * (idx + 1) * angle; + } + }); + } + else { + unitRadian = restAngle / valueSumLargerThanMinAngle; + currentAngle = startAngle; + data.each('value', function (value, idx) { + if (!isNaN(value)) { + var layout = data.getItemLayout(idx); + var angle = layout.angle === minAngle + ? minAngle : value * unitRadian; + layout.startAngle = currentAngle; + layout.endAngle = currentAngle + dir * angle; + currentAngle += dir * angle; + } + }); + } + } + + labelLayout(seriesModel, r, width, height); + }); +}; + +var dataFilter = function (seriesType, ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + if (!legendModels || !legendModels.length) { + return; + } + ecModel.eachSeriesByType(seriesType, function (series) { + var data = series.getData(); + data.filterSelf(function (idx) { + var name = data.getName(idx); + // If in any legend component the status is not selected. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(name)) { + return false; + } + } + return true; + }, this); + }, this); +}; + +createDataSelectAction('pie', [{ + type: 'pieToggleSelect', + event: 'pieselectchanged', + method: 'toggleSelected' +}, { + type: 'pieSelect', + event: 'pieselected', + method: 'select' +}, { + type: 'pieUnSelect', + event: 'pieunselected', + method: 'unSelect' +}]); + +registerVisual(curry(dataColor, 'pie')); +registerLayout(curry(pieLayout, 'pie')); +registerProcessor(curry(dataFilter, 'pie')); + +SeriesModel.extend({ + + type: 'series.scatter', + + dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'], + + getInitialData: function (option, ecModel) { + return createListFromArray(option.data, this, ecModel); + }, + + brushSelector: 'point', + + defaultOption: { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + + hoverAnimation: true, + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Polar coordinate system + // polarIndex: 0, + + // Geo coordinate system + // geoIndex: 0, + + // symbol: null, // 图形类型 + symbolSize: 10, // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 + // symbolRotate: null, // 图形旋转控制 + + large: false, + // Available when large is true + largeThreshold: 2000, + // cursor: null, + + // label: { + // normal: { + // show: false + // distance: 5, + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + // position: 默认自适应,水平布局为'top',垂直布局为'right',可选为 + // 'inside'|'left'|'right'|'top'|'bottom' + // 默认使用全局文本样式,详见TEXTSTYLE + // } + // }, + itemStyle: { + normal: { + opacity: 0.8 + // color: 各异 + } + } + } + +}); + +// TODO Batch by color + +var LargeSymbolPath = extendShape({ + + shape: { + points: null, + sizes: null + }, + + symbolProxy: null, + + buildPath: function (path, shape) { + var points = shape.points; + var sizes = shape.sizes; + + var symbolProxy = this.symbolProxy; + var symbolProxyShape = symbolProxy.shape; + for (var i = 0; i < points.length; i++) { + var pt = points[i]; + + if (isNaN(pt[0]) || isNaN(pt[1])) { + continue; + } + + var size = sizes[i]; + if (size[0] < 4) { + // Optimize for small symbol + path.rect( + pt[0] - size[0] / 2, pt[1] - size[1] / 2, + size[0], size[1] + ); + } + else { + symbolProxyShape.x = pt[0] - size[0] / 2; + symbolProxyShape.y = pt[1] - size[1] / 2; + symbolProxyShape.width = size[0]; + symbolProxyShape.height = size[1]; + + symbolProxy.buildPath(path, symbolProxyShape, true); + } + } + }, + + findDataIndex: function (x, y) { + var shape = this.shape; + var points = shape.points; + var sizes = shape.sizes; + + // Not consider transform + // Treat each element as a rect + // top down traverse + for (var i = points.length - 1; i >= 0; i--) { + var pt = points[i]; + var size = sizes[i]; + var x0 = pt[0] - size[0] / 2; + var y0 = pt[1] - size[1] / 2; + if (x >= x0 && y >= y0 && x <= x0 + size[0] && y <= y0 + size[1]) { + // i is dataIndex + return i; + } + } + + return -1; + } +}); + +function LargeSymbolDraw() { + this.group = new Group(); + + this._symbolEl = new LargeSymbolPath({ + // rectHover: true, + // cursor: 'default' + }); +} + +var largeSymbolProto = LargeSymbolDraw.prototype; + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + */ +largeSymbolProto.updateData = function (data) { + this.group.removeAll(); + + var symbolEl = this._symbolEl; + + var seriesModel = data.hostModel; + + symbolEl.setShape({ + points: data.mapArray(data.getItemLayout), + sizes: data.mapArray( + function (idx) { + var size = data.getItemVisual(idx, 'symbolSize'); + if (!(size instanceof Array)) { + size = [size, size]; + } + return size; + } + ) + }); + + // Create symbolProxy to build path for each data + symbolEl.symbolProxy = createSymbol( + data.getVisual('symbol'), 0, 0, 0, 0 + ); + // Use symbolProxy setColor method + symbolEl.setColor = symbolEl.symbolProxy.setColor; + + symbolEl.useStyle( + seriesModel.getModel('itemStyle.normal').getItemStyle(['color']) + ); + + var visualColor = data.getVisual('color'); + if (visualColor) { + symbolEl.setColor(visualColor); + } + + // Enable tooltip + // PENDING May have performance issue when path is extremely large + symbolEl.seriesIndex = seriesModel.seriesIndex; + symbolEl.on('mousemove', function (e) { + symbolEl.dataIndex = null; + var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY); + if (dataIndex >= 0) { + // Provide dataIndex for tooltip + symbolEl.dataIndex = dataIndex; + } + }); + + // Add back + this.group.add(symbolEl); +}; + +largeSymbolProto.updateLayout = function (seriesModel) { + var data = seriesModel.getData(); + this._symbolEl.setShape({ + points: data.mapArray(data.getItemLayout) + }); +}; + +largeSymbolProto.remove = function () { + this.group.removeAll(); +}; + +extendChartView({ + + type: 'scatter', + + init: function () { + this._normalSymbolDraw = new SymbolDraw(); + this._largeSymbolDraw = new LargeSymbolDraw(); + }, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var largeSymbolDraw = this._largeSymbolDraw; + var normalSymbolDraw = this._normalSymbolDraw; + var group = this.group; + + var symbolDraw = seriesModel.get('large') && data.count() > seriesModel.get('largeThreshold') + ? largeSymbolDraw : normalSymbolDraw; + + this._symbolDraw = symbolDraw; + symbolDraw.updateData(data); + group.add(symbolDraw.group); + + group.remove( + symbolDraw === largeSymbolDraw + ? normalSymbolDraw.group : largeSymbolDraw.group + ); + }, + + updateLayout: function (seriesModel) { + this._symbolDraw.updateLayout(seriesModel); + }, + + remove: function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(api, true); + }, + + dispose: function () {} +}); + +// In case developer forget to include grid component +registerVisual(curry(visualSymbol, 'scatter', 'circle', null)); +registerLayout(curry(layoutPoints, 'scatter')); + +function IndicatorAxis(dim, scale, radiusExtent) { + Axis.call(this, dim, scale, radiusExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = 'value'; + + this.angle = 0; + + /** + * Indicator name + * @type {string} + */ + this.name = ''; + /** + * @type {module:echarts/model/Model} + */ + this.model; +} + +inherits(IndicatorAxis, Axis); + +// TODO clockwise + +function Radar(radarModel, ecModel, api) { + + this._model = radarModel; + /** + * Radar dimensions + * @type {Array.} + */ + this.dimensions = []; + + this._indicatorAxes = map(radarModel.getIndicatorModels(), function (indicatorModel, idx) { + var dim = 'indicator_' + idx; + var indicatorAxis = new IndicatorAxis(dim, new IntervalScale()); + indicatorAxis.name = indicatorModel.get('name'); + // Inject model and axis + indicatorAxis.model = indicatorModel; + indicatorModel.axis = indicatorAxis; + this.dimensions.push(dim); + return indicatorAxis; + }, this); + + this.resize(radarModel, api); + + /** + * @type {number} + * @readOnly + */ + this.cx; + /** + * @type {number} + * @readOnly + */ + this.cy; + /** + * @type {number} + * @readOnly + */ + this.r; + /** + * @type {number} + * @readOnly + */ + this.startAngle; +} + +Radar.prototype.getIndicatorAxes = function () { + return this._indicatorAxes; +}; + +Radar.prototype.dataToPoint = function (value, indicatorIndex) { + var indicatorAxis = this._indicatorAxes[indicatorIndex]; + + return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex); +}; + +Radar.prototype.coordToPoint = function (coord, indicatorIndex) { + var indicatorAxis = this._indicatorAxes[indicatorIndex]; + var angle = indicatorAxis.angle; + var x = this.cx + coord * Math.cos(angle); + var y = this.cy - coord * Math.sin(angle); + return [x, y]; +}; + +Radar.prototype.pointToData = function (pt) { + var dx = pt[0] - this.cx; + var dy = pt[1] - this.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + dx /= radius; + dy /= radius; + + var radian = Math.atan2(-dy, dx); + + // Find the closest angle + // FIXME index can calculated directly + var minRadianDiff = Infinity; + var closestAxis; + var closestAxisIdx = -1; + for (var i = 0; i < this._indicatorAxes.length; i++) { + var indicatorAxis = this._indicatorAxes[i]; + var diff = Math.abs(radian - indicatorAxis.angle); + if (diff < minRadianDiff) { + closestAxis = indicatorAxis; + closestAxisIdx = i; + minRadianDiff = diff; + } + } + + return [closestAxisIdx, +(closestAxis && closestAxis.coodToData(radius))]; +}; + +Radar.prototype.resize = function (radarModel, api) { + var center = radarModel.get('center'); + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + var viewSize = Math.min(viewWidth, viewHeight) / 2; + this.cx = parsePercent$1(center[0], viewWidth); + this.cy = parsePercent$1(center[1], viewHeight); + + this.startAngle = radarModel.get('startAngle') * Math.PI / 180; + + this.r = parsePercent$1(radarModel.get('radius'), viewSize); + + each$1(this._indicatorAxes, function (indicatorAxis, idx) { + indicatorAxis.setExtent(0, this.r); + var angle = (this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length); + // Normalize to [-PI, PI] + angle = Math.atan2(Math.sin(angle), Math.cos(angle)); + indicatorAxis.angle = angle; + }, this); +}; + +Radar.prototype.update = function (ecModel, api) { + var indicatorAxes = this._indicatorAxes; + var radarModel = this._model; + each$1(indicatorAxes, function (indicatorAxis) { + indicatorAxis.scale.setExtent(Infinity, -Infinity); + }); + ecModel.eachSeriesByType('radar', function (radarSeries, idx) { + if (radarSeries.get('coordinateSystem') !== 'radar' + || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel + ) { + return; + } + var data = radarSeries.getData(); + each$1(indicatorAxes, function (indicatorAxis) { + indicatorAxis.scale.unionExtentFromData(data, indicatorAxis.dim); + }); + }, this); + + var splitNumber = radarModel.get('splitNumber'); + + function increaseInterval(interval) { + var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10)); + // Increase interval + var f = interval / exp10; + if (f === 2) { + f = 5; + } + else { // f is 2 or 5 + f *= 2; + } + return f * exp10; + } + // Force all the axis fixing the maxSplitNumber. + each$1(indicatorAxes, function (indicatorAxis, idx) { + var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model); + niceScaleExtent(indicatorAxis.scale, indicatorAxis.model); + + var axisModel = indicatorAxis.model; + var scale = indicatorAxis.scale; + var fixedMin = axisModel.getMin(); + var fixedMax = axisModel.getMax(); + var interval = scale.getInterval(); + + if (fixedMin != null && fixedMax != null) { + // User set min, max, divide to get new interval + scale.setExtent(+fixedMin, +fixedMax); + scale.setInterval( + (fixedMax - fixedMin) / splitNumber + ); + } + else if (fixedMin != null) { + var max; + // User set min, expand extent on the other side + do { + max = fixedMin + interval * splitNumber; + scale.setExtent(+fixedMin, max); + // Interval must been set after extent + // FIXME + scale.setInterval(interval); + + interval = increaseInterval(interval); + } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1])); + } + else if (fixedMax != null) { + var min; + // User set min, expand extent on the other side + do { + min = fixedMax - interval * splitNumber; + scale.setExtent(min, +fixedMax); + scale.setInterval(interval); + interval = increaseInterval(interval); + } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0])); + } + else { + var nicedSplitNumber = scale.getTicks().length - 1; + if (nicedSplitNumber > splitNumber) { + interval = increaseInterval(interval); + } + // PENDING + var center = Math.round((rawExtent[0] + rawExtent[1]) / 2 / interval) * interval; + var halfSplitNumber = Math.round(splitNumber / 2); + scale.setExtent( + round(center - halfSplitNumber * interval), + round(center + (splitNumber - halfSplitNumber) * interval) + ); + scale.setInterval(interval); + } + }); +}; + +/** + * Radar dimensions is based on the data + * @type {Array} + */ +Radar.dimensions = []; + +Radar.create = function (ecModel, api) { + var radarList = []; + ecModel.eachComponent('radar', function (radarModel) { + var radar = new Radar(radarModel, ecModel, api); + radarList.push(radar); + radarModel.coordinateSystem = radar; + }); + ecModel.eachSeriesByType('radar', function (radarSeries) { + if (radarSeries.get('coordinateSystem') === 'radar') { + // Inject coordinate system + radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0]; + } + }); + return radarList; +}; + +CoordinateSystemManager.register('radar', Radar); + +var valueAxisDefault = axisDefault.valueAxis; + +function defaultsShow(opt, show) { + return defaults({ + show: show + }, opt); +} + +var RadarModel = extendComponentModel({ + + type: 'radar', + + optionUpdated: function () { + var boundaryGap = this.get('boundaryGap'); + var splitNumber = this.get('splitNumber'); + var scale = this.get('scale'); + var axisLine = this.get('axisLine'); + var axisTick = this.get('axisTick'); + var axisLabel = this.get('axisLabel'); + var nameTextStyle = this.get('name'); + var showName = this.get('name.show'); + var nameFormatter = this.get('name.formatter'); + var nameGap = this.get('nameGap'); + var triggerEvent = this.get('triggerEvent'); + + var indicatorModels = map(this.get('indicator') || [], function (indicatorOpt) { + // PENDING + if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) { + indicatorOpt.min = 0; + } + else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) { + indicatorOpt.max = 0; + } + var iNameTextStyle = nameTextStyle; + if(indicatorOpt.color != null) { + iNameTextStyle = defaults({color: indicatorOpt.color}, nameTextStyle); + } + // Use same configuration + indicatorOpt = merge(clone(indicatorOpt), { + boundaryGap: boundaryGap, + splitNumber: splitNumber, + scale: scale, + axisLine: axisLine, + axisTick: axisTick, + axisLabel: axisLabel, + // Competitable with 2 and use text + name: indicatorOpt.text, + nameLocation: 'end', + nameGap: nameGap, + // min: 0, + nameTextStyle: iNameTextStyle, + triggerEvent: triggerEvent + }, false); + if (!showName) { + indicatorOpt.name = ''; + } + if (typeof nameFormatter === 'string') { + var indName = indicatorOpt.name; + indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : ''); + } + else if (typeof nameFormatter === 'function') { + indicatorOpt.name = nameFormatter( + indicatorOpt.name, indicatorOpt + ); + } + var model = extend( + new Model(indicatorOpt, null, this.ecModel), + axisModelCommonMixin + ); + + // For triggerEvent. + model.mainType = 'radar'; + model.componentIndex = this.componentIndex; + + return model; + }, this); + + this.getIndicatorModels = function () { + return indicatorModels; + }; + }, + + defaultOption: { + + zlevel: 0, + + z: 0, + + center: ['50%', '50%'], + + radius: '75%', + + startAngle: 90, + + name: { + show: true + // formatter: null + // textStyle: {} + }, + + boundaryGap: [0, 0], + + splitNumber: 5, + + nameGap: 15, + + scale: false, + + // Polygon or circle + shape: 'polygon', + + axisLine: merge( + { + lineStyle: { + color: '#bbb' + } + }, + valueAxisDefault.axisLine + ), + axisLabel: defaultsShow(valueAxisDefault.axisLabel, false), + axisTick: defaultsShow(valueAxisDefault.axisTick, false), + splitLine: defaultsShow(valueAxisDefault.splitLine, true), + splitArea: defaultsShow(valueAxisDefault.splitArea, true), + + // {text, min, max} + indicator: [] + } +}); + +var axisBuilderAttrs$1 = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; + +extendComponentView({ + + type: 'radar', + + render: function (radarModel, ecModel, api) { + var group = this.group; + group.removeAll(); + + this._buildAxes(radarModel); + this._buildSplitLineAndArea(radarModel); + }, + + _buildAxes: function (radarModel) { + var radar = radarModel.coordinateSystem; + var indicatorAxes = radar.getIndicatorAxes(); + var axisBuilders = map(indicatorAxes, function (indicatorAxis) { + var axisBuilder = new AxisBuilder(indicatorAxis.model, { + position: [radar.cx, radar.cy], + rotation: indicatorAxis.angle, + labelDirection: -1, + tickDirection: -1, + nameDirection: 1 + }); + return axisBuilder; + }); + + each$1(axisBuilders, function (axisBuilder) { + each$1(axisBuilderAttrs$1, axisBuilder.add, axisBuilder); + this.group.add(axisBuilder.getGroup()); + }, this); + }, + + _buildSplitLineAndArea: function (radarModel) { + var radar = radarModel.coordinateSystem; + var indicatorAxes = radar.getIndicatorAxes(); + if (!indicatorAxes.length) { + return; + } + var shape = radarModel.get('shape'); + var splitLineModel = radarModel.getModel('splitLine'); + var splitAreaModel = radarModel.getModel('splitArea'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + + var showSplitLine = splitLineModel.get('show'); + var showSplitArea = splitAreaModel.get('show'); + var splitLineColors = lineStyleModel.get('color'); + var splitAreaColors = areaStyleModel.get('color'); + + splitLineColors = isArray(splitLineColors) ? splitLineColors : [splitLineColors]; + splitAreaColors = isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors]; + + var splitLines = []; + var splitAreas = []; + + function getColorIndex(areaOrLine, areaOrLineColorList, idx) { + var colorIndex = idx % areaOrLineColorList.length; + areaOrLine[colorIndex] = areaOrLine[colorIndex] || []; + return colorIndex; + } + + if (shape === 'circle') { + var ticksRadius = indicatorAxes[0].getTicksCoords(); + var cx = radar.cx; + var cy = radar.cy; + for (var i = 0; i < ticksRadius.length; i++) { + if (showSplitLine) { + var colorIndex = getColorIndex(splitLines, splitLineColors, i); + splitLines[colorIndex].push(new Circle({ + shape: { + cx: cx, + cy: cy, + r: ticksRadius[i] + } + })); + } + if (showSplitArea && i < ticksRadius.length - 1) { + var colorIndex = getColorIndex(splitAreas, splitAreaColors, i); + splitAreas[colorIndex].push(new Ring({ + shape: { + cx: cx, + cy: cy, + r0: ticksRadius[i], + r: ticksRadius[i + 1] + } + })); + } + } + } + // Polyyon + else { + var realSplitNumber; + var axesTicksPoints = map(indicatorAxes, function (indicatorAxis, idx) { + var ticksCoords = indicatorAxis.getTicksCoords(); + realSplitNumber = realSplitNumber == null + ? ticksCoords.length - 1 + : Math.min(ticksCoords.length - 1, realSplitNumber); + return map(ticksCoords, function (tickCoord) { + return radar.coordToPoint(tickCoord, idx); + }); + }); + + var prevPoints = []; + for (var i = 0; i <= realSplitNumber; i++) { + var points = []; + for (var j = 0; j < indicatorAxes.length; j++) { + points.push(axesTicksPoints[j][i]); + } + // Close + if (points[0]) { + points.push(points[0].slice()); + } + else { + if (__DEV__) { + console.error('Can\'t draw value axis ' + i); + } + } + + if (showSplitLine) { + var colorIndex = getColorIndex(splitLines, splitLineColors, i); + splitLines[colorIndex].push(new Polyline({ + shape: { + points: points + } + })); + } + if (showSplitArea && prevPoints) { + var colorIndex = getColorIndex(splitAreas, splitAreaColors, i - 1); + splitAreas[colorIndex].push(new Polygon({ + shape: { + points: points.concat(prevPoints) + } + })); + } + prevPoints = points.slice().reverse(); + } + } + + var lineStyle = lineStyleModel.getLineStyle(); + var areaStyle = areaStyleModel.getAreaStyle(); + // Add splitArea before splitLine + each$1(splitAreas, function (splitAreas, idx) { + this.group.add(mergePath( + splitAreas, { + style: defaults({ + stroke: 'none', + fill: splitAreaColors[idx % splitAreaColors.length] + }, areaStyle), + silent: true + } + )); + }, this); + + each$1(splitLines, function (splitLines, idx) { + this.group.add(mergePath( + splitLines, { + style: defaults({ + fill: 'none', + stroke: splitLineColors[idx % splitLineColors.length] + }, lineStyle), + silent: true + } + )); + }, this); + + } +}); + +var RadarSeries = SeriesModel.extend({ + + type: 'series.radar', + + dependencies: ['radar'], + + + // Overwrite + init: function (option) { + RadarSeries.superApply(this, 'init', arguments); + + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + }, + + getInitialData: function (option, ecModel) { + var data = option.data || []; + var dimensions = completeDimensions( + [], data, {extraPrefix: 'indicator_', extraFromZero: true} + ); + var list = new List(dimensions, this); + list.initData(data); + return list; + }, + + formatTooltip: function (dataIndex) { + var value = this.getRawValue(dataIndex); + var coordSys = this.coordinateSystem; + var indicatorAxes = coordSys.getIndicatorAxes(); + var name = this.getData().getName(dataIndex); + return encodeHTML(name === '' ? this.name : name) + '
' + + map(indicatorAxes, function (axis, idx) { + return encodeHTML(axis.name + ' : ' + value[idx]); + }).join('
'); + }, + + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: 'radar', + legendHoverLink: true, + radarIndex: 0, + lineStyle: { + normal: { + width: 2, + type: 'solid' + } + }, + label: { + normal: { + position: 'top' + } + }, + // areaStyle: { + // }, + // itemStyle: {} + symbol: 'emptyCircle', + symbolSize: 4 + // symbolRotate: null + } +}); + +function normalizeSymbolSize(symbolSize) { + if (!isArray(symbolSize)) { + symbolSize = [+symbolSize, +symbolSize]; + } + return symbolSize; +} + +extendChartView({ + + type: 'radar', + + render: function (seriesModel, ecModel, api) { + var polar = seriesModel.coordinateSystem; + var group = this.group; + + var data = seriesModel.getData(); + var oldData = this._data; + + function createSymbol$$1(data, idx) { + var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; + var color = data.getItemVisual(idx, 'color'); + if (symbolType === 'none') { + return; + } + var symbolSize = normalizeSymbolSize( + data.getItemVisual(idx, 'symbolSize') + ); + var symbolPath = createSymbol( + symbolType, -1, -1, 2, 2, color + ); + symbolPath.attr({ + style: { + strokeNoScale: true + }, + z2: 100, + scale: [symbolSize[0] / 2, symbolSize[1] / 2] + }); + return symbolPath; + } + + function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) { + // Simply rerender all + symbolGroup.removeAll(); + for (var i = 0; i < newPoints.length - 1; i++) { + var symbolPath = createSymbol$$1(data, idx); + if (symbolPath) { + symbolPath.__dimIdx = i; + if (oldPoints[i]) { + symbolPath.attr('position', oldPoints[i]); + graphic[isInit ? 'initProps' : 'updateProps']( + symbolPath, { + position: newPoints[i] + }, seriesModel, idx + ); + } + else { + symbolPath.attr('position', newPoints[i]); + } + symbolGroup.add(symbolPath); + } + } + } + + function getInitialPoints(points) { + return map(points, function (pt) { + return [polar.cx, polar.cy]; + }); + } + data.diff(oldData) + .add(function (idx) { + var points = data.getItemLayout(idx); + if (!points) { + return; + } + var polygon = new Polygon(); + var polyline = new Polyline(); + var target = { + shape: { + points: points + } + }; + polygon.shape.points = getInitialPoints(points); + polyline.shape.points = getInitialPoints(points); + initProps(polygon, target, seriesModel, idx); + initProps(polyline, target, seriesModel, idx); + + var itemGroup = new Group(); + var symbolGroup = new Group(); + itemGroup.add(polyline); + itemGroup.add(polygon); + itemGroup.add(symbolGroup); + + updateSymbols( + polyline.shape.points, points, symbolGroup, data, idx, true + ); + + data.setItemGraphicEl(idx, itemGroup); + }) + .update(function (newIdx, oldIdx) { + var itemGroup = oldData.getItemGraphicEl(oldIdx); + var polyline = itemGroup.childAt(0); + var polygon = itemGroup.childAt(1); + var symbolGroup = itemGroup.childAt(2); + var target = { + shape: { + points: data.getItemLayout(newIdx) + } + }; + if (!target.shape.points) { + return; + } + updateSymbols( + polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false + ); + + updateProps(polyline, target, seriesModel); + updateProps(polygon, target, seriesModel); + + data.setItemGraphicEl(newIdx, itemGroup); + }) + .remove(function (idx) { + group.remove(oldData.getItemGraphicEl(idx)); + }) + .execute(); + + data.eachItemGraphicEl(function (itemGroup, idx) { + var itemModel = data.getItemModel(idx); + var polyline = itemGroup.childAt(0); + var polygon = itemGroup.childAt(1); + var symbolGroup = itemGroup.childAt(2); + var color = data.getItemVisual(idx, 'color'); + + group.add(itemGroup); + + polyline.useStyle( + defaults( + itemModel.getModel('lineStyle.normal').getLineStyle(), + { + fill: 'none', + stroke: color + } + ) + ); + polyline.hoverStyle = itemModel.getModel('lineStyle.emphasis').getLineStyle(); + + var areaStyleModel = itemModel.getModel('areaStyle.normal'); + var hoverAreaStyleModel = itemModel.getModel('areaStyle.emphasis'); + var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty(); + var hoverPolygonIgnore = hoverAreaStyleModel.isEmpty() && hoverAreaStyleModel.parentModel.isEmpty(); + + hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore; + polygon.ignore = polygonIgnore; + + polygon.useStyle( + defaults( + areaStyleModel.getAreaStyle(), + { + fill: color, + opacity: 0.7 + } + ) + ); + polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle(); + + var itemStyle = itemModel.getModel('itemStyle.normal').getItemStyle(['color']); + var itemHoverStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle(); + var labelModel = itemModel.getModel('label.normal'); + var labelHoverModel = itemModel.getModel('label.emphasis'); + symbolGroup.eachChild(function (symbolPath) { + symbolPath.setStyle(itemStyle); + symbolPath.hoverStyle = clone(itemHoverStyle); + + setLabelStyle( + symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel, + { + labelFetcher: data.hostModel, + labelDataIndex: idx, + labelDimIndex: symbolPath.__dimIdx, + defaultText: data.get(data.dimensions[symbolPath.__dimIdx], idx), + autoColor: color, + isRectText: true + } + ); + }); + + function onEmphasis() { + polygon.attr('ignore', hoverPolygonIgnore); + } + + function onNormal() { + polygon.attr('ignore', polygonIgnore); + } + + itemGroup.off('mouseover').off('mouseout').off('normal').off('emphasis'); + itemGroup.on('emphasis', onEmphasis) + .on('mouseover', onEmphasis) + .on('normal', onNormal) + .on('mouseout', onNormal); + + setHoverStyle(itemGroup); + }); + + this._data = data; + }, + + remove: function () { + this.group.removeAll(); + this._data = null; + }, + + dispose: function () {} +}); + +var radarLayout = function (ecModel) { + ecModel.eachSeriesByType('radar', function (seriesModel) { + var data = seriesModel.getData(); + var points = []; + var coordSys = seriesModel.coordinateSystem; + if (!coordSys) { + return; + } + + function pointsConverter(val, idx) { + points[idx] = points[idx] || []; + points[idx][i] = coordSys.dataToPoint(val, i); + } + for (var i = 0; i < coordSys.getIndicatorAxes().length; i++) { + var dim = data.dimensions[i]; + data.each(dim, pointsConverter); + } + + data.each(function (idx) { + // Close polygon + points[idx][0] && points[idx].push(points[idx][0].slice()); + data.setItemLayout(idx, points[idx]); + }); + }); +}; + +// Backward compat for radar chart in 2 +var backwardCompat$1 = function (option) { + var polarOptArr = option.polar; + if (polarOptArr) { + if (!isArray(polarOptArr)) { + polarOptArr = [polarOptArr]; + } + var polarNotRadar = []; + each$1(polarOptArr, function (polarOpt, idx) { + if (polarOpt.indicator) { + if (polarOpt.type && !polarOpt.shape) { + polarOpt.shape = polarOpt.type; + } + option.radar = option.radar || []; + if (!isArray(option.radar)) { + option.radar = [option.radar]; + } + option.radar.push(polarOpt); + } + else { + polarNotRadar.push(polarOpt); + } + }); + option.polar = polarNotRadar; + } + each$1(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) { + seriesOpt.radarIndex = seriesOpt.polarIndex; + } + }); +}; + +// Must use radar component +registerVisual(curry(dataColor, 'radar')); +registerVisual(curry(visualSymbol, 'radar', 'circle', null)); +registerLayout(radarLayout); +registerProcessor(curry(dataFilter, 'radar')); +registerPreprocessor(backwardCompat$1); + +var EPSILON$3 = 1e-8; + +function isAroundEqual$1(a, b) { + return Math.abs(a - b) < EPSILON$3; +} + +function contain$1(points, x, y) { + var w = 0; + var p = points[0]; + + if (!p) { + return false; + } + + for (var i = 1; i < points.length; i++) { + var p2 = points[i]; + w += windingLine(p[0], p[1], p2[0], p2[1], x, y); + p = p2; + } + + // Close polygon + var p0 = points[0]; + if (!isAroundEqual$1(p[0], p0[0]) || !isAroundEqual$1(p[1], p0[1])) { + w += windingLine(p[0], p[1], p0[0], p0[1], x, y); + } + + return w !== 0; +} + +/** + * @module echarts/coord/geo/Region + */ + +/** + * @param {string} name + * @param {Array} geometries + * @param {Array.} cp + */ +function Region(name, geometries, cp) { + + /** + * @type {string} + * @readOnly + */ + this.name = name; + + /** + * @type {Array.} + * @readOnly + */ + this.geometries = geometries; + + if (!cp) { + var rect = this.getBoundingRect(); + cp = [ + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ]; + } + else { + cp = [cp[0], cp[1]]; + } + /** + * @type {Array.} + */ + this.center = cp; +} + +Region.prototype = { + + constructor: Region, + + properties: null, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getBoundingRect: function () { + var rect = this._rect; + if (rect) { + return rect; + } + + var MAX_NUMBER = Number.MAX_VALUE; + var min$$1 = [MAX_NUMBER, MAX_NUMBER]; + var max$$1 = [-MAX_NUMBER, -MAX_NUMBER]; + var min2 = []; + var max2 = []; + var geometries = this.geometries; + for (var i = 0; i < geometries.length; i++) { + // Only support polygon + if (geometries[i].type !== 'polygon') { + continue; + } + // Doesn't consider hole + var exterior = geometries[i].exterior; + fromPoints(exterior, min2, max2); + min(min$$1, min$$1, min2); + max(max$$1, max$$1, max2); + } + // No data + if (i === 0) { + min$$1[0] = min$$1[1] = max$$1[0] = max$$1[1] = 0; + } + + return (this._rect = new BoundingRect( + min$$1[0], min$$1[1], max$$1[0] - min$$1[0], max$$1[1] - min$$1[1] + )); + }, + + /** + * @param {} coord + * @return {boolean} + */ + contain: function (coord) { + var rect = this.getBoundingRect(); + var geometries = this.geometries; + if (!rect.contain(coord[0], coord[1])) { + return false; + } + loopGeo: for (var i = 0, len$$1 = geometries.length; i < len$$1; i++) { + // Only support polygon. + if (geometries[i].type !== 'polygon') { + continue; + } + var exterior = geometries[i].exterior; + var interiors = geometries[i].interiors; + if (contain$1(exterior, coord[0], coord[1])) { + // Not in the region if point is in the hole. + for (var k = 0; k < (interiors ? interiors.length : 0); k++) { + if (contain$1(interiors[k])) { + continue loopGeo; + } + } + return true; + } + } + return false; + }, + + transformTo: function (x, y, width, height) { + var rect = this.getBoundingRect(); + var aspect = rect.width / rect.height; + if (!width) { + width = aspect * height; + } + else if (!height) { + height = width / aspect ; + } + var target = new BoundingRect(x, y, width, height); + var transform = rect.calculateTransform(target); + var geometries = this.geometries; + for (var i = 0; i < geometries.length; i++) { + // Only support polygon. + if (geometries[i].type !== 'polygon') { + continue; + } + var exterior = geometries[i].exterior; + var interiors = geometries[i].interiors; + for (var p = 0; p < exterior.length; p++) { + applyTransform(exterior[p], exterior[p], transform); + } + for (var h = 0; h < (interiors ? interiors.length : 0); h++) { + for (var p = 0; p < interiors[h].length; p++) { + applyTransform(interiors[h][p], interiors[h][p], transform); + } + } + } + rect = this._rect; + rect.copy(target); + // Update center + this.center = [ + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ]; + } +}; + +/** + * Parse and decode geo json + * @module echarts/coord/geo/parseGeoJson + */ + +function decode(json) { + if (!json.UTF8Encoding) { + return json; + } + var encodeScale = json.UTF8Scale; + if (encodeScale == null) { + encodeScale = 1024; + } + + var features = json.features; + + for (var f = 0; f < features.length; f++) { + var feature = features[f]; + var geometry = feature.geometry; + var coordinates = geometry.coordinates; + var encodeOffsets = geometry.encodeOffsets; + + for (var c = 0; c < coordinates.length; c++) { + var coordinate = coordinates[c]; + + if (geometry.type === 'Polygon') { + coordinates[c] = decodePolygon( + coordinate, + encodeOffsets[c], + encodeScale + ); + } + else if (geometry.type === 'MultiPolygon') { + for (var c2 = 0; c2 < coordinate.length; c2++) { + var polygon = coordinate[c2]; + coordinate[c2] = decodePolygon( + polygon, + encodeOffsets[c][c2], + encodeScale + ); + } + } + } + } + // Has been decoded + json.UTF8Encoding = false; + return json; +} + +function decodePolygon(coordinate, encodeOffsets, encodeScale) { + var result = []; + var prevX = encodeOffsets[0]; + var prevY = encodeOffsets[1]; + + for (var i = 0; i < coordinate.length; i += 2) { + var x = coordinate.charCodeAt(i) - 64; + var y = coordinate.charCodeAt(i + 1) - 64; + // ZigZag decoding + x = (x >> 1) ^ (-(x & 1)); + y = (y >> 1) ^ (-(y & 1)); + // Delta deocding + x += prevX; + y += prevY; + + prevX = x; + prevY = y; + // Dequantize + result.push([x / encodeScale, y / encodeScale]); + } + + return result; +} + +/** + * @alias module:echarts/coord/geo/parseGeoJson + * @param {Object} geoJson + * @return {module:zrender/container/Group} + */ +var parseGeoJson = function (geoJson) { + + decode(geoJson); + + return map(filter(geoJson.features, function (featureObj) { + // Output of mapshaper may have geometry null + return featureObj.geometry + && featureObj.properties + && featureObj.geometry.coordinates.length > 0; + }), function (featureObj) { + var properties = featureObj.properties; + var geo = featureObj.geometry; + + var coordinates = geo.coordinates; + + var geometries = []; + if (geo.type === 'Polygon') { + geometries.push({ + type: 'polygon', + // According to the GeoJSON specification. + // First must be exterior, and the rest are all interior(holes). + exterior: coordinates[0], + interiors: coordinates.slice(1) + }); + } + if (geo.type === 'MultiPolygon') { + each$1(coordinates, function (item) { + if (item[0]) { + geometries.push({ + type: 'polygon', + exterior: item[0], + interiors: item.slice(1) + }); + } + }); + } + + var region = new Region( + properties.name, + geometries, + properties.cp + ); + region.properties = properties; + return region; + }); +}; + +/** + * Simple view coordinate system + * Mapping given x, y to transformd view x, y + */ + +var v2ApplyTransform$1 = applyTransform; + +// Dummy transform node +function TransformDummy() { + Transformable.call(this); +} +mixin(TransformDummy, Transformable); + +function View(name) { + /** + * @type {string} + */ + this.name = name; + + /** + * @type {Object} + */ + this.zoomLimit; + + Transformable.call(this); + + this._roamTransform = new TransformDummy(); + + this._viewTransform = new TransformDummy(); + + this._center; + this._zoom; +} + +View.prototype = { + + constructor: View, + + type: 'view', + + /** + * @param {Array.} + * @readOnly + */ + dimensions: ['x', 'y'], + + /** + * Set bounding rect + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + */ + + // PENDING to getRect + setBoundingRect: function (x, y, width, height) { + this._rect = new BoundingRect(x, y, width, height); + return this._rect; + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + // PENDING to getRect + getBoundingRect: function () { + return this._rect; + }, + + /** + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + */ + setViewRect: function (x, y, width, height) { + this.transformTo(x, y, width, height); + this._viewRect = new BoundingRect(x, y, width, height); + }, + + /** + * Transformed to particular position and size + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + */ + transformTo: function (x, y, width, height) { + var rect = this.getBoundingRect(); + var viewTransform = this._viewTransform; + + viewTransform.transform = rect.calculateTransform( + new BoundingRect(x, y, width, height) + ); + + viewTransform.decomposeTransform(); + + this._updateTransform(); + }, + + /** + * Set center of view + * @param {Array.} [centerCoord] + */ + setCenter: function (centerCoord) { + if (!centerCoord) { + return; + } + this._center = centerCoord; + + this._updateCenterAndZoom(); + }, + + /** + * @param {number} zoom + */ + setZoom: function (zoom) { + zoom = zoom || 1; + + var zoomLimit = this.zoomLimit; + if (zoomLimit) { + if (zoomLimit.max != null) { + zoom = Math.min(zoomLimit.max, zoom); + } + if (zoomLimit.min != null) { + zoom = Math.max(zoomLimit.min, zoom); + } + } + this._zoom = zoom; + + this._updateCenterAndZoom(); + }, + + /** + * Get default center without roam + */ + getDefaultCenter: function () { + // Rect before any transform + var rawRect = this.getBoundingRect(); + var cx = rawRect.x + rawRect.width / 2; + var cy = rawRect.y + rawRect.height / 2; + + return [cx, cy]; + }, + + getCenter: function () { + return this._center || this.getDefaultCenter(); + }, + + getZoom: function () { + return this._zoom || 1; + }, + + /** + * @return {Array.} data + * @return {Array.} + */ + dataToPoint: function (data) { + var transform = this.transform; + return transform + ? v2ApplyTransform$1([], data, transform) + : [data[0], data[1]]; + }, + + /** + * Convert a (x, y) point to (lon, lat) data + * @param {Array.} point + * @return {Array.} + */ + pointToData: function (point) { + var invTransform = this.invTransform; + return invTransform + ? v2ApplyTransform$1([], point, invTransform) + : [point[0], point[1]]; + }, + + /** + * @implements + * see {module:echarts/CoodinateSystem} + */ + convertToPixel: curry(doConvert$1, 'dataToPoint'), + + /** + * @implements + * see {module:echarts/CoodinateSystem} + */ + convertFromPixel: curry(doConvert$1, 'pointToData'), + + /** + * @implements + * see {module:echarts/CoodinateSystem} + */ + containPoint: function (point) { + return this.getViewRectAfterRoam().contain(point[0], point[1]); + } + + /** + * @return {number} + */ + // getScalarScale: function () { + // // Use determinant square root of transform to mutiply scalar + // var m = this.transform; + // var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1])); + // return det; + // } +}; + +mixin(View, Transformable); + +function doConvert$1(methodName, ecModel, finder, value) { + var seriesModel = finder.seriesModel; + var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph. + return coordSys === this ? coordSys[methodName](value) : null; +} + +// Fix for 南海诸岛 + +var geoCoord = [126, 25]; + +var points$1 = [ + [[0,3.5],[7,11.2],[15,11.9],[30,7],[42,0.7],[52,0.7], + [56,7.7],[59,0.7],[64,0.7],[64,0],[5,0],[0,3.5]], + [[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]], + [[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]], + [[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]], + [[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]], + [[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]], + [[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]], + [[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]], + [[51,35],[51,28.7],[53,28.7],[53,35],[51,35]], + [[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]], + [[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]], + [[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4], + [1,92.4],[1,3.5],[0,3.5]] +]; + +for (var i$1 = 0; i$1 < points$1.length; i$1++) { + for (var k = 0; k < points$1[i$1].length; k++) { + points$1[i$1][k][0] /= 10.5; + points$1[i$1][k][1] /= -10.5 / 0.75; + + points$1[i$1][k][0] += geoCoord[0]; + points$1[i$1][k][1] += geoCoord[1]; + } +} + +var fixNanhai = function (geo) { + if (geo.map === 'china') { + geo.regions.push(new Region( + '南海诸岛', + map(points$1, function (exterior) { + return { + type: 'polygon', + exterior: exterior + }; + }), geoCoord + )); + } +}; + +var coordsOffsetMap = { + '南海诸岛' : [32, 80], + // 全国 + '广东': [0, -10], + '香港': [10, 5], + '澳门': [-10, 10], + //'北京': [-10, 0], + '天津': [5, 5] +}; + +var fixTextCoord = function (geo) { + each$1(geo.regions, function (region) { + var coordFix = coordsOffsetMap[region.name]; + if (coordFix) { + var cp = region.center; + cp[0] += coordFix[0] / 10.5; + cp[1] += -coordFix[1] / (10.5 / 0.75); + } + }); +}; + +var geoCoordMap = { + 'Russia': [100, 60], + 'United States': [-99, 38], + 'United States of America': [-99, 38] +}; + +var fixGeoCoord = function (geo) { + each$1(geo.regions, function (region) { + var geoCoord = geoCoordMap[region.name]; + if (geoCoord) { + var cp = region.center; + cp[0] = geoCoord[0]; + cp[1] = geoCoord[1]; + } + }); +}; + +// Fix for 钓鱼岛 + +// var Region = require('../Region'); +// var zrUtil = require('zrender/src/core/util'); + +// var geoCoord = [126, 25]; + +var points$2 = [ + [ + [123.45165252685547, 25.73527164402261], + [123.49731445312499, 25.73527164402261], + [123.49731445312499, 25.750734064600884], + [123.45165252685547, 25.750734064600884], + [123.45165252685547, 25.73527164402261] + ] +]; + +var fixDiaoyuIsland = function (geo) { + if (geo.map === 'china') { + for (var i = 0, len = geo.regions.length; i < len; ++i) { + if (geo.regions[i].name === '台湾') { + geo.regions[i].geometries.push({ + type: 'polygon', + exterior: points$2[0] + }); + } + } + } +}; + +// Geo fix functions +var geoFixFuncs = [ + fixNanhai, + fixTextCoord, + fixGeoCoord, + fixDiaoyuIsland +]; + +/** + * [Geo description] + * @param {string} name Geo name + * @param {string} map Map type + * @param {Object} geoJson + * @param {Object} [specialAreas] + * Specify the positioned areas by left, top, width, height + * @param {Object.} [nameMap] + * Specify name alias + */ +function Geo(name, map$$1, geoJson, specialAreas, nameMap) { + + View.call(this, name); + + /** + * Map type + * @type {string} + */ + this.map = map$$1; + + this._nameCoordMap = createHashMap(); + + this.loadGeoJson(geoJson, specialAreas, nameMap); +} + +Geo.prototype = { + + constructor: Geo, + + type: 'geo', + + /** + * @param {Array.} + * @readOnly + */ + dimensions: ['lng', 'lat'], + + /** + * If contain given lng,lat coord + * @param {Array.} + * @readOnly + */ + containCoord: function (coord) { + var regions = this.regions; + for (var i = 0; i < regions.length; i++) { + if (regions[i].contain(coord)) { + return true; + } + } + return false; + }, + /** + * @param {Object} geoJson + * @param {Object} [specialAreas] + * Specify the positioned areas by left, top, width, height + * @param {Object.} [nameMap] + * Specify name alias + */ + loadGeoJson: function (geoJson, specialAreas, nameMap) { + // https://jsperf.com/try-catch-performance-overhead + try { + this.regions = geoJson ? parseGeoJson(geoJson) : []; + } + catch (e) { + throw 'Invalid geoJson format\n' + e.message; + } + specialAreas = specialAreas || {}; + nameMap = nameMap || {}; + var regions = this.regions; + var regionsMap = createHashMap(); + for (var i = 0; i < regions.length; i++) { + var regionName = regions[i].name; + // Try use the alias in nameMap + regionName = nameMap.hasOwnProperty(regionName) ? nameMap[regionName] : regionName; + regions[i].name = regionName; + + regionsMap.set(regionName, regions[i]); + // Add geoJson + this.addGeoCoord(regionName, regions[i].center); + + // Some area like Alaska in USA map needs to be tansformed + // to look better + var specialArea = specialAreas[regionName]; + if (specialArea) { + regions[i].transformTo( + specialArea.left, specialArea.top, specialArea.width, specialArea.height + ); + } + } + + this._regionsMap = regionsMap; + + this._rect = null; + + each$1(geoFixFuncs, function (fixFunc) { + fixFunc(this); + }, this); + }, + + // Overwrite + transformTo: function (x, y, width, height) { + var rect = this.getBoundingRect(); + + rect = rect.clone(); + // Longitute is inverted + rect.y = -rect.y - rect.height; + + var viewTransform = this._viewTransform; + + viewTransform.transform = rect.calculateTransform( + new BoundingRect(x, y, width, height) + ); + + viewTransform.decomposeTransform(); + + var scale = viewTransform.scale; + scale[1] = -scale[1]; + + viewTransform.updateTransform(); + + this._updateTransform(); + }, + + /** + * @param {string} name + * @return {module:echarts/coord/geo/Region} + */ + getRegion: function (name) { + return this._regionsMap.get(name); + }, + + getRegionByCoord: function (coord) { + var regions = this.regions; + for (var i = 0; i < regions.length; i++) { + if (regions[i].contain(coord)) { + return regions[i]; + } + } + }, + + /** + * Add geoCoord for indexing by name + * @param {string} name + * @param {Array.} geoCoord + */ + addGeoCoord: function (name, geoCoord) { + this._nameCoordMap.set(name, geoCoord); + }, + + /** + * Get geoCoord by name + * @param {string} name + * @return {Array.} + */ + getGeoCoord: function (name) { + return this._nameCoordMap.get(name); + }, + + // Overwrite + getBoundingRect: function () { + if (this._rect) { + return this._rect; + } + var rect; + + var regions = this.regions; + for (var i = 0; i < regions.length; i++) { + var regionRect = regions[i].getBoundingRect(); + rect = rect || regionRect.clone(); + rect.union(regionRect); + } + // FIXME Always return new ? + return (this._rect = rect || new BoundingRect(0, 0, 0, 0)); + }, + + /** + * @param {string|Array.} data + * @return {Array.} + */ + dataToPoint: function (data) { + if (typeof data === 'string') { + // Map area name to geoCoord + data = this.getGeoCoord(data); + } + if (data) { + return View.prototype.dataToPoint.call(this, data); + } + }, + + /** + * @inheritDoc + */ + convertToPixel: curry(doConvert, 'dataToPoint'), + + /** + * @inheritDoc + */ + convertFromPixel: curry(doConvert, 'pointToData') + +}; + +mixin(Geo, View); + +function doConvert(methodName, ecModel, finder, value) { + var geoModel = finder.geoModel; + var seriesModel = finder.seriesModel; + + var coordSys = geoModel + ? geoModel.coordinateSystem + : seriesModel + ? ( + seriesModel.coordinateSystem // For map. + || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem + ) + : null; + + return coordSys === this ? coordSys[methodName](value) : null; +} + +var mapDataStores = {}; + +/** + * Resize method bound to the geo + * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel + * @param {module:echarts/ExtensionAPI} api + */ +function resizeGeo (geoModel, api) { + + var boundingCoords = geoModel.get('boundingCoords'); + if (boundingCoords != null) { + var leftTop = boundingCoords[0]; + var rightBottom = boundingCoords[1]; + if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) { + if (__DEV__) { + console.error('Invalid boundingCoords'); + } + } + else { + this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]); + } + } + + var rect = this.getBoundingRect(); + + var boxLayoutOption; + + var center = geoModel.get('layoutCenter'); + var size = geoModel.get('layoutSize'); + + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + + var aspectScale = geoModel.get('aspectScale') || 0.75; + var aspect = rect.width / rect.height * aspectScale; + + var useCenterAndSize = false; + + if (center && size) { + center = [ + parsePercent$1(center[0], viewWidth), + parsePercent$1(center[1], viewHeight) + ]; + size = parsePercent$1(size, Math.min(viewWidth, viewHeight)); + + if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) { + useCenterAndSize = true; + } + else { + if (__DEV__) { + console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.'); + } + } + } + + var viewRect; + if (useCenterAndSize) { + var viewRect = {}; + if (aspect > 1) { + // Width is same with size + viewRect.width = size; + viewRect.height = size / aspect; + } + else { + viewRect.height = size; + viewRect.width = size * aspect; + } + viewRect.y = center[1] - viewRect.height / 2; + viewRect.x = center[0] - viewRect.width / 2; + } + else { + // Use left/top/width/height + boxLayoutOption = geoModel.getBoxLayoutParams(); + + // 0.75 rate + boxLayoutOption.aspect = aspect; + + viewRect = getLayoutRect(boxLayoutOption, { + width: viewWidth, + height: viewHeight + }); + } + + this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height); + + this.setCenter(geoModel.get('center')); + this.setZoom(geoModel.get('zoom')); +} + +/** + * @param {module:echarts/coord/Geo} geo + * @param {module:echarts/model/Model} model + * @inner + */ +function setGeoCoords(geo, model) { + each$1(model.get('geoCoord'), function (geoCoord, name) { + geo.addGeoCoord(name, geoCoord); + }); +} + +if (__DEV__) { + var mapNotExistsError = function (name) { + console.error('Map ' + name + ' not exists. You can download map file on http://echarts.baidu.com/download-map.html'); + }; +} + +var geoCreator = { + + // For deciding which dimensions to use when creating list data + dimensions: Geo.prototype.dimensions, + + create: function (ecModel, api) { + var geoList = []; + + // FIXME Create each time may be slow + ecModel.eachComponent('geo', function (geoModel, idx) { + var name = geoModel.get('map'); + var mapData = mapDataStores[name]; + if (__DEV__) { + if (!mapData) { + mapNotExistsError(name); + } + } + var geo = new Geo( + name + idx, name, + mapData && mapData.geoJson, mapData && mapData.specialAreas, + geoModel.get('nameMap') + ); + geo.zoomLimit = geoModel.get('scaleLimit'); + geoList.push(geo); + + setGeoCoords(geo, geoModel); + + geoModel.coordinateSystem = geo; + geo.model = geoModel; + + // Inject resize method + geo.resize = resizeGeo; + + geo.resize(geoModel, api); + }); + + ecModel.eachSeries(function (seriesModel) { + var coordSys = seriesModel.get('coordinateSystem'); + if (coordSys === 'geo') { + var geoIndex = seriesModel.get('geoIndex') || 0; + seriesModel.coordinateSystem = geoList[geoIndex]; + } + }); + + // If has map series + var mapModelGroupBySeries = {}; + + ecModel.eachSeriesByType('map', function (seriesModel) { + if (!seriesModel.getHostGeoModel()) { + var mapType = seriesModel.getMapType(); + mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || []; + mapModelGroupBySeries[mapType].push(seriesModel); + } + }); + + each$1(mapModelGroupBySeries, function (mapSeries, mapType) { + var mapData = mapDataStores[mapType]; + if (__DEV__) { + if (!mapData) { + mapNotExistsError(mapSeries[0].get('map')); + } + } + + var nameMapList = map(mapSeries, function (singleMapSeries) { + return singleMapSeries.get('nameMap'); + }); + var geo = new Geo( + mapType, mapType, + mapData && mapData.geoJson, mapData && mapData.specialAreas, + mergeAll(nameMapList) + ); + geo.zoomLimit = retrieve.apply(null, map(mapSeries, function (singleMapSeries) { + return singleMapSeries.get('scaleLimit'); + })); + geoList.push(geo); + + // Inject resize method + geo.resize = resizeGeo; + + geo.resize(mapSeries[0], api); + + each$1(mapSeries, function (singleMapSeries) { + singleMapSeries.coordinateSystem = geo; + + setGeoCoords(geo, singleMapSeries); + }); + }); + + return geoList; + }, + + /** + * @param {string} mapName + * @param {Object|string} geoJson + * @param {Object} [specialAreas] + * + * @example + * $.get('USA.json', function (geoJson) { + * echarts.registerMap('USA', geoJson); + * // Or + * echarts.registerMap('USA', { + * geoJson: geoJson, + * specialAreas: {} + * }) + * }); + */ + registerMap: function (mapName, geoJson, specialAreas) { + if (geoJson.geoJson && !geoJson.features) { + specialAreas = geoJson.specialAreas; + geoJson = geoJson.geoJson; + } + if (typeof geoJson === 'string') { + geoJson = (typeof JSON !== 'undefined' && JSON.parse) + ? JSON.parse(geoJson) : (new Function('return (' + geoJson + ');'))(); + } + mapDataStores[mapName] = { + geoJson: geoJson, + specialAreas: specialAreas + }; + }, + + /** + * @param {string} mapName + * @return {Object} + */ + getMap: function (mapName) { + return mapDataStores[mapName]; + }, + + /** + * Fill given regions array + * @param {Array.} originRegionArr + * @param {string} mapName + * @param {Object} [nameMap] + * @return {Array} + */ + getFilledRegions: function (originRegionArr, mapName, nameMap) { + // Not use the original + var regionsArr = (originRegionArr || []).slice(); + nameMap = nameMap || {}; + + var map$$1 = geoCreator.getMap(mapName); + var geoJson = map$$1 && map$$1.geoJson; + if (!geoJson) { + if (__DEV__) { + mapNotExistsError(mapName); + } + return originRegionArr; + } + + var dataNameMap = createHashMap(); + var features = geoJson.features; + for (var i = 0; i < regionsArr.length; i++) { + dataNameMap.set(regionsArr[i].name, regionsArr[i]); + } + + for (var i = 0; i < features.length; i++) { + var name = features[i].properties.name; + if (!dataNameMap.get(name)) { + if (nameMap.hasOwnProperty(name)) { + name = nameMap[name]; + } + regionsArr.push({ + name: name + }); + } + } + return regionsArr; + } +}; + +// Inject methods into echarts +$inject.registerMap(geoCreator.registerMap); +$inject.getMap(geoCreator.getMap); +$inject.parseGeoJSON(parseGeoJson); + +registerCoordinateSystem('geo', geoCreator); + +var MapSeries = SeriesModel.extend({ + + type: 'series.map', + + dependencies: ['geo'], + + layoutMode: 'box', + + /** + * Only first map series of same mapType will drawMap + * @type {boolean} + */ + needsDrawMap: false, + + /** + * Group of all map series with same mapType + * @type {boolean} + */ + seriesGroup: [], + + init: function (option) { + + this._fillOption(option, this.getMapType()); + // this.option = option; + + MapSeries.superApply(this, 'init', arguments); + + this.updateSelectedMap(option.data); + }, + + getInitialData: function (option) { + var dimensions = completeDimensions(['value'], option.data || []); + + var list = new List(dimensions, this); + + list.initData(option.data); + + return list; + }, + + mergeOption: function (newOption) { + this._fillOption(newOption, this.getMapType()); + + MapSeries.superApply(this, 'mergeOption', arguments); + + this.updateSelectedMap(this.option.data); + }, + + /** + * If no host geo model, return null, which means using a + * inner exclusive geo model. + */ + getHostGeoModel: function () { + var geoIndex = this.option.geoIndex; + return geoIndex != null + ? this.dependentModels.geo[geoIndex] + : null; + }, + + getMapType: function () { + return (this.getHostGeoModel() || this).option.map; + }, + + _fillOption: function (option, mapName) { + // Shallow clone + // option = zrUtil.extend({}, option); + + option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap); + + // return option; + }, + + getRawValue: function (dataIndex) { + // Use value stored in data instead because it is calculated from multiple series + // FIXME Provide all value of multiple series ? + return this.getData().get('value', dataIndex); + }, + + /** + * Get model of region + * @param {string} name + * @return {module:echarts/model/Model} + */ + getRegionModel: function (regionName) { + var data = this.getData(); + return data.getItemModel(data.indexOfName(regionName)); + }, + + /** + * Map tooltip formatter + * + * @param {number} dataIndex + */ + formatTooltip: function (dataIndex) { + // FIXME orignalData and data is a bit confusing + var data = this.getData(); + var formattedValue = addCommas(this.getRawValue(dataIndex)); + var name = data.getName(dataIndex); + + var seriesGroup = this.seriesGroup; + var seriesNames = []; + for (var i = 0; i < seriesGroup.length; i++) { + var otherIndex = seriesGroup[i].originalData.indexOfName(name); + if (!isNaN(seriesGroup[i].originalData.get('value', otherIndex))) { + seriesNames.push( + encodeHTML(seriesGroup[i].name) + ); + } + } + + return seriesNames.join(', ') + '
' + + encodeHTML(name + ' : ' + formattedValue); + }, + + /** + * @implement + */ + getTooltipPosition: function (dataIndex) { + if (dataIndex != null) { + var name = this.getData().getName(dataIndex); + var geo = this.coordinateSystem; + var region = geo.getRegion(name); + + return region && geo.dataToPoint(region.center); + } + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + }, + + defaultOption: { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 2, + + coordinateSystem: 'geo', + + // map should be explicitly specified since ec3. + map: '', + + // If `geoIndex` is not specified, a exclusive geo will be + // created. Otherwise use the specified geo component, and + // `map` and `mapType` are ignored. + // geoIndex: 0, + + // 'center' | 'left' | 'right' | 'x%' | {number} + left: 'center', + // 'center' | 'top' | 'bottom' | 'x%' | {number} + top: 'center', + // right + // bottom + // width: + // height + + // Aspect is width / height. Inited to be geoJson bbox aspect + // This parameter is used for scale this aspect + aspectScale: 0.75, + + ///// Layout with center and size + // If you wan't to put map in a fixed size box with right aspect ratio + // This two properties may more conveninet + // layoutCenter: [50%, 50%] + // layoutSize: 100 + + + // 数值合并方式,默认加和,可选为: + // 'sum' | 'average' | 'max' | 'min' + // mapValueCalculation: 'sum', + // 地图数值计算结果小数精度 + // mapValuePrecision: 0, + + + // 显示图例颜色标识(系列标识的小圆点),图例开启时有效 + showLegendSymbol: true, + // 选择模式,默认关闭,可选single,multiple + // selectedMode: false, + dataRangeHoverLink: true, + // 是否开启缩放及漫游模式 + // roam: false, + + // Define left-top, right-bottom coords to control view + // For example, [ [180, 90], [-180, -90] ], + // higher priority than center and zoom + boundingCoords: null, + + // Default on center of map + center: null, + + zoom: 1, + + scaleLimit: null, + + label: { + normal: { + show: false, + color: '#000' + }, + emphasis: { + show: true, + color: 'rgb(100,0,0)' + } + }, + // scaleLimit: null, + itemStyle: { + normal: { + // color: 各异, + borderWidth: 0.5, + borderColor: '#444', + areaColor: '#eee' + }, + // 也是选中样式 + emphasis: { + areaColor: 'rgba(255,215,0,0.8)' + } + } + } + +}); + +mixin(MapSeries, selectableMixin); + +var ATTR = '\0_ec_interaction_mutex'; + +function take(zr, resourceKey, userKey) { + var store = getStore(zr); + store[resourceKey] = userKey; +} + +function release(zr, resourceKey, userKey) { + var store = getStore(zr); + var uKey = store[resourceKey]; + + if (uKey === userKey) { + store[resourceKey] = null; + } +} + +function isTaken(zr, resourceKey) { + return !!getStore(zr)[resourceKey]; +} + +function getStore(zr) { + return zr[ATTR] || (zr[ATTR] = {}); +} + +/** + * payload: { + * type: 'takeGlobalCursor', + * key: 'dataZoomSelect', or 'brush', or ..., + * If no userKey, release global cursor. + * } + */ +registerAction( + {type: 'takeGlobalCursor', event: 'globalCursorTaken', update: 'update'}, + function () {} +); + +/** + * @alias module:echarts/component/helper/RoamController + * @constructor + * @mixin {module:zrender/mixin/Eventful} + * + * @param {module:zrender/zrender~ZRender} zr + */ +function RoamController(zr) { + + /** + * @type {Function} + */ + this.pointerChecker; + + /** + * @type {module:zrender} + */ + this._zr = zr; + + /** + * @type {Object} + */ + this._opt = {}; + + // Avoid two roamController bind the same handler + var bind$$1 = bind; + var mousedownHandler = bind$$1(mousedown, this); + var mousemoveHandler = bind$$1(mousemove, this); + var mouseupHandler = bind$$1(mouseup, this); + var mousewheelHandler = bind$$1(mousewheel, this); + var pinchHandler = bind$$1(pinch, this); + + Eventful.call(this); + + /** + * @param {Function} pointerChecker + * input: x, y + * output: boolean + */ + this.setPointerChecker = function (pointerChecker) { + this.pointerChecker = pointerChecker; + }; + + /** + * Notice: only enable needed types. For example, if 'zoom' + * is not needed, 'zoom' should not be enabled, otherwise + * default mousewheel behaviour (scroll page) will be disabled. + * + * @param {boolean|string} [controlType=true] Specify the control type, + * which can be null/undefined or true/false + * or 'pan/move' or 'zoom'/'scale' + * @param {Object} [opt] + * @param {Object} [opt.zoomOnMouseWheel=true] + * @param {Object} [opt.moveOnMouseMove=true] + * @param {Object} [opt.preventDefaultMouseMove=true] When pan. + */ + this.enable = function (controlType, opt) { + + // Disable previous first + this.disable(); + + this._opt = defaults(clone(opt) || {}, { + zoomOnMouseWheel: true, + moveOnMouseMove: true, + preventDefaultMouseMove: true + }); + + if (controlType == null) { + controlType = true; + } + + if (controlType === true || (controlType === 'move' || controlType === 'pan')) { + zr.on('mousedown', mousedownHandler); + zr.on('mousemove', mousemoveHandler); + zr.on('mouseup', mouseupHandler); + } + if (controlType === true || (controlType === 'scale' || controlType === 'zoom')) { + zr.on('mousewheel', mousewheelHandler); + zr.on('pinch', pinchHandler); + } + }; + + this.disable = function () { + zr.off('mousedown', mousedownHandler); + zr.off('mousemove', mousemoveHandler); + zr.off('mouseup', mouseupHandler); + zr.off('mousewheel', mousewheelHandler); + zr.off('pinch', pinchHandler); + }; + + this.dispose = this.disable; + + this.isDragging = function () { + return this._dragging; + }; + + this.isPinching = function () { + return this._pinching; + }; +} + +mixin(RoamController, Eventful); + + +function mousedown(e) { + if (notLeftMouse(e) + || (e.target && e.target.draggable) + ) { + return; + } + + var x = e.offsetX; + var y = e.offsetY; + + // Only check on mosedown, but not mousemove. + // Mouse can be out of target when mouse moving. + if (this.pointerChecker && this.pointerChecker(e, x, y)) { + this._x = x; + this._y = y; + this._dragging = true; + } +} + +function mousemove(e) { + if (notLeftMouse(e) + || !checkKeyBinding(this, 'moveOnMouseMove', e) + || !this._dragging + || e.gestureEvent === 'pinch' + || isTaken(this._zr, 'globalPan') + ) { + return; + } + + var x = e.offsetX; + var y = e.offsetY; + + var oldX = this._x; + var oldY = this._y; + + var dx = x - oldX; + var dy = y - oldY; + + this._x = x; + this._y = y; + + this._opt.preventDefaultMouseMove && stop(e.event); + + this.trigger('pan', dx, dy, oldX, oldY, x, y); +} + +function mouseup(e) { + if (!notLeftMouse(e)) { + this._dragging = false; + } +} + +function mousewheel(e) { + // wheelDelta maybe -0 in chrome mac. + if (!checkKeyBinding(this, 'zoomOnMouseWheel', e) || e.wheelDelta === 0) { + return; + } + + // Convenience: + // Mac and VM Windows on Mac: scroll up: zoom out. + // Windows: scroll up: zoom in. + var zoomDelta = e.wheelDelta > 0 ? 1.1 : 1 / 1.1; + zoom.call(this, e, zoomDelta, e.offsetX, e.offsetY); +} + +function pinch(e) { + if (isTaken(this._zr, 'globalPan')) { + return; + } + var zoomDelta = e.pinchScale > 1 ? 1.1 : 1 / 1.1; + zoom.call(this, e, zoomDelta, e.pinchX, e.pinchY); +} + +function zoom(e, zoomDelta, zoomX, zoomY) { + if (this.pointerChecker && this.pointerChecker(e, zoomX, zoomY)) { + // When mouse is out of roamController rect, + // default befavoius should not be be disabled, otherwise + // page sliding is disabled, contrary to expectation. + stop(e.event); + + this.trigger('zoom', zoomDelta, zoomX, zoomY); + } +} + +function checkKeyBinding(roamController, prop, e) { + var setting = roamController._opt[prop]; + return setting + && (!isString(setting) || e.event[setting + 'Key']); +} + +/** + * For geo and graph. + * + * @param {Object} controllerHost + * @param {module:zrender/Element} controllerHost.target + */ +function updateViewOnPan(controllerHost, dx, dy) { + var target = controllerHost.target; + var pos = target.position; + pos[0] += dx; + pos[1] += dy; + target.dirty(); +} + +/** + * For geo and graph. + * + * @param {Object} controllerHost + * @param {module:zrender/Element} controllerHost.target + * @param {number} controllerHost.zoom + * @param {number} controllerHost.zoomLimit like: {min: 1, max: 2} + */ +function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) { + var target = controllerHost.target; + var zoomLimit = controllerHost.zoomLimit; + var pos = target.position; + var scale = target.scale; + + var newZoom = controllerHost.zoom = controllerHost.zoom || 1; + newZoom *= zoomDelta; + if (zoomLimit) { + var zoomMin = zoomLimit.min || 0; + var zoomMax = zoomLimit.max || Infinity; + newZoom = Math.max( + Math.min(zoomMax, newZoom), + zoomMin + ); + } + var zoomScale = newZoom / controllerHost.zoom; + controllerHost.zoom = newZoom; + // Keep the mouse center when scaling + pos[0] -= (zoomX - pos[0]) * (zoomScale - 1); + pos[1] -= (zoomY - pos[1]) * (zoomScale - 1); + scale[0] *= zoomScale; + scale[1] *= zoomScale; + + target.dirty(); +} + +var IRRELEVANT_EXCLUDES = {'axisPointer': 1, 'tooltip': 1, 'brush': 1}; + +/** + * Avoid that: mouse click on a elements that is over geo or graph, + * but roam is triggered. + */ +function onIrrelevantElement(e, api, targetCoordSysModel) { + var model = api.getComponentByElement(e.topTarget); + // If model is axisModel, it works only if it is injected with coordinateSystem. + var coordSys = model && model.coordinateSystem; + return model + && model !== targetCoordSysModel + && !IRRELEVANT_EXCLUDES[model.mainType] + && (coordSys && coordSys.model !== targetCoordSysModel); +} + +function getFixedItemStyle(model, scale) { + var itemStyle = model.getItemStyle(); + var areaColor = model.get('areaColor'); + + // If user want the color not to be changed when hover, + // they should both set areaColor and color to be null. + if (areaColor != null) { + itemStyle.fill = areaColor; + } + + return itemStyle; +} + +function updateMapSelectHandler(mapDraw, mapOrGeoModel, group, api, fromView) { + group.off('click'); + group.off('mousedown'); + + if (mapOrGeoModel.get('selectedMode')) { + + group.on('mousedown', function () { + mapDraw._mouseDownFlag = true; + }); + + group.on('click', function (e) { + if (!mapDraw._mouseDownFlag) { + return; + } + mapDraw._mouseDownFlag = false; + + var el = e.target; + while (!el.__regions) { + el = el.parent; + } + if (!el) { + return; + } + + var action = { + type: (mapOrGeoModel.mainType === 'geo' ? 'geo' : 'map') + 'ToggleSelect', + batch: map(el.__regions, function (region) { + return { + name: region.name, + from: fromView.uid + }; + }) + }; + action[mapOrGeoModel.mainType + 'Id'] = mapOrGeoModel.id; + + api.dispatchAction(action); + + updateMapSelected(mapOrGeoModel, group); + }); + } +} + +function updateMapSelected(mapOrGeoModel, group) { + // FIXME + group.eachChild(function (otherRegionEl) { + each$1(otherRegionEl.__regions, function (region) { + otherRegionEl.trigger(mapOrGeoModel.isSelected(region.name) ? 'emphasis' : 'normal'); + }); + }); +} + +/** + * @alias module:echarts/component/helper/MapDraw + * @param {module:echarts/ExtensionAPI} api + * @param {boolean} updateGroup + */ +function MapDraw(api, updateGroup) { + + var group = new Group(); + + /** + * @type {module:echarts/component/helper/RoamController} + * @private + */ + this._controller = new RoamController(api.getZr()); + + /** + * @type {Object} {target, zoom, zoomLimit} + * @private + */ + this._controllerHost = {target: updateGroup ? group : null}; + + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = group; + + /** + * @type {boolean} + * @private + */ + this._updateGroup = updateGroup; + + /** + * This flag is used to make sure that only one among + * `pan`, `zoom`, `click` can occurs, otherwise 'selected' + * action may be triggered when `pan`, which is unexpected. + * @type {booelan} + */ + this._mouseDownFlag; +} + +MapDraw.prototype = { + + constructor: MapDraw, + + draw: function (mapOrGeoModel, ecModel, api, fromView, payload) { + + var isGeo = mapOrGeoModel.mainType === 'geo'; + + // Map series has data. GEO model that controlled by map series + // will be assigned with map data. Other GEO model has no data. + var data = mapOrGeoModel.getData && mapOrGeoModel.getData(); + isGeo && ecModel.eachComponent({mainType: 'series', subType: 'map'}, function (mapSeries) { + if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) { + data = mapSeries.getData(); + } + }); + + var geo = mapOrGeoModel.coordinateSystem; + + var group = this.group; + + var scale = geo.scale; + var groupNewProp = { + position: geo.position, + scale: scale + }; + + // No animation when first draw or in action + if (!group.childAt(0) || payload) { + group.attr(groupNewProp); + } + else { + updateProps(group, groupNewProp, mapOrGeoModel); + } + + group.removeAll(); + + var itemStyleAccessPath = ['itemStyle', 'normal']; + var hoverItemStyleAccessPath = ['itemStyle', 'emphasis']; + var labelAccessPath = ['label', 'normal']; + var hoverLabelAccessPath = ['label', 'emphasis']; + var nameMap = createHashMap(); + + each$1(geo.regions, function (region) { + + // Consider in GeoJson properties.name may be duplicated, for example, + // there is multiple region named "United Kindom" or "France" (so many + // colonies). And it is not appropriate to merge them in geo, which + // will make them share the same label and bring trouble in label + // location calculation. + var regionGroup = nameMap.get(region.name) + || nameMap.set(region.name, new Group()); + + var compoundPath = new CompoundPath({ + shape: { + paths: [] + } + }); + regionGroup.add(compoundPath); + + var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel; + + var itemStyleModel = regionModel.getModel(itemStyleAccessPath); + var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath); + var itemStyle = getFixedItemStyle(itemStyleModel, scale); + var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale); + + var labelModel = regionModel.getModel(labelAccessPath); + var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath); + + var dataIdx; + // Use the itemStyle in data if has data + if (data) { + dataIdx = data.indexOfName(region.name); + // Only visual color of each item will be used. It can be encoded by dataRange + // But visual color of series is used in symbol drawing + // + // Visual color for each series is for the symbol draw + var visualColor = data.getItemVisual(dataIdx, 'color', true); + if (visualColor) { + itemStyle.fill = visualColor; + } + } + + each$1(region.geometries, function (geometry) { + if (geometry.type !== 'polygon') { + return; + } + compoundPath.shape.paths.push(new Polygon({ + shape: { + points: geometry.exterior + } + })); + + for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); i++) { + compoundPath.shape.paths.push(new Polygon({ + shape: { + points: geometry.interiors[i] + } + })); + } + }); + + compoundPath.setStyle(itemStyle); + compoundPath.style.strokeNoScale = true; + compoundPath.culling = true; + // Label + var showLabel = labelModel.get('show'); + var hoverShowLabel = hoverLabelModel.get('show'); + + var isDataNaN = data && isNaN(data.get('value', dataIdx)); + var itemLayout = data && data.getItemLayout(dataIdx); + // In the following cases label will be drawn + // 1. In map series and data value is NaN + // 2. In geo component + // 4. Region has no series legendSymbol, which will be add a showLabel flag in mapSymbolLayout + if ( + (isGeo || isDataNaN && (showLabel || hoverShowLabel)) + || (itemLayout && itemLayout.showLabel) + ) { + var query = !isGeo ? dataIdx : region.name; + var labelFetcher; + + // Consider dataIdx not found. + if (!data || dataIdx >= 0) { + labelFetcher = mapOrGeoModel; + } + + var textEl = new Text({ + position: region.center.slice(), + scale: [1 / scale[0], 1 / scale[1]], + z2: 10, + silent: true + }); + + setLabelStyle( + textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel, + { + labelFetcher: labelFetcher, + labelDataIndex: query, + defaultText: region.name, + useInsideStyle: false + }, + { + textAlign: 'center', + textVerticalAlign: 'middle' + } + ); + + regionGroup.add(textEl); + } + + // setItemGraphicEl, setHoverStyle after all polygons and labels + // are added to the rigionGroup + if (data) { + data.setItemGraphicEl(dataIdx, regionGroup); + } + else { + var regionModel = mapOrGeoModel.getRegionModel(region.name); + // Package custom mouse event for geo component + compoundPath.eventData = { + componentType: 'geo', + geoIndex: mapOrGeoModel.componentIndex, + name: region.name, + region: (regionModel && regionModel.option) || {} + }; + } + + var groupRegions = regionGroup.__regions || (regionGroup.__regions = []); + groupRegions.push(region); + + setHoverStyle( + regionGroup, + hoverItemStyle, + {hoverSilentOnTouch: !!mapOrGeoModel.get('selectedMode')} + ); + + group.add(regionGroup); + }); + + this._updateController(mapOrGeoModel, ecModel, api); + + updateMapSelectHandler(this, mapOrGeoModel, group, api, fromView); + + updateMapSelected(mapOrGeoModel, group); + }, + + remove: function () { + this.group.removeAll(); + this._controller.dispose(); + this._controllerHost = {}; + }, + + _updateController: function (mapOrGeoModel, ecModel, api) { + var geo = mapOrGeoModel.coordinateSystem; + var controller = this._controller; + var controllerHost = this._controllerHost; + + controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit'); + controllerHost.zoom = geo.getZoom(); + + // roamType is will be set default true if it is null + controller.enable(mapOrGeoModel.get('roam') || false); + var mainType = mapOrGeoModel.mainType; + + function makeActionBase() { + var action = { + type: 'geoRoam', + componentType: mainType + }; + action[mainType + 'Id'] = mapOrGeoModel.id; + return action; + } + + controller.off('pan').on('pan', function (dx, dy) { + this._mouseDownFlag = false; + + updateViewOnPan(controllerHost, dx, dy); + + api.dispatchAction(extend(makeActionBase(), { + dx: dx, + dy: dy + })); + }, this); + + controller.off('zoom').on('zoom', function (zoom, mouseX, mouseY) { + this._mouseDownFlag = false; + + updateViewOnZoom(controllerHost, zoom, mouseX, mouseY); + + api.dispatchAction(extend(makeActionBase(), { + zoom: zoom, + originX: mouseX, + originY: mouseY + })); + + if (this._updateGroup) { + var group = this.group; + var scale = group.scale; + group.traverse(function (el) { + if (el.type === 'text') { + el.attr('scale', [1 / scale[0], 1 / scale[1]]); + } + }); + } + }, this); + + controller.setPointerChecker(function (e, x, y) { + return geo.getViewRectAfterRoam().contain(x, y) + && !onIrrelevantElement(e, api, mapOrGeoModel); + }); + } +}; + +extendChartView({ + + type: 'map', + + render: function (mapModel, ecModel, api, payload) { + // Not render if it is an toggleSelect action from self + if (payload && payload.type === 'mapToggleSelect' + && payload.from === this.uid + ) { + return; + } + + var group = this.group; + group.removeAll(); + + if (mapModel.getHostGeoModel()) { + return; + } + + // Not update map if it is an roam action from self + if (!(payload && payload.type === 'geoRoam' + && payload.componentType === 'series' + && payload.seriesId === mapModel.id + ) + ) { + if (mapModel.needsDrawMap) { + var mapDraw = this._mapDraw || new MapDraw(api, true); + group.add(mapDraw.group); + + mapDraw.draw(mapModel, ecModel, api, this, payload); + + this._mapDraw = mapDraw; + } + else { + // Remove drawed map + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + } + } + else { + var mapDraw = this._mapDraw; + mapDraw && group.add(mapDraw.group); + } + + mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') + && this._renderSymbols(mapModel, ecModel, api); + }, + + remove: function () { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + this.group.removeAll(); + }, + + dispose: function () { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + }, + + _renderSymbols: function (mapModel, ecModel, api) { + var originalData = mapModel.originalData; + var group = this.group; + + originalData.each('value', function (value, idx) { + if (isNaN(value)) { + return; + } + + var layout = originalData.getItemLayout(idx); + + if (!layout || !layout.point) { + // Not exists in map + return; + } + + var point = layout.point; + var offset = layout.offset; + + var circle = new Circle({ + style: { + // Because the special of map draw. + // Which needs statistic of multiple series and draw on one map. + // And each series also need a symbol with legend color + // + // Layout and visual are put one the different data + fill: mapModel.getData().getVisual('color') + }, + shape: { + cx: point[0] + offset * 9, + cy: point[1], + r: 3 + }, + silent: true, + // Do not overlap the first series, on which labels are displayed. + z2: !offset ? 10 : 8 + }); + + // First data on the same region + if (!offset) { + var fullData = mapModel.mainSeries.getData(); + var name = originalData.getName(idx); + + var fullIndex = fullData.indexOfName(name); + + var itemModel = originalData.getItemModel(idx); + var labelModel = itemModel.getModel('label.normal'); + var hoverLabelModel = itemModel.getModel('label.emphasis'); + + var polygonGroups = fullData.getItemGraphicEl(fullIndex); + + var normalText = retrieve2( + mapModel.getFormattedLabel(idx, 'normal'), + name + ); + var emphasisText = retrieve2( + mapModel.getFormattedLabel(idx, 'emphasis'), + normalText + ); + + var onEmphasis = function () { + var hoverStyle = setTextStyle({}, hoverLabelModel, { + text: hoverLabelModel.get('show') ? emphasisText : null + }, {isRectText: true, useInsideStyle: false}, true); + circle.style.extendFrom(hoverStyle); + // Make label upper than others if overlaps. + circle.__mapOriginalZ2 = circle.z2; + circle.z2 += 1; + }; + + var onNormal = function () { + setTextStyle(circle.style, labelModel, { + text: labelModel.get('show') ? normalText : null, + textPosition: labelModel.getShallow('position') || 'bottom' + }, {isRectText: true, useInsideStyle: false}); + + if (circle.__mapOriginalZ2 != null) { + circle.z2 = circle.__mapOriginalZ2; + circle.__mapOriginalZ2 = null; + } + }; + + polygonGroups.on('mouseover', onEmphasis) + .on('mouseout', onNormal) + .on('emphasis', onEmphasis) + .on('normal', onNormal); + + onNormal(); + } + + group.add(circle); + }); + } +}); + +/** + * @param {module:echarts/coord/View} view + * @param {Object} payload + * @param {Object} [zoomLimit] + */ +function updateCenterAndZoom( + view, payload, zoomLimit +) { + var previousZoom = view.getZoom(); + var center = view.getCenter(); + var zoom = payload.zoom; + + var point = view.dataToPoint(center); + + if (payload.dx != null && payload.dy != null) { + point[0] -= payload.dx; + point[1] -= payload.dy; + + var center = view.pointToData(point); + view.setCenter(center); + } + if (zoom != null) { + if (zoomLimit) { + var zoomMin = zoomLimit.min || 0; + var zoomMax = zoomLimit.max || Infinity; + zoom = Math.max( + Math.min(previousZoom * zoom, zoomMax), + zoomMin + ) / previousZoom; + } + + // Zoom on given point(originX, originY) + view.scale[0] *= zoom; + view.scale[1] *= zoom; + var position = view.position; + var fixX = (payload.originX - position[0]) * (zoom - 1); + var fixY = (payload.originY - position[1]) * (zoom - 1); + + position[0] -= fixX; + position[1] -= fixY; + + view.updateTransform(); + // Get the new center + var center = view.pointToData(point); + view.setCenter(center); + view.setZoom(zoom * previousZoom); + } + + return { + center: view.getCenter(), + zoom: view.getZoom() + }; +} + +/** + * @payload + * @property {string} [componentType=series] + * @property {number} [dx] + * @property {number} [dy] + * @property {number} [zoom] + * @property {number} [originX] + * @property {number} [originY] + */ +registerAction({ + type: 'geoRoam', + event: 'geoRoam', + update: 'updateLayout' +}, function (payload, ecModel) { + var componentType = payload.componentType || 'series'; + + ecModel.eachComponent( + { mainType: componentType, query: payload }, + function (componentModel) { + var geo = componentModel.coordinateSystem; + if (geo.type !== 'geo') { + return; + } + + var res = updateCenterAndZoom( + geo, payload, componentModel.get('scaleLimit') + ); + + componentModel.setCenter + && componentModel.setCenter(res.center); + + componentModel.setZoom + && componentModel.setZoom(res.zoom); + + // All map series with same `map` use the same geo coordinate system + // So the center and zoom must be in sync. Include the series not selected by legend + if (componentType === 'series') { + each$1(componentModel.seriesGroup, function (seriesModel) { + seriesModel.setCenter(res.center); + seriesModel.setZoom(res.zoom); + }); + } + } + ); +}); + +var mapSymbolLayout = function (ecModel) { + + var processedMapType = {}; + + ecModel.eachSeriesByType('map', function (mapSeries) { + var mapType = mapSeries.getMapType(); + if (mapSeries.getHostGeoModel() || processedMapType[mapType]) { + return; + } + + var mapSymbolOffsets = {}; + + each$1(mapSeries.seriesGroup, function (subMapSeries) { + var geo = subMapSeries.coordinateSystem; + var data = subMapSeries.originalData; + if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) { + data.each('value', function (value, idx) { + var name = data.getName(idx); + var region = geo.getRegion(name); + + // If input series.data is [11, 22, '-'/null/undefined, 44], + // it will be filled with NaN: [11, 22, NaN, 44] and NaN will + // not be drawn. So here must validate if value is NaN. + if (!region || isNaN(value)) { + return; + } + + var offset = mapSymbolOffsets[name] || 0; + + var point = geo.dataToPoint(region.center); + + mapSymbolOffsets[name] = offset + 1; + + data.setItemLayout(idx, { + point: point, + offset: offset + }); + }); + } + }); + + // Show label of those region not has legendSymbol(which is offset 0) + var data = mapSeries.getData(); + data.each(function (idx) { + var name = data.getName(idx); + var layout = data.getItemLayout(idx) || {}; + layout.showLabel = !mapSymbolOffsets[name]; + data.setItemLayout(idx, layout); + }); + + processedMapType[mapType] = true; + }); +}; + +var mapVisual = function (ecModel) { + ecModel.eachSeriesByType('map', function (seriesModel) { + var colorList = seriesModel.get('color'); + var itemStyleModel = seriesModel.getModel('itemStyle.normal'); + + var areaColor = itemStyleModel.get('areaColor'); + var color = itemStyleModel.get('color') + || colorList[seriesModel.seriesIndex % colorList.length]; + + seriesModel.getData().setVisual({ + 'areaColor': areaColor, + 'color': color + }); + }); +}; + +// FIXME 公用? +/** + * @param {Array.} datas + * @param {string} statisticType 'average' 'sum' + * @inner + */ +function dataStatistics(datas, statisticType) { + var dataNameMap = {}; + var dims = ['value']; + + each$1(datas, function (data) { + data.each(dims, function (value, idx) { + // Add prefix to avoid conflict with Object.prototype. + var mapKey = 'ec-' + data.getName(idx); + dataNameMap[mapKey] = dataNameMap[mapKey] || []; + if (!isNaN(value)) { + dataNameMap[mapKey].push(value); + } + }); + }); + + return datas[0].map(dims, function (value, idx) { + var mapKey = 'ec-' + datas[0].getName(idx); + var sum = 0; + var min = Infinity; + var max = -Infinity; + var len = dataNameMap[mapKey].length; + for (var i = 0; i < len; i++) { + min = Math.min(min, dataNameMap[mapKey][i]); + max = Math.max(max, dataNameMap[mapKey][i]); + sum += dataNameMap[mapKey][i]; + } + var result; + if (statisticType === 'min') { + result = min; + } + else if (statisticType === 'max') { + result = max; + } + else if (statisticType === 'average') { + result = sum / len; + } + else { + result = sum; + } + return len === 0 ? NaN : result; + }); +} + +var mapDataStatistic = function (ecModel) { + var seriesGroups = {}; + ecModel.eachSeriesByType('map', function (seriesModel) { + var hostGeoModel = seriesModel.getHostGeoModel(); + var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType(); + (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel); + }); + + each$1(seriesGroups, function (seriesList, key) { + var data = dataStatistics( + map(seriesList, function (seriesModel) { + return seriesModel.getData(); + }), + seriesList[0].get('mapValueCalculation') + ); + + for (var i = 0; i < seriesList.length; i++) { + seriesList[i].originalData = seriesList[i].getData(); + } + + // FIXME Put where? + for (var i = 0; i < seriesList.length; i++) { + seriesList[i].seriesGroup = seriesList; + seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel(); + + seriesList[i].setData(data.cloneShallow()); + seriesList[i].mainSeries = seriesList[0]; + } + }); +}; + +var backwardCompat$2 = function (option) { + // Save geoCoord + var mapSeries = []; + each$1(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'map') { + mapSeries.push(seriesOpt); + seriesOpt.map = seriesOpt.map || seriesOpt.mapType; + // Put x, y, width, height, x2, y2 in the top level + defaults(seriesOpt, seriesOpt.mapLocation); + } + }); +}; + +registerLayout(mapSymbolLayout); +registerVisual(mapVisual); +registerProcessor(PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic); +registerPreprocessor(backwardCompat$2); + +createDataSelectAction('map', [{ + type: 'mapToggleSelect', + event: 'mapselectchanged', + method: 'toggleSelected' +}, { + type: 'mapSelect', + event: 'mapselected', + method: 'select' +}, { + type: 'mapUnSelect', + event: 'mapunselected', + method: 'unSelect' +}]); + +/** + * Link lists and struct (graph or tree) + */ + +var each$10 = each$1; + +var DATAS = '\0__link_datas'; +var MAIN_DATA = '\0__link_mainData'; + +// Caution: +// In most case, either list or its shallow clones (see list.cloneShallow) +// is active in echarts process. So considering heap memory consumption, +// we do not clone tree or graph, but share them among list and its shallow clones. +// But in some rare case, we have to keep old list (like do animation in chart). So +// please take care that both the old list and the new list share the same tree/graph. + +/** + * @param {Object} opt + * @param {module:echarts/data/List} opt.mainData + * @param {Object} [opt.struct] For example, instance of Graph or Tree. + * @param {string} [opt.structAttr] designation: list[structAttr] = struct; + * @param {Object} [opt.datas] {dataType: data}, + * like: {node: nodeList, edge: edgeList}. + * Should contain mainData. + * @param {Object} [opt.datasAttr] {dataType: attr}, + * designation: struct[datasAttr[dataType]] = list; + */ +function linkList(opt) { + var mainData = opt.mainData; + var datas = opt.datas; + + if (!datas) { + datas = {main: mainData}; + opt.datasAttr = {main: 'data'}; + } + opt.datas = opt.mainData = null; + + linkAll(mainData, datas, opt); + + // Porxy data original methods. + each$10(datas, function (data) { + each$10(mainData.TRANSFERABLE_METHODS, function (methodName) { + data.wrapMethod(methodName, curry(transferInjection, opt)); + }); + + }); + + // Beyond transfer, additional features should be added to `cloneShallow`. + mainData.wrapMethod('cloneShallow', curry(cloneShallowInjection, opt)); + + // Only mainData trigger change, because struct.update may trigger + // another changable methods, which may bring about dead lock. + each$10(mainData.CHANGABLE_METHODS, function (methodName) { + mainData.wrapMethod(methodName, curry(changeInjection, opt)); + }); + + // Make sure datas contains mainData. + assert(datas[mainData.dataType] === mainData); +} + +function transferInjection(opt, res) { + if (isMainData(this)) { + // Transfer datas to new main data. + var datas = extend({}, this[DATAS]); + datas[this.dataType] = res; + linkAll(res, datas, opt); + } + else { + // Modify the reference in main data to point newData. + linkSingle(res, this.dataType, this[MAIN_DATA], opt); + } + return res; +} + +function changeInjection(opt, res) { + opt.struct && opt.struct.update(this); + return res; +} + +function cloneShallowInjection(opt, res) { + // cloneShallow, which brings about some fragilities, may be inappropriate + // to be exposed as an API. So for implementation simplicity we can make + // the restriction that cloneShallow of not-mainData should not be invoked + // outside, but only be invoked here. + each$10(res[DATAS], function (data, dataType) { + data !== res && linkSingle(data.cloneShallow(), dataType, res, opt); + }); + return res; +} + +/** + * Supplement method to List. + * + * @public + * @param {string} [dataType] If not specified, return mainData. + * @return {module:echarts/data/List} + */ +function getLinkedData(dataType) { + var mainData = this[MAIN_DATA]; + return (dataType == null || mainData == null) + ? mainData + : mainData[DATAS][dataType]; +} + +function isMainData(data) { + return data[MAIN_DATA] === data; +} + +function linkAll(mainData, datas, opt) { + mainData[DATAS] = {}; + each$10(datas, function (data, dataType) { + linkSingle(data, dataType, mainData, opt); + }); +} + +function linkSingle(data, dataType, mainData, opt) { + mainData[DATAS][dataType] = data; + data[MAIN_DATA] = mainData; + data.dataType = dataType; + + if (opt.struct) { + data[opt.structAttr] = opt.struct; + opt.struct[opt.datasAttr[dataType]] = data; + } + + // Supplement method. + data.getLinkedData = getLinkedData; +} + +/** + * Tree data structure + * + * @module echarts/data/Tree + */ + +/** + * @constructor module:echarts/data/Tree~TreeNode + * @param {string} name + * @param {module:echarts/data/Tree} hostTree + */ +var TreeNode = function (name, hostTree) { + /** + * @type {string} + */ + this.name = name || ''; + + /** + * Depth of node + * + * @type {number} + * @readOnly + */ + this.depth = 0; + + /** + * Height of the subtree rooted at this node. + * @type {number} + * @readOnly + */ + this.height = 0; + + /** + * @type {module:echarts/data/Tree~TreeNode} + * @readOnly + */ + this.parentNode = null; + + /** + * Reference to list item. + * Do not persistent dataIndex outside, + * besause it may be changed by list. + * If dataIndex -1, + * this node is logical deleted (filtered) in list. + * + * @type {Object} + * @readOnly + */ + this.dataIndex = -1; + + /** + * @type {Array.} + * @readOnly + */ + this.children = []; + + /** + * @type {Array.} + * @pubilc + */ + this.viewChildren = []; + + /** + * @type {moduel:echarts/data/Tree} + * @readOnly + */ + this.hostTree = hostTree; +}; + +TreeNode.prototype = { + + constructor: TreeNode, + + /** + * The node is removed. + * @return {boolean} is removed. + */ + isRemoved: function () { + return this.dataIndex < 0; + }, + + /** + * Travel this subtree (include this node). + * Usage: + * node.eachNode(function () { ... }); // preorder + * node.eachNode('preorder', function () { ... }); // preorder + * node.eachNode('postorder', function () { ... }); // postorder + * node.eachNode( + * {order: 'postorder', attr: 'viewChildren'}, + * function () { ... } + * ); // postorder + * + * @param {(Object|string)} options If string, means order. + * @param {string=} options.order 'preorder' or 'postorder' + * @param {string=} options.attr 'children' or 'viewChildren' + * @param {Function} cb If in preorder and return false, + * its subtree will not be visited. + * @param {Object} [context] + */ + eachNode: function (options, cb, context) { + if (typeof options === 'function') { + context = cb; + cb = options; + options = null; + } + + options = options || {}; + if (isString(options)) { + options = {order: options}; + } + + var order = options.order || 'preorder'; + var children = this[options.attr || 'children']; + + var suppressVisitSub; + order === 'preorder' && (suppressVisitSub = cb.call(context, this)); + + for (var i = 0; !suppressVisitSub && i < children.length; i++) { + children[i].eachNode(options, cb, context); + } + + order === 'postorder' && cb.call(context, this); + }, + + /** + * Update depth and height of this subtree. + * + * @param {number} depth + */ + updateDepthAndHeight: function (depth) { + var height = 0; + this.depth = depth; + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.updateDepthAndHeight(depth + 1); + if (child.height > height) { + height = child.height; + } + } + this.height = height + 1; + }, + + /** + * @param {string} id + * @return {module:echarts/data/Tree~TreeNode} + */ + getNodeById: function (id) { + if (this.getId() === id) { + return this; + } + for (var i = 0, children = this.children, len = children.length; i < len; i++) { + var res = children[i].getNodeById(id); + if (res) { + return res; + } + } + }, + + /** + * @param {module:echarts/data/Tree~TreeNode} node + * @return {boolean} + */ + contains: function (node) { + if (node === this) { + return true; + } + for (var i = 0, children = this.children, len = children.length; i < len; i++) { + var res = children[i].contains(node); + if (res) { + return res; + } + } + }, + + /** + * @param {boolean} includeSelf Default false. + * @return {Array.} order: [root, child, grandchild, ...] + */ + getAncestors: function (includeSelf) { + var ancestors = []; + var node = includeSelf ? this : this.parentNode; + while (node) { + ancestors.push(node); + node = node.parentNode; + } + ancestors.reverse(); + return ancestors; + }, + + /** + * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3 + * @return {number} Value. + */ + getValue: function (dimension) { + var data = this.hostTree.data; + return data.get(data.getDimension(dimension || 'value'), this.dataIndex); + }, + + /** + * @param {Object} layout + * @param {boolean=} [merge=false] + */ + setLayout: function (layout, merge$$1) { + this.dataIndex >= 0 + && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge$$1); + }, + + /** + * @return {Object} layout + */ + getLayout: function () { + return this.hostTree.data.getItemLayout(this.dataIndex); + }, + + /** + * @param {string} [path] + * @return {module:echarts/model/Model} + */ + getModel: function (path) { + if (this.dataIndex < 0) { + return; + } + var hostTree = this.hostTree; + var itemModel = hostTree.data.getItemModel(this.dataIndex); + var levelModel = this.getLevelModel(); + var leavesModel; + if (!levelModel && (this.children.length === 0 || (this.children.length !== 0 && this.isExpand === false))) { + leavesModel = this.getLeavesModel(); + } + return itemModel.getModel(path, (levelModel || leavesModel || hostTree.hostModel).getModel(path)); + }, + + /** + * @return {module:echarts/model/Model} + */ + getLevelModel: function () { + return (this.hostTree.levelModels || [])[this.depth]; + }, + + /** + * @return {module:echarts/model/Model} + */ + getLeavesModel: function () { + return this.hostTree.leavesModel; + }, + + /** + * @example + * setItemVisual('color', color); + * setItemVisual({ + * 'color': color + * }); + */ + setVisual: function (key, value) { + this.dataIndex >= 0 + && this.hostTree.data.setItemVisual(this.dataIndex, key, value); + }, + + /** + * Get item visual + */ + getVisual: function (key, ignoreParent) { + return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent); + }, + + /** + * @public + * @return {number} + */ + getRawIndex: function () { + return this.hostTree.data.getRawIndex(this.dataIndex); + }, + + /** + * @public + * @return {string} + */ + getId: function () { + return this.hostTree.data.getId(this.dataIndex); + } +}; + +/** + * @constructor + * @alias module:echarts/data/Tree + * @param {module:echarts/model/Model} hostModel + * @param {Array.} levelOptions + * @param {Object} leavesOption + */ +function Tree(hostModel, levelOptions, leavesOption) { + /** + * @type {module:echarts/data/Tree~TreeNode} + * @readOnly + */ + this.root; + + /** + * @type {module:echarts/data/List} + * @readOnly + */ + this.data; + + /** + * Index of each item is the same as the raw index of coresponding list item. + * @private + * @type {Array.} treeOptions.levels + * @param {Array.} treeOptions.leaves + * @return module:echarts/data/Tree + */ +Tree.createTree = function (dataRoot, hostModel, treeOptions) { + + var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves); + var listData = []; + var dimMax = 1; + + buildHierarchy(dataRoot); + + function buildHierarchy(dataNode, parentNode) { + var value = dataNode.value; + dimMax = Math.max(dimMax, isArray(value) ? value.length : 1); + + listData.push(dataNode); + + var node = new TreeNode(dataNode.name, tree); + parentNode + ? addChild(node, parentNode) + : (tree.root = node); + + tree._nodes.push(node); + + var children = dataNode.children; + if (children) { + for (var i = 0; i < children.length; i++) { + buildHierarchy(children[i], node); + } + } + } + + tree.root.updateDepthAndHeight(0); + + var dimensions = completeDimensions([{name: 'value'}], listData, {dimCount: dimMax}); + var list = new List(dimensions, hostModel); + list.initData(listData); + + linkList({ + mainData: list, + struct: tree, + structAttr: 'tree' + }); + + tree.update(); + + return tree; +}; + +/** + * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote, + * so this function is not ready and not necessary to be public. + * + * @param {(module:echarts/data/Tree~TreeNode|Object)} child + */ +function addChild(child, node) { + var children = node.children; + if (child.parentNode === node) { + return; + } + + children.push(child); + child.parentNode = node; +} + +/** + * @file Create data struct and define tree view's series model + */ + +SeriesModel.extend({ + + type: 'series.tree', + + layoutInfo: null, + + // can support the position parameters 'left', 'top','right','bottom', 'width', + // 'height' in the setOption() with 'merge' mode normal. + layoutMode: 'box', + + /** + * Init a tree data structure from data in option series + * @param {Object} option the object used to config echarts view + * @return {module:echarts/data/List} storage initial data + */ + getInitialData: function (option) { + + //create an virtual root + var root = {name: option.name, children: option.data}; + + var leaves = option.leaves || {}; + + var treeOption = {}; + + treeOption.leaves = leaves; + + var tree = Tree.createTree(root, this, treeOption); + + var treeDepth = 0; + + tree.eachNode('preorder', function (node) { + if (node.depth > treeDepth) { + treeDepth = node.depth; + } + }); + + var expandAndCollapse = option.expandAndCollapse; + var expandTreeDepth = (expandAndCollapse && option.initialTreeDepth >= 0) + ? option.initialTreeDepth : treeDepth; + + tree.root.eachNode('preorder', function (node) { + var item = node.hostTree.data.getRawDataItem(node.dataIndex); + node.isExpand = (item && item.collapsed != null) + ? !item.collapsed + : node.depth <= expandTreeDepth; + }); + + return tree.data; + }, + + /** + * @override + * @param {number} dataIndex + */ + formatTooltip: function (dataIndex) { + var tree = this.getData().tree; + var realRoot = tree.root.children[0]; + var node = tree.getNodeByDataIndex(dataIndex); + var value = node.getValue(); + var name = node.name; + while (node && (node !== realRoot)) { + name = node.parentNode.name + '.' + name; + node = node.parentNode; + } + return encodeHTML(name + ( + (isNaN(value) || value == null) ? '' : ' : ' + value + )); + }, + + defaultOption: { + zlevel: 0, + z: 2, + + // the position of the whole view + left: '12%', + top: '12%', + right: '12%', + bottom: '12%', + + // the layout of the tree, two value can be selected, 'orthogonal' or 'radial' + layout: 'orthogonal', + + // the orient of orthoginal layout, can be setted to 'horizontal' or 'vertical' + orient: 'horizontal', + + symbol: 'emptyCircle', + + symbolSize: 7, + + expandAndCollapse: true, + + initialTreeDepth: 2, + + lineStyle: { + normal: { + color: '#ccc', + width: 1.5, + curveness: 0.5 + } + }, + + itemStyle: { + normal: { + color: 'lightsteelblue', + borderColor: '#c23531', + borderWidth: 1.5 + } + }, + + label: { + normal: { + show: true, + color: '#555' + } + }, + + leaves: { + label: { + normal: { + show: true + } + } + }, + + animationEasing: 'linear', + + animationDuration: 700, + + animationDurationUpdate: 1000 + } +}); + +/** + * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing + * the tree. + * @see https://github.com/d3/d3-hierarchy + */ + +/** + * Initialize all computational message for following algorithm + * @param {module:echarts/data/Tree~TreeNode} root The virtual root of the tree + */ +function init$2(root) { + root.hierNode = { + defaultAncestor: null, + ancestor: root, + prelim: 0, + modifier: 0, + change: 0, + shift: 0, + i: 0, + thread: null + }; + + var nodes = [root]; + var node; + var children; + + while (node = nodes.pop()) { // jshint ignore:line + children = node.children; + if (node.isExpand && children.length) { + var n = children.length; + for (var i = n - 1; i >= 0; i--) { + var child = children[i]; + child.hierNode = { + defaultAncestor: null, + ancestor: child, + prelim: 0, + modifier: 0, + change: 0, + shift: 0, + i: i, + thread: null + }; + nodes.push(child); + } + } + } +} + +/** + * Computes a preliminary x coordinate for node. Before that, this function is + * applied recursively to the children of node, as well as the function + * apportion(). After spacing out the children by calling executeShifts(), the + * node is placed to the midpoint of its outermost children. + * @param {module:echarts/data/Tree~TreeNode} node + * @param {Function} separation + */ +function firstWalk(node, separation) { + var children = node.isExpand ? node.children : []; + var siblings = node.parentNode.children; + var subtreeW = node.hierNode.i ? siblings[node.hierNode.i -1] : null; + if (children.length) { + executeShifts(node); + var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2; + if (subtreeW) { + node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); + node.hierNode.modifier = node.hierNode.prelim - midPoint; + } + else { + node.hierNode.prelim = midPoint; + } + } + else if (subtreeW) { + node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); + } + node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation); +} + + +/** + * Computes all real x-coordinates by summing up the modifiers recursively. + * @param {module:echarts/data/Tree~TreeNode} node + */ +function secondWalk(node) { + var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier; + node.setLayout({x: nodeX}, true); + node.hierNode.modifier += node.parentNode.hierNode.modifier; +} + + +function separation(cb) { + return arguments.length ? cb : defaultSeparation; +} + +/** + * Transform the common coordinate to radial coordinate + * @param {number} x + * @param {number} y + * @return {Object} + */ +function radialCoordinate(x, y) { + var radialCoor = {}; + x -= Math.PI / 2; + radialCoor.x = y * Math.cos(x); + radialCoor.y = y * Math.sin(x); + return radialCoor; +} + +/** + * Get the layout position of the whole view + * @param {module:echarts/model/Series} seriesModel the model object of sankey series + * @param {module:echarts/ExtensionAPI} api provide the API list that the developer can call + * @return {module:zrender/core/BoundingRect} size of rect to draw the sankey view + */ +function getViewRect(seriesModel, api) { + return getLayoutRect( + seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + } + ); +} + +/** + * All other shifts, applied to the smaller subtrees between w- and w+, are + * performed by this function. + * @param {module:echarts/data/Tree~TreeNode} node + */ +function executeShifts(node) { + var children = node.children; + var n = children.length; + var shift = 0; + var change = 0; + while (--n >= 0) { + var child = children[n]; + child.hierNode.prelim += shift; + child.hierNode.modifier += shift; + change += child.hierNode.change; + shift += child.hierNode.shift + change; + } +} + +/** + * The core of the algorithm. Here, a new subtree is combined with the + * previous subtrees. Threads are used to traverse the inside and outside + * contours of the left and right subtree up to the highest common level. + * Whenever two nodes of the inside contours conflict, we compute the left + * one of the greatest uncommon ancestors using the function nextAncestor() + * and call moveSubtree() to shift the subtree and prepare the shifts of + * smaller subtrees. Finally, we add a new thread (if necessary). + * @param {module:echarts/data/Tree~TreeNode} subtreeV + * @param {module:echarts/data/Tree~TreeNode} subtreeW + * @param {module:echarts/data/Tree~TreeNode} ancestor + * @param {Function} separation + * @return {module:echarts/data/Tree~TreeNode} + */ +function apportion(subtreeV, subtreeW, ancestor, separation) { + + if (subtreeW) { + var nodeOutRight = subtreeV; + var nodeInRight = subtreeV; + var nodeOutLeft = nodeInRight.parentNode.children[0]; + var nodeInLeft = subtreeW; + + var sumOutRight = nodeOutRight.hierNode.modifier; + var sumInRight = nodeInRight.hierNode.modifier; + var sumOutLeft = nodeOutLeft.hierNode.modifier; + var sumInLeft = nodeInLeft.hierNode.modifier; + + while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) { + nodeOutRight = nextRight(nodeOutRight); + nodeOutLeft = nextLeft(nodeOutLeft); + nodeOutRight.hierNode.ancestor = subtreeV; + var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim + - sumInRight + separation(nodeInLeft, nodeInRight); + if (shift > 0) { + moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift); + sumInRight += shift; + sumOutRight += shift; + } + sumInLeft += nodeInLeft.hierNode.modifier; + sumInRight += nodeInRight.hierNode.modifier; + sumOutRight += nodeOutRight.hierNode.modifier; + sumOutLeft += nodeOutLeft.hierNode.modifier; + } + if (nodeInLeft && !nextRight(nodeOutRight)) { + nodeOutRight.hierNode.thread = nodeInLeft; + nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight; + + } + if (nodeInRight && !nextLeft(nodeOutLeft)) { + nodeOutLeft.hierNode.thread = nodeInRight; + nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft; + ancestor = subtreeV; + } + } + return ancestor; +} + +/** + * This function is used to traverse the right contour of a subtree. + * It returns the rightmost child of node or the thread of node. The function + * returns null if and only if node is on the highest depth of its subtree. + * @param {module:echarts/data/Tree~TreeNode} node + * @return {module:echarts/data/Tree~TreeNode} + */ +function nextRight(node) { + var children = node.children; + return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread; +} + +/** + * This function is used to traverse the left contour of a subtree (or a subforest). + * It returns the leftmost child of node or the thread of node. The function + * returns null if and only if node is on the highest depth of its subtree. + * @param {module:echarts/data/Tree~TreeNode} node + * @return {module:echarts/data/Tree~TreeNode} + */ +function nextLeft(node) { + var children = node.children; + return children.length && node.isExpand ? children[0] : node.hierNode.thread; +} + +/** + * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor. + * Otherwise, returns the specified ancestor. + * @param {module:echarts/data/Tree~TreeNode} nodeInLeft + * @param {module:echarts/data/Tree~TreeNode} node + * @param {module:echarts/data/Tree~TreeNode} ancestor + * @return {module:echarts/data/Tree~TreeNode} + */ +function nextAncestor(nodeInLeft, node, ancestor) { + return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode + ? nodeInLeft.hierNode.ancestor : ancestor; +} + +/** + * Shifts the current subtree rooted at wr. This is done by increasing prelim(w+) and modifier(w+) by shift. + * @param {module:echarts/data/Tree~TreeNode} wl + * @param {module:echarts/data/Tree~TreeNode} wr + * @param {number} shift [description] + */ +function moveSubtree(wl, wr,shift) { + var change = shift / (wr.hierNode.i - wl.hierNode.i); + wr.hierNode.change -= change; + wr.hierNode.shift += shift; + wr.hierNode.modifier += shift; + wr.hierNode.prelim += shift; + wl.hierNode.change += change; +} + +function defaultSeparation(node1, node2) { + return node1.parentNode === node2.parentNode ? 1 : 2; +} + +/** + * @file This file used to draw tree view + */ + +extendChartView({ + + type: 'tree', + + /** + * Init the chart + * @override + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + init: function (ecModel, api) { + + /** + * @private + * @type {module:echarts/data/Tree} + */ + this._oldTree; + + /** + * @private + * @type {module:zrender/container/Group} + */ + this._mainGroup = new Group(); + + this.group.add(this._mainGroup); + }, + + render: function (seriesModel, ecModel, api, payload) { + + var data = seriesModel.getData(); + + var layoutInfo = seriesModel.layoutInfo; + + var group = this._mainGroup; + + var layout = seriesModel.get('layout'); + + if (layout === 'radial') { + group.attr('position', [layoutInfo.x + layoutInfo.width / 2, layoutInfo.y + layoutInfo.height / 2]); + } + else { + group.attr('position', [layoutInfo.x, layoutInfo.y]); + } + + var oldData = this._data; + + var seriesScope = { + expandAndCollapse: seriesModel.get('expandAndCollapse'), + layout: layout, + orient: seriesModel.get('orient'), + curvature: seriesModel.get('lineStyle.normal.curveness'), + symbolRotate: seriesModel.get('symbolRotate'), + symbolOffset: seriesModel.get('symbolOffset'), + hoverAnimation: seriesModel.get('hoverAnimation'), + useNameLabel: true, + fadeIn: true + }; + + data.diff(oldData) + .add(function (newIdx) { + if (symbolNeedsDraw$1(data, newIdx)) { + // create node and edge + updateNode(data, newIdx, null, group, seriesModel, seriesScope); + } + }) + .update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + if (!symbolNeedsDraw$1(data, newIdx)) { + symbolEl && removeNode(data, newIdx, symbolEl, group, seriesModel, seriesScope); + return; + } + // update node and edge + updateNode(data, newIdx, symbolEl, group, seriesModel, seriesScope); + }) + .remove(function (oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + removeNode(data, oldIdx, symbolEl, group, seriesModel, seriesScope); + }) + .execute(); + + if (seriesScope.expandAndCollapse === true) { + data.eachItemGraphicEl(function (el, dataIndex) { + el.off('click').on('click', function () { + api.dispatchAction({ + type: 'treeExpandAndCollapse', + seriesId: seriesModel.id, + dataIndex: dataIndex + }); + }); + }); + } + + this._data = data; + }, + + dispose: function () {}, + + remove: function () { + this._mainGroup.removeAll(); + this._data = null; + } + +}); + +function symbolNeedsDraw$1(data, dataIndex) { + var layout = data.getItemLayout(dataIndex); + + return layout + && !isNaN(layout.x) && !isNaN(layout.y) + && data.getItemVisual(dataIndex, 'symbol') !== 'none'; +} + +function getTreeNodeStyle(node, itemModel, seriesScope) { + seriesScope.itemModel = itemModel; + seriesScope.itemStyle = itemModel.getModel('itemStyle.normal').getItemStyle(); + seriesScope.hoverItemStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle(); + seriesScope.lineStyle = itemModel.getModel('lineStyle.normal').getLineStyle(); + seriesScope.labelModel = itemModel.getModel('label.normal'); + seriesScope.hoverLabelModel = itemModel.getModel('label.emphasis'); + + if (node.isExpand === false && node.children.length !== 0) { + seriesScope.symbolInnerColor = seriesScope.itemStyle.fill; + } + else { + seriesScope.symbolInnerColor = '#fff'; + } + + return seriesScope; +} + +function updateNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) { + var isInit = !symbolEl; + var node = data.tree.getNodeByDataIndex(dataIndex); + var itemModel = node.getModel(); + var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope); + var virtualRoot = data.tree.root; + + var source = node.parentNode === virtualRoot ? node : node.parentNode || node; + var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex); + var sourceLayout = source.getLayout(); + var sourceOldLayout = sourceSymbolEl + ? { + x: sourceSymbolEl.position[0], + y: sourceSymbolEl.position[1], + rawX: sourceSymbolEl.__radialOldRawX, + rawY: sourceSymbolEl.__radialOldRawY + } + : sourceLayout; + var targetLayout = node.getLayout(); + + if (isInit) { + symbolEl = new SymbolClz$1(data, dataIndex, seriesScope); + symbolEl.attr('position', [sourceOldLayout.x, sourceOldLayout.y]); + } + else { + symbolEl.updateData(data, dataIndex, seriesScope); + } + + symbolEl.__radialOldRawX = symbolEl.__radialRawX; + symbolEl.__radialOldRawY = symbolEl.__radialRawY; + symbolEl.__radialRawX = targetLayout.rawX; + symbolEl.__radialRawY = targetLayout.rawY; + + group.add(symbolEl); + data.setItemGraphicEl(dataIndex, symbolEl); + updateProps(symbolEl, { + position: [targetLayout.x, targetLayout.y] + }, seriesModel); + + var symbolPath = symbolEl.getSymbolPath(); + + if (seriesScope.layout === 'radial') { + var realRoot = virtualRoot.children[0]; + var rootLayout = realRoot.getLayout(); + var length = realRoot.children.length; + var rad; + var isLeft; + + if (targetLayout.x === rootLayout.x && node.isExpand === true) { + var center = {}; + center.x = (realRoot.children[0].getLayout().x + realRoot.children[length - 1].getLayout().x) / 2; + center.y = (realRoot.children[0].getLayout().y + realRoot.children[length - 1].getLayout().y) / 2; + rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x); + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + isLeft = center.x < rootLayout.x; + if (isLeft) { + rad = rad - Math.PI; + } + } + else { + rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x); + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + if (node.children.length === 0 || (node.children.length !== 0 && node.isExpand === false)) { + isLeft = targetLayout.x < rootLayout.x; + if (isLeft) { + rad = rad - Math.PI; + } + } + else { + isLeft = targetLayout.x > rootLayout.x; + if (!isLeft) { + rad = rad - Math.PI; + } + } + } + + var textPosition = isLeft ? 'left' : 'right'; + symbolPath.setStyle({ + textPosition: textPosition, + textRotation: -rad, + textOrigin: 'center', + verticalAlign: 'middle' + }); + } + + if (node.parentNode && node.parentNode !== virtualRoot) { + var edge = symbolEl.__edge; + if (!edge) { + edge = symbolEl.__edge = new BezierCurve({ + shape: getEdgeShape(seriesScope, sourceOldLayout, sourceOldLayout), + style: defaults({opacity: 0}, seriesScope.lineStyle) + }); + } + + updateProps(edge, { + shape: getEdgeShape(seriesScope, sourceLayout, targetLayout), + style: {opacity: 1} + }, seriesModel); + + group.add(edge); + } +} + +function removeNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) { + var node = data.tree.getNodeByDataIndex(dataIndex); + var virtualRoot = data.tree.root; + var itemModel = node.getModel(); + var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope); + + var source = node.parentNode === virtualRoot ? node : node.parentNode || node; + var sourceLayout; + while (sourceLayout = source.getLayout(), sourceLayout == null) { + source = source.parentNode === virtualRoot ? source : source.parentNode || source; + } + + updateProps(symbolEl, { + position: [sourceLayout.x + 1, sourceLayout.y + 1] + }, seriesModel, function () { + group.remove(symbolEl); + data.setItemGraphicEl(dataIndex, null); + }); + + symbolEl.fadeOut(null, {keepLabel: true}); + + var edge = symbolEl.__edge; + if (edge) { + updateProps(edge, { + shape: getEdgeShape(seriesScope, sourceLayout, sourceLayout), + style: { + opacity: 0 + } + }, seriesModel, function () { + group.remove(edge); + }); + } +} + +function getEdgeShape(seriesScope, sourceLayout, targetLayout) { + var cpx1; + var cpy1; + var cpx2; + var cpy2; + var orient = seriesScope.orient; + + if (seriesScope.layout === 'radial') { + var x1 = sourceLayout.rawX; + var y1 = sourceLayout.rawY; + var x2 = targetLayout.rawX; + var y2 = targetLayout.rawY; + + var radialCoor1 = radialCoordinate(x1, y1); + var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * seriesScope.curvature); + var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * seriesScope.curvature); + var radialCoor4 = radialCoordinate(x2, y2); + + return { + x1: radialCoor1.x, + y1: radialCoor1.y, + x2: radialCoor4.x, + y2: radialCoor4.y, + cpx1: radialCoor2.x, + cpy1: radialCoor2.y, + cpx2: radialCoor3.x, + cpy2: radialCoor3.y + }; + } + else { + var x1 = sourceLayout.x; + var y1 = sourceLayout.y; + var x2 = targetLayout.x; + var y2 = targetLayout.y; + + if (orient === 'horizontal') { + cpx1 = x1 + (x2 - x1) * seriesScope.curvature; + cpy1 = y1; + cpx2 = x2 + (x1 - x2) * seriesScope.curvature; + cpy2 = y2; + } + if (orient === 'vertical') { + cpx1 = x1; + cpy1 = y1 + (y2 - y1) * seriesScope.curvature; + cpx2 = x2; + cpy2 = y2 + (y1 - y2) * seriesScope.curvature; + } + return { + x1: x1, + y1: y1, + x2: x2, + y2: y2, + cpx1: cpx1, + cpy1: cpy1, + cpx2: cpx2, + cpy2: cpy2 + }; + } +} + +registerAction({ + type: 'treeExpandAndCollapse', + event: 'treeExpandAndCollapse', + update: 'update' +}, function (payload, ecModel) { + ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) { + var dataIndex = payload.dataIndex; + var tree = seriesModel.getData().tree; + var node = tree.getNodeByDataIndex(dataIndex); + node.isExpand = !node.isExpand; + + }); +}); + +/** + * Traverse the tree from bottom to top and do something + * @param {module:echarts/data/Tree~TreeNode} root The real root of the tree + * @param {Function} callback + */ +function eachAfter (root, callback, separation) { + var nodes = [root]; + var next = []; + var node; + + while (node = nodes.pop()) { // jshint ignore:line + next.push(node); + if (node.isExpand) { + var children = node.children; + if (children.length) { + for (var i = 0; i < children.length; i++) { + nodes.push(children[i]); + } + } + } + } + + while (node = next.pop()) { // jshint ignore:line + callback(node, separation); + } +} + +/** + * Traverse the tree from top to bottom and do something + * @param {module:echarts/data/Tree~TreeNode} root The real root of the tree + * @param {Function} callback + */ +function eachBefore (root, callback) { + var nodes = [root]; + var node; + while (node = nodes.pop()) { // jshint ignore:line + callback(node); + if (node.isExpand) { + var children = node.children; + if (children.length) { + for (var i = children.length - 1; i >= 0; i--) { + nodes.push(children[i]); + } + } + } + } +} + +var commonLayout = function (seriesModel, api) { + + var layoutInfo = getViewRect(seriesModel, api); + seriesModel.layoutInfo = layoutInfo; + + var layout = seriesModel.get('layout'); + var width = 0; + var height = 0; + var separation$$1 = null; + if (layout === 'radial') { + width = 2 * Math.PI; + height = Math.min(layoutInfo.height, layoutInfo.width) / 2; + separation$$1 = separation(function (node1, node2) { + return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth; + }); + } + else { + width = layoutInfo.width; + height = layoutInfo.height; + separation$$1 = separation(); + } + + var virtualRoot = seriesModel.getData().tree.root; + var realRoot = virtualRoot.children[0]; + init$2(virtualRoot); + eachAfter(realRoot, firstWalk, separation$$1); + virtualRoot.hierNode.modifier = - realRoot.hierNode.prelim; + eachBefore(realRoot, secondWalk); + + var left = realRoot; + var right = realRoot; + var bottom = realRoot; + eachBefore(realRoot, function (node) { + var x = node.getLayout().x; + if (x < left.getLayout().x) { + left = node; + } + if (x > right.getLayout().x) { + right = node; + } + if (node.depth > bottom.depth) { + bottom = node; + } + }); + + var delta = left === right ? 1 : separation$$1(left, right) / 2; + var tx = delta - left.getLayout().x; + var kx = 0; + var ky = 0; + var coorX = 0; + var coorY = 0; + if (layout === 'radial') { + kx = width / (right.getLayout().x + delta + tx); + // here we use (node.depth - 1), bucause the real root's depth is 1 + ky = height/ ((bottom.depth - 1) || 1); + eachBefore(realRoot, function (node) { + coorX = (node.getLayout().x + tx) * kx; + coorY = (node.depth - 1) * ky; + var finalCoor = radialCoordinate(coorX, coorY); + node.setLayout({x: finalCoor.x, y: finalCoor.y, rawX: coorX, rawY: coorY}, true); + }); + } + else { + if (seriesModel.get('orient') === 'horizontal') { + ky = height / (right.getLayout().x + delta + tx); + kx = width / ((bottom.depth - 1) || 1); + eachBefore(realRoot, function (node) { + coorY = (node.getLayout().x + tx) * ky; + coorX = (node.depth - 1) * kx; + node.setLayout({x: coorX, y: coorY}, true); + }); + } + else { + kx = width / (right.getLayout().x + delta + tx); + ky = height / ((bottom.depth - 1) || 1); + eachBefore(realRoot, function (node) { + coorX = (node.getLayout().x + tx) * kx; + coorY = (node.depth - 1) * ky; + node.setLayout({x: coorX, y: coorY}, true); + }); + } + } +}; + +var orthogonalLayout = function (ecModel, api) { + ecModel.eachSeriesByType('tree', function (seriesModel) { + commonLayout(seriesModel, api); + }); +}; + +var radialLayout = function (ecModel, api) { + ecModel.eachSeriesByType('tree', function (seriesModel) { + commonLayout(seriesModel, api); + }); +}; + +registerVisual(curry(visualSymbol, 'tree', 'circle', null)); +registerLayout(orthogonalLayout); +registerLayout(radialLayout); + +function retrieveTargetInfo(payload, seriesModel) { + if (payload + && ( + payload.type === 'treemapZoomToNode' + || payload.type === 'treemapRootToNode' + ) + ) { + var root = seriesModel.getData().tree.root; + var targetNode = payload.targetNode; + if (targetNode && root.contains(targetNode)) { + return {node: targetNode}; + } + + var targetNodeId = payload.targetNodeId; + if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) { + return {node: targetNode}; + } + } +} + +// Not includes the given node at the last item. +function getPathToRoot(node) { + var path = []; + while (node) { + node = node.parentNode; + node && path.push(node); + } + return path.reverse(); +} + +function aboveViewRoot(viewRoot, node) { + var viewPath = getPathToRoot(viewRoot); + return indexOf(viewPath, node) >= 0; +} + +// From root to the input node (the input node will be included). +function wrapTreePathInfo(node, seriesModel) { + var treePathInfo = []; + + while (node) { + var nodeDataIndex = node.dataIndex; + treePathInfo.push({ + name: node.name, + dataIndex: nodeDataIndex, + value: seriesModel.getRawValue(nodeDataIndex) + }); + node = node.parentNode; + } + + treePathInfo.reverse(); + + return treePathInfo; +} + +SeriesModel.extend({ + + type: 'series.treemap', + + layoutMode: 'box', + + dependencies: ['grid', 'polar'], + + /** + * @type {module:echarts/data/Tree~Node} + */ + _viewRoot: null, + + defaultOption: { + // Disable progressive rendering + progressive: 0, + hoverLayerThreshold: Infinity, + // center: ['50%', '50%'], // not supported in ec3. + // size: ['80%', '80%'], // deprecated, compatible with ec2. + left: 'center', + top: 'middle', + right: null, + bottom: null, + width: '80%', + height: '80%', + sort: true, // Can be null or false or true + // (order by desc default, asc not supported yet (strange effect)) + clipWindow: 'origin', // Size of clipped window when zooming. 'origin' or 'fullscreen' + squareRatio: 0.5 * (1 + Math.sqrt(5)), // golden ratio + leafDepth: null, // Nodes on depth from root are regarded as leaves. + // Count from zero (zero represents only view root). + drillDownIcon: '▶', // Use html character temporarily because it is complicated + // to align specialized icon. ▷▶❒❐▼✚ + + zoomToNodeRatio: 0.32 * 0.32, // Be effective when using zoomToNode. Specify the proportion of the + // target node area in the view area. + roam: true, // true, false, 'scale' or 'zoom', 'move'. + nodeClick: 'zoomToNode', // Leaf node click behaviour: 'zoomToNode', 'link', false. + // If leafDepth is set and clicking a node which has children but + // be on left depth, the behaviour would be changing root. Otherwise + // use behavious defined above. + animation: true, + animationDurationUpdate: 900, + animationEasing: 'quinticInOut', + breadcrumb: { + show: true, + height: 22, + left: 'center', + top: 'bottom', + // right + // bottom + emptyItemWidth: 25, // Width of empty node. + itemStyle: { + normal: { + color: 'rgba(0,0,0,0.7)', //'#5793f3', + borderColor: 'rgba(255,255,255,0.7)', + borderWidth: 1, + shadowColor: 'rgba(150,150,150,1)', + shadowBlur: 3, + shadowOffsetX: 0, + shadowOffsetY: 0, + textStyle: { + color: '#fff' + } + }, + emphasis: { + textStyle: {} + } + } + }, + label: { + normal: { + show: true, + // Do not use textDistance, for ellipsis rect just the same as treemap node rect. + distance: 0, + padding: 5, + position: 'inside', // Can be [5, '5%'] or position stirng like 'insideTopLeft', ... + // formatter: null, + color: '#fff', + ellipsis: true + // align + // verticalAlign + } + }, + upperLabel: { // Label when node is parent. + normal: { + show: false, + position: [0, '50%'], + height: 20, + // formatter: null, + color: '#fff', + ellipsis: true, + // align: null, + verticalAlign: 'middle' + }, + emphasis: { + show: true, + position: [0, '50%'], + color: '#fff', + ellipsis: true, + verticalAlign: 'middle' + } + }, + itemStyle: { + normal: { + color: null, // Can be 'none' if not necessary. + colorAlpha: null, // Can be 'none' if not necessary. + colorSaturation: null, // Can be 'none' if not necessary. + borderWidth: 0, + gapWidth: 0, + borderColor: '#fff', + borderColorSaturation: null // If specified, borderColor will be ineffective, and the + // border color is evaluated by color of current node and + // borderColorSaturation. + }, + emphasis: { + + } + }, + + visualDimension: 0, // Can be 0, 1, 2, 3. + visualMin: null, + visualMax: null, + + color: [], // + treemapSeries.color should not be modified. Please only modified + // level[n].color (if necessary). + // + Specify color list of each level. level[0].color would be global + // color list if not specified. (see method `setDefault`). + // + But set as a empty array to forbid fetch color from global palette + // when using nodeModel.get('color'), otherwise nodes on deep level + // will always has color palette set and are not able to inherit color + // from parent node. + // + TreemapSeries.color can not be set as 'none', otherwise effect + // legend color fetching (see seriesColor.js). + colorAlpha: null, // Array. Specify color alpha range of each level, like [0.2, 0.8] + colorSaturation: null, // Array. Specify color saturation of each level, like [0.2, 0.5] + colorMappingBy: 'index', // 'value' or 'index' or 'id'. + visibleMin: 10, // If area less than this threshold (unit: pixel^2), node will not + // be rendered. Only works when sort is 'asc' or 'desc'. + childrenVisibleMin: null, // If area of a node less than this threshold (unit: pixel^2), + // grandchildren will not show. + // Why grandchildren? If not grandchildren but children, + // some siblings show children and some not, + // the appearance may be mess and not consistent, + levels: [] // Each item: { + // visibleMin, itemStyle, visualDimension, label + // } + // data: { + // value: [], + // children: [], + // link: 'http://xxx.xxx.xxx', + // target: 'blank' or 'self' + // } + }, + + /** + * @override + */ + getInitialData: function (option, ecModel) { + // Create a virtual root. + var root = {name: option.name, children: option.data}; + + completeTreeValue(root); + + var levels = option.levels || []; + + levels = option.levels = setDefault(levels, ecModel); + + var treeOption = {}; + + treeOption.levels = levels; + + // Make sure always a new tree is created when setOption, + // in TreemapView, we check whether oldTree === newTree + // to choose mappings approach among old shapes and new shapes. + return Tree.createTree(root, this, treeOption).data; + }, + + optionUpdated: function () { + this.resetViewRoot(); + }, + + /** + * @override + * @param {number} dataIndex + * @param {boolean} [mutipleSeries=false] + */ + formatTooltip: function (dataIndex) { + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var formattedValue = isArray(value) + ? addCommas(value[0]) : addCommas(value); + var name = data.getName(dataIndex); + + return encodeHTML(name + ': ' + formattedValue); + }, + + /** + * Add tree path to tooltip param + * + * @override + * @param {number} dataIndex + * @return {Object} + */ + getDataParams: function (dataIndex) { + var params = SeriesModel.prototype.getDataParams.apply(this, arguments); + + var node = this.getData().tree.getNodeByDataIndex(dataIndex); + params.treePathInfo = wrapTreePathInfo(node, this); + + return params; + }, + + /** + * @public + * @param {Object} layoutInfo { + * x: containerGroup x + * y: containerGroup y + * width: containerGroup width + * height: containerGroup height + * } + */ + setLayoutInfo: function (layoutInfo) { + /** + * @readOnly + * @type {Object} + */ + this.layoutInfo = this.layoutInfo || {}; + extend(this.layoutInfo, layoutInfo); + }, + + /** + * @param {string} id + * @return {number} index + */ + mapIdToIndex: function (id) { + // A feature is implemented: + // index is monotone increasing with the sequence of + // input id at the first time. + // This feature can make sure that each data item and its + // mapped color have the same index between data list and + // color list at the beginning, which is useful for user + // to adjust data-color mapping. + + /** + * @private + * @type {Object} + */ + var idIndexMap = this._idIndexMap; + + if (!idIndexMap) { + idIndexMap = this._idIndexMap = createHashMap(); + /** + * @private + * @type {number} + */ + this._idIndexMapCount = 0; + } + + var index = idIndexMap.get(id); + if (index == null) { + idIndexMap.set(id, index = this._idIndexMapCount++); + } + + return index; + }, + + getViewRoot: function () { + return this._viewRoot; + }, + + /** + * @param {module:echarts/data/Tree~Node} [viewRoot] + */ + resetViewRoot: function (viewRoot) { + viewRoot + ? (this._viewRoot = viewRoot) + : (viewRoot = this._viewRoot); + + var root = this.getData().tree.root; + + if (!viewRoot + || (viewRoot !== root && !root.contains(viewRoot)) + ) { + this._viewRoot = root; + } + } +}); + +/** + * @param {Object} dataNode + */ +function completeTreeValue(dataNode) { + // Postorder travel tree. + // If value of none-leaf node is not set, + // calculate it by suming up the value of all children. + var sum = 0; + + each$1(dataNode.children, function (child) { + + completeTreeValue(child); + + var childValue = child.value; + isArray(childValue) && (childValue = childValue[0]); + + sum += childValue; + }); + + var thisValue = dataNode.value; + if (isArray(thisValue)) { + thisValue = thisValue[0]; + } + + if (thisValue == null || isNaN(thisValue)) { + thisValue = sum; + } + // Value should not less than 0. + if (thisValue < 0) { + thisValue = 0; + } + + isArray(dataNode.value) + ? (dataNode.value[0] = thisValue) + : (dataNode.value = thisValue); +} + +/** + * set default to level configuration + */ +function setDefault(levels, ecModel) { + var globalColorList = ecModel.get('color'); + + if (!globalColorList) { + return; + } + + levels = levels || []; + var hasColorDefine; + each$1(levels, function (levelDefine) { + var model = new Model(levelDefine); + var modelColor = model.get('color'); + + if (model.get('itemStyle.normal.color') + || (modelColor && modelColor !== 'none') + ) { + hasColorDefine = true; + } + }); + + if (!hasColorDefine) { + var level0 = levels[0] || (levels[0] = {}); + level0.color = globalColorList.slice(); + } + + return levels; +} + +var TEXT_PADDING = 8; +var ITEM_GAP = 8; +var ARRAY_LENGTH = 5; + +function Breadcrumb(containerGroup) { + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group = new Group(); + + containerGroup.add(this.group); +} + +Breadcrumb.prototype = { + + constructor: Breadcrumb, + + render: function (seriesModel, api, targetNode, onSelect) { + var model = seriesModel.getModel('breadcrumb'); + var thisGroup = this.group; + + thisGroup.removeAll(); + + if (!model.get('show') || !targetNode) { + return; + } + + var normalStyleModel = model.getModel('itemStyle.normal'); + // var emphasisStyleModel = model.getModel('itemStyle.emphasis'); + var textStyleModel = normalStyleModel.getModel('textStyle'); + + var layoutParam = { + pos: { + left: model.get('left'), + right: model.get('right'), + top: model.get('top'), + bottom: model.get('bottom') + }, + box: { + width: api.getWidth(), + height: api.getHeight() + }, + emptyItemWidth: model.get('emptyItemWidth'), + totalWidth: 0, + renderList: [] + }; + + this._prepare(targetNode, layoutParam, textStyleModel); + this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect); + + positionElement(thisGroup, layoutParam.pos, layoutParam.box); + }, + + /** + * Prepare render list and total width + * @private + */ + _prepare: function (targetNode, layoutParam, textStyleModel) { + for (var node = targetNode; node; node = node.parentNode) { + var text = node.getModel().get('name'); + var textRect = textStyleModel.getTextRect(text); + var itemWidth = Math.max( + textRect.width + TEXT_PADDING * 2, + layoutParam.emptyItemWidth + ); + layoutParam.totalWidth += itemWidth + ITEM_GAP; + layoutParam.renderList.push({node: node, text: text, width: itemWidth}); + } + }, + + /** + * @private + */ + _renderContent: function ( + seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect + ) { + // Start rendering. + var lastX = 0; + var emptyItemWidth = layoutParam.emptyItemWidth; + var height = seriesModel.get('breadcrumb.height'); + var availableSize = getAvailableSize(layoutParam.pos, layoutParam.box); + var totalWidth = layoutParam.totalWidth; + var renderList = layoutParam.renderList; + + for (var i = renderList.length - 1; i >= 0; i--) { + var item = renderList[i]; + var itemNode = item.node; + var itemWidth = item.width; + var text = item.text; + + // Hdie text and shorten width if necessary. + if (totalWidth > availableSize.width) { + totalWidth -= itemWidth - emptyItemWidth; + itemWidth = emptyItemWidth; + text = null; + } + + var el = new Polygon({ + shape: { + points: makeItemPoints( + lastX, 0, itemWidth, height, + i === renderList.length - 1, i === 0 + ) + }, + style: defaults( + normalStyleModel.getItemStyle(), + { + lineJoin: 'bevel', + text: text, + textFill: textStyleModel.getTextColor(), + textFont: textStyleModel.getFont() + } + ), + z: 10, + onclick: curry(onSelect, itemNode) + }); + this.group.add(el); + + packEventData(el, seriesModel, itemNode); + + lastX += itemWidth + ITEM_GAP; + } + }, + + /** + * @override + */ + remove: function () { + this.group.removeAll(); + } +}; + +function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) { + var points = [ + [head ? x : x - ARRAY_LENGTH, y], + [x + itemWidth, y], + [x + itemWidth, y + itemHeight], + [head ? x : x - ARRAY_LENGTH, y + itemHeight] + ]; + !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]); + !head && points.push([x, y + itemHeight / 2]); + return points; +} + +// Package custom mouse event. +function packEventData(el, seriesModel, itemNode) { + el.eventData = { + componentType: 'series', + componentSubType: 'treemap', + seriesIndex: seriesModel.componentIndex, + seriesName: seriesModel.name, + seriesType: 'treemap', + selfType: 'breadcrumb', // Distinguish with click event on treemap node. + nodeData: { + dataIndex: itemNode && itemNode.dataIndex, + name: itemNode && itemNode.name + }, + treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel) + }; +} + +/** + * @param {number} [time=500] Time in ms + * @param {string} [easing='linear'] + * @param {number} [delay=0] + * @param {Function} [callback] + * + * @example + * // Animate position + * animation + * .createWrap() + * .add(el1, {position: [10, 10]}) + * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400) + * .done(function () { // done }) + * .start('cubicOut'); + */ +function createWrap() { + + var storage = []; + var elExistsMap = {}; + var doneCallback; + + return { + + /** + * Caution: a el can only be added once, otherwise 'done' + * might not be called. This method checks this (by el.id), + * suppresses adding and returns false when existing el found. + * + * @param {modele:zrender/Element} el + * @param {Object} target + * @param {number} [time=500] + * @param {number} [delay=0] + * @param {string} [easing='linear'] + * @return {boolean} Whether adding succeeded. + * + * @example + * add(el, target, time, delay, easing); + * add(el, target, time, easing); + * add(el, target, time); + * add(el, target); + */ + add: function (el, target, time, delay, easing) { + if (isString(delay)) { + easing = delay; + delay = 0; + } + + if (elExistsMap[el.id]) { + return false; + } + elExistsMap[el.id] = 1; + + storage.push( + {el: el, target: target, time: time, delay: delay, easing: easing} + ); + + return true; + }, + + /** + * Only execute when animation finished. Will not execute when any + * of 'stop' or 'stopAnimation' called. + * + * @param {Function} callback + */ + done: function (callback) { + doneCallback = callback; + return this; + }, + + /** + * Will stop exist animation firstly. + */ + start: function () { + var count = storage.length; + + for (var i = 0, len = storage.length; i < len; i++) { + var item = storage[i]; + item.el.animateTo(item.target, item.time, item.delay, item.easing, done); + } + + return this; + + function done() { + count--; + if (!count) { + storage.length = 0; + elExistsMap = {}; + doneCallback && doneCallback(); + } + } + } + }; +} + +var bind$1 = bind; +var Group$2 = Group; +var Rect$1 = Rect; +var each$11 = each$1; + +var DRAG_THRESHOLD = 3; +var PATH_LABEL_NOAMAL = ['label', 'normal']; +var PATH_LABEL_EMPHASIS = ['label', 'emphasis']; +var PATH_UPPERLABEL_NORMAL = ['upperLabel', 'normal']; +var PATH_UPPERLABEL_EMPHASIS = ['upperLabel', 'emphasis']; +var Z_BASE = 10; // Should bigger than every z. +var Z_BG = 1; +var Z_CONTENT = 2; + +var getItemStyleEmphasis = makeStyleMapper([ + ['fill', 'color'], + // `borderColor` and `borderWidth` has been occupied, + // so use `stroke` to indicate the stroke of the rect. + ['stroke', 'strokeColor'], + ['lineWidth', 'strokeWidth'], + ['shadowBlur'], + ['shadowOffsetX'], + ['shadowOffsetY'], + ['shadowColor'] +]); +var getItemStyleNormal = function (model) { + // Normal style props should include emphasis style props. + var itemStyle = getItemStyleEmphasis(model); + // Clear styles set by emphasis. + itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null; + return itemStyle; +}; + +extendChartView({ + + type: 'treemap', + + /** + * @override + */ + init: function (o, api) { + + /** + * @private + * @type {module:zrender/container/Group} + */ + this._containerGroup; + + /** + * @private + * @type {Object.>} + */ + this._storage = createStorage(); + + /** + * @private + * @type {module:echarts/data/Tree} + */ + this._oldTree; + + /** + * @private + * @type {module:echarts/chart/treemap/Breadcrumb} + */ + this._breadcrumb; + + /** + * @private + * @type {module:echarts/component/helper/RoamController} + */ + this._controller; + + /** + * 'ready', 'animating' + * @private + */ + this._state = 'ready'; + }, + + /** + * @override + */ + render: function (seriesModel, ecModel, api, payload) { + + var models = ecModel.findComponents({ + mainType: 'series', subType: 'treemap', query: payload + }); + if (indexOf(models, seriesModel) < 0) { + return; + } + + this.seriesModel = seriesModel; + this.api = api; + this.ecModel = ecModel; + + var targetInfo = retrieveTargetInfo(payload, seriesModel); + var payloadType = payload && payload.type; + var layoutInfo = seriesModel.layoutInfo; + var isInit = !this._oldTree; + var thisStorage = this._storage; + + // Mark new root when action is treemapRootToNode. + var reRoot = (payloadType === 'treemapRootToNode' && targetInfo && thisStorage) + ? { + rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()], + direction: payload.direction + } + : null; + + var containerGroup = this._giveContainerGroup(layoutInfo); + + var renderResult = this._doRender(containerGroup, seriesModel, reRoot); + ( + !isInit && ( + !payloadType + || payloadType === 'treemapZoomToNode' + || payloadType === 'treemapRootToNode' + ) + ) + ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) + : renderResult.renderFinally(); + + this._resetController(api); + + this._renderBreadcrumb(seriesModel, api, targetInfo); + }, + + /** + * @private + */ + _giveContainerGroup: function (layoutInfo) { + var containerGroup = this._containerGroup; + if (!containerGroup) { + // FIXME + // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。 + containerGroup = this._containerGroup = new Group$2(); + this._initEvents(containerGroup); + this.group.add(containerGroup); + } + containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]); + + return containerGroup; + }, + + /** + * @private + */ + _doRender: function (containerGroup, seriesModel, reRoot) { + var thisTree = seriesModel.getData().tree; + var oldTree = this._oldTree; + + // Clear last shape records. + var lastsForAnimation = createStorage(); + var thisStorage = createStorage(); + var oldStorage = this._storage; + var willInvisibleEls = []; + var doRenderNode = curry( + renderNode, seriesModel, + thisStorage, oldStorage, reRoot, + lastsForAnimation, willInvisibleEls + ); + + // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow), + // the oldTree is actually losted, so we can not find all of the old graphic + // elements from tree. So we use this stragegy: make element storage, move + // from old storage to new storage, clear old storage. + + dualTravel( + thisTree.root ? [thisTree.root] : [], + (oldTree && oldTree.root) ? [oldTree.root] : [], + containerGroup, + thisTree === oldTree || !oldTree, + 0 + ); + + // Process all removing. + var willDeleteEls = clearStorage(oldStorage); + + this._oldTree = thisTree; + this._storage = thisStorage; + + return { + lastsForAnimation: lastsForAnimation, + willDeleteEls: willDeleteEls, + renderFinally: renderFinally + }; + + function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) { + // When 'render' is triggered by action, + // 'this' and 'old' may be the same tree, + // we use rawIndex in that case. + if (sameTree) { + oldViewChildren = thisViewChildren; + each$11(thisViewChildren, function (child, index) { + !child.isRemoved() && processNode(index, index); + }); + } + // Diff hierarchically (diff only in each subtree, but not whole). + // because, consistency of view is important. + else { + (new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey)) + .add(processNode) + .update(processNode) + .remove(curry(processNode, null)) + .execute(); + } + + function getKey(node) { + // Identify by name or raw index. + return node.getId(); + } + + function processNode(newIndex, oldIndex) { + var thisNode = newIndex != null ? thisViewChildren[newIndex] : null; + var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null; + + var group = doRenderNode(thisNode, oldNode, parentGroup, depth); + + group && dualTravel( + thisNode && thisNode.viewChildren || [], + oldNode && oldNode.viewChildren || [], + group, + sameTree, + depth + 1 + ); + } + } + + function clearStorage(storage) { + var willDeleteEls = createStorage(); + storage && each$11(storage, function (store, storageName) { + var delEls = willDeleteEls[storageName]; + each$11(store, function (el) { + el && (delEls.push(el), el.__tmWillDelete = 1); + }); + }); + return willDeleteEls; + } + + function renderFinally() { + each$11(willDeleteEls, function (els) { + each$11(els, function (el) { + el.parent && el.parent.remove(el); + }); + }); + each$11(willInvisibleEls, function (el) { + el.invisible = true; + // Setting invisible is for optimizing, so no need to set dirty, + // just mark as invisible. + el.dirty(); + }); + } + }, + + /** + * @private + */ + _doAnimation: function (containerGroup, renderResult, seriesModel, reRoot) { + if (!seriesModel.get('animation')) { + return; + } + + var duration = seriesModel.get('animationDurationUpdate'); + var easing = seriesModel.get('animationEasing'); + var animationWrap = createWrap(); + + // Make delete animations. + each$11(renderResult.willDeleteEls, function (store, storageName) { + each$11(store, function (el, rawIndex) { + if (el.invisible) { + return; + } + + var parent = el.parent; // Always has parent, and parent is nodeGroup. + var target; + + if (reRoot && reRoot.direction === 'drillDown') { + target = parent === reRoot.rootNodeGroup + // This is the content element of view root. + // Only `content` will enter this branch, because + // `background` and `nodeGroup` will not be deleted. + ? { + shape: { + x: 0, + y: 0, + width: parent.__tmNodeWidth, + height: parent.__tmNodeHeight + }, + style: { + opacity: 0 + } + } + // Others. + : {style: {opacity: 0}}; + } + else { + var targetX = 0; + var targetY = 0; + + if (!parent.__tmWillDelete) { + // Let node animate to right-bottom corner, cooperating with fadeout, + // which is appropriate for user understanding. + // Divided by 2 for reRoot rolling up effect. + targetX = parent.__tmNodeWidth / 2; + targetY = parent.__tmNodeHeight / 2; + } + + target = storageName === 'nodeGroup' + ? {position: [targetX, targetY], style: {opacity: 0}} + : { + shape: {x: targetX, y: targetY, width: 0, height: 0}, + style: {opacity: 0} + }; + } + + target && animationWrap.add(el, target, duration, easing); + }); + }); + + // Make other animations + each$11(this._storage, function (store, storageName) { + each$11(store, function (el, rawIndex) { + var last = renderResult.lastsForAnimation[storageName][rawIndex]; + var target = {}; + + if (!last) { + return; + } + + if (storageName === 'nodeGroup') { + if (last.old) { + target.position = el.position.slice(); + el.attr('position', last.old); + } + } + else { + if (last.old) { + target.shape = extend({}, el.shape); + el.setShape(last.old); + } + + if (last.fadein) { + el.setStyle('opacity', 0); + target.style = {opacity: 1}; + } + // When animation is stopped for succedent animation starting, + // el.style.opacity might not be 1 + else if (el.style.opacity !== 1) { + target.style = {opacity: 1}; + } + } + + animationWrap.add(el, target, duration, easing); + }); + }, this); + + this._state = 'animating'; + + animationWrap + .done(bind$1(function () { + this._state = 'ready'; + renderResult.renderFinally(); + }, this)) + .start(); + }, + + /** + * @private + */ + _resetController: function (api) { + var controller = this._controller; + + // Init controller. + if (!controller) { + controller = this._controller = new RoamController(api.getZr()); + controller.enable(this.seriesModel.get('roam')); + controller.on('pan', bind$1(this._onPan, this)); + controller.on('zoom', bind$1(this._onZoom, this)); + } + + var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight()); + controller.setPointerChecker(function (e, x, y) { + return rect.contain(x, y); + }); + }, + + /** + * @private + */ + _clearController: function () { + var controller = this._controller; + if (controller) { + controller.dispose(); + controller = null; + } + }, + + /** + * @private + */ + _onPan: function (dx, dy) { + if (this._state !== 'animating' + && (Math.abs(dx) > DRAG_THRESHOLD || Math.abs(dy) > DRAG_THRESHOLD) + ) { + // These param must not be cached. + var root = this.seriesModel.getData().tree.root; + + if (!root) { + return; + } + + var rootLayout = root.getLayout(); + + if (!rootLayout) { + return; + } + + this.api.dispatchAction({ + type: 'treemapMove', + from: this.uid, + seriesId: this.seriesModel.id, + rootRect: { + x: rootLayout.x + dx, y: rootLayout.y + dy, + width: rootLayout.width, height: rootLayout.height + } + }); + } + }, + + /** + * @private + */ + _onZoom: function (scale, mouseX, mouseY) { + if (this._state !== 'animating') { + // These param must not be cached. + var root = this.seriesModel.getData().tree.root; + + if (!root) { + return; + } + + var rootLayout = root.getLayout(); + + if (!rootLayout) { + return; + } + + var rect = new BoundingRect( + rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height + ); + var layoutInfo = this.seriesModel.layoutInfo; + + // Transform mouse coord from global to containerGroup. + mouseX -= layoutInfo.x; + mouseY -= layoutInfo.y; + + // Scale root bounding rect. + var m = create$1(); + translate(m, m, [-mouseX, -mouseY]); + scale$1(m, m, [scale, scale]); + translate(m, m, [mouseX, mouseY]); + + rect.applyTransform(m); + + this.api.dispatchAction({ + type: 'treemapRender', + from: this.uid, + seriesId: this.seriesModel.id, + rootRect: { + x: rect.x, y: rect.y, + width: rect.width, height: rect.height + } + }); + } + }, + + /** + * @private + */ + _initEvents: function (containerGroup) { + containerGroup.on('click', function (e) { + if (this._state !== 'ready') { + return; + } + + var nodeClick = this.seriesModel.get('nodeClick', true); + + if (!nodeClick) { + return; + } + + var targetInfo = this.findTarget(e.offsetX, e.offsetY); + + if (!targetInfo) { + return; + } + + var node = targetInfo.node; + if (node.getLayout().isLeafRoot) { + this._rootToNode(targetInfo); + } + else { + if (nodeClick === 'zoomToNode') { + this._zoomToNode(targetInfo); + } + else if (nodeClick === 'link') { + var itemModel = node.hostTree.data.getItemModel(node.dataIndex); + var link = itemModel.get('link', true); + var linkTarget = itemModel.get('target', true) || 'blank'; + link && window.open(link, linkTarget); + } + } + + }, this); + }, + + /** + * @private + */ + _renderBreadcrumb: function (seriesModel, api, targetInfo) { + if (!targetInfo) { + targetInfo = seriesModel.get('leafDepth', true) != null + ? {node: seriesModel.getViewRoot()} + // FIXME + // better way? + // Find breadcrumb tail on center of containerGroup. + : this.findTarget(api.getWidth() / 2, api.getHeight() / 2); + + if (!targetInfo) { + targetInfo = {node: seriesModel.getData().tree.root}; + } + } + + (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))) + .render(seriesModel, api, targetInfo.node, bind$1(onSelect, this)); + + function onSelect(node) { + if (this._state !== 'animating') { + aboveViewRoot(seriesModel.getViewRoot(), node) + ? this._rootToNode({node: node}) + : this._zoomToNode({node: node}); + } + } + }, + + /** + * @override + */ + remove: function () { + this._clearController(); + this._containerGroup && this._containerGroup.removeAll(); + this._storage = createStorage(); + this._state = 'ready'; + this._breadcrumb && this._breadcrumb.remove(); + }, + + dispose: function () { + this._clearController(); + }, + + /** + * @private + */ + _zoomToNode: function (targetInfo) { + this.api.dispatchAction({ + type: 'treemapZoomToNode', + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: targetInfo.node + }); + }, + + /** + * @private + */ + _rootToNode: function (targetInfo) { + this.api.dispatchAction({ + type: 'treemapRootToNode', + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: targetInfo.node + }); + }, + + /** + * @public + * @param {number} x Global coord x. + * @param {number} y Global coord y. + * @return {Object} info If not found, return undefined; + * @return {number} info.node Target node. + * @return {number} info.offsetX x refer to target node. + * @return {number} info.offsetY y refer to target node. + */ + findTarget: function (x, y) { + var targetInfo; + var viewRoot = this.seriesModel.getViewRoot(); + + viewRoot.eachNode({attr: 'viewChildren', order: 'preorder'}, function (node) { + var bgEl = this._storage.background[node.getRawIndex()]; + // If invisible, there might be no element. + if (bgEl) { + var point = bgEl.transformCoordToLocal(x, y); + var shape = bgEl.shape; + + // For performance consideration, dont use 'getBoundingRect'. + if (shape.x <= point[0] + && point[0] <= shape.x + shape.width + && shape.y <= point[1] + && point[1] <= shape.y + shape.height + ) { + targetInfo = {node: node, offsetX: point[0], offsetY: point[1]}; + } + else { + return false; // Suppress visit subtree. + } + } + }, this); + + return targetInfo; + } + +}); + +/** + * @inner + */ +function createStorage() { + return {nodeGroup: [], background: [], content: []}; +} + +/** + * @inner + * @return Return undefined means do not travel further. + */ +function renderNode( + seriesModel, thisStorage, oldStorage, reRoot, + lastsForAnimation, willInvisibleEls, + thisNode, oldNode, parentGroup, depth +) { + // Whether under viewRoot. + if (!thisNode) { + // Deleting nodes will be performed finally. This method just find + // element from old storage, or create new element, set them to new + // storage, and set styles. + return; + } + + // ------------------------------------------------------------------- + // Start of closure variables available in "Procedures in renderNode". + + var thisLayout = thisNode.getLayout(); + + if (!thisLayout || !thisLayout.isInView) { + return; + } + + var thisWidth = thisLayout.width; + var thisHeight = thisLayout.height; + var borderWidth = thisLayout.borderWidth; + var thisInvisible = thisLayout.invisible; + + var thisRawIndex = thisNode.getRawIndex(); + var oldRawIndex = oldNode && oldNode.getRawIndex(); + + var thisViewChildren = thisNode.viewChildren; + var upperHeight = thisLayout.upperHeight; + var isParent = thisViewChildren && thisViewChildren.length; + var itemStyleNormalModel = thisNode.getModel('itemStyle.normal'); + var itemStyleEmphasisModel = thisNode.getModel('itemStyle.emphasis'); + + // End of closure ariables available in "Procedures in renderNode". + // ----------------------------------------------------------------- + + // Node group + var group = giveGraphic('nodeGroup', Group$2); + + if (!group) { + return; + } + + parentGroup.add(group); + // x,y are not set when el is above view root. + group.attr('position', [thisLayout.x || 0, thisLayout.y || 0]); + group.__tmNodeWidth = thisWidth; + group.__tmNodeHeight = thisHeight; + + if (thisLayout.isAboveViewRoot) { + return group; + } + + // Background + var bg = giveGraphic('background', Rect$1, depth, Z_BG); + bg && renderBackground(group, bg, isParent && thisLayout.upperHeight); + + // No children, render content. + if (!isParent) { + var content = giveGraphic('content', Rect$1, depth, Z_CONTENT); + content && renderContent(group, content); + } + + return group; + + // ---------------------------- + // | Procedures in renderNode | + // ---------------------------- + + function renderBackground(group, bg, useUpperLabel) { + // For tooltip. + bg.dataIndex = thisNode.dataIndex; + bg.seriesIndex = seriesModel.seriesIndex; + + bg.setShape({x: 0, y: 0, width: thisWidth, height: thisHeight}); + var visualBorderColor = thisNode.getVisual('borderColor', true); + var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor'); + + updateStyle(bg, function () { + var normalStyle = getItemStyleNormal(itemStyleNormalModel); + normalStyle.fill = visualBorderColor; + var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel); + emphasisStyle.fill = emphasisBorderColor; + + if (useUpperLabel) { + var upperLabelWidth = thisWidth - 2 * borderWidth; + + prepareText( + normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight, + {x: borderWidth, y: 0, width: upperLabelWidth, height: upperHeight} + ); + } + // For old bg. + else { + normalStyle.text = emphasisStyle.text = null; + } + + bg.setStyle(normalStyle); + setHoverStyle(bg, emphasisStyle); + }); + + group.add(bg); + } + + function renderContent(group, content) { + // For tooltip. + content.dataIndex = thisNode.dataIndex; + content.seriesIndex = seriesModel.seriesIndex; + + var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0); + var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0); + + content.culling = true; + content.setShape({ + x: borderWidth, + y: borderWidth, + width: contentWidth, + height: contentHeight + }); + + var visualColor = thisNode.getVisual('color', true); + updateStyle(content, function () { + var normalStyle = getItemStyleNormal(itemStyleNormalModel); + normalStyle.fill = visualColor; + var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel); + + prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight); + + content.setStyle(normalStyle); + setHoverStyle(content, emphasisStyle); + }); + + group.add(content); + } + + function updateStyle(element, cb) { + if (!thisInvisible) { + // If invisible, do not set visual, otherwise the element will + // change immediately before animation. We think it is OK to + // remain its origin color when moving out of the view window. + cb(); + + if (!element.__tmWillVisible) { + element.invisible = false; + } + } + else { + // Delay invisible setting utill animation finished, + // avoid element vanish suddenly before animation. + !element.invisible && willInvisibleEls.push(element); + } + } + + function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) { + var nodeModel = thisNode.getModel(); + var text = retrieve( + seriesModel.getFormattedLabel( + thisNode.dataIndex, 'normal', null, null, upperLabelRect ? 'upperLabel' : 'label' + ), + nodeModel.get('name') + ); + if (!upperLabelRect && thisLayout.isLeafRoot) { + var iconChar = seriesModel.get('drillDownIcon', true); + text = iconChar ? iconChar + ' ' + text : text; + } + + var normalLabelModel = nodeModel.getModel( + upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL + ); + var emphasisLabelModel = nodeModel.getModel( + upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS + ); + + var isShow = normalLabelModel.getShallow('show'); + + setLabelStyle( + normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel, + { + defaultText: isShow ? text : null, + autoColor: visualColor, + isRectText: true + } + ); + + upperLabelRect && (normalStyle.textRect = clone(upperLabelRect)); + + normalStyle.truncate = (isShow && normalLabelModel.get('ellipsis')) + ? { + outerWidth: width, + outerHeight: height, + minChar: 2 + } + : null; + } + + function giveGraphic(storageName, Ctor, depth, z) { + var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex]; + var lasts = lastsForAnimation[storageName]; + + if (element) { + // Remove from oldStorage + oldStorage[storageName][oldRawIndex] = null; + prepareAnimationWhenHasOld(lasts, element, storageName); + } + // If invisible and no old element, do not create new element (for optimizing). + else if (!thisInvisible) { + element = new Ctor({z: calculateZ(depth, z)}); + element.__tmDepth = depth; + element.__tmStorageName = storageName; + prepareAnimationWhenNoOld(lasts, element, storageName); + } + + // Set to thisStorage + return (thisStorage[storageName][thisRawIndex] = element); + } + + function prepareAnimationWhenHasOld(lasts, element, storageName) { + var lastCfg = lasts[thisRawIndex] = {}; + lastCfg.old = storageName === 'nodeGroup' + ? element.position.slice() + : extend({}, element.shape); + } + + // If a element is new, we need to find the animation start point carefully, + // otherwise it will looks strange when 'zoomToNode'. + function prepareAnimationWhenNoOld(lasts, element, storageName) { + var lastCfg = lasts[thisRawIndex] = {}; + var parentNode = thisNode.parentNode; + + if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) { + var parentOldX = 0; + var parentOldY = 0; + + // New nodes appear from right-bottom corner in 'zoomToNode' animation. + // For convenience, get old bounding rect from background. + var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()]; + if (!reRoot && parentOldBg && parentOldBg.old) { + parentOldX = parentOldBg.old.width; + parentOldY = parentOldBg.old.height; + } + + // When no parent old shape found, its parent is new too, + // so we can just use {x:0, y:0}. + lastCfg.old = storageName === 'nodeGroup' + ? [0, parentOldY] + : {x: parentOldX, y: parentOldY, width: 0, height: 0}; + } + + // Fade in, user can be aware that these nodes are new. + lastCfg.fadein = storageName !== 'nodeGroup'; + } +} + +// We can not set all backgroud with the same z, Because the behaviour of +// drill down and roll up differ background creation sequence from tree +// hierarchy sequence, which cause that lowser background element overlap +// upper ones. So we calculate z based on depth. +// Moreover, we try to shrink down z interval to [0, 1] to avoid that +// treemap with large z overlaps other components. +function calculateZ(depth, zInLevel) { + var zb = depth * Z_BASE + zInLevel; + return (zb - 1) / zb; +} + +/** + * @file Treemap action + */ + +var noop$1 = function () {}; + +var actionTypes = [ + 'treemapZoomToNode', + 'treemapRender', + 'treemapMove' +]; + +for (var i$2 = 0; i$2 < actionTypes.length; i$2++) { + registerAction({type: actionTypes[i$2], update: 'updateView'}, noop$1); +} + +registerAction( + {type: 'treemapRootToNode', update: 'updateView'}, + function (payload, ecModel) { + + ecModel.eachComponent( + {mainType: 'series', subType: 'treemap', query: payload}, + handleRootToNode + ); + + function handleRootToNode(model, index) { + var targetInfo = retrieveTargetInfo(payload, model); + + if (targetInfo) { + var originViewRoot = model.getViewRoot(); + if (originViewRoot) { + payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) + ? 'rollUp' : 'drillDown'; + } + model.resetViewRoot(targetInfo.node); + } + } + } +); + +var each$12 = each$1; +var isObject$5 = isObject; + +var CATEGORY_DEFAULT_VISUAL_INDEX = -1; + +/** + * @param {Object} option + * @param {string} [option.type] See visualHandlers. + * @param {string} [option.mappingMethod] 'linear' or 'piecewise' or 'category' or 'fixed' + * @param {Array.=} [option.dataExtent] [minExtent, maxExtent], + * required when mappingMethod is 'linear' + * @param {Array.=} [option.pieceList] [ + * {value: someValue}, + * {interval: [min1, max1], visual: {...}}, + * {interval: [min2, max2]} + * ], + * required when mappingMethod is 'piecewise'. + * Visual for only each piece can be specified. + * @param {Array.=} [option.categories] ['cate1', 'cate2'] + * required when mappingMethod is 'category'. + * If no option.categories, categories is set + * as [0, 1, 2, ...]. + * @param {boolean} [option.loop=false] Whether loop mapping when mappingMethod is 'category'. + * @param {(Array|Object|*)} [option.visual] Visual data. + * when mappingMethod is 'category', + * visual data can be array or object + * (like: {cate1: '#222', none: '#fff'}) + * or primary types (which represents + * defualt category visual), otherwise visual + * can be array or primary (which will be + * normalized to array). + * + */ +var VisualMapping = function (option) { + var mappingMethod = option.mappingMethod; + var visualType = option.type; + + /** + * @readOnly + * @type {Object} + */ + var thisOption = this.option = clone(option); + + /** + * @readOnly + * @type {string} + */ + this.type = visualType; + + /** + * @readOnly + * @type {string} + */ + this.mappingMethod = mappingMethod; + + /** + * @private + * @type {Function} + */ + this._normalizeData = normalizers[mappingMethod]; + + var visualHandler = visualHandlers[visualType]; + + /** + * @public + * @type {Function} + */ + this.applyVisual = visualHandler.applyVisual; + + /** + * @public + * @type {Function} + */ + this.getColorMapper = visualHandler.getColorMapper; + + /** + * @private + * @type {Function} + */ + this._doMap = visualHandler._doMap[mappingMethod]; + + if (mappingMethod === 'piecewise') { + normalizeVisualRange(thisOption); + preprocessForPiecewise(thisOption); + } + else if (mappingMethod === 'category') { + thisOption.categories + ? preprocessForSpecifiedCategory(thisOption) + // categories is ordinal when thisOption.categories not specified, + // which need no more preprocess except normalize visual. + : normalizeVisualRange(thisOption, true); + } + else { // mappingMethod === 'linear' or 'fixed' + assert(mappingMethod !== 'linear' || thisOption.dataExtent); + normalizeVisualRange(thisOption); + } +}; + +VisualMapping.prototype = { + + constructor: VisualMapping, + + mapValueToVisual: function (value) { + var normalized = this._normalizeData(value); + return this._doMap(normalized, value); + }, + + getNormalizer: function () { + return bind(this._normalizeData, this); + } +}; + +var visualHandlers = VisualMapping.visualHandlers = { + + color: { + + applyVisual: makeApplyVisual('color'), + + /** + * Create a mapper function + * @return {Function} + */ + getColorMapper: function () { + var thisOption = this.option; + + return bind( + thisOption.mappingMethod === 'category' + ? function (value, isNormalized) { + !isNormalized && (value = this._normalizeData(value)); + return doMapCategory.call(this, value); + } + : function (value, isNormalized, out) { + // If output rgb array + // which will be much faster and useful in pixel manipulation + var returnRGBArray = !!out; + !isNormalized && (value = this._normalizeData(value)); + out = fastLerp(value, thisOption.parsedVisual, out); + return returnRGBArray ? out : stringify(out, 'rgba'); + }, + this + ); + }, + + _doMap: { + linear: function (normalized) { + return stringify( + fastLerp(normalized, this.option.parsedVisual), + 'rgba' + ); + }, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + if (result == null) { + result = stringify( + fastLerp(normalized, this.option.parsedVisual), + 'rgba' + ); + } + return result; + }, + fixed: doMapFixed + } + }, + + colorHue: makePartialColorVisualHandler(function (color, value) { + return modifyHSL(color, value); + }), + + colorSaturation: makePartialColorVisualHandler(function (color, value) { + return modifyHSL(color, null, value); + }), + + colorLightness: makePartialColorVisualHandler(function (color, value) { + return modifyHSL(color, null, null, value); + }), + + colorAlpha: makePartialColorVisualHandler(function (color, value) { + return modifyAlpha(color, value); + }), + + opacity: { + applyVisual: makeApplyVisual('opacity'), + _doMap: makeDoMap([0, 1]) + }, + + symbol: { + applyVisual: function (value, getter, setter) { + var symbolCfg = this.mapValueToVisual(value); + if (isString(symbolCfg)) { + setter('symbol', symbolCfg); + } + else if (isObject$5(symbolCfg)) { + for (var name in symbolCfg) { + if (symbolCfg.hasOwnProperty(name)) { + setter(name, symbolCfg[name]); + } + } + } + }, + _doMap: { + linear: doMapToArray, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + if (result == null) { + result = doMapToArray.call(this, normalized); + } + return result; + }, + fixed: doMapFixed + } + }, + + symbolSize: { + applyVisual: makeApplyVisual('symbolSize'), + _doMap: makeDoMap([0, 1]) + } +}; + + +function preprocessForPiecewise(thisOption) { + var pieceList = thisOption.pieceList; + thisOption.hasSpecialVisual = false; + + each$1(pieceList, function (piece, index) { + piece.originIndex = index; + // piece.visual is "result visual value" but not + // a visual range, so it does not need to be normalized. + if (piece.visual != null) { + thisOption.hasSpecialVisual = true; + } + }); +} + +function preprocessForSpecifiedCategory(thisOption) { + // Hash categories. + var categories = thisOption.categories; + var visual = thisOption.visual; + + var categoryMap = thisOption.categoryMap = {}; + each$12(categories, function (cate, index) { + categoryMap[cate] = index; + }); + + // Process visual map input. + if (!isArray(visual)) { + var visualArr = []; + + if (isObject(visual)) { + each$12(visual, function (v, cate) { + var index = categoryMap[cate]; + visualArr[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v; + }); + } + else { // Is primary type, represents default visual. + visualArr[CATEGORY_DEFAULT_VISUAL_INDEX] = visual; + } + + visual = setVisualToOption(thisOption, visualArr); + } + + // Remove categories that has no visual, + // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX. + for (var i = categories.length - 1; i >= 0; i--) { + if (visual[i] == null) { + delete categoryMap[categories[i]]; + categories.pop(); + } + } +} + +function normalizeVisualRange(thisOption, isCategory) { + var visual = thisOption.visual; + var visualArr = []; + + if (isObject(visual)) { + each$12(visual, function (v) { + visualArr.push(v); + }); + } + else if (visual != null) { + visualArr.push(visual); + } + + var doNotNeedPair = {color: 1, symbol: 1}; + + if (!isCategory + && visualArr.length === 1 + && !doNotNeedPair.hasOwnProperty(thisOption.type) + ) { + // Do not care visualArr.length === 0, which is illegal. + visualArr[1] = visualArr[0]; + } + + setVisualToOption(thisOption, visualArr); +} + +function makePartialColorVisualHandler(applyValue) { + return { + applyVisual: function (value, getter, setter) { + value = this.mapValueToVisual(value); + // Must not be array value + setter('color', applyValue(getter('color'), value)); + }, + _doMap: makeDoMap([0, 1]) + }; +} + +function doMapToArray(normalized) { + var visual = this.option.visual; + return visual[ + Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true)) + ] || {}; +} + +function makeApplyVisual(visualType) { + return function (value, getter, setter) { + setter(visualType, this.mapValueToVisual(value)); + }; +} + +function doMapCategory(normalized) { + var visual = this.option.visual; + return visual[ + (this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX) + ? normalized % visual.length + : normalized + ]; +} + +function doMapFixed() { + return this.option.visual[0]; +} + +function makeDoMap(sourceExtent) { + return { + linear: function (normalized) { + return linearMap(normalized, sourceExtent, this.option.visual, true); + }, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + if (result == null) { + result = linearMap(normalized, sourceExtent, this.option.visual, true); + } + return result; + }, + fixed: doMapFixed + }; +} + +function getSpecifiedVisual(value) { + var thisOption = this.option; + var pieceList = thisOption.pieceList; + if (thisOption.hasSpecialVisual) { + var pieceIndex = VisualMapping.findPieceIndex(value, pieceList); + var piece = pieceList[pieceIndex]; + if (piece && piece.visual) { + return piece.visual[this.type]; + } + } +} + +function setVisualToOption(thisOption, visualArr) { + thisOption.visual = visualArr; + if (thisOption.type === 'color') { + thisOption.parsedVisual = map(visualArr, function (item) { + return parse(item); + }); + } + return visualArr; +} + + +/** + * Normalizers by mapping methods. + */ +var normalizers = { + + linear: function (value) { + return linearMap(value, this.option.dataExtent, [0, 1], true); + }, + + piecewise: function (value) { + var pieceList = this.option.pieceList; + var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true); + if (pieceIndex != null) { + return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true); + } + }, + + category: function (value) { + var index = this.option.categories + ? this.option.categoryMap[value] + : value; // ordinal + return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index; + }, + + fixed: noop +}; + + + +/** + * List available visual types. + * + * @public + * @return {Array.} + */ +VisualMapping.listVisualTypes = function () { + var visualTypes = []; + each$1(visualHandlers, function (handler, key) { + visualTypes.push(key); + }); + return visualTypes; +}; + +/** + * @public + */ +VisualMapping.addVisualHandler = function (name, handler) { + visualHandlers[name] = handler; +}; + +/** + * @public + */ +VisualMapping.isValidType = function (visualType) { + return visualHandlers.hasOwnProperty(visualType); +}; + +/** + * Convinent method. + * Visual can be Object or Array or primary type. + * + * @public + */ +VisualMapping.eachVisual = function (visual, callback, context) { + if (isObject(visual)) { + each$1(visual, callback, context); + } + else { + callback.call(context, visual); + } +}; + +VisualMapping.mapVisual = function (visual, callback, context) { + var isPrimary; + var newVisual = isArray(visual) + ? [] + : isObject(visual) + ? {} + : (isPrimary = true, null); + + VisualMapping.eachVisual(visual, function (v, key) { + var newVal = callback.call(context, v, key); + isPrimary ? (newVisual = newVal) : (newVisual[key] = newVal); + }); + return newVisual; +}; + +/** + * @public + * @param {Object} obj + * @return {Object} new object containers visual values. + * If no visuals, return null. + */ +VisualMapping.retrieveVisuals = function (obj) { + var ret = {}; + var hasVisual; + + obj && each$12(visualHandlers, function (h, visualType) { + if (obj.hasOwnProperty(visualType)) { + ret[visualType] = obj[visualType]; + hasVisual = true; + } + }); + + return hasVisual ? ret : null; +}; + +/** + * Give order to visual types, considering colorSaturation, colorAlpha depends on color. + * + * @public + * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...} + * IF Array, like: ['color', 'symbol', 'colorSaturation'] + * @return {Array.} Sorted visual types. + */ +VisualMapping.prepareVisualTypes = function (visualTypes) { + if (isObject$5(visualTypes)) { + var types = []; + each$12(visualTypes, function (item, type) { + types.push(type); + }); + visualTypes = types; + } + else if (isArray(visualTypes)) { + visualTypes = visualTypes.slice(); + } + else { + return []; + } + + visualTypes.sort(function (type1, type2) { + // color should be front of colorSaturation, colorAlpha, ... + // symbol and symbolSize do not matter. + return (type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0) + ? 1 : -1; + }); + + return visualTypes; +}; + +/** + * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'. + * Other visuals are only depends on themself. + * + * @public + * @param {string} visualType1 + * @param {string} visualType2 + * @return {boolean} + */ +VisualMapping.dependsOn = function (visualType1, visualType2) { + return visualType2 === 'color' + ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) + : visualType1 === visualType2; +}; + +/** + * @param {number} value + * @param {Array.} pieceList [{value: ..., interval: [min, max]}, ...] + * Always from small to big. + * @param {boolean} [findClosestWhenOutside=false] + * @return {number} index + */ +VisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) { + var possibleI; + var abs = Infinity; + + // value has the higher priority. + for (var i = 0, len = pieceList.length; i < len; i++) { + var pieceValue = pieceList[i].value; + if (pieceValue != null) { + if (pieceValue === value + // FIXME + // It is supposed to compare value according to value type of dimension, + // but currently value type can exactly be string or number. + // Compromise for numeric-like string (like '12'), especially + // in the case that visualMap.categories is ['22', '33']. + || (typeof pieceValue === 'string' && pieceValue === value + '') + ) { + return i; + } + findClosestWhenOutside && updatePossible(pieceValue, i); + } + } + + for (var i = 0, len = pieceList.length; i < len; i++) { + var piece = pieceList[i]; + var interval = piece.interval; + var close = piece.close; + + if (interval) { + if (interval[0] === -Infinity) { + if (littleThan(close[1], value, interval[1])) { + return i; + } + } + else if (interval[1] === Infinity) { + if (littleThan(close[0], interval[0], value)) { + return i; + } + } + else if ( + littleThan(close[0], interval[0], value) + && littleThan(close[1], value, interval[1]) + ) { + return i; + } + findClosestWhenOutside && updatePossible(interval[0], i); + findClosestWhenOutside && updatePossible(interval[1], i); + } + } + + if (findClosestWhenOutside) { + return value === Infinity + ? pieceList.length - 1 + : value === -Infinity + ? 0 + : possibleI; + } + + function updatePossible(val, index) { + var newAbs = Math.abs(val - value); + if (newAbs < abs) { + abs = newAbs; + possibleI = index; + } + } + +}; + +function littleThan(close, a, b) { + return close ? a <= b : a < b; +} + +var isArray$2 = isArray; + +var ITEM_STYLE_NORMAL = 'itemStyle.normal'; + +var treemapVisual = function (ecModel, api, payload) { + + var condition = {mainType: 'series', subType: 'treemap', query: payload}; + ecModel.eachComponent(condition, function (seriesModel) { + + var tree = seriesModel.getData().tree; + var root = tree.root; + var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL); + + if (root.isRemoved()) { + return; + } + + var levelItemStyles = map(tree.levelModels, function (levelModel) { + return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null; + }); + + travelTree( + root, // Visual should calculate from tree root but not view root. + {}, + levelItemStyles, + seriesItemStyleModel, + seriesModel.getViewRoot().getAncestors(), + seriesModel + ); + }); +}; + +function travelTree( + node, designatedVisual, levelItemStyles, seriesItemStyleModel, + viewRootAncestors, seriesModel +) { + var nodeModel = node.getModel(); + var nodeLayout = node.getLayout(); + + // Optimize + if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) { + return; + } + + var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL); + var levelItemStyle = levelItemStyles[node.depth]; + var visuals = buildVisuals( + nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel + ); + + // calculate border color + var borderColor = nodeItemStyleModel.get('borderColor'); + var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation'); + var thisNodeColor; + if (borderColorSaturation != null) { + // For performance, do not always execute 'calculateColor'. + thisNodeColor = calculateColor(visuals, node); + borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor); + } + node.setVisual('borderColor', borderColor); + + var viewChildren = node.viewChildren; + if (!viewChildren || !viewChildren.length) { + thisNodeColor = calculateColor(visuals, node); + // Apply visual to this node. + node.setVisual('color', thisNodeColor); + } + else { + var mapping = buildVisualMapping( + node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren + ); + + // Designate visual to children. + each$1(viewChildren, function (child, index) { + // If higher than viewRoot, only ancestors of viewRoot is needed to visit. + if (child.depth >= viewRootAncestors.length + || child === viewRootAncestors[child.depth] + ) { + var childVisual = mapVisual$1( + nodeModel, visuals, child, index, mapping, seriesModel + ); + travelTree( + child, childVisual, levelItemStyles, seriesItemStyleModel, + viewRootAncestors, seriesModel + ); + } + }); + } +} + +function buildVisuals( + nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel +) { + var visuals = extend({}, designatedVisual); + + each$1(['color', 'colorAlpha', 'colorSaturation'], function (visualName) { + // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel + var val = nodeItemStyleModel.get(visualName, true); // Ignore parent + val == null && levelItemStyle && (val = levelItemStyle[visualName]); + val == null && (val = designatedVisual[visualName]); + val == null && (val = seriesItemStyleModel.get(visualName)); + + val != null && (visuals[visualName] = val); + }); + + return visuals; +} + +function calculateColor(visuals) { + var color = getValueVisualDefine(visuals, 'color'); + + if (color) { + var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha'); + var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation'); + if (colorSaturation) { + color = modifyHSL(color, null, null, colorSaturation); + } + if (colorAlpha) { + color = modifyAlpha(color, colorAlpha); + } + + return color; + } +} + +function calculateBorderColor(borderColorSaturation, thisNodeColor) { + return thisNodeColor != null + ? modifyHSL(thisNodeColor, null, null, borderColorSaturation) + : null; +} + +function getValueVisualDefine(visuals, name) { + var value = visuals[name]; + if (value != null && value !== 'none') { + return value; + } +} + +function buildVisualMapping( + node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren +) { + if (!viewChildren || !viewChildren.length) { + return; + } + + var rangeVisual = getRangeVisual(nodeModel, 'color') + || ( + visuals.color != null + && visuals.color !== 'none' + && ( + getRangeVisual(nodeModel, 'colorAlpha') + || getRangeVisual(nodeModel, 'colorSaturation') + ) + ); + + if (!rangeVisual) { + return; + } + + var visualMin = nodeModel.get('visualMin'); + var visualMax = nodeModel.get('visualMax'); + var dataExtent = nodeLayout.dataExtent.slice(); + visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin); + visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax); + + var colorMappingBy = nodeModel.get('colorMappingBy'); + var opt = { + type: rangeVisual.name, + dataExtent: dataExtent, + visual: rangeVisual.range + }; + if (opt.type === 'color' + && (colorMappingBy === 'index' || colorMappingBy === 'id') + ) { + opt.mappingMethod = 'category'; + opt.loop = true; + // categories is ordinal, so do not set opt.categories. + } + else { + opt.mappingMethod = 'linear'; + } + + var mapping = new VisualMapping(opt); + mapping.__drColorMappingBy = colorMappingBy; + + return mapping; +} + +// Notice: If we dont have the attribute 'colorRange', but only use +// attribute 'color' to represent both concepts of 'colorRange' and 'color', +// (It means 'colorRange' when 'color' is Array, means 'color' when not array), +// this problem will be encountered: +// If a level-1 node dont have children, and its siblings has children, +// and colorRange is set on level-1, then the node can not be colored. +// So we separate 'colorRange' and 'color' to different attributes. +function getRangeVisual(nodeModel, name) { + // 'colorRange', 'colorARange', 'colorSRange'. + // If not exsits on this node, fetch from levels and series. + var range = nodeModel.get(name); + return (isArray$2(range) && range.length) ? {name: name, range: range} : null; +} + +function mapVisual$1(nodeModel, visuals, child, index, mapping, seriesModel) { + var childVisuals = extend({}, visuals); + + if (mapping) { + var mappingType = mapping.type; + var colorMappingBy = mappingType === 'color' && mapping.__drColorMappingBy; + var value = + colorMappingBy === 'index' + ? index + : colorMappingBy === 'id' + ? seriesModel.mapIdToIndex(child.getId()) + : child.getValue(nodeModel.get('visualDimension')); + + childVisuals[mappingType] = mapping.mapValueToVisual(value); + } + + return childVisuals; +} + +var mathMax$4 = Math.max; +var mathMin$4 = Math.min; +var retrieveValue$1 = retrieve; +var each$13 = each$1; + +var PATH_BORDER_WIDTH = ['itemStyle', 'normal', 'borderWidth']; +var PATH_GAP_WIDTH = ['itemStyle', 'normal', 'gapWidth']; +var PATH_UPPER_LABEL_SHOW = ['upperLabel', 'normal', 'show']; +var PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'normal', 'height']; + +/** + * @public + */ +var treemapLayout = function (ecModel, api, payload) { + // Layout result in each node: + // {x, y, width, height, area, borderWidth} + var condition = {mainType: 'series', subType: 'treemap', query: payload}; + ecModel.eachComponent(condition, function (seriesModel) { + + var ecWidth = api.getWidth(); + var ecHeight = api.getHeight(); + var seriesOption = seriesModel.option; + + var layoutInfo = getLayoutRect( + seriesModel.getBoxLayoutParams(), + { + width: api.getWidth(), + height: api.getHeight() + } + ); + + var size = seriesOption.size || []; // Compatible with ec2. + var containerWidth = parsePercent$1( + retrieveValue$1(layoutInfo.width, size[0]), + ecWidth + ); + var containerHeight = parsePercent$1( + retrieveValue$1(layoutInfo.height, size[1]), + ecHeight + ); + + // Fetch payload info. + var payloadType = payload && payload.type; + var targetInfo = retrieveTargetInfo(payload, seriesModel); + var rootRect = (payloadType === 'treemapRender' || payloadType === 'treemapMove') + ? payload.rootRect : null; + var viewRoot = seriesModel.getViewRoot(); + var viewAbovePath = getPathToRoot(viewRoot); + + if (payloadType !== 'treemapMove') { + var rootSize = payloadType === 'treemapZoomToNode' + ? estimateRootSize( + seriesModel, targetInfo, viewRoot, containerWidth, containerHeight + ) + : rootRect + ? [rootRect.width, rootRect.height] + : [containerWidth, containerHeight]; + + var sort = seriesOption.sort; + if (sort && sort !== 'asc' && sort !== 'desc') { + sort = 'desc'; + } + var options = { + squareRatio: seriesOption.squareRatio, + sort: sort, + leafDepth: seriesOption.leafDepth + }; + + // layout should be cleared because using updateView but not update. + viewRoot.hostTree.clearLayouts(); + + // TODO + // optimize: if out of view clip, do not layout. + // But take care that if do not render node out of view clip, + // how to calculate start po + + var viewRootLayout = { + x: 0, y: 0, + width: rootSize[0], height: rootSize[1], + area: rootSize[0] * rootSize[1] + }; + viewRoot.setLayout(viewRootLayout); + + squarify(viewRoot, options, false, 0); + // Supplement layout. + var viewRootLayout = viewRoot.getLayout(); + each$13(viewAbovePath, function (node, index) { + var childValue = (viewAbovePath[index + 1] || viewRoot).getValue(); + node.setLayout(extend( + {dataExtent: [childValue, childValue], borderWidth: 0, upperHeight: 0}, + viewRootLayout + )); + }); + } + + var treeRoot = seriesModel.getData().tree.root; + + treeRoot.setLayout( + calculateRootPosition(layoutInfo, rootRect, targetInfo), + true + ); + + seriesModel.setLayoutInfo(layoutInfo); + + // FIXME + // 现在没有clip功能,暂时取ec高宽。 + prunning( + treeRoot, + // Transform to base element coordinate system. + new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), + viewAbovePath, + viewRoot, + 0 + ); + }); +}; + +/** + * Layout treemap with squarify algorithm. + * @see https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf + * @see https://github.com/mbostock/d3/blob/master/src/layout/treemap.js + * + * @protected + * @param {module:echarts/data/Tree~TreeNode} node + * @param {Object} options + * @param {string} options.sort 'asc' or 'desc' + * @param {number} options.squareRatio + * @param {boolean} hideChildren + * @param {number} depth + */ +function squarify(node, options, hideChildren, depth) { + var width; + var height; + + if (node.isRemoved()) { + return; + } + + var thisLayout = node.getLayout(); + width = thisLayout.width; + height = thisLayout.height; + + // Considering border and gap + var nodeModel = node.getModel(); + var borderWidth = nodeModel.get(PATH_BORDER_WIDTH); + var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2; + var upperLabelHeight = getUpperLabelHeight(nodeModel); + var upperHeight = Math.max(borderWidth, upperLabelHeight); + var layoutOffset = borderWidth - halfGapWidth; + var layoutOffsetUpper = upperHeight - halfGapWidth; + var nodeModel = node.getModel(); + + node.setLayout({ + borderWidth: borderWidth, + upperHeight: upperHeight, + upperLabelHeight: upperLabelHeight + }, true); + + width = mathMax$4(width - 2 * layoutOffset, 0); + height = mathMax$4(height - layoutOffset - layoutOffsetUpper, 0); + + var totalArea = width * height; + var viewChildren = initChildren( + node, nodeModel, totalArea, options, hideChildren, depth + ); + + if (!viewChildren.length) { + return; + } + + var rect = {x: layoutOffset, y: layoutOffsetUpper, width: width, height: height}; + var rowFixedLength = mathMin$4(width, height); + var best = Infinity; // the best row score so far + var row = []; + row.area = 0; + + for (var i = 0, len = viewChildren.length; i < len;) { + var child = viewChildren[i]; + + row.push(child); + row.area += child.getLayout().area; + var score = worst(row, rowFixedLength, options.squareRatio); + + // continue with this orientation + if (score <= best) { + i++; + best = score; + } + // abort, and try a different orientation + else { + row.area -= row.pop().getLayout().area; + position(row, rowFixedLength, rect, halfGapWidth, false); + rowFixedLength = mathMin$4(rect.width, rect.height); + row.length = row.area = 0; + best = Infinity; + } + } + + if (row.length) { + position(row, rowFixedLength, rect, halfGapWidth, true); + } + + if (!hideChildren) { + var childrenVisibleMin = nodeModel.get('childrenVisibleMin'); + if (childrenVisibleMin != null && totalArea < childrenVisibleMin) { + hideChildren = true; + } + } + + for (var i = 0, len = viewChildren.length; i < len; i++) { + squarify(viewChildren[i], options, hideChildren, depth + 1); + } +} + +/** + * Set area to each child, and calculate data extent for visual coding. + */ +function initChildren(node, nodeModel, totalArea, options, hideChildren, depth) { + var viewChildren = node.children || []; + var orderBy = options.sort; + orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null); + + var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; + + // leafDepth has higher priority. + if (hideChildren && !overLeafDepth) { + return (node.viewChildren = []); + } + + // Sort children, order by desc. + viewChildren = filter(viewChildren, function (child) { + return !child.isRemoved(); + }); + + sort$1(viewChildren, orderBy); + + var info = statistic(nodeModel, viewChildren, orderBy); + + if (info.sum === 0) { + return (node.viewChildren = []); + } + + info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren); + + if (info.sum === 0) { + return (node.viewChildren = []); + } + + // Set area to each child. + for (var i = 0, len = viewChildren.length; i < len; i++) { + var area = viewChildren[i].getValue() / info.sum * totalArea; + // Do not use setLayout({...}, true), because it is needed to clear last layout. + viewChildren[i].setLayout({area: area}); + } + + if (overLeafDepth) { + viewChildren.length && node.setLayout({isLeafRoot: true}, true); + viewChildren.length = 0; + } + + node.viewChildren = viewChildren; + node.setLayout({dataExtent: info.dataExtent}, true); + + return viewChildren; +} + +/** + * Consider 'visibleMin'. Modify viewChildren and get new sum. + */ +function filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) { + + // visibleMin is not supported yet when no option.sort. + if (!orderBy) { + return sum; + } + + var visibleMin = nodeModel.get('visibleMin'); + var len = orderedChildren.length; + var deletePoint = len; + + // Always travel from little value to big value. + for (var i = len - 1; i >= 0; i--) { + var value = orderedChildren[ + orderBy === 'asc' ? len - i - 1 : i + ].getValue(); + + if (value / sum * totalArea < visibleMin) { + deletePoint = i; + sum -= value; + } + } + + orderBy === 'asc' + ? orderedChildren.splice(0, len - deletePoint) + : orderedChildren.splice(deletePoint, len - deletePoint); + + return sum; +} + +/** + * Sort + */ +function sort$1(viewChildren, orderBy) { + if (orderBy) { + viewChildren.sort(function (a, b) { + var diff = orderBy === 'asc' + ? a.getValue() - b.getValue() : b.getValue() - a.getValue(); + return diff === 0 + ? (orderBy === 'asc' + ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex + ) + : diff; + }); + } + return viewChildren; +} + +/** + * Statistic + */ +function statistic(nodeModel, children, orderBy) { + // Calculate sum. + var sum = 0; + for (var i = 0, len = children.length; i < len; i++) { + sum += children[i].getValue(); + } + + // Statistic data extent for latter visual coding. + // Notice: data extent should be calculate based on raw children + // but not filtered view children, otherwise visual mapping will not + // be stable when zoom (where children is filtered by visibleMin). + + var dimension = nodeModel.get('visualDimension'); + var dataExtent; + + // The same as area dimension. + if (!children || !children.length) { + dataExtent = [NaN, NaN]; + } + else if (dimension === 'value' && orderBy) { + dataExtent = [ + children[children.length - 1].getValue(), + children[0].getValue() + ]; + orderBy === 'asc' && dataExtent.reverse(); + } + // Other dimension. + else { + var dataExtent = [Infinity, -Infinity]; + each$13(children, function (child) { + var value = child.getValue(dimension); + value < dataExtent[0] && (dataExtent[0] = value); + value > dataExtent[1] && (dataExtent[1] = value); + }); + } + + return {sum: sum, dataExtent: dataExtent}; +} + +/** + * Computes the score for the specified row, + * as the worst aspect ratio. + */ +function worst(row, rowFixedLength, ratio) { + var areaMax = 0; + var areaMin = Infinity; + + for (var i = 0, area, len = row.length; i < len; i++) { + area = row[i].getLayout().area; + if (area) { + area < areaMin && (areaMin = area); + area > areaMax && (areaMax = area); + } + } + + var squareArea = row.area * row.area; + var f = rowFixedLength * rowFixedLength * ratio; + + return squareArea + ? mathMax$4( + (f * areaMax) / squareArea, + squareArea / (f * areaMin) + ) + : Infinity; +} + +/** + * Positions the specified row of nodes. Modifies `rect`. + */ +function position(row, rowFixedLength, rect, halfGapWidth, flush) { + // When rowFixedLength === rect.width, + // it is horizontal subdivision, + // rowFixedLength is the width of the subdivision, + // rowOtherLength is the height of the subdivision, + // and nodes will be positioned from left to right. + + // wh[idx0WhenH] means: when horizontal, + // wh[idx0WhenH] => wh[0] => 'width'. + // xy[idx1WhenH] => xy[1] => 'y'. + var idx0WhenH = rowFixedLength === rect.width ? 0 : 1; + var idx1WhenH = 1 - idx0WhenH; + var xy = ['x', 'y']; + var wh = ['width', 'height']; + + var last = rect[xy[idx0WhenH]]; + var rowOtherLength = rowFixedLength + ? row.area / rowFixedLength : 0; + + if (flush || rowOtherLength > rect[wh[idx1WhenH]]) { + rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow + } + for (var i = 0, rowLen = row.length; i < rowLen; i++) { + var node = row[i]; + var nodeLayout = {}; + var step = rowOtherLength + ? node.getLayout().area / rowOtherLength : 0; + + var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$4(rowOtherLength - 2 * halfGapWidth, 0); + + // We use Math.max/min to avoid negative width/height when considering gap width. + var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last; + var modWH = (i === rowLen - 1 || remain < step) ? remain : step; + var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$4(modWH - 2 * halfGapWidth, 0); + + nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$4(halfGapWidth, wh1 / 2); + nodeLayout[xy[idx0WhenH]] = last + mathMin$4(halfGapWidth, wh0 / 2); + + last += modWH; + node.setLayout(nodeLayout, true); + } + + rect[xy[idx1WhenH]] += rowOtherLength; + rect[wh[idx1WhenH]] -= rowOtherLength; +} + +// Return [containerWidth, containerHeight] as defualt. +function estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) { + // If targetInfo.node exists, we zoom to the node, + // so estimate whold width and heigth by target node. + var currNode = (targetInfo || {}).node; + var defaultSize = [containerWidth, containerHeight]; + + if (!currNode || currNode === viewRoot) { + return defaultSize; + } + + var parent; + var viewArea = containerWidth * containerHeight; + var area = viewArea * seriesModel.option.zoomToNodeRatio; + + while (parent = currNode.parentNode) { // jshint ignore:line + var sum = 0; + var siblings = parent.children; + + for (var i = 0, len = siblings.length; i < len; i++) { + sum += siblings[i].getValue(); + } + var currNodeValue = currNode.getValue(); + if (currNodeValue === 0) { + return defaultSize; + } + area *= sum / currNodeValue; + + // Considering border, suppose aspect ratio is 1. + var parentModel = parent.getModel(); + var borderWidth = parentModel.get(PATH_BORDER_WIDTH); + var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel, borderWidth)); + area += 4 * borderWidth * borderWidth + + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5); + + area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER); + + currNode = parent; + } + + area < viewArea && (area = viewArea); + var scale = Math.pow(area / viewArea, 0.5); + + return [containerWidth * scale, containerHeight * scale]; +} + +// Root postion base on coord of containerGroup +function calculateRootPosition(layoutInfo, rootRect, targetInfo) { + if (rootRect) { + return {x: rootRect.x, y: rootRect.y}; + } + + var defaultPosition = {x: 0, y: 0}; + if (!targetInfo) { + return defaultPosition; + } + + // If targetInfo is fetched by 'retrieveTargetInfo', + // old tree and new tree are the same tree, + // so the node still exists and we can visit it. + + var targetNode = targetInfo.node; + var layout = targetNode.getLayout(); + + if (!layout) { + return defaultPosition; + } + + // Transform coord from local to container. + var targetCenter = [layout.width / 2, layout.height / 2]; + var node = targetNode; + while (node) { + var nodeLayout = node.getLayout(); + targetCenter[0] += nodeLayout.x; + targetCenter[1] += nodeLayout.y; + node = node.parentNode; + } + + return { + x: layoutInfo.width / 2 - targetCenter[0], + y: layoutInfo.height / 2 - targetCenter[1] + }; +} + +// Mark nodes visible for prunning when visual coding and rendering. +// Prunning depends on layout and root position, so we have to do it after layout. +function prunning(node, clipRect, viewAbovePath, viewRoot, depth) { + var nodeLayout = node.getLayout(); + var nodeInViewAbovePath = viewAbovePath[depth]; + var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node; + + if ( + (nodeInViewAbovePath && !isAboveViewRoot) + || (depth === viewAbovePath.length && node !== viewRoot) + ) { + return; + } + + node.setLayout({ + // isInView means: viewRoot sub tree + viewAbovePath + isInView: true, + // invisible only means: outside view clip so that the node can not + // see but still layout for animation preparation but not render. + invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout), + isAboveViewRoot: isAboveViewRoot + }, true); + + // Transform to child coordinate. + var childClipRect = new BoundingRect( + clipRect.x - nodeLayout.x, + clipRect.y - nodeLayout.y, + clipRect.width, + clipRect.height + ); + + each$13(node.viewChildren || [], function (child) { + prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1); + }); +} + +function getUpperLabelHeight(model) { + return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0; +} + +registerVisual(treemapVisual); +registerLayout(treemapLayout); + +/** + * Graph data structure + * + * @module echarts/data/Graph + * @author Yi Shen(https://www.github.com/pissang) + */ + +// id may be function name of Object, add a prefix to avoid this problem. +function generateNodeKey (id) { + return '_EC_' + id; +} +/** + * @alias module:echarts/data/Graph + * @constructor + * @param {boolean} directed + */ +var Graph = function(directed) { + /** + * 是否是有向图 + * @type {boolean} + * @private + */ + this._directed = directed || false; + + /** + * @type {Array.} + * @readOnly + */ + this.nodes = []; + + /** + * @type {Array.} + * @readOnly + */ + this.edges = []; + + /** + * @type {Object.} + * @private + */ + this._nodesMap = {}; + /** + * @type {Object.} + * @private + */ + this._edgesMap = {}; + + /** + * @type {module:echarts/data/List} + * @readOnly + */ + this.data; + + /** + * @type {module:echarts/data/List} + * @readOnly + */ + this.edgeData; +}; + +var graphProto = Graph.prototype; +/** + * @type {string} + */ +graphProto.type = 'graph'; + +/** + * If is directed graph + * @return {boolean} + */ +graphProto.isDirected = function () { + return this._directed; +}; + +/** + * Add a new node + * @param {string} id + * @param {number} [dataIndex] + */ +graphProto.addNode = function (id, dataIndex) { + id = id || ('' + dataIndex); + + var nodesMap = this._nodesMap; + + if (nodesMap[generateNodeKey(id)]) { + if (__DEV__) { + console.error('Graph nodes have duplicate name or id'); + } + return; + } + + var node = new Node(id, dataIndex); + node.hostGraph = this; + + this.nodes.push(node); + + nodesMap[generateNodeKey(id)] = node; + return node; +}; + +/** + * Get node by data index + * @param {number} dataIndex + * @return {module:echarts/data/Graph~Node} + */ +graphProto.getNodeByIndex = function (dataIndex) { + var rawIdx = this.data.getRawIndex(dataIndex); + return this.nodes[rawIdx]; +}; +/** + * Get node by id + * @param {string} id + * @return {module:echarts/data/Graph.Node} + */ +graphProto.getNodeById = function (id) { + return this._nodesMap[generateNodeKey(id)]; +}; + +/** + * Add a new edge + * @param {number|string|module:echarts/data/Graph.Node} n1 + * @param {number|string|module:echarts/data/Graph.Node} n2 + * @param {number} [dataIndex=-1] + * @return {module:echarts/data/Graph.Edge} + */ +graphProto.addEdge = function (n1, n2, dataIndex) { + var nodesMap = this._nodesMap; + var edgesMap = this._edgesMap; + + // PNEDING + if (typeof n1 === 'number') { + n1 = this.nodes[n1]; + } + if (typeof n2 === 'number') { + n2 = this.nodes[n2]; + } + + if (!(n1 instanceof Node)) { + n1 = nodesMap[generateNodeKey(n1)]; + } + if (!(n2 instanceof Node)) { + n2 = nodesMap[generateNodeKey(n2)]; + } + if (!n1 || !n2) { + return; + } + + var key = n1.id + '-' + n2.id; + // PENDING + if (edgesMap[key]) { + return; + } + + var edge = new Edge(n1, n2, dataIndex); + edge.hostGraph = this; + + if (this._directed) { + n1.outEdges.push(edge); + n2.inEdges.push(edge); + } + n1.edges.push(edge); + if (n1 !== n2) { + n2.edges.push(edge); + } + + this.edges.push(edge); + edgesMap[key] = edge; + + return edge; +}; + +/** + * Get edge by data index + * @param {number} dataIndex + * @return {module:echarts/data/Graph~Node} + */ +graphProto.getEdgeByIndex = function (dataIndex) { + var rawIdx = this.edgeData.getRawIndex(dataIndex); + return this.edges[rawIdx]; +}; +/** + * Get edge by two linked nodes + * @param {module:echarts/data/Graph.Node|string} n1 + * @param {module:echarts/data/Graph.Node|string} n2 + * @return {module:echarts/data/Graph.Edge} + */ +graphProto.getEdge = function (n1, n2) { + if (n1 instanceof Node) { + n1 = n1.id; + } + if (n2 instanceof Node) { + n2 = n2.id; + } + + var edgesMap = this._edgesMap; + + if (this._directed) { + return edgesMap[n1 + '-' + n2]; + } else { + return edgesMap[n1 + '-' + n2] + || edgesMap[n2 + '-' + n1]; + } +}; + +/** + * Iterate all nodes + * @param {Function} cb + * @param {*} [context] + */ +graphProto.eachNode = function (cb, context) { + var nodes = this.nodes; + var len = nodes.length; + for (var i = 0; i < len; i++) { + if (nodes[i].dataIndex >= 0) { + cb.call(context, nodes[i], i); + } + } +}; + +/** + * Iterate all edges + * @param {Function} cb + * @param {*} [context] + */ +graphProto.eachEdge = function (cb, context) { + var edges = this.edges; + var len = edges.length; + for (var i = 0; i < len; i++) { + if (edges[i].dataIndex >= 0 + && edges[i].node1.dataIndex >= 0 + && edges[i].node2.dataIndex >= 0 + ) { + cb.call(context, edges[i], i); + } + } +}; + +/** + * Breadth first traverse + * @param {Function} cb + * @param {module:echarts/data/Graph.Node} startNode + * @param {string} [direction='none'] 'none'|'in'|'out' + * @param {*} [context] + */ +graphProto.breadthFirstTraverse = function ( + cb, startNode, direction, context +) { + if (!(startNode instanceof Node)) { + startNode = this._nodesMap[generateNodeKey(startNode)]; + } + if (!startNode) { + return; + } + + var edgeType = direction === 'out' + ? 'outEdges' : (direction === 'in' ? 'inEdges' : 'edges'); + + for (var i = 0; i < this.nodes.length; i++) { + this.nodes[i].__visited = false; + } + + if (cb.call(context, startNode, null)) { + return; + } + + var queue = [startNode]; + while (queue.length) { + var currentNode = queue.shift(); + var edges = currentNode[edgeType]; + + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + var otherNode = e.node1 === currentNode + ? e.node2 : e.node1; + if (!otherNode.__visited) { + if (cb.call(context, otherNode, currentNode)) { + // Stop traversing + return; + } + queue.push(otherNode); + otherNode.__visited = true; + } + } + } +}; + +// TODO +// graphProto.depthFirstTraverse = function ( +// cb, startNode, direction, context +// ) { + +// }; + +// Filter update +graphProto.update = function () { + var data = this.data; + var edgeData = this.edgeData; + var nodes = this.nodes; + var edges = this.edges; + + for (var i = 0, len = nodes.length; i < len; i++) { + nodes[i].dataIndex = -1; + } + for (var i = 0, len = data.count(); i < len; i++) { + nodes[data.getRawIndex(i)].dataIndex = i; + } + + edgeData.filterSelf(function (idx) { + var edge = edges[edgeData.getRawIndex(idx)]; + return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0; + }); + + // Update edge + for (var i = 0, len = edges.length; i < len; i++) { + edges[i].dataIndex = -1; + } + for (var i = 0, len = edgeData.count(); i < len; i++) { + edges[edgeData.getRawIndex(i)].dataIndex = i; + } +}; + +/** + * @return {module:echarts/data/Graph} + */ +graphProto.clone = function () { + var graph = new Graph(this._directed); + var nodes = this.nodes; + var edges = this.edges; + for (var i = 0; i < nodes.length; i++) { + graph.addNode(nodes[i].id, nodes[i].dataIndex); + } + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + graph.addEdge(e.node1.id, e.node2.id, e.dataIndex); + } + return graph; +}; + + +/** + * @alias module:echarts/data/Graph.Node + */ +function Node(id, dataIndex) { + /** + * @type {string} + */ + this.id = id == null ? '' : id; + + /** + * @type {Array.} + */ + this.inEdges = []; + /** + * @type {Array.} + */ + this.outEdges = []; + /** + * @type {Array.} + */ + this.edges = []; + /** + * @type {module:echarts/data/Graph} + */ + this.hostGraph; + + /** + * @type {number} + */ + this.dataIndex = dataIndex == null ? -1 : dataIndex; +} + +Node.prototype = { + + constructor: Node, + + /** + * @return {number} + */ + degree: function () { + return this.edges.length; + }, + + /** + * @return {number} + */ + inDegree: function () { + return this.inEdges.length; + }, + + /** + * @return {number} + */ + outDegree: function () { + return this.outEdges.length; + }, + + /** + * @param {string} [path] + * @return {module:echarts/model/Model} + */ + getModel: function (path) { + if (this.dataIndex < 0) { + return; + } + var graph = this.hostGraph; + var itemModel = graph.data.getItemModel(this.dataIndex); + + return itemModel.getModel(path); + } +}; + +/** + * 图边 + * @alias module:echarts/data/Graph.Edge + * @param {module:echarts/data/Graph.Node} n1 + * @param {module:echarts/data/Graph.Node} n2 + * @param {number} [dataIndex=-1] + */ +function Edge(n1, n2, dataIndex) { + + /** + * 节点1,如果是有向图则为源节点 + * @type {module:echarts/data/Graph.Node} + */ + this.node1 = n1; + + /** + * 节点2,如果是有向图则为目标节点 + * @type {module:echarts/data/Graph.Node} + */ + this.node2 = n2; + + this.dataIndex = dataIndex == null ? -1 : dataIndex; +} + +/** + * @param {string} [path] + * @return {module:echarts/model/Model} + */ + Edge.prototype.getModel = function (path) { + if (this.dataIndex < 0) { + return; + } + var graph = this.hostGraph; + var itemModel = graph.edgeData.getItemModel(this.dataIndex); + + return itemModel.getModel(path); +}; + +var createGraphDataProxyMixin = function (hostName, dataName) { + return { + /** + * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'. + * @return {number} + */ + getValue: function (dimension) { + var data = this[hostName][dataName]; + return data.get(data.getDimension(dimension || 'value'), this.dataIndex); + }, + + /** + * @param {Object|string} key + * @param {*} [value] + */ + setVisual: function (key, value) { + this.dataIndex >= 0 + && this[hostName][dataName].setItemVisual(this.dataIndex, key, value); + }, + + /** + * @param {string} key + * @return {boolean} + */ + getVisual: function (key, ignoreParent) { + return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent); + }, + + /** + * @param {Object} layout + * @return {boolean} [merge=false] + */ + setLayout: function (layout, merge$$1) { + this.dataIndex >= 0 + && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge$$1); + }, + + /** + * @return {Object} + */ + getLayout: function () { + return this[hostName][dataName].getItemLayout(this.dataIndex); + }, + + /** + * @return {module:zrender/Element} + */ + getGraphicEl: function () { + return this[hostName][dataName].getItemGraphicEl(this.dataIndex); + }, + + /** + * @return {number} + */ + getRawIndex: function () { + return this[hostName][dataName].getRawIndex(this.dataIndex); + } + }; +}; + +mixin(Node, createGraphDataProxyMixin('hostGraph', 'data')); +mixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData')); + +Graph.Node = Node; +Graph.Edge = Edge; + +var createGraphFromNodeEdge = function (nodes, edges, hostModel, directed, beforeLink) { + var graph = new Graph(directed); + for (var i = 0; i < nodes.length; i++) { + graph.addNode(retrieve( + // Id, name, dataIndex + nodes[i].id, nodes[i].name, i + ), i); + } + + var linkNameList = []; + var validEdges = []; + var linkCount = 0; + for (var i = 0; i < edges.length; i++) { + var link = edges[i]; + var source = link.source; + var target = link.target; + // addEdge may fail when source or target not exists + if (graph.addEdge(source, target, linkCount)) { + validEdges.push(link); + linkNameList.push(retrieve(link.id, source + ' > ' + target)); + linkCount++; + } + } + + var coordSys = hostModel.get('coordinateSystem'); + var nodeData; + if (coordSys === 'cartesian2d' || coordSys === 'polar') { + nodeData = createListFromArray(nodes, hostModel, hostModel.ecModel); + } + else { + // FIXME + var coordSysCtor = CoordinateSystemManager.get(coordSys); + // FIXME + var dimensionNames = completeDimensions( + ((coordSysCtor && coordSysCtor.type !== 'view') ? (coordSysCtor.dimensions || []) : []).concat(['value']), + nodes + ); + nodeData = new List(dimensionNames, hostModel); + nodeData.initData(nodes); + } + + var edgeData = new List(['value'], hostModel); + edgeData.initData(validEdges, linkNameList); + + beforeLink && beforeLink(nodeData, edgeData); + + linkList({ + mainData: nodeData, + struct: graph, + structAttr: 'graph', + datas: {node: nodeData, edge: edgeData}, + datasAttr: {node: 'data', edge: 'edgeData'} + }); + + // Update dataIndex of nodes and edges because invalid edge may be removed + graph.update(); + + return graph; +}; + +var GraphSeries = extendSeriesModel({ + + type: 'series.graph', + + init: function (option) { + GraphSeries.superApply(this, 'init', arguments); + + // Provide data for legend select + this.legendDataProvider = function () { + return this._categoriesData; + }; + + this.fillDataTextStyle(option.edges || option.links); + + this._updateCategoriesData(); + }, + + mergeOption: function (option) { + GraphSeries.superApply(this, 'mergeOption', arguments); + + this.fillDataTextStyle(option.edges || option.links); + + this._updateCategoriesData(); + }, + + mergeDefaultAndTheme: function (option) { + GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments); + defaultEmphasis(option.edgeLabel, ['show']); + }, + + getInitialData: function (option, ecModel) { + var edges = option.edges || option.links || []; + var nodes = option.data || option.nodes || []; + var self = this; + + if (nodes && edges) { + return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data; + } + + function beforeLink(nodeData, edgeData) { + // Overwrite nodeData.getItemModel to + nodeData.wrapMethod('getItemModel', function (model) { + var categoriesModels = self._categoriesModels; + var categoryIdx = model.getShallow('category'); + var categoryModel = categoriesModels[categoryIdx]; + if (categoryModel) { + categoryModel.parentModel = model.parentModel; + model.parentModel = categoryModel; + } + return model; + }); + + var edgeLabelModel = self.getModel('edgeLabel'); + // For option `edgeLabel` can be found by label.xxx.xxx on item mode. + var fakeSeriesModel = new Model( + {label: edgeLabelModel.option}, + edgeLabelModel.parentModel, + ecModel + ); + + edgeData.wrapMethod('getItemModel', function (model) { + model.customizeGetParent(edgeGetParent); + return model; + }); + + function edgeGetParent(path) { + path = this.parsePath(path); + return (path && path[0] === 'label') + ? fakeSeriesModel + : this.parentModel; + } + } + }, + + /** + * @return {module:echarts/data/Graph} + */ + getGraph: function () { + return this.getData().graph; + }, + + /** + * @return {module:echarts/data/List} + */ + getEdgeData: function () { + return this.getGraph().edgeData; + }, + + /** + * @return {module:echarts/data/List} + */ + getCategoriesData: function () { + return this._categoriesData; + }, + + /** + * @override + */ + formatTooltip: function (dataIndex, multipleSeries, dataType) { + if (dataType === 'edge') { + var nodeData = this.getData(); + var params = this.getDataParams(dataIndex, dataType); + var edge = nodeData.graph.getEdgeByIndex(dataIndex); + var sourceName = nodeData.getName(edge.node1.dataIndex); + var targetName = nodeData.getName(edge.node2.dataIndex); + + var html = []; + sourceName != null && html.push(sourceName); + targetName != null && html.push(targetName); + html = encodeHTML(html.join(' > ')); + + if (params.value) { + html += ' : ' + encodeHTML(params.value); + } + return html; + } + else { // dataType === 'node' or empty + return GraphSeries.superApply(this, 'formatTooltip', arguments); + } + }, + + _updateCategoriesData: function () { + var categories = map(this.option.categories || [], function (category) { + // Data must has value + return category.value != null ? category : extend({ + value: 0 + }, category); + }); + var categoriesData = new List(['value'], this); + categoriesData.initData(categories); + + this._categoriesData = categoriesData; + + this._categoriesModels = categoriesData.mapArray(function (idx) { + return categoriesData.getItemModel(idx, true); + }); + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + }, + + isAnimationEnabled: function () { + return GraphSeries.superCall(this, 'isAnimationEnabled') + // Not enable animation when do force layout + && !(this.get('layout') === 'force' && this.get('force.layoutAnimation')); + }, + + defaultOption: { + zlevel: 0, + z: 2, + + coordinateSystem: 'view', + + // Default option for all coordinate systems + // xAxisIndex: 0, + // yAxisIndex: 0, + // polarIndex: 0, + // geoIndex: 0, + + legendHoverLink: true, + + hoverAnimation: true, + + layout: null, + + focusNodeAdjacency: false, + + // Configuration of circular layout + circular: { + rotateLabel: false + }, + // Configuration of force directed layout + force: { + initLayout: null, + // Node repulsion. Can be an array to represent range. + repulsion: [0, 50], + gravity: 0.1, + + // Edge length. Can be an array to represent range. + edgeLength: 30, + + layoutAnimation: true + }, + + left: 'center', + top: 'center', + // right: null, + // bottom: null, + // width: '80%', + // height: '80%', + + symbol: 'circle', + symbolSize: 10, + + edgeSymbol: ['none', 'none'], + edgeSymbolSize: 10, + edgeLabel: { + normal: { + position: 'middle' + }, + emphasis: {} + }, + + draggable: false, + + roam: false, + + // Default on center of graph + center: null, + + zoom: 1, + // Symbol size scale ratio in roam + nodeScaleRatio: 0.6, + // cursor: null, + + // categories: [], + + // data: [] + // Or + // nodes: [] + // + // links: [] + // Or + // edges: [] + + label: { + normal: { + show: false, + formatter: '{b}' + }, + emphasis: { + show: true + } + }, + + itemStyle: { + normal: {}, + emphasis: {} + }, + + lineStyle: { + normal: { + color: '#aaa', + width: 1, + curveness: 0, + opacity: 0.5 + }, + emphasis: {} + } + } +}); + +/** + * Line path for bezier and straight line draw + */ + +var straightLineProto = Line.prototype; +var bezierCurveProto = BezierCurve.prototype; + +function isLine(shape) { + return isNaN(+shape.cpx1) || isNaN(+shape.cpy1); +} + +var LinePath = extendShape({ + + type: 'ec-line', + + style: { + stroke: '#000', + fill: null + }, + + shape: { + x1: 0, + y1: 0, + x2: 0, + y2: 0, + percent: 1, + cpx1: null, + cpy1: null + }, + + buildPath: function (ctx, shape) { + (isLine(shape) ? straightLineProto : bezierCurveProto).buildPath(ctx, shape); + }, + + pointAt: function (t) { + return isLine(this.shape) + ? straightLineProto.pointAt.call(this, t) + : bezierCurveProto.pointAt.call(this, t); + }, + + tangentAt: function (t) { + var shape = this.shape; + var p = isLine(shape) + ? [shape.x2 - shape.x1, shape.y2 - shape.y1] + : bezierCurveProto.tangentAt.call(this, t); + return normalize(p, p); + } +}); + +/** + * @module echarts/chart/helper/Line + */ + +var SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol']; + +function makeSymbolTypeKey(symbolCategory) { + return '_' + symbolCategory + 'Type'; +} +/** + * @inner + */ +function createSymbol$1(name, lineData, idx) { + var color = lineData.getItemVisual(idx, 'color'); + var symbolType = lineData.getItemVisual(idx, name); + var symbolSize = lineData.getItemVisual(idx, name + 'Size'); + + if (!symbolType || symbolType === 'none') { + return; + } + + if (!isArray(symbolSize)) { + symbolSize = [symbolSize, symbolSize]; + } + var symbolPath = createSymbol( + symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2, + symbolSize[0], symbolSize[1], color + ); + + symbolPath.name = name; + + return symbolPath; +} + +function createLine(points) { + var line = new LinePath({ + name: 'line' + }); + setLinePoints(line.shape, points); + return line; +} + +function setLinePoints(targetShape, points) { + var p1 = points[0]; + var p2 = points[1]; + var cp1 = points[2]; + targetShape.x1 = p1[0]; + targetShape.y1 = p1[1]; + targetShape.x2 = p2[0]; + targetShape.y2 = p2[1]; + targetShape.percent = 1; + + if (cp1) { + targetShape.cpx1 = cp1[0]; + targetShape.cpy1 = cp1[1]; + } + else { + targetShape.cpx1 = NaN; + targetShape.cpy1 = NaN; + } +} + +function updateSymbolAndLabelBeforeLineUpdate () { + var lineGroup = this; + var symbolFrom = lineGroup.childOfName('fromSymbol'); + var symbolTo = lineGroup.childOfName('toSymbol'); + var label = lineGroup.childOfName('label'); + // Quick reject + if (!symbolFrom && !symbolTo && label.ignore) { + return; + } + + var invScale = 1; + var parentNode = this.parent; + while (parentNode) { + if (parentNode.scale) { + invScale /= parentNode.scale[0]; + } + parentNode = parentNode.parent; + } + + var line = lineGroup.childOfName('line'); + // If line not changed + // FIXME Parent scale changed + if (!this.__dirty && !line.__dirty) { + return; + } + + var percent = line.shape.percent; + var fromPos = line.pointAt(0); + var toPos = line.pointAt(percent); + + var d = sub([], toPos, fromPos); + normalize(d, d); + + if (symbolFrom) { + symbolFrom.attr('position', fromPos); + var tangent = line.tangentAt(0); + symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2( + tangent[1], tangent[0] + )); + symbolFrom.attr('scale', [invScale * percent, invScale * percent]); + } + if (symbolTo) { + symbolTo.attr('position', toPos); + var tangent = line.tangentAt(1); + symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2( + tangent[1], tangent[0] + )); + symbolTo.attr('scale', [invScale * percent, invScale * percent]); + } + + if (!label.ignore) { + label.attr('position', toPos); + + var textPosition; + var textAlign; + var textVerticalAlign; + + var distance$$1 = 5 * invScale; + // End + if (label.__position === 'end') { + textPosition = [d[0] * distance$$1 + toPos[0], d[1] * distance$$1 + toPos[1]]; + textAlign = d[0] > 0.8 ? 'left' : (d[0] < -0.8 ? 'right' : 'center'); + textVerticalAlign = d[1] > 0.8 ? 'top' : (d[1] < -0.8 ? 'bottom' : 'middle'); + } + // Middle + else if (label.__position === 'middle') { + var halfPercent = percent / 2; + var tangent = line.tangentAt(halfPercent); + var n = [tangent[1], -tangent[0]]; + var cp = line.pointAt(halfPercent); + if (n[1] > 0) { + n[0] = -n[0]; + n[1] = -n[1]; + } + textPosition = [cp[0] + n[0] * distance$$1, cp[1] + n[1] * distance$$1]; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + var rotation = -Math.atan2(tangent[1], tangent[0]); + if (toPos[0] < fromPos[0]) { + rotation = Math.PI + rotation; + } + label.attr('rotation', rotation); + } + // Start + else { + textPosition = [-d[0] * distance$$1 + fromPos[0], -d[1] * distance$$1 + fromPos[1]]; + textAlign = d[0] > 0.8 ? 'right' : (d[0] < -0.8 ? 'left' : 'center'); + textVerticalAlign = d[1] > 0.8 ? 'bottom' : (d[1] < -0.8 ? 'top' : 'middle'); + } + label.attr({ + style: { + // Use the user specified text align and baseline first + textVerticalAlign: label.__verticalAlign || textVerticalAlign, + textAlign: label.__textAlign || textAlign + }, + position: textPosition, + scale: [invScale, invScale] + }); + } +} + +/** + * @constructor + * @extends {module:zrender/graphic/Group} + * @alias {module:echarts/chart/helper/Line} + */ +function Line$1(lineData, idx, seriesScope) { + Group.call(this); + + this._createLine(lineData, idx, seriesScope); +} + +var lineProto = Line$1.prototype; + +// Update symbol position and rotation +lineProto.beforeUpdate = updateSymbolAndLabelBeforeLineUpdate; + +lineProto._createLine = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + var linePoints = lineData.getItemLayout(idx); + + var line = createLine(linePoints); + line.shape.percent = 0; + initProps(line, { + shape: { + percent: 1 + } + }, seriesModel, idx); + + this.add(line); + + var label = new Text({ + name: 'label' + }); + this.add(label); + + each$1(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbol = createSymbol$1(symbolCategory, lineData, idx); + // symbols must added after line to make sure + // it will be updated after line#update. + // Or symbol position and rotation update in line#beforeUpdate will be one frame slow + this.add(symbol); + this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory); + }, this); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +lineProto.updateData = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + + var line = this.childOfName('line'); + var linePoints = lineData.getItemLayout(idx); + var target = { + shape: {} + }; + setLinePoints(target.shape, linePoints); + updateProps(line, target, seriesModel, idx); + + each$1(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbolType = lineData.getItemVisual(idx, symbolCategory); + var key = makeSymbolTypeKey(symbolCategory); + // Symbol changed + if (this[key] !== symbolType) { + this.remove(this.childOfName(symbolCategory)); + var symbol = createSymbol$1(symbolCategory, lineData, idx); + this.add(symbol); + } + this[key] = symbolType; + }, this); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +lineProto._updateCommonStl = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + + var line = this.childOfName('line'); + + var lineStyle = seriesScope && seriesScope.lineStyle; + var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle; + var labelModel = seriesScope && seriesScope.labelModel; + var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel; + + // Optimization for large dataset + if (!seriesScope || lineData.hasItemOption) { + var itemModel = lineData.getItemModel(idx); + + lineStyle = itemModel.getModel('lineStyle.normal').getLineStyle(); + hoverLineStyle = itemModel.getModel('lineStyle.emphasis').getLineStyle(); + + labelModel = itemModel.getModel('label.normal'); + hoverLabelModel = itemModel.getModel('label.emphasis'); + } + + var visualColor = lineData.getItemVisual(idx, 'color'); + var visualOpacity = retrieve3( + lineData.getItemVisual(idx, 'opacity'), + lineStyle.opacity, + 1 + ); + + line.useStyle(defaults( + { + strokeNoScale: true, + fill: 'none', + stroke: visualColor, + opacity: visualOpacity + }, + lineStyle + )); + line.hoverStyle = hoverLineStyle; + + // Update symbol + each$1(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbol = this.childOfName(symbolCategory); + if (symbol) { + symbol.setColor(visualColor); + symbol.setStyle({ + opacity: visualOpacity + }); + } + }, this); + + var showLabel = labelModel.getShallow('show'); + var hoverShowLabel = hoverLabelModel.getShallow('show'); + + var label = this.childOfName('label'); + var defaultLabelColor; + var defaultText; + var normalText; + var emphasisText; + + if (showLabel || hoverShowLabel) { + var rawVal = seriesModel.getRawValue(idx); + defaultText = rawVal == null + ? defaultText = lineData.getName(idx) + : isFinite(rawVal) + ? round(rawVal) + : rawVal; + defaultLabelColor = visualColor || '#000'; + + normalText = retrieve2( + seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType), + defaultText + ); + emphasisText = retrieve2( + seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType), + normalText + ); + } + + // label.afterUpdate = lineAfterUpdate; + if (showLabel) { + var labelStyle = setTextStyle(label.style, labelModel, { + text: normalText + }, { + autoColor: defaultLabelColor + }); + + label.__textAlign = labelStyle.textAlign; + label.__verticalAlign = labelStyle.textVerticalAlign; + // 'start', 'middle', 'end' + label.__position = labelModel.get('position') || 'middle'; + } + else { + label.setStyle('text', null); + } + + if (hoverShowLabel) { + // Only these properties supported in this emphasis style here. + label.hoverStyle = { + text: emphasisText, + textFill: hoverLabelModel.getTextColor(true), + // For merging hover style to normal style, do not use + // `hoverLabelModel.getFont()` here. + fontStyle: hoverLabelModel.getShallow('fontStyle'), + fontWeight: hoverLabelModel.getShallow('fontWeight'), + fontSize: hoverLabelModel.getShallow('fontSize'), + fontFamily: hoverLabelModel.getShallow('fontFamily') + }; + } + else { + label.hoverStyle = { + text: null + }; + } + + label.ignore = !showLabel && !hoverShowLabel; + + setHoverStyle(this); +}; + +lineProto.highlight = function () { + this.trigger('emphasis'); +}; + +lineProto.downplay = function () { + this.trigger('normal'); +}; + +lineProto.updateLayout = function (lineData, idx) { + this.setLinePoints(lineData.getItemLayout(idx)); +}; + +lineProto.setLinePoints = function (points) { + var linePath = this.childOfName('line'); + setLinePoints(linePath.shape, points); + linePath.dirty(); +}; + +inherits(Line$1, Group); + +/** + * @module echarts/chart/helper/LineDraw + */ + +function isPointNaN(pt) { + return isNaN(pt[0]) || isNaN(pt[1]); +} +function lineNeedsDraw(pts) { + return !isPointNaN(pts[0]) && !isPointNaN(pts[1]); +} +/** + * @alias module:echarts/component/marker/LineDraw + * @constructor + */ +function LineDraw(ctor) { + this._ctor = ctor || Line$1; + this.group = new Group(); +} + +var lineDrawProto = LineDraw.prototype; + +/** + * @param {module:echarts/data/List} lineData + */ +lineDrawProto.updateData = function (lineData) { + + var oldLineData = this._lineData; + var group = this.group; + var LineCtor = this._ctor; + + var hostModel = lineData.hostModel; + + var seriesScope = { + lineStyle: hostModel.getModel('lineStyle.normal').getLineStyle(), + hoverLineStyle: hostModel.getModel('lineStyle.emphasis').getLineStyle(), + labelModel: hostModel.getModel('label.normal'), + hoverLabelModel: hostModel.getModel('label.emphasis') + }; + + lineData.diff(oldLineData) + .add(function (idx) { + if (!lineNeedsDraw(lineData.getItemLayout(idx))) { + return; + } + var lineGroup = new LineCtor(lineData, idx, seriesScope); + + lineData.setItemGraphicEl(idx, lineGroup); + + group.add(lineGroup); + }) + .update(function (newIdx, oldIdx) { + var lineGroup = oldLineData.getItemGraphicEl(oldIdx); + if (!lineNeedsDraw(lineData.getItemLayout(newIdx))) { + group.remove(lineGroup); + return; + } + + if (!lineGroup) { + lineGroup = new LineCtor(lineData, newIdx, seriesScope); + } + else { + lineGroup.updateData(lineData, newIdx, seriesScope); + } + + lineData.setItemGraphicEl(newIdx, lineGroup); + + group.add(lineGroup); + }) + .remove(function (idx) { + group.remove(oldLineData.getItemGraphicEl(idx)); + }) + .execute(); + + this._lineData = lineData; +}; + +lineDrawProto.updateLayout = function () { + var lineData = this._lineData; + lineData.eachItemGraphicEl(function (el, idx) { + el.updateLayout(lineData, idx); + }, this); +}; + +lineDrawProto.remove = function () { + this.group.removeAll(); +}; + +var v1 = []; +var v2 = []; +var v3 = []; +var quadraticAt$1 = quadraticAt; +var v2DistSquare = distSquare; +var mathAbs$1 = Math.abs; +function intersectCurveCircle(curvePoints, center, radius) { + var p0 = curvePoints[0]; + var p1 = curvePoints[1]; + var p2 = curvePoints[2]; + + var d = Infinity; + var t; + var radiusSquare = radius * radius; + var interval = 0.1; + + for (var _t = 0.1; _t <= 0.9; _t += 0.1) { + v1[0] = quadraticAt$1(p0[0], p1[0], p2[0], _t); + v1[1] = quadraticAt$1(p0[1], p1[1], p2[1], _t); + var diff = mathAbs$1(v2DistSquare(v1, center) - radiusSquare); + if (diff < d) { + d = diff; + t = _t; + } + } + + // Assume the segment is monotone,Find root through Bisection method + // At most 32 iteration + for (var i = 0; i < 32; i++) { + // var prev = t - interval; + var next = t + interval; + // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev); + // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev); + v2[0] = quadraticAt$1(p0[0], p1[0], p2[0], t); + v2[1] = quadraticAt$1(p0[1], p1[1], p2[1], t); + v3[0] = quadraticAt$1(p0[0], p1[0], p2[0], next); + v3[1] = quadraticAt$1(p0[1], p1[1], p2[1], next); + + var diff = v2DistSquare(v2, center) - radiusSquare; + if (mathAbs$1(diff) < 1e-2) { + break; + } + + // var prevDiff = v2DistSquare(v1, center) - radiusSquare; + var nextDiff = v2DistSquare(v3, center) - radiusSquare; + + interval /= 2; + if (diff < 0) { + if (nextDiff >= 0) { + t = t + interval; + } + else { + t = t - interval; + } + } + else { + if (nextDiff >= 0) { + t = t - interval; + } + else { + t = t + interval; + } + } + } + + return t; +} + +// Adjust edge to avoid +var adjustEdge = function (graph, scale$$1) { + var tmp0 = []; + var quadraticSubdivide$$1 = quadraticSubdivide; + var pts = [[], [], []]; + var pts2 = [[], []]; + var v = []; + scale$$1 /= 2; + + function getSymbolSize(node) { + var symbolSize = node.getVisual('symbolSize'); + if (symbolSize instanceof Array) { + symbolSize = (symbolSize[0] + symbolSize[1]) / 2; + } + return symbolSize; + } + graph.eachEdge(function (edge, idx) { + var linePoints = edge.getLayout(); + var fromSymbol = edge.getVisual('fromSymbol'); + var toSymbol = edge.getVisual('toSymbol'); + + if (!linePoints.__original) { + linePoints.__original = [ + clone$1(linePoints[0]), + clone$1(linePoints[1]) + ]; + if (linePoints[2]) { + linePoints.__original.push(clone$1(linePoints[2])); + } + } + var originalPoints = linePoints.__original; + // Quadratic curve + if (linePoints[2] != null) { + copy(pts[0], originalPoints[0]); + copy(pts[1], originalPoints[2]); + copy(pts[2], originalPoints[1]); + if (fromSymbol && fromSymbol != 'none') { + var symbolSize = getSymbolSize(edge.node1); + + var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale$$1); + // Subdivide and get the second + quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); + pts[0][0] = tmp0[3]; + pts[1][0] = tmp0[4]; + quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); + pts[0][1] = tmp0[3]; + pts[1][1] = tmp0[4]; + } + if (toSymbol && toSymbol != 'none') { + var symbolSize = getSymbolSize(edge.node2); + + var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale$$1); + // Subdivide and get the first + quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); + pts[1][0] = tmp0[1]; + pts[2][0] = tmp0[2]; + quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); + pts[1][1] = tmp0[1]; + pts[2][1] = tmp0[2]; + } + // Copy back to layout + copy(linePoints[0], pts[0]); + copy(linePoints[1], pts[2]); + copy(linePoints[2], pts[1]); + } + // Line + else { + copy(pts2[0], originalPoints[0]); + copy(pts2[1], originalPoints[1]); + + sub(v, pts2[1], pts2[0]); + normalize(v, v); + if (fromSymbol && fromSymbol != 'none') { + + var symbolSize = getSymbolSize(edge.node1); + + scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale$$1); + } + if (toSymbol && toSymbol != 'none') { + var symbolSize = getSymbolSize(edge.node2); + + scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale$$1); + } + copy(linePoints[0], pts2[0]); + copy(linePoints[1], pts2[1]); + } + }); +}; + +var nodeOpacityPath = ['itemStyle', 'normal', 'opacity']; +var lineOpacityPath = ['lineStyle', 'normal', 'opacity']; + +function getItemOpacity(item, opacityPath) { + return item.getVisual('opacity') || item.getModel().get(opacityPath); +} + +function fadeOutItem(item, opacityPath, opacityRatio) { + var el = item.getGraphicEl(); + + var opacity = getItemOpacity(item, opacityPath); + if (opacityRatio != null) { + opacity == null && (opacity = 1); + opacity *= opacityRatio; + } + + el.downplay && el.downplay(); + el.traverse(function (child) { + if (child.type !== 'group') { + child.setStyle('opacity', opacity); + } + }); +} + +function fadeInItem(item, opacityPath) { + var opacity = getItemOpacity(item, opacityPath); + var el = item.getGraphicEl(); + + el.highlight && el.highlight(); + el.traverse(function (child) { + if (child.type !== 'group') { + child.setStyle('opacity', opacity); + } + }); +} + +extendChartView({ + + type: 'graph', + + init: function (ecModel, api) { + var symbolDraw = new SymbolDraw(); + var lineDraw = new LineDraw(); + var group = this.group; + + this._controller = new RoamController(api.getZr()); + this._controllerHost = {target: group}; + + group.add(symbolDraw.group); + group.add(lineDraw.group); + + this._symbolDraw = symbolDraw; + this._lineDraw = lineDraw; + + this._firstRender = true; + }, + + render: function (seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + + this._model = seriesModel; + this._nodeScaleRatio = seriesModel.get('nodeScaleRatio'); + + var symbolDraw = this._symbolDraw; + var lineDraw = this._lineDraw; + + var group = this.group; + + if (coordSys.type === 'view') { + var groupNewProp = { + position: coordSys.position, + scale: coordSys.scale + }; + if (this._firstRender) { + group.attr(groupNewProp); + } + else { + updateProps(group, groupNewProp, seriesModel); + } + } + // Fix edge contact point with node + adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); + + var data = seriesModel.getData(); + symbolDraw.updateData(data); + + var edgeData = seriesModel.getEdgeData(); + lineDraw.updateData(edgeData); + + this._updateNodeAndLinkScale(); + + this._updateController(seriesModel, ecModel, api); + + clearTimeout(this._layoutTimeout); + var forceLayout = seriesModel.forceLayout; + var layoutAnimation = seriesModel.get('force.layoutAnimation'); + if (forceLayout) { + this._startForceLayoutIteration(forceLayout, layoutAnimation); + } + + data.eachItemGraphicEl(function (el, idx) { + var itemModel = data.getItemModel(idx); + // Update draggable + el.off('drag').off('dragend'); + var draggable = data.getItemModel(idx).get('draggable'); + if (draggable) { + el.on('drag', function () { + if (forceLayout) { + forceLayout.warmUp(); + !this._layouting + && this._startForceLayoutIteration(forceLayout, layoutAnimation); + forceLayout.setFixed(idx); + // Write position back to layout + data.setItemLayout(idx, el.position); + } + }, this).on('dragend', function () { + if (forceLayout) { + forceLayout.setUnfixed(idx); + } + }, this); + } + el.setDraggable(draggable && forceLayout); + + el.off('mouseover', el.__focusNodeAdjacency); + el.off('mouseout', el.__unfocusNodeAdjacency); + + if (itemModel.get('focusNodeAdjacency')) { + el.on('mouseover', el.__focusNodeAdjacency = function () { + api.dispatchAction({ + type: 'focusNodeAdjacency', + seriesId: seriesModel.id, + dataIndex: el.dataIndex + }); + }); + el.on('mouseout', el.__unfocusNodeAdjacency = function () { + api.dispatchAction({ + type: 'unfocusNodeAdjacency', + seriesId: seriesModel.id + }); + }); + + } + + }, this); + + data.graph.eachEdge(function (edge) { + var el = edge.getGraphicEl(); + + el.off('mouseover', el.__focusNodeAdjacency); + el.off('mouseout', el.__unfocusNodeAdjacency); + + if (edge.getModel().get('focusNodeAdjacency')) { + el.on('mouseover', el.__focusNodeAdjacency = function () { + api.dispatchAction({ + type: 'focusNodeAdjacency', + seriesId: seriesModel.id, + edgeDataIndex: edge.dataIndex + }); + }); + el.on('mouseout', el.__unfocusNodeAdjacency = function () { + api.dispatchAction({ + type: 'unfocusNodeAdjacency', + seriesId: seriesModel.id + }); + }); + } + }); + + var circularRotateLabel = seriesModel.get('layout') === 'circular' + && seriesModel.get('circular.rotateLabel'); + var cx = data.getLayout('cx'); + var cy = data.getLayout('cy'); + data.eachItemGraphicEl(function (el, idx) { + var symbolPath = el.getSymbolPath(); + if (circularRotateLabel) { + var pos = data.getItemLayout(idx); + var rad = Math.atan2(pos[1] - cy, pos[0] - cx); + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + var isLeft = pos[0] < cx; + if (isLeft) { + rad = rad - Math.PI; + } + var textPosition = isLeft ? 'left' : 'right'; + symbolPath.setStyle({ + textRotation: -rad, + textPosition: textPosition, + textOrigin: 'center' + }); + symbolPath.hoverStyle && (symbolPath.hoverStyle.textPosition = textPosition); + } + else { + symbolPath.setStyle({ + textRotation: 0 + }); + } + }); + + this._firstRender = false; + }, + + dispose: function () { + this._controller && this._controller.dispose(); + this._controllerHost = {}; + }, + + focusNodeAdjacency: function (seriesModel, ecModel, api, payload) { + var data = this._model.getData(); + var graph = data.graph; + var dataIndex = payload.dataIndex; + var edgeDataIndex = payload.edgeDataIndex; + + var node = graph.getNodeByIndex(dataIndex); + var edge = graph.getEdgeByIndex(edgeDataIndex); + + if (!node && !edge) { + return; + } + + graph.eachNode(function (node) { + fadeOutItem(node, nodeOpacityPath, 0.1); + }); + graph.eachEdge(function (edge) { + fadeOutItem(edge, lineOpacityPath, 0.1); + }); + + if (node) { + fadeInItem(node, nodeOpacityPath); + each$1(node.edges, function (adjacentEdge) { + if (adjacentEdge.dataIndex < 0) { + return; + } + fadeInItem(adjacentEdge, lineOpacityPath); + fadeInItem(adjacentEdge.node1, nodeOpacityPath); + fadeInItem(adjacentEdge.node2, nodeOpacityPath); + }); + } + if (edge) { + fadeInItem(edge, lineOpacityPath); + fadeInItem(edge.node1, nodeOpacityPath); + fadeInItem(edge.node2, nodeOpacityPath); + } + }, + + unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) { + var graph = this._model.getData().graph; + + graph.eachNode(function (node) { + fadeOutItem(node, nodeOpacityPath); + }); + graph.eachEdge(function (edge) { + fadeOutItem(edge, lineOpacityPath); + }); + }, + + _startForceLayoutIteration: function (forceLayout, layoutAnimation) { + var self = this; + (function step() { + forceLayout.step(function (stopped) { + self.updateLayout(self._model); + (self._layouting = !stopped) && ( + layoutAnimation + ? (self._layoutTimeout = setTimeout(step, 16)) + : step() + ); + }); + })(); + }, + + _updateController: function (seriesModel, ecModel, api) { + var controller = this._controller; + var controllerHost = this._controllerHost; + var group = this.group; + + controller.setPointerChecker(function (e, x, y) { + var rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) + && !onIrrelevantElement(e, api, seriesModel); + }); + + if (seriesModel.coordinateSystem.type !== 'view') { + controller.disable(); + return; + } + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); + + controller + .off('pan') + .off('zoom') + .on('pan', function (dx, dy) { + updateViewOnPan(controllerHost, dx, dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'graphRoam', + dx: dx, + dy: dy + }); + }) + .on('zoom', function (zoom, mouseX, mouseY) { + updateViewOnZoom(controllerHost, zoom, mouseX, mouseY); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'graphRoam', + zoom: zoom, + originX: mouseX, + originY: mouseY + }); + this._updateNodeAndLinkScale(); + adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); + this._lineDraw.updateLayout(); + }, this); + }, + + _updateNodeAndLinkScale: function () { + var seriesModel = this._model; + var data = seriesModel.getData(); + + var nodeScale = this._getNodeGlobalScale(seriesModel); + var invScale = [nodeScale, nodeScale]; + + data.eachItemGraphicEl(function (el, idx) { + el.attr('scale', invScale); + }); + }, + + _getNodeGlobalScale: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys.type !== 'view') { + return 1; + } + + var nodeScaleRatio = this._nodeScaleRatio; + + var groupScale = coordSys.scale; + var groupZoom = (groupScale && groupScale[0]) || 1; + // Scale node when zoom changes + var roamZoom = coordSys.getZoom(); + var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1; + + return nodeScale / groupZoom; + }, + + updateLayout: function (seriesModel) { + adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel)); + + this._symbolDraw.updateLayout(); + this._lineDraw.updateLayout(); + }, + + remove: function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(); + this._lineDraw && this._lineDraw.remove(); + } +}); + +var actionInfo = { + type: 'graphRoam', + event: 'graphRoam', + update: 'none' +}; + +/** + * @payload + * @property {string} name Series name + * @property {number} [dx] + * @property {number} [dy] + * @property {number} [zoom] + * @property {number} [originX] + * @property {number} [originY] + */ +registerAction(actionInfo, function (payload, ecModel) { + ecModel.eachComponent({mainType: 'series', query: payload}, function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + var res = updateCenterAndZoom(coordSys, payload); + + seriesModel.setCenter + && seriesModel.setCenter(res.center); + + seriesModel.setZoom + && seriesModel.setZoom(res.zoom); + }); +}); + + +/** + * @payload + * @property {number} [seriesIndex] + * @property {string} [seriesId] + * @property {string} [seriesName] + * @property {number} [dataIndex] + */ +registerAction({ + type: 'focusNodeAdjacency', + event: 'focusNodeAdjacency', + update: 'series.graph:focusNodeAdjacency' +}, function () {}); + +/** + * @payload + * @property {number} [seriesIndex] + * @property {string} [seriesId] + * @property {string} [seriesName] + */ +registerAction({ + type: 'unfocusNodeAdjacency', + event: 'unfocusNodeAdjacency', + update: 'series.graph:unfocusNodeAdjacency' +}, function () {}); + +var categoryFilter = function (ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + if (!legendModels || !legendModels.length) { + return; + } + ecModel.eachSeriesByType('graph', function (graphSeries) { + var categoriesData = graphSeries.getCategoriesData(); + var graph = graphSeries.getGraph(); + var data = graph.data; + + var categoryNames = categoriesData.mapArray(categoriesData.getName); + + data.filterSelf(function (idx) { + var model = data.getItemModel(idx); + var category = model.getShallow('category'); + if (category != null) { + if (typeof category === 'number') { + category = categoryNames[category]; + } + // If in any legend component the status is not selected. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(category)) { + return false; + } + } + } + return true; + }); + }, this); +}; + +var categoryVisual = function (ecModel) { + + var paletteScope = {}; + ecModel.eachSeriesByType('graph', function (seriesModel) { + var categoriesData = seriesModel.getCategoriesData(); + var data = seriesModel.getData(); + + var categoryNameIdxMap = {}; + + categoriesData.each(function (idx) { + var name = categoriesData.getName(idx); + // Add prefix to avoid conflict with Object.prototype. + categoryNameIdxMap['ec-' + name] = idx; + + var itemModel = categoriesData.getItemModel(idx); + var color = itemModel.get('itemStyle.normal.color') + || seriesModel.getColorFromPalette(name, paletteScope); + categoriesData.setItemVisual(idx, 'color', color); + }); + + // Assign category color to visual + if (categoriesData.count()) { + data.each(function (idx) { + var model = data.getItemModel(idx); + var category = model.getShallow('category'); + if (category != null) { + if (typeof category === 'string') { + category = categoryNameIdxMap['ec-' + category]; + } + if (!data.getItemVisual(idx, 'color', true)) { + data.setItemVisual( + idx, 'color', + categoriesData.getItemVisual(category, 'color') + ); + } + } + }); + } + }); +}; + +function normalize$1(a) { + if (!(a instanceof Array)) { + a = [a, a]; + } + return a; +} + +var edgeVisual = function (ecModel) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + var graph = seriesModel.getGraph(); + var edgeData = seriesModel.getEdgeData(); + var symbolType = normalize$1(seriesModel.get('edgeSymbol')); + var symbolSize = normalize$1(seriesModel.get('edgeSymbolSize')); + + var colorQuery = 'lineStyle.normal.color'.split('.'); + var opacityQuery = 'lineStyle.normal.opacity'.split('.'); + + edgeData.setVisual('fromSymbol', symbolType && symbolType[0]); + edgeData.setVisual('toSymbol', symbolType && symbolType[1]); + edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]); + edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]); + edgeData.setVisual('color', seriesModel.get(colorQuery)); + edgeData.setVisual('opacity', seriesModel.get(opacityQuery)); + + edgeData.each(function (idx) { + var itemModel = edgeData.getItemModel(idx); + var edge = graph.getEdgeByIndex(idx); + var symbolType = normalize$1(itemModel.getShallow('symbol', true)); + var symbolSize = normalize$1(itemModel.getShallow('symbolSize', true)); + // Edge visual must after node visual + var color = itemModel.get(colorQuery); + var opacity = itemModel.get(opacityQuery); + switch (color) { + case 'source': + color = edge.node1.getVisual('color'); + break; + case 'target': + color = edge.node2.getVisual('color'); + break; + } + + symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]); + symbolType[1] && edge.setVisual('toSymbol', symbolType[1]); + symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]); + symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]); + + edge.setVisual('color', color); + edge.setVisual('opacity', opacity); + }); + }); +}; + +function simpleLayout$1(seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + return; + } + var graph = seriesModel.getGraph(); + + graph.eachNode(function (node) { + var model = node.getModel(); + node.setLayout([+model.get('x'), +model.get('y')]); + }); + + simpleLayoutEdge(graph); +} + +function simpleLayoutEdge(graph) { + graph.eachEdge(function (edge) { + var curveness = edge.getModel().get('lineStyle.normal.curveness') || 0; + var p1 = clone$1(edge.node1.getLayout()); + var p2 = clone$1(edge.node2.getLayout()); + var points = [p1, p2]; + if (+curveness) { + points.push([ + (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, + (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness + ]); + } + edge.setLayout(points); + }); +} + +var simpleLayout = function (ecModel, api) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + var layout = seriesModel.get('layout'); + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + var data = seriesModel.getData(); + var dimensions = coordSys.dimensions; + + data.each(dimensions, function () { + var hasValue; + var args = arguments; + var value = []; + for (var i = 0; i < dimensions.length; i++) { + if (!isNaN(args[i])) { + hasValue = true; + } + value.push(args[i]); + } + var idx = args[args.length - 1]; + + if (hasValue) { + data.setItemLayout(idx, coordSys.dataToPoint(value)); + } + else { + // Also {Array.}, not undefined to avoid if...else... statement + data.setItemLayout(idx, [NaN, NaN]); + } + }); + + simpleLayoutEdge(data.graph); + } + else if (!layout || layout === 'none') { + simpleLayout$1(seriesModel); + } + }); +}; + +function circularLayout$1(seriesModel) { + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + return; + } + + var rect = coordSys.getBoundingRect(); + + var nodeData = seriesModel.getData(); + var graph = nodeData.graph; + + var angle = 0; + var sum = nodeData.getSum('value'); + var unitAngle = Math.PI * 2 / (sum || nodeData.count()); + + var cx = rect.width / 2 + rect.x; + var cy = rect.height / 2 + rect.y; + + var r = Math.min(rect.width, rect.height) / 2; + + graph.eachNode(function (node) { + var value = node.getValue('value'); + + angle += unitAngle * (sum ? value : 1) / 2; + + node.setLayout([ + r * Math.cos(angle) + cx, + r * Math.sin(angle) + cy + ]); + + angle += unitAngle * (sum ? value : 1) / 2; + }); + + nodeData.setLayout({ + cx: cx, + cy: cy + }); + + graph.eachEdge(function (edge) { + var curveness = edge.getModel().get('lineStyle.normal.curveness') || 0; + var p1 = clone$1(edge.node1.getLayout()); + var p2 = clone$1(edge.node2.getLayout()); + var cp1; + var x12 = (p1[0] + p2[0]) / 2; + var y12 = (p1[1] + p2[1]) / 2; + if (+curveness) { + curveness *= 3; + cp1 = [ + cx * curveness + x12 * (1 - curveness), + cy * curveness + y12 * (1 - curveness) + ]; + } + edge.setLayout([p1, p2, cp1]); + }); +} + +var circularLayout = function (ecModel) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + if (seriesModel.get('layout') === 'circular') { + circularLayout$1(seriesModel); + } + }); +}; + +var scaleAndAdd$2 = scaleAndAdd; + +// function adjacentNode(n, e) { +// return e.n1 === n ? e.n2 : e.n1; +// } + +function forceLayout$1(nodes, edges, opts) { + var rect = opts.rect; + var width = rect.width; + var height = rect.height; + var center = [rect.x + width / 2, rect.y + height / 2]; + // var scale = opts.scale || 1; + var gravity = opts.gravity == null ? 0.1 : opts.gravity; + + // for (var i = 0; i < edges.length; i++) { + // var e = edges[i]; + // var n1 = e.n1; + // var n2 = e.n2; + // n1.edges = n1.edges || []; + // n2.edges = n2.edges || []; + // n1.edges.push(e); + // n2.edges.push(e); + // } + // Init position + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + if (!n.p) { + // Use the position from first adjecent node with defined position + // Or use a random position + // From d3 + // if (n.edges) { + // var j = -1; + // while (++j < n.edges.length) { + // var e = n.edges[j]; + // var other = adjacentNode(n, e); + // if (other.p) { + // n.p = vec2.clone(other.p); + // break; + // } + // } + // } + // if (!n.p) { + n.p = create( + width * (Math.random() - 0.5) + center[0], + height * (Math.random() - 0.5) + center[1] + ); + // } + } + n.pp = clone$1(n.p); + n.edges = null; + } + + // Formula in 'Graph Drawing by Force-directed Placement' + // var k = scale * Math.sqrt(width * height / nodes.length); + // var k2 = k * k; + + var friction = 0.6; + + return { + warmUp: function () { + friction = 0.5; + }, + + setFixed: function (idx) { + nodes[idx].fixed = true; + }, + + setUnfixed: function (idx) { + nodes[idx].fixed = false; + }, + + step: function (cb) { + var v12 = []; + var nLen = nodes.length; + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + var n1 = e.n1; + var n2 = e.n2; + + sub(v12, n2.p, n1.p); + var d = len(v12) - e.d; + var w = n2.w / (n1.w + n2.w); + + if (isNaN(w)) { + w = 0; + } + + normalize(v12, v12); + + !n1.fixed && scaleAndAdd$2(n1.p, n1.p, v12, w * d * friction); + !n2.fixed && scaleAndAdd$2(n2.p, n2.p, v12, -(1 - w) * d * friction); + } + // Gravity + for (var i = 0; i < nLen; i++) { + var n = nodes[i]; + if (!n.fixed) { + sub(v12, center, n.p); + // var d = vec2.len(v12); + // vec2.scale(v12, v12, 1 / d); + // var gravityFactor = gravity; + scaleAndAdd$2(n.p, n.p, v12, gravity * friction); + } + } + + // Repulsive + // PENDING + for (var i = 0; i < nLen; i++) { + var n1 = nodes[i]; + for (var j = i + 1; j < nLen; j++) { + var n2 = nodes[j]; + sub(v12, n2.p, n1.p); + var d = len(v12); + if (d === 0) { + // Random repulse + set(v12, Math.random() - 0.5, Math.random() - 0.5); + d = 1; + } + var repFact = (n1.rep + n2.rep) / d / d; + !n1.fixed && scaleAndAdd$2(n1.pp, n1.pp, v12, repFact); + !n2.fixed && scaleAndAdd$2(n2.pp, n2.pp, v12, -repFact); + } + } + var v = []; + for (var i = 0; i < nLen; i++) { + var n = nodes[i]; + if (!n.fixed) { + sub(v, n.p, n.pp); + scaleAndAdd$2(n.p, n.p, v, friction); + copy(n.pp, n.p); + } + } + + friction = friction * 0.992; + + cb && cb(nodes, edges, friction < 0.01); + } + }; +} + +var forceLayout = function (ecModel) { + ecModel.eachSeriesByType('graph', function (graphSeries) { + var coordSys = graphSeries.coordinateSystem; + if (coordSys && coordSys.type !== 'view') { + return; + } + if (graphSeries.get('layout') === 'force') { + var preservedPoints = graphSeries.preservedPoints || {}; + var graph = graphSeries.getGraph(); + var nodeData = graph.data; + var edgeData = graph.edgeData; + var forceModel = graphSeries.getModel('force'); + var initLayout = forceModel.get('initLayout'); + if (graphSeries.preservedPoints) { + nodeData.each(function (idx) { + var id = nodeData.getId(idx); + nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]); + }); + } + else if (!initLayout || initLayout === 'none') { + simpleLayout$1(graphSeries); + } + else if (initLayout === 'circular') { + circularLayout$1(graphSeries); + } + + var nodeDataExtent = nodeData.getDataExtent('value'); + var edgeDataExtent = edgeData.getDataExtent('value'); + // var edgeDataExtent = edgeData.getDataExtent('value'); + var repulsion = forceModel.get('repulsion'); + var edgeLength = forceModel.get('edgeLength'); + if (!isArray(repulsion)) { + repulsion = [repulsion, repulsion]; + } + if (!isArray(edgeLength)) { + edgeLength = [edgeLength, edgeLength]; + } + // Larger value has smaller length + edgeLength = [edgeLength[1], edgeLength[0]]; + + var nodes = nodeData.mapArray('value', function (value, idx) { + var point = nodeData.getItemLayout(idx); + var rep = linearMap(value, nodeDataExtent, repulsion); + if (isNaN(rep)) { + rep = (repulsion[0] + repulsion[1]) / 2; + } + return { + w: rep, + rep: rep, + fixed: nodeData.getItemModel(idx).get('fixed'), + p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null : point + }; + }); + var edges = edgeData.mapArray('value', function (value, idx) { + var edge = graph.getEdgeByIndex(idx); + var d = linearMap(value, edgeDataExtent, edgeLength); + if (isNaN(d)) { + d = (edgeLength[0] + edgeLength[1]) / 2; + } + return { + n1: nodes[edge.node1.dataIndex], + n2: nodes[edge.node2.dataIndex], + d: d, + curveness: edge.getModel().get('lineStyle.normal.curveness') || 0 + }; + }); + + var coordSys = graphSeries.coordinateSystem; + var rect = coordSys.getBoundingRect(); + var forceInstance = forceLayout$1(nodes, edges, { + rect: rect, + gravity: forceModel.get('gravity') + }); + var oldStep = forceInstance.step; + forceInstance.step = function (cb) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].fixed) { + // Write back to layout instance + copy(nodes[i].p, graph.getNodeByIndex(i).getLayout()); + } + } + oldStep(function (nodes, edges, stopped) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (!nodes[i].fixed) { + graph.getNodeByIndex(i).setLayout(nodes[i].p); + } + preservedPoints[nodeData.getId(i)] = nodes[i].p; + } + for (var i = 0, l = edges.length; i < l; i++) { + var e = edges[i]; + var edge = graph.getEdgeByIndex(i); + var p1 = e.n1.p; + var p2 = e.n2.p; + var points = edge.getLayout(); + points = points ? points.slice() : []; + points[0] = points[0] || []; + points[1] = points[1] || []; + copy(points[0], p1); + copy(points[1], p2); + if (+e.curveness) { + points[2] = [ + (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, + (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness + ]; + } + edge.setLayout(points); + } + // Update layout + + cb && cb(stopped); + }); + }; + graphSeries.forceLayout = forceInstance; + graphSeries.preservedPoints = preservedPoints; + + // Step to get the layout + forceInstance.step(); + } + else { + // Remove prev injected forceLayout instance + graphSeries.forceLayout = null; + } + }); +}; + +// FIXME Where to create the simple view coordinate system +function getViewRect$1(seriesModel, api, aspect) { + var option = seriesModel.getBoxLayoutParams(); + option.aspect = aspect; + return getLayoutRect(option, { + width: api.getWidth(), + height: api.getHeight() + }); +} + +var createView = function (ecModel, api) { + var viewList = []; + ecModel.eachSeriesByType('graph', function (seriesModel) { + var coordSysType = seriesModel.get('coordinateSystem'); + if (!coordSysType || coordSysType === 'view') { + + var data = seriesModel.getData(); + var positions = data.mapArray(function (idx) { + var itemModel = data.getItemModel(idx); + return [+itemModel.get('x'), +itemModel.get('y')]; + }); + + var min = []; + var max = []; + + fromPoints(positions, min, max); + + // If width or height is 0 + if (max[0] - min[0] === 0) { + max[0] += 1; + min[0] -= 1; + } + if (max[1] - min[1] === 0) { + max[1] += 1; + min[1] -= 1; + } + var aspect = (max[0] - min[0]) / (max[1] - min[1]); + // FIXME If get view rect after data processed? + var viewRect = getViewRect$1(seriesModel, api, aspect); + // Position may be NaN, use view rect instead + if (isNaN(aspect)) { + min = [viewRect.x, viewRect.y]; + max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height]; + } + + var bbWidth = max[0] - min[0]; + var bbHeight = max[1] - min[1]; + + var viewWidth = viewRect.width; + var viewHeight = viewRect.height; + + var viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + + viewCoordSys.setBoundingRect( + min[0], min[1], bbWidth, bbHeight + ); + viewCoordSys.setViewRect( + viewRect.x, viewRect.y, viewWidth, viewHeight + ); + + // Update roam info + viewCoordSys.setCenter(seriesModel.get('center')); + viewCoordSys.setZoom(seriesModel.get('zoom')); + + viewList.push(viewCoordSys); + } + }); + + return viewList; +}; + +registerProcessor(categoryFilter); + +registerVisual(curry( + visualSymbol, 'graph', 'circle', null +)); +registerVisual(categoryVisual); +registerVisual(edgeVisual); + +registerLayout(simpleLayout); +registerLayout(circularLayout); +registerLayout(forceLayout); + +// Graph view coordinate system +registerCoordinateSystem('graphView', { + create: createView +}); + +var GaugeSeries = SeriesModel.extend({ + + type: 'series.gauge', + + getInitialData: function (option, ecModel) { + var list = new List(['value'], this); + var dataOpt = option.data || []; + if (!isArray(dataOpt)) { + dataOpt = [dataOpt]; + } + // Only use the first data item + list.initData(dataOpt); + return list; + }, + + defaultOption: { + zlevel: 0, + z: 2, + // 默认全局居中 + center: ['50%', '50%'], + legendHoverLink: true, + radius: '75%', + startAngle: 225, + endAngle: -45, + clockwise: true, + // 最小值 + min: 0, + // 最大值 + max: 100, + // 分割段数,默认为10 + splitNumber: 10, + // 坐标轴线 + axisLine: { + // 默认显示,属性show控制显示与否 + show: true, + lineStyle: { // 属性lineStyle控制线条样式 + color: [[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']], + width: 30 + } + }, + // 分隔线 + splitLine: { + // 默认显示,属性show控制显示与否 + show: true, + // 属性length控制线长 + length: 30, + // 属性lineStyle(详见lineStyle)控制线条样式 + lineStyle: { + color: '#eee', + width: 2, + type: 'solid' + } + }, + // 坐标轴小标记 + axisTick: { + // 属性show控制显示与否,默认不显示 + show: true, + // 每份split细分多少段 + splitNumber: 5, + // 属性length控制线长 + length: 8, + // 属性lineStyle控制线条样式 + lineStyle: { + color: '#eee', + width: 1, + type: 'solid' + } + }, + axisLabel: { + show: true, + distance: 5, + // formatter: null, + color: 'auto' + }, + pointer: { + show: true, + length: '80%', + width: 8 + }, + itemStyle: { + normal: { + color: 'auto' + } + }, + title: { + show: true, + // x, y,单位px + offsetCenter: [0, '-40%'], + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#333', + fontSize: 15 + }, + detail: { + show: true, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 0, + borderColor: '#ccc', + width: 100, + height: null, // self-adaption + padding: [5, 10], + // x, y,单位px + offsetCenter: [0, '40%'], + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: 'auto', + fontSize: 30 + } + } +}); + +var PointerPath = Path.extend({ + + type: 'echartsGaugePointer', + + shape: { + angle: 0, + + width: 10, + + r: 10, + + x: 0, + + y: 0 + }, + + buildPath: function (ctx, shape) { + var mathCos = Math.cos; + var mathSin = Math.sin; + + var r = shape.r; + var width = shape.width; + var angle = shape.angle; + var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2); + var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2); + + angle = shape.angle - Math.PI / 2; + ctx.moveTo(x, y); + ctx.lineTo( + shape.x + mathCos(angle) * width, + shape.y + mathSin(angle) * width + ); + ctx.lineTo( + shape.x + mathCos(shape.angle) * r, + shape.y + mathSin(shape.angle) * r + ); + ctx.lineTo( + shape.x - mathCos(angle) * width, + shape.y - mathSin(angle) * width + ); + ctx.lineTo(x, y); + return; + } +}); + +function parsePosition(seriesModel, api) { + var center = seriesModel.get('center'); + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], api.getWidth()); + var cy = parsePercent$1(center[1], api.getHeight()); + var r = parsePercent$1(seriesModel.get('radius'), size / 2); + + return { + cx: cx, + cy: cy, + r: r + }; +} + +function formatLabel(label, labelFormatter) { + if (labelFormatter) { + if (typeof labelFormatter === 'string') { + label = labelFormatter.replace('{value}', label != null ? label : ''); + } + else if (typeof labelFormatter === 'function') { + label = labelFormatter(label); + } + } + + return label; +} + +var PI2$5 = Math.PI * 2; + +var GaugeView = Chart.extend({ + + type: 'gauge', + + render: function (seriesModel, ecModel, api) { + + this.group.removeAll(); + + var colorList = seriesModel.get('axisLine.lineStyle.color'); + var posInfo = parsePosition(seriesModel, api); + + this._renderMain( + seriesModel, ecModel, api, colorList, posInfo + ); + }, + + dispose: function () {}, + + _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) { + var group = this.group; + + var axisLineModel = seriesModel.getModel('axisLine'); + var lineStyleModel = axisLineModel.getModel('lineStyle'); + + var clockwise = seriesModel.get('clockwise'); + var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI; + var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI; + + var angleRangeSpan = (endAngle - startAngle) % PI2$5; + + var prevEndAngle = startAngle; + var axisLineWidth = lineStyleModel.get('width'); + + for (var i = 0; i < colorList.length; i++) { + // Clamp + var percent = Math.min(Math.max(colorList[i][0], 0), 1); + var endAngle = startAngle + angleRangeSpan * percent; + var sector = new Sector({ + shape: { + startAngle: prevEndAngle, + endAngle: endAngle, + cx: posInfo.cx, + cy: posInfo.cy, + clockwise: clockwise, + r0: posInfo.r - axisLineWidth, + r: posInfo.r + }, + silent: true + }); + + sector.setStyle({ + fill: colorList[i][1] + }); + + sector.setStyle(lineStyleModel.getLineStyle( + // Because we use sector to simulate arc + // so the properties for stroking are useless + ['color', 'borderWidth', 'borderColor'] + )); + + group.add(sector); + + prevEndAngle = endAngle; + } + + var getColor = function (percent) { + // Less than 0 + if (percent <= 0) { + return colorList[0][1]; + } + for (var i = 0; i < colorList.length; i++) { + if (colorList[i][0] >= percent + && (i === 0 ? 0 : colorList[i - 1][0]) < percent + ) { + return colorList[i][1]; + } + } + // More than 1 + return colorList[i - 1][1]; + }; + + if (!clockwise) { + var tmp = startAngle; + startAngle = endAngle; + endAngle = tmp; + } + + this._renderTicks( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ); + + this._renderPointer( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ); + + this._renderTitle( + seriesModel, ecModel, api, getColor, posInfo + ); + this._renderDetail( + seriesModel, ecModel, api, getColor, posInfo + ); + }, + + _renderTicks: function ( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ) { + var group = this.group; + var cx = posInfo.cx; + var cy = posInfo.cy; + var r = posInfo.r; + + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + + var splitLineModel = seriesModel.getModel('splitLine'); + var tickModel = seriesModel.getModel('axisTick'); + var labelModel = seriesModel.getModel('axisLabel'); + + var splitNumber = seriesModel.get('splitNumber'); + var subSplitNumber = tickModel.get('splitNumber'); + + var splitLineLen = parsePercent$1( + splitLineModel.get('length'), r + ); + var tickLen = parsePercent$1( + tickModel.get('length'), r + ); + + var angle = startAngle; + var step = (endAngle - startAngle) / splitNumber; + var subStep = step / subSplitNumber; + + var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle(); + var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle(); + + for (var i = 0; i <= splitNumber; i++) { + var unitX = Math.cos(angle); + var unitY = Math.sin(angle); + // Split line + if (splitLineModel.get('show')) { + var splitLine = new Line({ + shape: { + x1: unitX * r + cx, + y1: unitY * r + cy, + x2: unitX * (r - splitLineLen) + cx, + y2: unitY * (r - splitLineLen) + cy + }, + style: splitLineStyle, + silent: true + }); + if (splitLineStyle.stroke === 'auto') { + splitLine.setStyle({ + stroke: getColor(i / splitNumber) + }); + } + + group.add(splitLine); + } + + // Label + if (labelModel.get('show')) { + var label = formatLabel( + round(i / splitNumber * (maxVal - minVal) + minVal), + labelModel.get('formatter') + ); + var distance = labelModel.get('distance'); + var autoColor = getColor(i / splitNumber); + + group.add(new Text({ + style: setTextStyle({}, labelModel, { + text: label, + x: unitX * (r - splitLineLen - distance) + cx, + y: unitY * (r - splitLineLen - distance) + cy, + textVerticalAlign: unitY < -0.4 ? 'top' : (unitY > 0.4 ? 'bottom' : 'middle'), + textAlign: unitX < -0.4 ? 'left' : (unitX > 0.4 ? 'right' : 'center') + }, {autoColor: autoColor}), + silent: true + })); + } + + // Axis tick + if (tickModel.get('show') && i !== splitNumber) { + for (var j = 0; j <= subSplitNumber; j++) { + var unitX = Math.cos(angle); + var unitY = Math.sin(angle); + var tickLine = new Line({ + shape: { + x1: unitX * r + cx, + y1: unitY * r + cy, + x2: unitX * (r - tickLen) + cx, + y2: unitY * (r - tickLen) + cy + }, + silent: true, + style: tickLineStyle + }); + + if (tickLineStyle.stroke === 'auto') { + tickLine.setStyle({ + stroke: getColor((i + j / subSplitNumber) / splitNumber) + }); + } + + group.add(tickLine); + angle += subStep; + } + angle -= subStep; + } + else { + angle += step; + } + } + }, + + _renderPointer: function ( + seriesModel, ecModel, api, getColor, posInfo, + startAngle, endAngle, clockwise + ) { + + var group = this.group; + var oldData = this._data; + + if (!seriesModel.get('pointer.show')) { + // Remove old element + oldData && oldData.eachItemGraphicEl(function (el) { + group.remove(el); + }); + return; + } + + var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')]; + var angleExtent = [startAngle, endAngle]; + + var data = seriesModel.getData(); + + data.diff(oldData) + .add(function (idx) { + var pointer = new PointerPath({ + shape: { + angle: startAngle + } + }); + + initProps(pointer, { + shape: { + angle: linearMap(data.get('value', idx), valueExtent, angleExtent, true) + } + }, seriesModel); + + group.add(pointer); + data.setItemGraphicEl(idx, pointer); + }) + .update(function (newIdx, oldIdx) { + var pointer = oldData.getItemGraphicEl(oldIdx); + + updateProps(pointer, { + shape: { + angle: linearMap(data.get('value', newIdx), valueExtent, angleExtent, true) + } + }, seriesModel); + + group.add(pointer); + data.setItemGraphicEl(newIdx, pointer); + }) + .remove(function (idx) { + var pointer = oldData.getItemGraphicEl(idx); + group.remove(pointer); + }) + .execute(); + + data.eachItemGraphicEl(function (pointer, idx) { + var itemModel = data.getItemModel(idx); + var pointerModel = itemModel.getModel('pointer'); + + pointer.setShape({ + x: posInfo.cx, + y: posInfo.cy, + width: parsePercent$1( + pointerModel.get('width'), posInfo.r + ), + r: parsePercent$1(pointerModel.get('length'), posInfo.r) + }); + + pointer.useStyle(itemModel.getModel('itemStyle.normal').getItemStyle()); + + if (pointer.style.fill === 'auto') { + pointer.setStyle('fill', getColor( + linearMap(data.get('value', idx), valueExtent, [0, 1], true) + )); + } + + setHoverStyle( + pointer, itemModel.getModel('itemStyle.emphasis').getItemStyle() + ); + }); + + this._data = data; + }, + + _renderTitle: function ( + seriesModel, ecModel, api, getColor, posInfo + ) { + var titleModel = seriesModel.getModel('title'); + if (titleModel.get('show')) { + var offsetCenter = titleModel.get('offsetCenter'); + var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r); + var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r); + + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + var value = seriesModel.getData().get('value', 0); + var autoColor = getColor( + linearMap(value, [minVal, maxVal], [0, 1], true) + ); + + this.group.add(new Text({ + silent: true, + style: setTextStyle({}, titleModel, { + x: x, + y: y, + // FIXME First data name ? + text: seriesModel.getData().getName(0), + textAlign: 'center', + textVerticalAlign: 'middle' + }, {autoColor: autoColor, forceRich: true}) + })); + } + }, + + _renderDetail: function ( + seriesModel, ecModel, api, getColor, posInfo + ) { + var detailModel = seriesModel.getModel('detail'); + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + if (detailModel.get('show')) { + var offsetCenter = detailModel.get('offsetCenter'); + var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r); + var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r); + var width = parsePercent$1(detailModel.get('width'), posInfo.r); + var height = parsePercent$1(detailModel.get('height'), posInfo.r); + var value = seriesModel.getData().get('value', 0); + var autoColor = getColor( + linearMap(value, [minVal, maxVal], [0, 1], true) + ); + + this.group.add(new Text({ + silent: true, + style: setTextStyle({}, detailModel, { + x: x, + y: y, + text: formatLabel( + // FIXME First data name ? + value, detailModel.get('formatter') + ), + textWidth: isNaN(width) ? null : width, + textHeight: isNaN(height) ? null : height, + textAlign: 'center', + textVerticalAlign: 'middle' + }, {autoColor: autoColor, forceRich: true}) + })); + } + } +}); + +var FunnelSeries = extendSeriesModel({ + + type: 'series.funnel', + + init: function (option) { + FunnelSeries.superApply(this, 'init', arguments); + + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + // Extend labelLine emphasis + this._defaultLabelLine(option); + }, + + getInitialData: function (option, ecModel) { + var dimensions = completeDimensions(['value'], option.data); + var list = new List(dimensions, this); + list.initData(option.data); + return list; + }, + + _defaultLabelLine: function (option) { + // Extend labelLine emphasis + defaultEmphasis(option.labelLine, ['show']); + + var labelLineNormalOpt = option.labelLine.normal; + var labelLineEmphasisOpt = option.labelLine.emphasis; + // Not show label line if `label.normal.show = false` + labelLineNormalOpt.show = labelLineNormalOpt.show + && option.label.normal.show; + labelLineEmphasisOpt.show = labelLineEmphasisOpt.show + && option.label.emphasis.show; + }, + + // Overwrite + getDataParams: function (dataIndex) { + var data = this.getData(); + var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex); + var sum = data.getSum('value'); + // Percent is 0 if sum is 0 + params.percent = !sum ? 0 : +(data.get('value', dataIndex) / sum * 100).toFixed(2); + + params.$vars.push('percent'); + return params; + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + legendHoverLink: true, + left: 80, + top: 60, + right: 80, + bottom: 60, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + + // 默认取数据最小最大值 + // min: 0, + // max: 100, + minSize: '0%', + maxSize: '100%', + sort: 'descending', // 'ascending', 'descending' + gap: 0, + funnelAlign: 'center', + label: { + normal: { + show: true, + position: 'outer' + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + }, + emphasis: { + show: true + } + }, + labelLine: { + normal: { + show: true, + length: 20, + lineStyle: { + // color: 各异, + width: 1, + type: 'solid' + } + }, + emphasis: {} + }, + itemStyle: { + normal: { + // color: 各异, + borderColor: '#fff', + borderWidth: 1 + }, + emphasis: { + // color: 各异, + } + } + } +}); + +/** + * Piece of pie including Sector, Label, LabelLine + * @constructor + * @extends {module:zrender/graphic/Group} + */ +function FunnelPiece(data, idx) { + + Group.call(this); + + var polygon = new Polygon(); + var labelLine = new Polyline(); + var text = new Text(); + this.add(polygon); + this.add(labelLine); + this.add(text); + + this.updateData(data, idx, true); + + // Hover to change label and labelLine + function onEmphasis() { + labelLine.ignore = labelLine.hoverIgnore; + text.ignore = text.hoverIgnore; + } + function onNormal() { + labelLine.ignore = labelLine.normalIgnore; + text.ignore = text.normalIgnore; + } + this.on('emphasis', onEmphasis) + .on('normal', onNormal) + .on('mouseover', onEmphasis) + .on('mouseout', onNormal); +} + +var funnelPieceProto = FunnelPiece.prototype; + +var opacityAccessPath = ['itemStyle', 'normal', 'opacity']; +funnelPieceProto.updateData = function (data, idx, firstCreate) { + + var polygon = this.childAt(0); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var opacity = data.getItemModel(idx).get(opacityAccessPath); + opacity = opacity == null ? 1 : opacity; + + // Reset style + polygon.useStyle({}); + + if (firstCreate) { + polygon.setShape({ + points: layout.points + }); + polygon.setStyle({ opacity : 0 }); + initProps(polygon, { + style: { + opacity: opacity + } + }, seriesModel, idx); + } + else { + updateProps(polygon, { + style: { + opacity: opacity + }, + shape: { + points: layout.points + } + }, seriesModel, idx); + } + + // Update common style + var itemStyleModel = itemModel.getModel('itemStyle'); + var visualColor = data.getItemVisual(idx, 'color'); + + polygon.setStyle( + defaults( + { + lineJoin: 'round', + fill: visualColor + }, + itemStyleModel.getModel('normal').getItemStyle(['opacity']) + ) + ); + polygon.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle(); + + this._updateLabel(data, idx); + + setHoverStyle(this); +}; + +funnelPieceProto._updateLabel = function (data, idx) { + + var labelLine = this.childAt(1); + var labelText = this.childAt(2); + + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var labelLayout = layout.label; + var visualColor = data.getItemVisual(idx, 'color'); + + updateProps(labelLine, { + shape: { + points: labelLayout.linePoints || labelLayout.linePoints + } + }, seriesModel, idx); + + updateProps(labelText, { + style: { + x: labelLayout.x, + y: labelLayout.y + } + }, seriesModel, idx); + labelText.attr({ + rotation: labelLayout.rotation, + origin: [labelLayout.x, labelLayout.y], + z2: 10 + }); + + var labelModel = itemModel.getModel('label.normal'); + var labelHoverModel = itemModel.getModel('label.emphasis'); + var labelLineModel = itemModel.getModel('labelLine.normal'); + var labelLineHoverModel = itemModel.getModel('labelLine.emphasis'); + var visualColor = data.getItemVisual(idx, 'color'); + + setLabelStyle( + labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, + { + labelFetcher: data.hostModel, + labelDataIndex: idx, + defaultText: data.getName(idx), + autoColor: visualColor, + useInsideStyle: !!labelLayout.inside + }, + { + textAlign: labelLayout.textAlign, + textVerticalAlign: labelLayout.verticalAlign + } + ); + + labelText.ignore = labelText.normalIgnore = !labelModel.get('show'); + labelText.hoverIgnore = !labelHoverModel.get('show'); + + labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show'); + labelLine.hoverIgnore = !labelLineHoverModel.get('show'); + + // Default use item visual color + labelLine.setStyle({ + stroke: visualColor + }); + labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle()); + + labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle(); +}; + +inherits(FunnelPiece, Group); + + +var FunnelView = Chart.extend({ + + type: 'funnel', + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var oldData = this._data; + + var group = this.group; + + data.diff(oldData) + .add(function (idx) { + var funnelPiece = new FunnelPiece(data, idx); + + data.setItemGraphicEl(idx, funnelPiece); + + group.add(funnelPiece); + }) + .update(function (newIdx, oldIdx) { + var piePiece = oldData.getItemGraphicEl(oldIdx); + + piePiece.updateData(data, newIdx); + + group.add(piePiece); + data.setItemGraphicEl(newIdx, piePiece); + }) + .remove(function (idx) { + var piePiece = oldData.getItemGraphicEl(idx); + group.remove(piePiece); + }) + .execute(); + + this._data = data; + }, + + remove: function () { + this.group.removeAll(); + this._data = null; + }, + + dispose: function () {} +}); + +function getViewRect$2(seriesModel, api) { + return getLayoutRect( + seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + } + ); +} + +function getSortedIndices(data, sort) { + var valueArr = data.mapArray('value', function (val) { + return val; + }); + var indices = []; + var isAscending = sort === 'ascending'; + for (var i = 0, len = data.count(); i < len; i++) { + indices[i] = i; + } + + // Add custom sortable function & none sortable opetion by "options.sort" + if (typeof sort === 'function') { + indices.sort(sort); + } else if (sort !== 'none') { + indices.sort(function (a, b) { + return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a]; + }); + } + return indices; +} + +function labelLayout$1(data) { + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var labelModel = itemModel.getModel('label.normal'); + var labelPosition = labelModel.get('position'); + + var labelLineModel = itemModel.getModel('labelLine.normal'); + + var layout = data.getItemLayout(idx); + var points = layout.points; + + var isLabelInside = labelPosition === 'inner' + || labelPosition === 'inside' || labelPosition === 'center'; + + var textAlign; + var textX; + var textY; + var linePoints; + + if (isLabelInside) { + textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4; + textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4; + textAlign = 'center'; + linePoints = [ + [textX, textY], [textX, textY] + ]; + } + else { + var x1; + var y1; + var x2; + var labelLineLen = labelLineModel.get('length'); + if (labelPosition === 'left') { + // Left side + x1 = (points[3][0] + points[0][0]) / 2; + y1 = (points[3][1] + points[0][1]) / 2; + x2 = x1 - labelLineLen; + textX = x2 - 5; + textAlign = 'right'; + } + else { + // Right side + x1 = (points[1][0] + points[2][0]) / 2; + y1 = (points[1][1] + points[2][1]) / 2; + x2 = x1 + labelLineLen; + textX = x2 + 5; + textAlign = 'left'; + } + var y2 = y1; + + linePoints = [[x1, y1], [x2, y2]]; + textY = y2; + } + + layout.label = { + linePoints: linePoints, + x: textX, + y: textY, + verticalAlign: 'middle', + textAlign: textAlign, + inside: isLabelInside + }; + }); +} + +var funnelLayout = function (ecModel, api, payload) { + ecModel.eachSeriesByType('funnel', function (seriesModel) { + var data = seriesModel.getData(); + var sort = seriesModel.get('sort'); + var viewRect = getViewRect$2(seriesModel, api); + var indices = getSortedIndices(data, sort); + + var sizeExtent = [ + parsePercent$1(seriesModel.get('minSize'), viewRect.width), + parsePercent$1(seriesModel.get('maxSize'), viewRect.width) + ]; + var dataExtent = data.getDataExtent('value'); + var min = seriesModel.get('min'); + var max = seriesModel.get('max'); + if (min == null) { + min = Math.min(dataExtent[0], 0); + } + if (max == null) { + max = dataExtent[1]; + } + + var funnelAlign = seriesModel.get('funnelAlign'); + var gap = seriesModel.get('gap'); + var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count(); + + var y = viewRect.y; + + var getLinePoints = function (idx, offY) { + // End point index is data.count() and we assign it 0 + var val = data.get('value', idx) || 0; + var itemWidth = linearMap(val, [min, max], sizeExtent, true); + var x0; + switch (funnelAlign) { + case 'left': + x0 = viewRect.x; + break; + case 'center': + x0 = viewRect.x + (viewRect.width - itemWidth) / 2; + break; + case 'right': + x0 = viewRect.x + viewRect.width - itemWidth; + break; + } + return [ + [x0, offY], + [x0 + itemWidth, offY] + ]; + }; + + if (sort === 'ascending') { + // From bottom to top + itemHeight = -itemHeight; + gap = -gap; + y += viewRect.height; + indices = indices.reverse(); + } + + for (var i = 0; i < indices.length; i++) { + var idx = indices[i]; + var nextIdx = indices[i + 1]; + var start = getLinePoints(idx, y); + var end = getLinePoints(nextIdx, y + itemHeight); + + y += itemHeight + gap; + + data.setItemLayout(idx, { + points: start.concat(end.slice().reverse()) + }); + } + + labelLayout$1(data); + }); +}; + +registerVisual(curry(dataColor, 'funnel')); +registerLayout(funnelLayout); +registerProcessor(curry(dataFilter, 'funnel')); + +var parallelPreprocessor = function (option) { + createParallelIfNeeded(option); + mergeAxisOptionFromParallel(option); +}; + +/** + * Create a parallel coordinate if not exists. + * @inner + */ +function createParallelIfNeeded(option) { + if (option.parallel) { + return; + } + + var hasParallelSeries = false; + + each$1(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'parallel') { + hasParallelSeries = true; + } + }); + + if (hasParallelSeries) { + option.parallel = [{}]; + } +} + +/** + * Merge aixs definition from parallel option (if exists) to axis option. + * @inner + */ +function mergeAxisOptionFromParallel(option) { + var axes = normalizeToArray(option.parallelAxis); + + each$1(axes, function (axisOption) { + if (!isObject(axisOption)) { + return; + } + + var parallelIndex = axisOption.parallelIndex || 0; + var parallelOption = normalizeToArray(option.parallel)[parallelIndex]; + + if (parallelOption && parallelOption.parallelAxisDefault) { + merge(axisOption, parallelOption.parallelAxisDefault, false); + } + }); +} + +/** + * @constructor module:echarts/coord/parallel/ParallelAxis + * @extends {module:echarts/coord/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + */ +var ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) { + + Axis.call(this, dim, scale, coordExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * @type {number} + * @readOnly + */ + this.axisIndex = axisIndex; +}; + +ParallelAxis.prototype = { + + constructor: ParallelAxis, + + /** + * Axis model + * @param {module:echarts/coord/parallel/AxisModel} + */ + model: null, + + /** + * @override + */ + isHorizontal: function () { + return this.coordinateSystem.getModel().get('layout') !== 'horizontal'; + } + +}; + +inherits(ParallelAxis, Axis); + +/** + * Calculate slider move result. + * Usage: + * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as + * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`. + * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`. + * + * @param {number} delta Move length. + * @param {Array.} handleEnds handleEnds[0] can be bigger then handleEnds[1]. + * handleEnds will be modified in this method. + * @param {Array.} extent handleEnds is restricted by extent. + * extent[0] should less or equals than extent[1]. + * @param {number|string} handleIndex Can be 'all', means that both move the two handleEnds, + * where the input minSpan and maxSpan will not work. + * @param {number} [minSpan] The range of dataZoom can not be smaller than that. + * If not set, handle0 and cross handle1. If set as a non-negative + * number (including `0`), handles will push each other when reaching + * the minSpan. + * @param {number} [maxSpan] The range of dataZoom can not be larger than that. + * @return {Array.} The input handleEnds. + */ +var sliderMove = function (delta, handleEnds, extent, handleIndex, minSpan, maxSpan) { + // Normalize firstly. + handleEnds[0] = restrict$1(handleEnds[0], extent); + handleEnds[1] = restrict$1(handleEnds[1], extent); + + delta = delta || 0; + + var extentSpan = extent[1] - extent[0]; + + // Notice maxSpan and minSpan can be null/undefined. + if (minSpan != null) { + minSpan = restrict$1(minSpan, [0, extentSpan]); + } + if (maxSpan != null) { + maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0); + } + if (handleIndex === 'all') { + minSpan = maxSpan = Math.abs(handleEnds[1] - handleEnds[0]); + handleIndex = 0; + } + + var originalDistSign = getSpanSign(handleEnds, handleIndex); + + handleEnds[handleIndex] += delta; + + // Restrict in extent. + var extentMinSpan = minSpan || 0; + var realExtent = extent.slice(); + originalDistSign.sign < 0 ? (realExtent[0] += extentMinSpan) : (realExtent[1] -= extentMinSpan); + handleEnds[handleIndex] = restrict$1(handleEnds[handleIndex], realExtent); + + // Expand span. + var currDistSign = getSpanSign(handleEnds, handleIndex); + if (minSpan != null && ( + currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan + )) { + // If minSpan exists, 'cross' is forbinden. + handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan; + } + + // Shrink span. + var currDistSign = getSpanSign(handleEnds, handleIndex); + if (maxSpan != null && currDistSign.span > maxSpan) { + handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan; + } + + return handleEnds; +}; + +function getSpanSign(handleEnds, handleIndex) { + var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex]; + // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0] + // is at left of handleEnds[1] for non-cross case. + return {span: Math.abs(dist), sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1}; +} + +function restrict$1(value, extend) { + return Math.min(extend[1], Math.max(extend[0], value)); +} + +/** + * Parallel Coordinates + * + */ + +var each$14 = each$1; +var mathMin$5 = Math.min; +var mathMax$5 = Math.max; +var mathFloor$2 = Math.floor; +var mathCeil$2 = Math.ceil; +var round$2 = round; + +var PI$3 = Math.PI; + +function Parallel(parallelModel, ecModel, api) { + + /** + * key: dimension + * @type {Object.} + * @private + */ + this._axesMap = createHashMap(); + + /** + * key: dimension + * value: {position: [], rotation, } + * @type {Object.} + * @private + */ + this._axesLayout = {}; + + /** + * Always follow axis order. + * @type {Array.} + * @readOnly + */ + this.dimensions = parallelModel.dimensions; + + /** + * @type {module:zrender/core/BoundingRect} + */ + this._rect; + + /** + * @type {module:echarts/coord/parallel/ParallelModel} + */ + this._model = parallelModel; + + this._init(parallelModel, ecModel, api); +} + +Parallel.prototype = { + + type: 'parallel', + + constructor: Parallel, + + /** + * Initialize cartesian coordinate systems + * @private + */ + _init: function (parallelModel, ecModel, api) { + + var dimensions = parallelModel.dimensions; + var parallelAxisIndex = parallelModel.parallelAxisIndex; + + each$14(dimensions, function (dim, idx) { + + var axisIndex = parallelAxisIndex[idx]; + var axisModel = ecModel.getComponent('parallelAxis', axisIndex); + + var axis = this._axesMap.set(dim, new ParallelAxis( + dim, + createScaleByModel(axisModel), + [0, 0], + axisModel.get('type'), + axisIndex + )); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + + // Injection + axisModel.axis = axis; + axis.model = axisModel; + axis.coordinateSystem = axisModel.coordinateSystem = this; + + }, this); + }, + + /** + * Update axis scale after data processed + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + update: function (ecModel, api) { + this._updateAxesFromSeries(this._model, ecModel); + }, + + /** + * @override + */ + containPoint: function (point) { + var layoutInfo = this._makeLayoutInfo(); + var axisBase = layoutInfo.axisBase; + var layoutBase = layoutInfo.layoutBase; + var pixelDimIndex = layoutInfo.pixelDimIndex; + var pAxis = point[1 - pixelDimIndex]; + var pLayout = point[pixelDimIndex]; + + return pAxis >= axisBase + && pAxis <= axisBase + layoutInfo.axisLength + && pLayout >= layoutBase + && pLayout <= layoutBase + layoutInfo.layoutLength; + }, + + getModel: function () { + return this._model; + }, + + /** + * Update properties from series + * @private + */ + _updateAxesFromSeries: function (parallelModel, ecModel) { + ecModel.eachSeries(function (seriesModel) { + + if (!parallelModel.contains(seriesModel, ecModel)) { + return; + } + + var data = seriesModel.getData(); + + each$14(this.dimensions, function (dim) { + var axis = this._axesMap.get(dim); + axis.scale.unionExtentFromData(data, dim); + niceScaleExtent(axis.scale, axis.model); + }, this); + }, this); + }, + + /** + * Resize the parallel coordinate system. + * @param {module:echarts/coord/parallel/ParallelModel} parallelModel + * @param {module:echarts/ExtensionAPI} api + */ + resize: function (parallelModel, api) { + this._rect = getLayoutRect( + parallelModel.getBoxLayoutParams(), + { + width: api.getWidth(), + height: api.getHeight() + } + ); + + this._layoutAxes(); + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getRect: function () { + return this._rect; + }, + + /** + * @private + */ + _makeLayoutInfo: function () { + var parallelModel = this._model; + var rect = this._rect; + var xy = ['x', 'y']; + var wh = ['width', 'height']; + var layout = parallelModel.get('layout'); + var pixelDimIndex = layout === 'horizontal' ? 0 : 1; + var layoutLength = rect[wh[pixelDimIndex]]; + var layoutExtent = [0, layoutLength]; + var axisCount = this.dimensions.length; + + var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent); + var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]); + var axisExpandable = parallelModel.get('axisExpandable') + && axisCount > 3 + && axisCount > axisExpandCount + && axisExpandCount > 1 + && axisExpandWidth > 0 + && layoutLength > 0; + + // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength], + // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow), + // where collapsed axes should be overlapped. + var axisExpandWindow = parallelModel.get('axisExpandWindow'); + var winSize; + if (!axisExpandWindow) { + winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent); + var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor$2(axisCount / 2); + axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2]; + axisExpandWindow[1] = axisExpandWindow[0] + winSize; + } + else { + winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent); + axisExpandWindow[1] = axisExpandWindow[0] + winSize; + } + + var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount); + // Avoid axisCollapseWidth is too small. + axisCollapseWidth < 3 && (axisCollapseWidth = 0); + + // Find the first and last indices > ewin[0] and < ewin[1]. + var winInnerIndices = [ + mathFloor$2(round$2(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, + mathCeil$2(round$2(axisExpandWindow[1] / axisExpandWidth, 1)) - 1 + ]; + + // Pos in ec coordinates. + var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0]; + + return { + layout: layout, + pixelDimIndex: pixelDimIndex, + layoutBase: rect[xy[pixelDimIndex]], + layoutLength: layoutLength, + axisBase: rect[xy[1 - pixelDimIndex]], + axisLength: rect[wh[1 - pixelDimIndex]], + axisExpandable: axisExpandable, + axisExpandWidth: axisExpandWidth, + axisCollapseWidth: axisCollapseWidth, + axisExpandWindow: axisExpandWindow, + axisCount: axisCount, + winInnerIndices: winInnerIndices, + axisExpandWindow0Pos: axisExpandWindow0Pos + }; + }, + + /** + * @private + */ + _layoutAxes: function () { + var rect = this._rect; + var axes = this._axesMap; + var dimensions = this.dimensions; + var layoutInfo = this._makeLayoutInfo(); + var layout = layoutInfo.layout; + + axes.each(function (axis) { + var axisExtent = [0, layoutInfo.axisLength]; + var idx = axis.inverse ? 1 : 0; + axis.setExtent(axisExtent[idx], axisExtent[1 - idx]); + }); + + each$14(dimensions, function (dim, idx) { + var posInfo = (layoutInfo.axisExpandable + ? layoutAxisWithExpand : layoutAxisWithoutExpand + )(idx, layoutInfo); + + var positionTable = { + horizontal: { + x: posInfo.position, + y: layoutInfo.axisLength + }, + vertical: { + x: 0, + y: posInfo.position + } + }; + var rotationTable = { + horizontal: PI$3 / 2, + vertical: 0 + }; + + var position = [ + positionTable[layout].x + rect.x, + positionTable[layout].y + rect.y + ]; + + var rotation = rotationTable[layout]; + var transform = create$1(); + rotate(transform, transform, rotation); + translate(transform, transform, position); + + // TODO + // tick等排布信息。 + + // TODO + // 根据axis order 更新 dimensions顺序。 + + this._axesLayout[dim] = { + position: position, + rotation: rotation, + transform: transform, + axisNameAvailableWidth: posInfo.axisNameAvailableWidth, + axisLabelShow: posInfo.axisLabelShow, + nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth, + tickDirection: 1, + labelDirection: 1, + labelInterval: axes.get(dim).getLabelInterval() + }; + }, this); + }, + + /** + * Get axis by dim. + * @param {string} dim + * @return {module:echarts/coord/parallel/ParallelAxis} [description] + */ + getAxis: function (dim) { + return this._axesMap.get(dim); + }, + + /** + * Convert a dim value of a single item of series data to Point. + * @param {*} value + * @param {string} dim + * @return {Array} + */ + dataToPoint: function (value, dim) { + return this.axisCoordToPoint( + this._axesMap.get(dim).dataToCoord(value), + dim + ); + }, + + /** + * Travel data for one time, get activeState of each data item. + * @param {module:echarts/data/List} data + * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal' + * {number} dataIndex + * @param {Object} context + */ + eachActiveState: function (data, callback, context) { + var dimensions = this.dimensions; + var axesMap = this._axesMap; + var hasActiveSet = this.hasAxisBrushed(); + + for (var i = 0, len = data.count(); i < len; i++) { + var values = data.getValues(dimensions, i); + var activeState; + + if (!hasActiveSet) { + activeState = 'normal'; + } + else { + activeState = 'active'; + for (var j = 0, lenj = dimensions.length; j < lenj; j++) { + var dimName = dimensions[j]; + var state = axesMap.get(dimName).model.getActiveState(values[j], j); + + if (state === 'inactive') { + activeState = 'inactive'; + break; + } + } + } + + callback.call(context, activeState, i); + } + }, + + /** + * Whether has any activeSet. + * @return {boolean} + */ + hasAxisBrushed: function () { + var dimensions = this.dimensions; + var axesMap = this._axesMap; + var hasActiveSet = false; + + for (var j = 0, lenj = dimensions.length; j < lenj; j++) { + if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') { + hasActiveSet = true; + } + } + + return hasActiveSet; + }, + + /** + * Convert coords of each axis to Point. + * Return point. For example: [10, 20] + * @param {Array.} coords + * @param {string} dim + * @return {Array.} + */ + axisCoordToPoint: function (coord, dim) { + var axisLayout = this._axesLayout[dim]; + return applyTransform$1([coord, 0], axisLayout.transform); + }, + + /** + * Get axis layout. + */ + getAxisLayout: function (dim) { + return clone(this._axesLayout[dim]); + }, + + /** + * @param {Array.} point + * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}. + */ + getSlidedAxisExpandWindow: function (point) { + var layoutInfo = this._makeLayoutInfo(); + var pixelDimIndex = layoutInfo.pixelDimIndex; + var axisExpandWindow = layoutInfo.axisExpandWindow.slice(); + var winSize = axisExpandWindow[1] - axisExpandWindow[0]; + var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)]; + + // Out of the area of coordinate system. + if (!this.containPoint(point)) { + return {behavior: 'none', axisExpandWindow: axisExpandWindow}; + } + + // Conver the point from global to expand coordinates. + var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; + + // For dragging operation convenience, the window should not be + // slided when mouse is the center area of the window. + var delta; + var behavior = 'slide'; + var axisCollapseWidth = layoutInfo.axisCollapseWidth; + var triggerArea = this._model.get('axisExpandSlideTriggerArea'); + // But consider touch device, jump is necessary. + var useJump = triggerArea[0] != null; + + if (axisCollapseWidth) { + if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) { + behavior = 'jump'; + delta = pointCoord - winSize * triggerArea[2]; + } + else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) { + behavior = 'jump'; + delta = pointCoord - winSize * (1 - triggerArea[2]); + } + else { + (delta = pointCoord - winSize * triggerArea[1]) >= 0 + && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 + && (delta = 0); + } + delta *= layoutInfo.axisExpandWidth / axisCollapseWidth; + delta + ? sliderMove(delta, axisExpandWindow, extent, 'all') + // Avoid nonsense triger on mousemove. + : (behavior = 'none'); + } + // When screen is too narrow, make it visible and slidable, although it is hard to interact. + else { + var winSize = axisExpandWindow[1] - axisExpandWindow[0]; + var pos = extent[1] * pointCoord / winSize; + axisExpandWindow = [mathMax$5(0, pos - winSize / 2)]; + axisExpandWindow[1] = mathMin$5(extent[1], axisExpandWindow[0] + winSize); + axisExpandWindow[0] = axisExpandWindow[1] - winSize; + } + + return { + axisExpandWindow: axisExpandWindow, + behavior: behavior + }; + } +}; + +function restrict(len, extent) { + return mathMin$5(mathMax$5(len, extent[0]), extent[1]); +} + +function layoutAxisWithoutExpand(axisIndex, layoutInfo) { + var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1); + return { + position: step * axisIndex, + axisNameAvailableWidth: step, + axisLabelShow: true + }; +} + +function layoutAxisWithExpand(axisIndex, layoutInfo) { + var layoutLength = layoutInfo.layoutLength; + var axisExpandWidth = layoutInfo.axisExpandWidth; + var axisCount = layoutInfo.axisCount; + var axisCollapseWidth = layoutInfo.axisCollapseWidth; + var winInnerIndices = layoutInfo.winInnerIndices; + + var position; + var axisNameAvailableWidth = axisCollapseWidth; + var axisLabelShow = false; + var nameTruncateMaxWidth; + + if (axisIndex < winInnerIndices[0]) { + position = axisIndex * axisCollapseWidth; + nameTruncateMaxWidth = axisCollapseWidth; + } + else if (axisIndex <= winInnerIndices[1]) { + position = layoutInfo.axisExpandWindow0Pos + + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0]; + axisNameAvailableWidth = axisExpandWidth; + axisLabelShow = true; + } + else { + position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth; + nameTruncateMaxWidth = axisCollapseWidth; + } + + return { + position: position, + axisNameAvailableWidth: axisNameAvailableWidth, + axisLabelShow: axisLabelShow, + nameTruncateMaxWidth: nameTruncateMaxWidth + }; +} + +/** + * Parallel coordinate system creater. + */ + +function create$2(ecModel, api) { + var coordSysList = []; + + ecModel.eachComponent('parallel', function (parallelModel, idx) { + var coordSys = new Parallel(parallelModel, ecModel, api); + + coordSys.name = 'parallel_' + idx; + coordSys.resize(parallelModel, api); + + parallelModel.coordinateSystem = coordSys; + coordSys.model = parallelModel; + + coordSysList.push(coordSys); + }); + + // Inject the coordinateSystems into seriesModel + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'parallel') { + var parallelModel = ecModel.queryComponents({ + mainType: 'parallel', + index: seriesModel.get('parallelIndex'), + id: seriesModel.get('parallelId') + })[0]; + seriesModel.coordinateSystem = parallelModel.coordinateSystem; + } + }); + + return coordSysList; +} + +CoordinateSystemManager.register('parallel', {create: create$2}); + +var AxisModel$2 = ComponentModel.extend({ + + type: 'baseParallelAxis', + + /** + * @type {module:echarts/coord/parallel/Axis} + */ + axis: null, + + /** + * @type {Array.} + * @readOnly + */ + activeIntervals: [], + + /** + * @return {Object} + */ + getAreaSelectStyle: function () { + return makeStyleMapper( + [ + ['fill', 'color'], + ['lineWidth', 'borderWidth'], + ['stroke', 'borderColor'], + ['width', 'width'], + ['opacity', 'opacity'] + ] + )(this.getModel('areaSelectStyle')); + }, + + /** + * The code of this feature is put on AxisModel but not ParallelAxis, + * because axisModel can be alive after echarts updating but instance of + * ParallelAxis having been disposed. this._activeInterval should be kept + * when action dispatched (i.e. legend click). + * + * @param {Array.>} intervals interval.length === 0 + * means set all active. + * @public + */ + setActiveIntervals: function (intervals) { + var activeIntervals = this.activeIntervals = clone(intervals); + + // Normalize + if (activeIntervals) { + for (var i = activeIntervals.length - 1; i >= 0; i--) { + asc(activeIntervals[i]); + } + } + }, + + /** + * @param {number|string} [value] When attempting to detect 'no activeIntervals set', + * value can not be input. + * @return {string} 'normal': no activeIntervals set, + * 'active', + * 'inactive'. + * @public + */ + getActiveState: function (value) { + var activeIntervals = this.activeIntervals; + + if (!activeIntervals.length) { + return 'normal'; + } + + if (value == null) { + return 'inactive'; + } + + for (var i = 0, len = activeIntervals.length; i < len; i++) { + if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) { + return 'active'; + } + } + return 'inactive'; + } + +}); + +var defaultOption$1 = { + + type: 'value', + + /** + * @type {Array.} + */ + dim: null, // 0, 1, 2, ... + + // parallelIndex: null, + + areaSelectStyle: { + width: 20, + borderWidth: 1, + borderColor: 'rgba(160,197,232)', + color: 'rgba(160,197,232)', + opacity: 0.3 + }, + + realtime: true, // Whether realtime update view when select. + + z: 10 +}; + +merge(AxisModel$2.prototype, axisModelCommonMixin); + +function getAxisType$1(axisName, option) { + return option.type || (option.data ? 'category' : 'value'); +} + +axisModelCreator('parallel', AxisModel$2, getAxisType$1, defaultOption$1); + +ComponentModel.extend({ + + type: 'parallel', + + dependencies: ['parallelAxis'], + + /** + * @type {module:echarts/coord/parallel/Parallel} + */ + coordinateSystem: null, + + /** + * Each item like: 'dim0', 'dim1', 'dim2', ... + * @type {Array.} + * @readOnly + */ + dimensions: null, + + /** + * Coresponding to dimensions. + * @type {Array.} + * @readOnly + */ + parallelAxisIndex: null, + + layoutMode: 'box', + + defaultOption: { + zlevel: 0, + z: 0, + left: 80, + top: 60, + right: 80, + bottom: 60, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + + layout: 'horizontal', // 'horizontal' or 'vertical' + + // FIXME + // naming? + axisExpandable: false, + axisExpandCenter: null, + axisExpandCount: 0, + axisExpandWidth: 50, // FIXME '10%' ? + axisExpandRate: 17, + axisExpandDebounce: 50, + // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full. + // Do not doc to user until necessary. + axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4], + axisExpandTriggerOn: 'click', // 'mousemove' or 'click' + + parallelAxisDefault: null + }, + + /** + * @override + */ + init: function () { + ComponentModel.prototype.init.apply(this, arguments); + + this.mergeOption({}); + }, + + /** + * @override + */ + mergeOption: function (newOption) { + var thisOption = this.option; + + newOption && merge(thisOption, newOption, true); + + this._initDimensions(); + }, + + /** + * Whether series or axis is in this coordinate system. + * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model + * @param {module:echarts/model/Global} ecModel + */ + contains: function (model, ecModel) { + var parallelIndex = model.get('parallelIndex'); + return parallelIndex != null + && ecModel.getComponent('parallel', parallelIndex) === this; + }, + + setAxisExpand: function (opt) { + each$1( + ['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'], + function (name) { + if (opt.hasOwnProperty(name)) { + this.option[name] = opt[name]; + } + }, + this + ); + }, + + /** + * @private + */ + _initDimensions: function () { + var dimensions = this.dimensions = []; + var parallelAxisIndex = this.parallelAxisIndex = []; + + var axisModels = filter(this.dependentModels.parallelAxis, function (axisModel) { + // Can not use this.contains here, because + // initialization has not been completed yet. + return (axisModel.get('parallelIndex') || 0) === this.componentIndex; + }, this); + + each$1(axisModels, function (axisModel) { + dimensions.push('dim' + axisModel.get('dim')); + parallelAxisIndex.push(axisModel.componentIndex); + }); + } + +}); + +/** + * @payload + * @property {string} parallelAxisId + * @property {Array.>} intervals + */ +var actionInfo$1 = { + type: 'axisAreaSelect', + event: 'axisAreaSelected', + update: 'updateVisual' +}; + +registerAction(actionInfo$1, function (payload, ecModel) { + ecModel.eachComponent( + {mainType: 'parallelAxis', query: payload}, + function (parallelAxisModel) { + parallelAxisModel.axis.model.setActiveIntervals(payload.intervals); + } + ); +}); + +/** + * @payload + */ +registerAction('parallelAxisExpand', function (payload, ecModel) { + ecModel.eachComponent( + {mainType: 'parallel', query: payload}, + function (parallelModel) { + parallelModel.setAxisExpand(payload); + } + ); + +}); + +var curry$2 = curry; +var each$15 = each$1; +var map$3 = map; +var mathMin$6 = Math.min; +var mathMax$6 = Math.max; +var mathPow$2 = Math.pow; + +var COVER_Z = 10000; +var UNSELECT_THRESHOLD = 6; +var MIN_RESIZE_LINE_WIDTH = 6; +var MUTEX_RESOURCE_KEY = 'globalPan'; + +var DIRECTION_MAP = { + w: [0, 0], + e: [0, 1], + n: [1, 0], + s: [1, 1] +}; +var CURSOR_MAP = { + w: 'ew', + e: 'ew', + n: 'ns', + s: 'ns', + ne: 'nesw', + sw: 'nesw', + nw: 'nwse', + se: 'nwse' +}; +var DEFAULT_BRUSH_OPT = { + brushStyle: { + lineWidth: 2, + stroke: 'rgba(0,0,0,0.3)', + fill: 'rgba(0,0,0,0.1)' + }, + transformable: true, + brushMode: 'single', + removeOnClick: false +}; + +var baseUID = 0; + +/** + * @alias module:echarts/component/helper/BrushController + * @constructor + * @mixin {module:zrender/mixin/Eventful} + * @event module:echarts/component/helper/BrushController#brush + * params: + * areas: Array., coord relates to container group, + * If no container specified, to global. + * opt { + * isEnd: boolean, + * removeOnClick: boolean + * } + * + * @param {module:zrender/zrender~ZRender} zr + */ +function BrushController(zr) { + + if (__DEV__) { + assert(zr); + } + + Eventful.call(this); + + /** + * @type {module:zrender/zrender~ZRender} + * @private + */ + this._zr = zr; + + /** + * @type {module:zrender/container/Group} + * @readOnly + */ + this.group = new Group(); + + /** + * Only for drawing (after enabledBrush). + * 'line', 'rect', 'polygon' or false + * If passing false/null/undefined, disable brush. + * If passing 'auto', determined by panel.defaultBrushType + * @private + * @type {string} + */ + this._brushType; + + /** + * Only for drawing (after enabledBrush). + * + * @private + * @type {Object} + */ + this._brushOption; + + /** + * @private + * @type {Object} + */ + this._panels; + + /** + * @private + * @type {Array.} + */ + this._track = []; + + /** + * @private + * @type {boolean} + */ + this._dragging; + + /** + * @private + * @type {Array} + */ + this._covers = []; + + /** + * @private + * @type {moudule:zrender/container/Group} + */ + this._creatingCover; + + /** + * `true` means global panel + * @private + * @type {module:zrender/container/Group|boolean} + */ + this._creatingPanel; + + /** + * @private + * @type {boolean} + */ + this._enableGlobalPan; + + /** + * @private + * @type {boolean} + */ + if (__DEV__) { + this._mounted; + } + + /** + * @private + * @type {string} + */ + this._uid = 'brushController_' + baseUID++; + + /** + * @private + * @type {Object} + */ + this._handlers = {}; + each$15(mouseHandlers, function (handler, eventName) { + this._handlers[eventName] = bind(handler, this); + }, this); +} + +BrushController.prototype = { + + constructor: BrushController, + + /** + * If set to null/undefined/false, select disabled. + * @param {Object} brushOption + * @param {string|boolean} brushOption.brushType 'line', 'rect', 'polygon' or false + * If passing false/null/undefined, disable brush. + * If passing 'auto', determined by panel.defaultBrushType. + * ('auto' can not be used in global panel) + * @param {number} [brushOption.brushMode='single'] 'single' or 'multiple' + * @param {boolean} [brushOption.transformable=true] + * @param {boolean} [brushOption.removeOnClick=false] + * @param {Object} [brushOption.brushStyle] + * @param {number} [brushOption.brushStyle.width] + * @param {number} [brushOption.brushStyle.lineWidth] + * @param {string} [brushOption.brushStyle.stroke] + * @param {string} [brushOption.brushStyle.fill] + * @param {number} [brushOption.z] + */ + enableBrush: function (brushOption) { + if (__DEV__) { + assert(this._mounted); + } + + this._brushType && doDisableBrush(this); + brushOption.brushType && doEnableBrush(this, brushOption); + + return this; + }, + + /** + * @param {Array.} panelOpts If not pass, it is global brush. + * Each items: { + * panelId, // mandatory. + * clipPath, // mandatory. function. + * isTargetByCursor, // mandatory. function. + * defaultBrushType, // optional, only used when brushType is 'auto'. + * getLinearBrushOtherExtent, // optional. function. + * } + */ + setPanels: function (panelOpts) { + if (panelOpts && panelOpts.length) { + var panels = this._panels = {}; + each$1(panelOpts, function (panelOpts) { + panels[panelOpts.panelId] = clone(panelOpts); + }); + } + else { + this._panels = null; + } + return this; + }, + + /** + * @param {Object} [opt] + * @return {boolean} [opt.enableGlobalPan=false] + */ + mount: function (opt) { + opt = opt || {}; + + if (__DEV__) { + this._mounted = true; // should be at first. + } + + this._enableGlobalPan = opt.enableGlobalPan; + + var thisGroup = this.group; + this._zr.add(thisGroup); + + thisGroup.attr({ + position: opt.position || [0, 0], + rotation: opt.rotation || 0, + scale: opt.scale || [1, 1] + }); + this._transform = thisGroup.getLocalTransform(); + + return this; + }, + + eachCover: function (cb, context) { + each$15(this._covers, cb, context); + }, + + /** + * Update covers. + * @param {Array.} brushOptionList Like: + * [ + * {id: 'xx', brushType: 'line', range: [23, 44], brushStyle, transformable}, + * {id: 'yy', brushType: 'rect', range: [[23, 44], [23, 54]]}, + * ... + * ] + * `brushType` is required in each cover info. (can not be 'auto') + * `id` is not mandatory. + * `brushStyle`, `transformable` is not mandatory, use DEFAULT_BRUSH_OPT by default. + * If brushOptionList is null/undefined, all covers removed. + */ + updateCovers: function (brushOptionList) { + if (__DEV__) { + assert(this._mounted); + } + + brushOptionList = map(brushOptionList, function (brushOption) { + return merge(clone(DEFAULT_BRUSH_OPT), brushOption, true); + }); + + var tmpIdPrefix = '\0-brush-index-'; + var oldCovers = this._covers; + var newCovers = this._covers = []; + var controller = this; + var creatingCover = this._creatingCover; + + (new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey)) + .add(addOrUpdate) + .update(addOrUpdate) + .remove(remove) + .execute(); + + return this; + + function getKey(brushOption, index) { + return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + + '-' + brushOption.brushType; + } + + function oldGetKey(cover, index) { + return getKey(cover.__brushOption, index); + } + + function addOrUpdate(newIndex, oldIndex) { + var newBrushOption = brushOptionList[newIndex]; + // Consider setOption in event listener of brushSelect, + // where updating cover when creating should be forbiden. + if (oldIndex != null && oldCovers[oldIndex] === creatingCover) { + newCovers[newIndex] = oldCovers[oldIndex]; + } + else { + var cover = newCovers[newIndex] = oldIndex != null + ? ( + oldCovers[oldIndex].__brushOption = newBrushOption, + oldCovers[oldIndex] + ) + : endCreating(controller, createCover(controller, newBrushOption)); + updateCoverAfterCreation(controller, cover); + } + } + + function remove(oldIndex) { + if (oldCovers[oldIndex] !== creatingCover) { + controller.group.remove(oldCovers[oldIndex]); + } + } + }, + + unmount: function () { + if (__DEV__) { + if (!this._mounted) { + return; + } + } + + this.enableBrush(false); + + // container may 'removeAll' outside. + clearCovers(this); + this._zr.remove(this.group); + + if (__DEV__) { + this._mounted = false; // should be at last. + } + + return this; + }, + + dispose: function () { + this.unmount(); + this.off(); + } +}; + +mixin(BrushController, Eventful); + +function doEnableBrush(controller, brushOption) { + var zr = controller._zr; + + // Consider roam, which takes globalPan too. + if (!controller._enableGlobalPan) { + take(zr, MUTEX_RESOURCE_KEY, controller._uid); + } + + each$15(controller._handlers, function (handler, eventName) { + zr.on(eventName, handler); + }); + + controller._brushType = brushOption.brushType; + controller._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true); +} + +function doDisableBrush(controller) { + var zr = controller._zr; + + release(zr, MUTEX_RESOURCE_KEY, controller._uid); + + each$15(controller._handlers, function (handler, eventName) { + zr.off(eventName, handler); + }); + + controller._brushType = controller._brushOption = null; +} + +function createCover(controller, brushOption) { + var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption); + cover.__brushOption = brushOption; + updateZ$1(cover, brushOption); + controller.group.add(cover); + return cover; +} + +function endCreating(controller, creatingCover) { + var coverRenderer = getCoverRenderer(creatingCover); + if (coverRenderer.endCreating) { + coverRenderer.endCreating(controller, creatingCover); + updateZ$1(creatingCover, creatingCover.__brushOption); + } + return creatingCover; +} + +function updateCoverShape(controller, cover) { + var brushOption = cover.__brushOption; + getCoverRenderer(cover).updateCoverShape( + controller, cover, brushOption.range, brushOption + ); +} + +function updateZ$1(cover, brushOption) { + var z = brushOption.z; + z == null && (z = COVER_Z); + cover.traverse(function (el) { + el.z = z; + el.z2 = z; // Consider in given container. + }); +} + +function updateCoverAfterCreation(controller, cover) { + getCoverRenderer(cover).updateCommon(controller, cover); + updateCoverShape(controller, cover); +} + +function getCoverRenderer(cover) { + return coverRenderers[cover.__brushOption.brushType]; +} + +// return target panel or `true` (means global panel) +function getPanelByPoint(controller, e, localCursorPoint) { + var panels = controller._panels; + if (!panels) { + return true; // Global panel + } + var panel; + var transform = controller._transform; + each$15(panels, function (pn) { + pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn); + }); + return panel; +} + +// Return a panel or true +function getPanelByCover(controller, cover) { + var panels = controller._panels; + if (!panels) { + return true; // Global panel + } + var panelId = cover.__brushOption.panelId; + // User may give cover without coord sys info, + // which is then treated as global panel. + return panelId != null ? panels[panelId] : true; +} + +function clearCovers(controller) { + var covers = controller._covers; + var originalLength = covers.length; + each$15(covers, function (cover) { + controller.group.remove(cover); + }, controller); + covers.length = 0; + + return !!originalLength; +} + +function trigger(controller, opt) { + var areas = map$3(controller._covers, function (cover) { + var brushOption = cover.__brushOption; + var range = clone(brushOption.range); + return { + brushType: brushOption.brushType, + panelId: brushOption.panelId, + range: range + }; + }); + + controller.trigger('brush', areas, { + isEnd: !!opt.isEnd, + removeOnClick: !!opt.removeOnClick + }); +} + +function shouldShowCover(controller) { + var track = controller._track; + + if (!track.length) { + return false; + } + + var p2 = track[track.length - 1]; + var p1 = track[0]; + var dx = p2[0] - p1[0]; + var dy = p2[1] - p1[1]; + var dist = mathPow$2(dx * dx + dy * dy, 0.5); + + return dist > UNSELECT_THRESHOLD; +} + +function getTrackEnds(track) { + var tail = track.length - 1; + tail < 0 && (tail = 0); + return [track[0], track[tail]]; +} + +function createBaseRectCover(doDrift, controller, brushOption, edgeNames) { + var cover = new Group(); + + cover.add(new Rect({ + name: 'main', + style: makeStyle(brushOption), + silent: true, + draggable: true, + cursor: 'move', + drift: curry$2(doDrift, controller, cover, 'nswe'), + ondragend: curry$2(trigger, controller, {isEnd: true}) + })); + + each$15( + edgeNames, + function (name) { + cover.add(new Rect({ + name: name, + style: {opacity: 0}, + draggable: true, + silent: true, + invisible: true, + drift: curry$2(doDrift, controller, cover, name), + ondragend: curry$2(trigger, controller, {isEnd: true}) + })); + } + ); + + return cover; +} + +function updateBaseRect(controller, cover, localRange, brushOption) { + var lineWidth = brushOption.brushStyle.lineWidth || 0; + var handleSize = mathMax$6(lineWidth, MIN_RESIZE_LINE_WIDTH); + var x = localRange[0][0]; + var y = localRange[1][0]; + var xa = x - lineWidth / 2; + var ya = y - lineWidth / 2; + var x2 = localRange[0][1]; + var y2 = localRange[1][1]; + var x2a = x2 - handleSize + lineWidth / 2; + var y2a = y2 - handleSize + lineWidth / 2; + var width = x2 - x; + var height = y2 - y; + var widtha = width + lineWidth; + var heighta = height + lineWidth; + + updateRectShape(controller, cover, 'main', x, y, width, height); + + if (brushOption.transformable) { + updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta); + updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta); + updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize); + updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize); + + updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize); + updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize); + updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize); + updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize); + } +} + +function updateCommon(controller, cover) { + var brushOption = cover.__brushOption; + var transformable = brushOption.transformable; + + var mainEl = cover.childAt(0); + mainEl.useStyle(makeStyle(brushOption)); + mainEl.attr({ + silent: !transformable, + cursor: transformable ? 'move' : 'default' + }); + + each$15( + ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'], + function (name) { + var el = cover.childOfName(name); + var globalDir = getGlobalDirection(controller, name); + + el && el.attr({ + silent: !transformable, + invisible: !transformable, + cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null + }); + } + ); +} + +function updateRectShape(controller, cover, name, x, y, w, h) { + var el = cover.childOfName(name); + el && el.setShape(pointsToRect( + clipByPanel(controller, cover, [[x, y], [x + w, y + h]]) + )); +} + +function makeStyle(brushOption) { + return defaults({strokeNoScale: true}, brushOption.brushStyle); +} + +function formatRectRange(x, y, x2, y2) { + var min = [mathMin$6(x, x2), mathMin$6(y, y2)]; + var max = [mathMax$6(x, x2), mathMax$6(y, y2)]; + + return [ + [min[0], max[0]], // x range + [min[1], max[1]] // y range + ]; +} + +function getTransform$1(controller) { + return getTransform(controller.group); +} + +function getGlobalDirection(controller, localDirection) { + if (localDirection.length > 1) { + localDirection = localDirection.split(''); + var globalDir = [ + getGlobalDirection(controller, localDirection[0]), + getGlobalDirection(controller, localDirection[1]) + ]; + (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse(); + return globalDir.join(''); + } + else { + var map$$1 = {w: 'left', e: 'right', n: 'top', s: 'bottom'}; + var inverseMap = {left: 'w', right: 'e', top: 'n', bottom: 's'}; + var globalDir = transformDirection( + map$$1[localDirection], getTransform$1(controller) + ); + return inverseMap[globalDir]; + } +} + +function driftRect(toRectRange, fromRectRange, controller, cover, name, dx, dy, e) { + var brushOption = cover.__brushOption; + var rectRange = toRectRange(brushOption.range); + var localDelta = toLocalDelta(controller, dx, dy); + + each$15(name.split(''), function (namePart) { + var ind = DIRECTION_MAP[namePart]; + rectRange[ind[0]][ind[1]] += localDelta[ind[0]]; + }); + + brushOption.range = fromRectRange(formatRectRange( + rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1] + )); + + updateCoverAfterCreation(controller, cover); + trigger(controller, {isEnd: false}); +} + +function driftPolygon(controller, cover, dx, dy, e) { + var range = cover.__brushOption.range; + var localDelta = toLocalDelta(controller, dx, dy); + + each$15(range, function (point) { + point[0] += localDelta[0]; + point[1] += localDelta[1]; + }); + + updateCoverAfterCreation(controller, cover); + trigger(controller, {isEnd: false}); +} + +function toLocalDelta(controller, dx, dy) { + var thisGroup = controller.group; + var localD = thisGroup.transformCoordToLocal(dx, dy); + var localZero = thisGroup.transformCoordToLocal(0, 0); + + return [localD[0] - localZero[0], localD[1] - localZero[1]]; +} + +function clipByPanel(controller, cover, data) { + var panel = getPanelByCover(controller, cover); + + return (panel && panel !== true) + ? panel.clipPath(data, controller._transform) + : clone(data); +} + +function pointsToRect(points) { + var xmin = mathMin$6(points[0][0], points[1][0]); + var ymin = mathMin$6(points[0][1], points[1][1]); + var xmax = mathMax$6(points[0][0], points[1][0]); + var ymax = mathMax$6(points[0][1], points[1][1]); + + return { + x: xmin, + y: ymin, + width: xmax - xmin, + height: ymax - ymin + }; +} + +function resetCursor(controller, e, localCursorPoint) { + // Check active + if (!controller._brushType) { + return; + } + + var zr = controller._zr; + var covers = controller._covers; + var currPanel = getPanelByPoint(controller, e, localCursorPoint); + + // Check whether in covers. + if (!controller._dragging) { + for (var i = 0; i < covers.length; i++) { + var brushOption = covers[i].__brushOption; + if (currPanel + && (currPanel === true || brushOption.panelId === currPanel.panelId) + && coverRenderers[brushOption.brushType].contain( + covers[i], localCursorPoint[0], localCursorPoint[1] + ) + ) { + // Use cursor style set on cover. + return; + } + } + } + + currPanel && zr.setCursorStyle('crosshair'); +} + +function preventDefault(e) { + var rawE = e.event; + rawE.preventDefault && rawE.preventDefault(); +} + +function mainShapeContain(cover, x, y) { + return cover.childOfName('main').contain(x, y); +} + +function updateCoverByMouse(controller, e, localCursorPoint, isEnd) { + var creatingCover = controller._creatingCover; + var panel = controller._creatingPanel; + var thisBrushOption = controller._brushOption; + var eventParams; + + controller._track.push(localCursorPoint.slice()); + + if (shouldShowCover(controller) || creatingCover) { + + if (panel && !creatingCover) { + thisBrushOption.brushMode === 'single' && clearCovers(controller); + var brushOption = clone(thisBrushOption); + brushOption.brushType = determineBrushType(brushOption.brushType, panel); + brushOption.panelId = panel === true ? null : panel.panelId; + creatingCover = controller._creatingCover = createCover(controller, brushOption); + controller._covers.push(creatingCover); + } + + if (creatingCover) { + var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)]; + var coverBrushOption = creatingCover.__brushOption; + + coverBrushOption.range = coverRenderer.getCreatingRange( + clipByPanel(controller, creatingCover, controller._track) + ); + + if (isEnd) { + endCreating(controller, creatingCover); + coverRenderer.updateCommon(controller, creatingCover); + } + + updateCoverShape(controller, creatingCover); + + eventParams = {isEnd: isEnd}; + } + } + else if ( + isEnd + && thisBrushOption.brushMode === 'single' + && thisBrushOption.removeOnClick + ) { + // Help user to remove covers easily, only by a tiny drag, in 'single' mode. + // But a single click do not clear covers, because user may have casual + // clicks (for example, click on other component and do not expect covers + // disappear). + // Only some cover removed, trigger action, but not every click trigger action. + if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) { + eventParams = {isEnd: isEnd, removeOnClick: true}; + } + } + + return eventParams; +} + +function determineBrushType(brushType, panel) { + if (brushType === 'auto') { + if (__DEV__) { + assert( + panel && panel.defaultBrushType, + 'MUST have defaultBrushType when brushType is "atuo"' + ); + } + return panel.defaultBrushType; + } + return brushType; +} + +var mouseHandlers = { + + mousedown: function (e) { + if (this._dragging) { + // In case some browser do not support globalOut, + // and release mose out side the browser. + handleDragEnd.call(this, e); + } + else if (!e.target || !e.target.draggable) { + + preventDefault(e); + + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + + this._creatingCover = null; + var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint); + + if (panel) { + this._dragging = true; + this._track = [localCursorPoint.slice()]; + } + } + }, + + mousemove: function (e) { + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + + resetCursor(this, e, localCursorPoint); + + if (this._dragging) { + + preventDefault(e); + + var eventParams = updateCoverByMouse(this, e, localCursorPoint, false); + + eventParams && trigger(this, eventParams); + } + }, + + mouseup: handleDragEnd //, + + // FIXME + // in tooltip, globalout should not be triggered. + // globalout: handleDragEnd +}; + +function handleDragEnd(e) { + if (this._dragging) { + + preventDefault(e); + + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + var eventParams = updateCoverByMouse(this, e, localCursorPoint, true); + + this._dragging = false; + this._track = []; + this._creatingCover = null; + + // trigger event shoule be at final, after procedure will be nested. + eventParams && trigger(this, eventParams); + } +} + +/** + * key: brushType + * @type {Object} + */ +var coverRenderers = { + + lineX: getLineRenderer(0), + + lineY: getLineRenderer(1), + + rect: { + createCover: function (controller, brushOption) { + return createBaseRectCover( + curry$2( + driftRect, + function (range) { + return range; + }, + function (range) { + return range; + } + ), + controller, + brushOption, + ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'] + ); + }, + getCreatingRange: function (localTrack) { + var ends = getTrackEnds(localTrack); + return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]); + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + updateBaseRect(controller, cover, localRange, brushOption); + }, + updateCommon: updateCommon, + contain: mainShapeContain + }, + + polygon: { + createCover: function (controller, brushOption) { + var cover = new Group(); + + // Do not use graphic.Polygon because graphic.Polyline do not close the + // border of the shape when drawing, which is a better experience for user. + cover.add(new Polyline({ + name: 'main', + style: makeStyle(brushOption), + silent: true + })); + + return cover; + }, + getCreatingRange: function (localTrack) { + return localTrack; + }, + endCreating: function (controller, cover) { + cover.remove(cover.childAt(0)); + // Use graphic.Polygon close the shape. + cover.add(new Polygon({ + name: 'main', + draggable: true, + drift: curry$2(driftPolygon, controller, cover), + ondragend: curry$2(trigger, controller, {isEnd: true}) + })); + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + cover.childAt(0).setShape({ + points: clipByPanel(controller, cover, localRange) + }); + }, + updateCommon: updateCommon, + contain: mainShapeContain + } +}; + +function getLineRenderer(xyIndex) { + return { + createCover: function (controller, brushOption) { + return createBaseRectCover( + curry$2( + driftRect, + function (range) { + var rectRange = [range, [0, 100]]; + xyIndex && rectRange.reverse(); + return rectRange; + }, + function (rectRange) { + return rectRange[xyIndex]; + } + ), + controller, + brushOption, + [['w', 'e'], ['n', 's']][xyIndex] + ); + }, + getCreatingRange: function (localTrack) { + var ends = getTrackEnds(localTrack); + var min = mathMin$6(ends[0][xyIndex], ends[1][xyIndex]); + var max = mathMax$6(ends[0][xyIndex], ends[1][xyIndex]); + + return [min, max]; + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + var otherExtent; + // If brushWidth not specified, fit the panel. + var panel = getPanelByCover(controller, cover); + if (panel !== true && panel.getLinearBrushOtherExtent) { + otherExtent = panel.getLinearBrushOtherExtent( + xyIndex, controller._transform + ); + } + else { + var zr = controller._zr; + otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]]; + } + var rectRange = [localRange, otherExtent]; + xyIndex && rectRange.reverse(); + + updateBaseRect(controller, cover, rectRange, brushOption); + }, + updateCommon: updateCommon, + contain: mainShapeContain + }; +} + +function makeRectPanelClipPath(rect) { + rect = normalizeRect(rect); + return function (localPoints, transform) { + return clipPointsByRect(localPoints, rect); + }; +} + +function makeLinearBrushOtherExtent(rect, specifiedXYIndex) { + rect = normalizeRect(rect); + return function (xyIndex) { + var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex; + var brushWidth = idx ? rect.width : rect.height; + var base = idx ? rect.x : rect.y; + return [base, base + (brushWidth || 0)]; + }; +} + +function makeRectIsTargetByCursor(rect, api, targetModel) { + rect = normalizeRect(rect); + return function (e, localCursorPoint, transform) { + return rect.contain(localCursorPoint[0], localCursorPoint[1]) + && !onIrrelevantElement(e, api, targetModel); + }; +} + +// Consider width/height is negative. +function normalizeRect(rect) { + return BoundingRect.create(rect); +} + +var elementList = ['axisLine', 'axisTickLabel', 'axisName']; + +var AxisView$2 = extendComponentView({ + + type: 'parallelAxis', + + /** + * @override + */ + init: function (ecModel, api) { + AxisView$2.superApply(this, 'init', arguments); + + /** + * @type {module:echarts/component/helper/BrushController} + */ + (this._brushController = new BrushController(api.getZr())) + .on('brush', bind(this._onBrush, this)); + }, + + /** + * @override + */ + render: function (axisModel, ecModel, api, payload) { + if (fromAxisAreaSelect(axisModel, ecModel, payload)) { + return; + } + + this.axisModel = axisModel; + this.api = api; + + this.group.removeAll(); + + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + this.group.add(this._axisGroup); + + if (!axisModel.get('show')) { + return; + } + + var coordSysModel = getCoordSysModel(axisModel, ecModel); + var coordSys = coordSysModel.coordinateSystem; + + var areaSelectStyle = axisModel.getAreaSelectStyle(); + var areaWidth = areaSelectStyle.width; + + var dim = axisModel.axis.dim; + var axisLayout = coordSys.getAxisLayout(dim); + + var builderOpt = extend( + {strokeContainThreshold: areaWidth}, + axisLayout + ); + + var axisBuilder = new AxisBuilder(axisModel, builderOpt); + + each$1(elementList, axisBuilder.add, axisBuilder); + + this._axisGroup.add(axisBuilder.getGroup()); + + this._refreshBrushController( + builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api + ); + + var animationModel = (payload && payload.animation === false) ? null : axisModel; + groupTransition(oldAxisGroup, this._axisGroup, animationModel); + }, + + /** + * @override + */ + updateVisual: function (axisModel, ecModel, api, payload) { + this._brushController && this._brushController + .updateCovers(getCoverInfoList(axisModel)); + }, + + _refreshBrushController: function ( + builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api + ) { + // After filtering, axis may change, select area needs to be update. + var extent = axisModel.axis.getExtent(); + var extentLen = extent[1] - extent[0]; + var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value. + + // width/height might be negative, which will be + // normalized in BoundingRect. + var rect = BoundingRect.create({ + x: extent[0], + y: -areaWidth / 2, + width: extentLen, + height: areaWidth + }); + rect.x -= extra; + rect.width += 2 * extra; + + this._brushController + .mount({ + enableGlobalPan: true, + rotation: builderOpt.rotation, + position: builderOpt.position + }) + .setPanels([{ + panelId: 'pl', + clipPath: makeRectPanelClipPath(rect), + isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel), + getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0) + }]) + .enableBrush({ + brushType: 'lineX', + brushStyle: areaSelectStyle, + removeOnClick: true + }) + .updateCovers(getCoverInfoList(axisModel)); + }, + + _onBrush: function (coverInfoList, opt) { + // Do not cache these object, because the mey be changed. + var axisModel = this.axisModel; + var axis = axisModel.axis; + var intervals = map(coverInfoList, function (coverInfo) { + return [ + axis.coordToData(coverInfo.range[0], true), + axis.coordToData(coverInfo.range[1], true) + ]; + }); + + // If realtime is true, action is not dispatched on drag end, because + // the drag end emits the same params with the last drag move event, + // and may have some delay when using touch pad. + if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) { // jshint ignore:line + this.api.dispatchAction({ + type: 'axisAreaSelect', + parallelAxisId: axisModel.id, + intervals: intervals + }); + } + }, + + /** + * @override + */ + dispose: function () { + this._brushController.dispose(); + } +}); + +function fromAxisAreaSelect(axisModel, ecModel, payload) { + return payload + && payload.type === 'axisAreaSelect' + && ecModel.findComponents( + {mainType: 'parallelAxis', query: payload} + )[0] === axisModel; +} + +function getCoverInfoList(axisModel) { + var axis = axisModel.axis; + return map(axisModel.activeIntervals, function (interval) { + return { + brushType: 'lineX', + panelId: 'pl', + range: [ + axis.dataToCoord(interval[0], true), + axis.dataToCoord(interval[1], true) + ] + }; + }); +} + +function getCoordSysModel(axisModel, ecModel) { + return ecModel.getComponent( + 'parallel', axisModel.get('parallelIndex') + ); +} + +var CLICK_THRESHOLD = 5; // > 4 + +// Parallel view +extendComponentView({ + type: 'parallel', + + render: function (parallelModel, ecModel, api) { + this._model = parallelModel; + this._api = api; + + if (!this._handlers) { + this._handlers = {}; + each$1(handlers, function (handler, eventName) { + api.getZr().on(eventName, this._handlers[eventName] = bind(handler, this)); + }, this); + } + + createOrUpdate( + this, + '_throttledDispatchExpand', + parallelModel.get('axisExpandRate'), + 'fixRate' + ); + }, + + dispose: function (ecModel, api) { + each$1(this._handlers, function (handler, eventName) { + api.getZr().off(eventName, handler); + }); + this._handlers = null; + }, + + /** + * @param {Object} [opt] If null, cancle the last action triggering for debounce. + */ + _throttledDispatchExpand: function (opt) { + this._dispatchExpand(opt); + }, + + _dispatchExpand: function (opt) { + opt && this._api.dispatchAction( + extend({type: 'parallelAxisExpand'}, opt) + ); + } + +}); + +var handlers = { + + mousedown: function (e) { + if (checkTrigger(this, 'click')) { + this._mouseDownPoint = [e.offsetX, e.offsetY]; + } + }, + + mouseup: function (e) { + var mouseDownPoint = this._mouseDownPoint; + + if (checkTrigger(this, 'click') && mouseDownPoint) { + var point = [e.offsetX, e.offsetY]; + var dist = Math.pow(mouseDownPoint[0] - point[0], 2) + + Math.pow(mouseDownPoint[1] - point[1], 2); + + if (dist > CLICK_THRESHOLD) { + return; + } + + var result = this._model.coordinateSystem.getSlidedAxisExpandWindow( + [e.offsetX, e.offsetY] + ); + + result.behavior !== 'none' && this._dispatchExpand({ + axisExpandWindow: result.axisExpandWindow + }); + } + + this._mouseDownPoint = null; + }, + + mousemove: function (e) { + // Should do nothing when brushing. + if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) { + return; + } + var model = this._model; + var result = model.coordinateSystem.getSlidedAxisExpandWindow( + [e.offsetX, e.offsetY] + ); + + var behavior = result.behavior; + behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce')); + this._throttledDispatchExpand( + behavior === 'none' + ? null // Cancle the last trigger, in case that mouse slide out of the area quickly. + : { + axisExpandWindow: result.axisExpandWindow, + // Jumping uses animation, and sliding suppresses animation. + animation: behavior === 'jump' ? null : false + } + ); + } +}; + +function checkTrigger(view, triggerOn) { + var model = view._model; + return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn; +} + +registerPreprocessor(parallelPreprocessor); + +SeriesModel.extend({ + + type: 'series.parallel', + + dependencies: ['parallel'], + + visualColorAccessPath: 'lineStyle.normal.color', + + getInitialData: function (option, ecModel) { + var parallelModel = ecModel.getComponent( + 'parallel', this.get('parallelIndex') + ); + var parallelAxisIndices = parallelModel.parallelAxisIndex; + + var rawData = option.data; + var modelDims = parallelModel.dimensions; + + var dataDims = generateDataDims(modelDims, rawData); + + var dataDimsInfo = map(dataDims, function (dim, dimIndex) { + + var modelDimsIndex = indexOf(modelDims, dim); + var axisModel = modelDimsIndex >= 0 && ecModel.getComponent( + 'parallelAxis', parallelAxisIndices[modelDimsIndex] + ); + + if (axisModel && axisModel.get('type') === 'category') { + translateCategoryValue(axisModel, dim, rawData); + return {name: dim, type: 'ordinal'}; + } + else if (modelDimsIndex < 0) { + return completeDimensions.guessOrdinal(rawData, dimIndex) + ? {name: dim, type: 'ordinal'} + : dim; + } + else { + return dim; + } + }); + + var list = new List(dataDimsInfo, this); + list.initData(rawData); + + // Anication is forbiden in progressive data mode. + if (this.option.progressive) { + this.option.animation = false; + } + + return list; + }, + + /** + * User can get data raw indices on 'axisAreaSelected' event received. + * + * @public + * @param {string} activeState 'active' or 'inactive' or 'normal' + * @return {Array.} Raw indices + */ + getRawIndicesByActiveState: function (activeState) { + var coordSys = this.coordinateSystem; + var data = this.getData(); + var indices = []; + + coordSys.eachActiveState(data, function (theActiveState, dataIndex) { + if (activeState === theActiveState) { + indices.push(data.getRawIndex(dataIndex)); + } + }); + + return indices; + }, + + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + + coordinateSystem: 'parallel', + parallelIndex: 0, + + label: { + normal: { + show: false + }, + emphasis: { + show: false + } + }, + + inactiveOpacity: 0.05, + activeOpacity: 1, + + lineStyle: { + normal: { + width: 1, + opacity: 0.45, + type: 'solid' + } + }, + progressive: false, // 100 + smooth: false, + + animationEasing: 'linear' + } +}); + +function translateCategoryValue(axisModel, dim, rawData) { + var axisData = axisModel.get('data'); + var numberDim = convertDimNameToNumber(dim); + + if (axisData && axisData.length) { + each$1(rawData, function (dataItem) { + if (!dataItem) { + return; + } + // FIXME + // time consuming, should use hash? + var index = indexOf(axisData, dataItem[numberDim]); + dataItem[numberDim] = index >= 0 ? index : NaN; + }); + } + // FIXME + // 如果没有设置axis data, 应自动算出,或者提示。 +} + +function convertDimNameToNumber(dimName) { + return +dimName.replace('dim', ''); +} + +function generateDataDims(modelDims, rawData) { + // parallelModel.dimension should not be regarded as data + // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6']; + + // We detect max dim by parallelModel.dimensions and fist + // item in rawData arbitrarily. + var maxDimNum = 0; + each$1(modelDims, function (dimName) { + var numberDim = convertDimNameToNumber(dimName); + numberDim > maxDimNum && (maxDimNum = numberDim); + }); + + var firstItem = rawData[0]; + if (firstItem && firstItem.length - 1 > maxDimNum) { + maxDimNum = firstItem.length - 1; + } + + var dataDims = []; + for (var i = 0; i <= maxDimNum; i++) { + dataDims.push('dim' + i); + } + + return dataDims; +} + +var SMOOTH = 0.3; + +var ParallelView = Chart.extend({ + + type: 'parallel', + + init: function () { + + /** + * @type {module:zrender/container/Group} + * @private + */ + this._dataGroup = new Group(); + + this.group.add(this._dataGroup); + + /** + * @type {module:echarts/data/List} + */ + this._data; + }, + + /** + * @override + */ + render: function (seriesModel, ecModel, api, payload) { + this._renderForNormal(seriesModel, payload); + // this[ + // seriesModel.option.progressive + // ? '_renderForProgressive' + // : '_renderForNormal' + // ](seriesModel); + }, + + dispose: function () {}, + + /** + * @private + */ + _renderForNormal: function (seriesModel, payload) { + var dataGroup = this._dataGroup; + var data = seriesModel.getData(); + var oldData = this._data; + var coordSys = seriesModel.coordinateSystem; + var dimensions = coordSys.dimensions; + var option = seriesModel.option; + var smooth = option.smooth ? SMOOTH : null; + + // Consider switch between progressive and not. + // oldData && oldData.__plProgressive && dataGroup.removeAll(); + + data.diff(oldData) + .add(add) + .update(update) + .remove(remove) + .execute(); + + // Update style + updateElCommon(data, smooth); + + // First create + if (!this._data) { + var clipPath = createGridClipShape$1( + coordSys, seriesModel, function () { + // Callback will be invoked immediately if there is no animation + setTimeout(function () { + dataGroup.removeClipPath(); + }); + } + ); + dataGroup.setClipPath(clipPath); + } + + this._data = data; + + function add(newDataIndex) { + addEl(data, dataGroup, newDataIndex, dimensions, coordSys, null, smooth); + } + + function update(newDataIndex, oldDataIndex) { + var line = oldData.getItemGraphicEl(oldDataIndex); + var points = createLinePoints(data, newDataIndex, dimensions, coordSys); + data.setItemGraphicEl(newDataIndex, line); + var animationModel = (payload && payload.animation === false) ? null : seriesModel; + updateProps(line, {shape: {points: points}}, animationModel, newDataIndex); + } + + function remove(oldDataIndex) { + var line = oldData.getItemGraphicEl(oldDataIndex); + dataGroup.remove(line); + } + + }, + + /** + * @private + */ + // _renderForProgressive: function (seriesModel) { + // var dataGroup = this._dataGroup; + // var data = seriesModel.getData(); + // var oldData = this._data; + // var coordSys = seriesModel.coordinateSystem; + // var dimensions = coordSys.dimensions; + // var option = seriesModel.option; + // var progressive = option.progressive; + // var smooth = option.smooth ? SMOOTH : null; + + // // In progressive animation is disabled, so use simple data diff, + // // which effects performance less. + // // (Typically performance for data with length 7000+ like: + // // simpleDiff: 60ms, addEl: 184ms, + // // in RMBP 2.4GHz intel i7, OSX 10.9 chrome 50.0.2661.102 (64-bit)) + // if (simpleDiff(oldData, data, dimensions)) { + // dataGroup.removeAll(); + // data.each(function (dataIndex) { + // addEl(data, dataGroup, dataIndex, dimensions, coordSys); + // }); + // } + + // updateElCommon(data, progressive, smooth); + + // // Consider switch between progressive and not. + // data.__plProgressive = true; + // this._data = data; + // }, + + /** + * @override + */ + remove: function () { + this._dataGroup && this._dataGroup.removeAll(); + this._data = null; + } +}); + +function createGridClipShape$1(coordSys, seriesModel, cb) { + var parallelModel = coordSys.model; + var rect = coordSys.getRect(); + var rectEl = new Rect({ + shape: { + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + } + }); + + var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height'; + rectEl.setShape(dim, 0); + initProps(rectEl, { + shape: { + width: rect.width, + height: rect.height + } + }, seriesModel, cb); + return rectEl; +} + +function createLinePoints(data, dataIndex, dimensions, coordSys) { + var points = []; + for (var i = 0; i < dimensions.length; i++) { + var dimName = dimensions[i]; + var value = data.get(dimName, dataIndex); + if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) { + points.push(coordSys.dataToPoint(value, dimName)); + } + } + return points; +} + +function addEl(data, dataGroup, dataIndex, dimensions, coordSys) { + var points = createLinePoints(data, dataIndex, dimensions, coordSys); + var line = new Polyline({ + shape: {points: points}, + silent: true, + z2: 10 + }); + dataGroup.add(line); + data.setItemGraphicEl(dataIndex, line); +} + +function updateElCommon(data, smooth) { + var seriesStyleModel = data.hostModel.getModel('lineStyle.normal'); + var lineStyle = seriesStyleModel.getLineStyle(); + data.eachItemGraphicEl(function (line, dataIndex) { + if (data.hasItemOption) { + var itemModel = data.getItemModel(dataIndex); + var lineStyleModel = itemModel.getModel('lineStyle.normal', seriesStyleModel); + lineStyle = lineStyleModel.getLineStyle(['color', 'stroke']); + } + + line.useStyle(extend(lineStyle, { + fill: null, + // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor. + stroke: data.getItemVisual(dataIndex, 'color'), + // lineStyle.opacity have been set to itemVisual in parallelVisual. + opacity: data.getItemVisual(dataIndex, 'opacity') + })); + + line.shape.smooth = smooth; + }); +} + +// function simpleDiff(oldData, newData, dimensions) { +// var oldLen; +// if (!oldData +// || !oldData.__plProgressive +// || (oldLen = oldData.count()) !== newData.count() +// ) { +// return true; +// } + +// var dimLen = dimensions.length; +// for (var i = 0; i < oldLen; i++) { +// for (var j = 0; j < dimLen; j++) { +// if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) { +// return true; +// } +// } +// } + +// return false; +// } + +// FIXME +// 公用方法? +function isEmptyValue(val, axisType) { + return axisType === 'category' + ? val == null + : (val == null || isNaN(val)); // axisType === 'value' +} + +var opacityAccessPath$1 = ['lineStyle', 'normal', 'opacity']; + +var parallelVisual = function (ecModel) { + + ecModel.eachSeriesByType('parallel', function (seriesModel) { + + var itemStyleModel = seriesModel.getModel('itemStyle.normal'); + var lineStyleModel = seriesModel.getModel('lineStyle.normal'); + var globalColors = ecModel.get('color'); + + var color = lineStyleModel.get('color') + || itemStyleModel.get('color') + || globalColors[seriesModel.seriesIndex % globalColors.length]; + var inactiveOpacity = seriesModel.get('inactiveOpacity'); + var activeOpacity = seriesModel.get('activeOpacity'); + var lineStyle = seriesModel.getModel('lineStyle.normal').getLineStyle(); + + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + + var opacityMap = { + normal: lineStyle.opacity, + active: activeOpacity, + inactive: inactiveOpacity + }; + + coordSys.eachActiveState(data, function (activeState, dataIndex) { + var itemModel = data.getItemModel(dataIndex); + var opacity = opacityMap[activeState]; + if (activeState === 'normal') { + var itemOpacity = itemModel.get(opacityAccessPath$1, true); + itemOpacity != null && (opacity = itemOpacity); + } + data.setItemVisual(dataIndex, 'opacity', opacity); + }); + + data.setVisual('color', color); + }); +}; + +registerVisual(parallelVisual); + +/** + * @file Get initial data and define sankey view's series model + * @author Deqing Li(annong035@gmail.com) + */ + +var SankeySeries = SeriesModel.extend({ + + type: 'series.sankey', + + layoutInfo: null, + + /** + * Init a graph data structure from data in option series + * + * @param {Object} option the object used to config echarts view + * @return {module:echarts/data/List} storage initial data + */ + getInitialData: function (option) { + var links = option.edges || option.links; + var nodes = option.data || option.nodes; + if (nodes && links) { + var graph = createGraphFromNodeEdge(nodes, links, this, true); + return graph.data; + } + }, + + /** + * Return the graphic data structure + * + * @return {module:echarts/data/Graph} graphic data structure + */ + getGraph: function () { + return this.getData().graph; + }, + + /** + * Get edge data of graphic data structure + * + * @return {module:echarts/data/List} data structure of list + */ + getEdgeData: function () { + return this.getGraph().edgeData; + }, + + /** + * @override + */ + formatTooltip: function (dataIndex, multipleSeries, dataType) { + // dataType === 'node' or empty do not show tooltip by default + if (dataType === 'edge') { + var params = this.getDataParams(dataIndex, dataType); + var rawDataOpt = params.data; + var html = rawDataOpt.source + ' -- ' + rawDataOpt.target; + if (params.value) { + html += ' : ' + params.value; + } + return encodeHTML(html); + } + + return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries); + }, + + defaultOption: { + zlevel: 0, + z: 2, + + coordinateSystem: 'view', + + layout: null, + + // the position of the whole view + left: '5%', + top: '5%', + right: '20%', + bottom: '5%', + + // the dx of the node + nodeWidth: 20, + + // the vertical distance between two nodes + nodeGap: 8, + + // the number of iterations to change the position of the node + layoutIterations: 32, + + label: { + normal: { + show: true, + position: 'right', + color: '#000', + fontSize: 12 + }, + emphasis: { + show: true + } + }, + + itemStyle: { + normal: { + borderWidth: 1, + borderColor: '#333' + } + }, + + lineStyle: { + normal: { + color: '#314656', + opacity: 0.2, + curveness: 0.5 + }, + emphasis: { + opacity: 0.6 + } + }, + + animationEasing: 'linear', + + animationDuration: 1000 + } + +}); + +/** + * @file The file used to draw sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +var SankeyShape = extendShape({ + shape: { + x1: 0, y1: 0, + x2: 0, y2: 0, + cpx1: 0, cpy1: 0, + cpx2: 0, cpy2: 0, + + extent: 0 + }, + + buildPath: function (ctx, shape) { + var halfExtent = shape.extent / 2; + ctx.moveTo(shape.x1, shape.y1 - halfExtent); + ctx.bezierCurveTo( + shape.cpx1, shape.cpy1 - halfExtent, + shape.cpx2, shape.cpy2 - halfExtent, + shape.x2, shape.y2 - halfExtent + ); + ctx.lineTo(shape.x2, shape.y2 + halfExtent); + ctx.bezierCurveTo( + shape.cpx2, shape.cpy2 + halfExtent, + shape.cpx1, shape.cpy1 + halfExtent, + shape.x1, shape.y1 + halfExtent + ); + ctx.closePath(); + } +}); + +extendChartView({ + + type: 'sankey', + + /** + * @private + * @type {module:echarts/chart/sankey/SankeySeries} + */ + _model: null, + + render: function (seriesModel, ecModel, api) { + var graph = seriesModel.getGraph(); + var group = this.group; + var layoutInfo = seriesModel.layoutInfo; + var nodeData = seriesModel.getData(); + var edgeData = seriesModel.getData('edge'); + + this._model = seriesModel; + + group.removeAll(); + + group.attr('position', [layoutInfo.x, layoutInfo.y]); + + // generate a bezire Curve for each edge + graph.eachEdge(function (edge) { + var curve = new SankeyShape(); + + curve.dataIndex = edge.dataIndex; + curve.seriesIndex = seriesModel.seriesIndex; + curve.dataType = 'edge'; + + var lineStyleModel = edge.getModel('lineStyle.normal'); + var curvature = lineStyleModel.get('curveness'); + var n1Layout = edge.node1.getLayout(); + var n2Layout = edge.node2.getLayout(); + var edgeLayout = edge.getLayout(); + + curve.shape.extent = Math.max(1, edgeLayout.dy); + + var x1 = n1Layout.x + n1Layout.dx; + var y1 = n1Layout.y + edgeLayout.sy + edgeLayout.dy / 2; + var x2 = n2Layout.x; + var y2 = n2Layout.y + edgeLayout.ty + edgeLayout.dy / 2; + var cpx1 = x1 * (1 - curvature) + x2 * curvature; + var cpy1 = y1; + var cpx2 = x1 * curvature + x2 * (1 - curvature); + var cpy2 = y2; + + curve.setShape({ + x1: x1, + y1: y1, + x2: x2, + y2: y2, + cpx1: cpx1, + cpy1: cpy1, + cpx2: cpx2, + cpy2: cpy2 + }); + + curve.setStyle(lineStyleModel.getItemStyle()); + // Special color, use source node color or target node color + switch (curve.style.fill) { + case 'source': + curve.style.fill = edge.node1.getVisual('color'); + break; + case 'target': + curve.style.fill = edge.node2.getVisual('color'); + break; + } + + setHoverStyle(curve, edge.getModel('lineStyle.emphasis').getItemStyle()); + + group.add(curve); + + edgeData.setItemGraphicEl(edge.dataIndex, curve); + }); + + // generate a rect for each node + graph.eachNode(function (node) { + var layout = node.getLayout(); + var itemModel = node.getModel(); + var labelModel = itemModel.getModel('label.normal'); + var labelHoverModel = itemModel.getModel('label.emphasis'); + + var rect = new Rect({ + shape: { + x: layout.x, + y: layout.y, + width: node.getLayout().dx, + height: node.getLayout().dy + }, + style: itemModel.getModel('itemStyle.normal').getItemStyle() + }); + + var hoverStyle = node.getModel('itemStyle.emphasis').getItemStyle(); + + setLabelStyle( + rect.style, hoverStyle, labelModel, labelHoverModel, + { + labelFetcher: seriesModel, + labelDataIndex: node.dataIndex, + defaultText: node.id, + isRectText: true + } + ); + + rect.setStyle('fill', node.getVisual('color')); + + setHoverStyle(rect, hoverStyle); + + group.add(rect); + + nodeData.setItemGraphicEl(node.dataIndex, rect); + + rect.dataType = 'node'; + }); + + if (!this._data && seriesModel.get('animation')) { + group.setClipPath(createGridClipShape$2(group.getBoundingRect(), seriesModel, function () { + group.removeClipPath(); + })); + } + + this._data = seriesModel.getData(); + }, + + dispose: function () {} +}); + +// add animation to the view +function createGridClipShape$2(rect, seriesModel, cb) { + var rectEl = new Rect({ + shape: { + x: rect.x - 10, + y: rect.y - 10, + width: 0, + height: rect.height + 20 + } + }); + initProps(rectEl, { + shape: { + width: rect.width + 20, + height: rect.height + 20 + } + }, seriesModel, cb); + + return rectEl; +} + +/** + * nest helper used to group by the array. + * can specified the keys and sort the keys. + */ +function nest() { + + var keysFunction = []; + var sortKeysFunction = []; + + /** + * map an Array into the mapObject. + * @param {Array} array + * @param {number} depth + */ + function map$$1(array, depth) { + if (depth >= keysFunction.length) { + return array; + } + var i = -1; + var n = array.length; + var keyFunction = keysFunction[depth++]; + var mapObject = {}; + var valuesByKey = {}; + + while (++i < n) { + var keyValue = keyFunction(array[i]); + var values = valuesByKey[keyValue]; + + if (values) { + values.push(array[i]); + } + else { + valuesByKey[keyValue] = [array[i]]; + } + } + + each$1(valuesByKey, function (value, key) { + mapObject[key] = map$$1(value, depth); + }); + + return mapObject; + } + + /** + * transform the Map Object to multidimensional Array + * @param {Object} map + * @param {number} depth + */ + function entriesMap(mapObject, depth) { + if (depth >= keysFunction.length) { + return mapObject; + } + var array = []; + var sortKeyFunction = sortKeysFunction[depth++]; + + each$1(mapObject, function (value, key) { + array.push({ + key: key, values: entriesMap(value, depth) + }); + }); + + if (sortKeyFunction) { + return array.sort(function (a, b) { + return sortKeyFunction(a.key, b.key); + }); + } + else { + return array; + } + } + + return { + /** + * specified the key to groupby the arrays. + * users can specified one more keys. + * @param {Function} d + */ + key: function (d) { + keysFunction.push(d); + return this; + }, + + /** + * specified the comparator to sort the keys + * @param {Function} order + */ + sortKeys: function (order) { + sortKeysFunction[keysFunction.length - 1] = order; + return this; + }, + + /** + * the array to be grouped by. + * @param {Array} array + */ + entries: function (array) { + return entriesMap(map$$1(array, 0), 0); + } + }; +} + +/** + * @file The layout algorithm of sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +var sankeyLayout = function (ecModel, api, payload) { + + ecModel.eachSeriesByType('sankey', function (seriesModel) { + + var nodeWidth = seriesModel.get('nodeWidth'); + var nodeGap = seriesModel.get('nodeGap'); + + var layoutInfo = getViewRect$3(seriesModel, api); + + seriesModel.layoutInfo = layoutInfo; + + var width = layoutInfo.width; + var height = layoutInfo.height; + + var graph = seriesModel.getGraph(); + + var nodes = graph.nodes; + var edges = graph.edges; + + computeNodeValues(nodes); + + var filteredNodes = filter(nodes, function (node) { + return node.getLayout().value === 0; + }); + + var iterations = filteredNodes.length !== 0 + ? 0 : seriesModel.get('layoutIterations'); + + layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations); + }); +}; + +/** + * Get the layout position of the whole view + * + * @param {module:echarts/model/Series} seriesModel the model object of sankey series + * @param {module:echarts/ExtensionAPI} api provide the API list that the developer can call + * @return {module:zrender/core/BoundingRect} size of rect to draw the sankey view + */ +function getViewRect$3(seriesModel, api) { + return getLayoutRect( + seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + } + ); +} + +function layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations) { + computeNodeBreadths(nodes, nodeWidth, width); + computeNodeDepths(nodes, edges, height, nodeGap, iterations); + computeEdgeDepths(nodes); +} + +/** + * Compute the value of each node by summing the associated edge's value + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + */ +function computeNodeValues(nodes) { + each$1(nodes, function (node) { + var value1 = sum(node.outEdges, getEdgeValue); + var value2 = sum(node.inEdges, getEdgeValue); + var value = Math.max(value1, value2); + node.setLayout({value: value}, true); + }); +} + +/** + * Compute the x-position for each node + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {number} nodeWidth the dx of the node + * @param {number} width the whole width of the area to draw the view + */ +function computeNodeBreadths(nodes, nodeWidth, width) { + var remainNodes = nodes; + var nextNode = null; + var x = 0; + var kx = 0; + + while (remainNodes.length) { + nextNode = []; + for (var i = 0, len = remainNodes.length; i < len; i++) { + var node = remainNodes[i]; + node.setLayout({x: x}, true); + node.setLayout({dx: nodeWidth}, true); + for (var j = 0, lenj = node.outEdges.length; j < lenj; j++) { + nextNode.push(node.outEdges[j].node2); + } + } + remainNodes = nextNode; + ++x; + } + + moveSinksRight(nodes, x); + kx = (width - nodeWidth) / (x - 1); + + scaleNodeBreadths(nodes, kx); +} + +/** + * All the node without outEgdes are assigned maximum x-position and + * be aligned in the last column. + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {number} x value (x-1) use to assign to node without outEdges + * as x-position + */ +function moveSinksRight(nodes, x) { + each$1(nodes, function (node) { + if (!node.outEdges.length) { + node.setLayout({x: x - 1}, true); + } + }); +} + +/** + * Scale node x-position to the width + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {number} kx multiple used to scale nodes + */ +function scaleNodeBreadths(nodes, kx) { + each$1(nodes, function (node) { + var nodeX = node.getLayout().x * kx; + node.setLayout({x: nodeX}, true); + }); +} + +/** + * Using Gauss-Seidel iterations method to compute the node depth(y-position) + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {module:echarts/data/Graph~Edge} edges edge of sankey view + * @param {number} height the whole height of the area to draw the view + * @param {number} nodeGap the vertical distance between two nodes + * in the same column. + * @param {number} iterations the number of iterations for the algorithm + */ +function computeNodeDepths(nodes, edges, height, nodeGap, iterations) { + var nodesByBreadth = nest() + .key(function (d) { + return d.getLayout().x; + }) + .sortKeys(ascending) + .entries(nodes) + .map(function (d) { + return d.values; + }); + + initializeNodeDepth(nodes, nodesByBreadth, edges, height, nodeGap); + resolveCollisions(nodesByBreadth, nodeGap, height); + + for (var alpha = 1; iterations > 0; iterations--) { + // 0.99 is a experience parameter, ensure that each iterations of + // changes as small as possible. + alpha *= 0.99; + relaxRightToLeft(nodesByBreadth, alpha); + resolveCollisions(nodesByBreadth, nodeGap, height); + relaxLeftToRight(nodesByBreadth, alpha); + resolveCollisions(nodesByBreadth, nodeGap, height); + } +} + +/** + * Compute the original y-position for each node + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the nodes x-position. + * @param {module:echarts/data/Graph~Edge} edges edge of sankey view + * @param {number} height the whole height of the area to draw the view + * @param {number} nodeGap the vertical distance between two nodes + */ +function initializeNodeDepth(nodes, nodesByBreadth, edges, height, nodeGap) { + var kyArray = []; + each$1(nodesByBreadth, function (nodes) { + var n = nodes.length; + var sum = 0; + each$1(nodes, function (node) { + sum += node.getLayout().value; + }); + var ky = (height - (n - 1) * nodeGap) / sum; + kyArray.push(ky); + }); + + kyArray.sort(function (a, b) { + return a - b; + }); + var ky0 = kyArray[0]; + + each$1(nodesByBreadth, function (nodes) { + each$1(nodes, function (node, i) { + node.setLayout({y: i}, true); + var nodeDy = node.getLayout().value * ky0; + node.setLayout({dy: nodeDy}, true); + }); + }); + + each$1(edges, function (edge) { + var edgeDy = +edge.getValue() * ky0; + edge.setLayout({dy: edgeDy}, true); + }); +} + +/** + * Resolve the collision of initialized depth (y-position) + * + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the nodes x-position. + * @param {number} nodeGap the vertical distance between two nodes + * @param {number} height the whole height of the area to draw the view + */ +function resolveCollisions(nodesByBreadth, nodeGap, height) { + each$1(nodesByBreadth, function (nodes) { + var node; + var dy; + var y0 = 0; + var n = nodes.length; + var i; + + nodes.sort(ascendingDepth); + + for (i = 0; i < n; i++) { + node = nodes[i]; + dy = y0 - node.getLayout().y; + if (dy > 0) { + var nodeY = node.getLayout().y + dy; + node.setLayout({y: nodeY}, true); + } + y0 = node.getLayout().y + node.getLayout().dy + nodeGap; + } + + // if the bottommost node goes outside the bounds, push it back up + dy = y0 - nodeGap - height; + if (dy > 0) { + var nodeY = node.getLayout().y - dy; + node.setLayout({y: nodeY}, true); + y0 = node.getLayout().y; + for (i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.getLayout().y + node.getLayout().dy + nodeGap - y0; + if (dy > 0) { + nodeY = node.getLayout().y - dy; + node.setLayout({y: nodeY}, true); + } + y0 = node.getLayout().y; + } + } + }); +} + +/** + * Change the y-position of the nodes, except most the right side nodes + * + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the node x-position. + * @param {number} alpha parameter used to adjust the nodes y-position + */ +function relaxRightToLeft(nodesByBreadth, alpha) { + each$1(nodesByBreadth.slice().reverse(), function (nodes) { + each$1(nodes, function (node) { + if (node.outEdges.length) { + var y = sum(node.outEdges, weightedTarget) / sum(node.outEdges, getEdgeValue); + var nodeY = node.getLayout().y + (y - center$1(node)) * alpha; + node.setLayout({y: nodeY}, true); + } + }); + }); +} + +function weightedTarget(edge) { + return center$1(edge.node2) * edge.getValue(); +} + +/** + * Change the y-position of the nodes, except most the left side nodes + * + * @param {Array.>} nodesByBreadth + * group by the array of all sankey nodes based on the node x-position. + * @param {number} alpha parameter used to adjust the nodes y-position + */ +function relaxLeftToRight(nodesByBreadth, alpha) { + each$1(nodesByBreadth, function (nodes) { + each$1(nodes, function (node) { + if (node.inEdges.length) { + var y = sum(node.inEdges, weightedSource) / sum(node.inEdges, getEdgeValue); + var nodeY = node.getLayout().y + (y - center$1(node)) * alpha; + node.setLayout({y: nodeY}, true); + } + }); + }); +} + +function weightedSource(edge) { + return center$1(edge.node1) * edge.getValue(); +} + +/** + * Compute the depth(y-position) of each edge + * + * @param {module:echarts/data/Graph~Node} nodes node of sankey view + */ +function computeEdgeDepths(nodes) { + each$1(nodes, function (node) { + node.outEdges.sort(ascendingTargetDepth); + node.inEdges.sort(ascendingSourceDepth); + }); + each$1(nodes, function (node) { + var sy = 0; + var ty = 0; + each$1(node.outEdges, function (edge) { + edge.setLayout({sy: sy}, true); + sy += edge.getLayout().dy; + }); + each$1(node.inEdges, function (edge) { + edge.setLayout({ty: ty}, true); + ty += edge.getLayout().dy; + }); + }); +} + +function ascendingTargetDepth(a, b) { + return a.node2.getLayout().y - b.node2.getLayout().y; +} + +function ascendingSourceDepth(a, b) { + return a.node1.getLayout().y - b.node1.getLayout().y; +} + +function sum(array, f) { + var sum = 0; + var len = array.length; + var i = -1; + while (++i < len) { + var value = +f.call(array, array[i], i); + if (!isNaN(value)) { + sum += value; + } + } + return sum; +} + +function center$1(node) { + return node.getLayout().y + node.getLayout().dy / 2; +} + +function ascendingDepth(a, b) { + return a.getLayout().y - b.getLayout().y; +} + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a === b ? 0 : NaN; +} + +function getEdgeValue(edge) { + return edge.getValue(); +} + +/** + * @file Visual encoding for sankey view + * @author Deqing Li(annong035@gmail.com) + */ + +var sankeyVisual = function (ecModel, payload) { + ecModel.eachSeriesByType('sankey', function (seriesModel) { + var graph = seriesModel.getGraph(); + var nodes = graph.nodes; + + nodes.sort(function (a, b) { + return a.getLayout().value - b.getLayout().value; + }); + + var minValue = nodes[0].getLayout().value; + var maxValue = nodes[nodes.length - 1].getLayout().value; + + each$1(nodes, function (node) { + var mapping = new VisualMapping({ + type: 'color', + mappingMethod: 'linear', + dataExtent: [minValue, maxValue], + visual: seriesModel.get('color') + }); + + var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value); + node.setVisual('color', mapValueToColor); + // If set itemStyle.normal.color + var itemModel = node.getModel(); + var customColor = itemModel.get('itemStyle.normal.color'); + if (customColor != null) { + node.setVisual('color', customColor); + } + }); + + }); +}; + +registerLayout(sankeyLayout); +registerVisual(sankeyVisual); + +/** + * @module echarts/chart/helper/Symbol + */ + +var WhiskerPath = Path.extend({ + + type: 'whiskerInBox', + + shape: {}, + + buildPath: function (ctx, shape) { + for (var i in shape) { + if (shape.hasOwnProperty(i) && i.indexOf('ends') === 0) { + var pts = shape[i]; + ctx.moveTo(pts[0][0], pts[0][1]); + ctx.lineTo(pts[1][0], pts[1][1]); + } + } + } +}); + +/** + * @constructor + * @alias {module:echarts/chart/helper/WhiskerBox} + * @param {module:echarts/data/List} data + * @param {number} idx + * @param {Function} styleUpdater + * @param {boolean} isInit + * @extends {module:zrender/graphic/Group} + */ +function WhiskerBox(data, idx, styleUpdater, isInit) { + Group.call(this); + + /** + * @type {number} + * @readOnly + */ + this.bodyIndex; + + /** + * @type {number} + * @readOnly + */ + this.whiskerIndex; + + /** + * @type {Function} + */ + this.styleUpdater = styleUpdater; + + this._createContent(data, idx, isInit); + + this.updateData(data, idx, isInit); + + /** + * Last series model. + * @type {module:echarts/model/Series} + */ + this._seriesModel; +} + +var whiskerBoxProto = WhiskerBox.prototype; + +whiskerBoxProto._createContent = function (data, idx, isInit) { + var itemLayout = data.getItemLayout(idx); + var constDim = itemLayout.chartLayout === 'horizontal' ? 1 : 0; + var count = 0; + + // Whisker element. + this.add(new Polygon({ + shape: { + points: isInit + ? transInit(itemLayout.bodyEnds, constDim, itemLayout) + : itemLayout.bodyEnds + }, + style: {strokeNoScale: true}, + z2: 100 + })); + this.bodyIndex = count++; + + // Box element. + var whiskerEnds = map(itemLayout.whiskerEnds, function (ends) { + return isInit ? transInit(ends, constDim, itemLayout) : ends; + }); + this.add(new WhiskerPath({ + shape: makeWhiskerEndsShape(whiskerEnds), + style: {strokeNoScale: true}, + z2: 100 + })); + this.whiskerIndex = count++; +}; + +function transInit(points, dim, itemLayout) { + return map(points, function (point) { + point = point.slice(); + point[dim] = itemLayout.initBaseline; + return point; + }); +} + +function makeWhiskerEndsShape(whiskerEnds) { + // zr animation only support 2-dim array. + var shape = {}; + each$1(whiskerEnds, function (ends, i) { + shape['ends' + i] = ends; + }); + return shape; +} + +/** + * Update symbol properties + * @param {module:echarts/data/List} data + * @param {number} idx + */ +whiskerBoxProto.updateData = function (data, idx, isInit) { + var seriesModel = this._seriesModel = data.hostModel; + var itemLayout = data.getItemLayout(idx); + var updateMethod = graphic[isInit ? 'initProps' : 'updateProps']; + // this.childAt(this.bodyIndex).stopAnimation(true); + // this.childAt(this.whiskerIndex).stopAnimation(true); + updateMethod( + this.childAt(this.bodyIndex), + {shape: {points: itemLayout.bodyEnds}}, + seriesModel, idx + ); + updateMethod( + this.childAt(this.whiskerIndex), + {shape: makeWhiskerEndsShape(itemLayout.whiskerEnds)}, + seriesModel, idx + ); + + this.styleUpdater.call(null, this, data, idx); +}; + +inherits(WhiskerBox, Group); + + +/** + * @constructor + * @alias module:echarts/chart/helper/WhiskerBoxDraw + */ +function WhiskerBoxDraw(styleUpdater) { + this.group = new Group(); + this.styleUpdater = styleUpdater; +} + +var whiskerBoxDrawProto = WhiskerBoxDraw.prototype; + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + */ +whiskerBoxDrawProto.updateData = function (data) { + var group = this.group; + var oldData = this._data; + var styleUpdater = this.styleUpdater; + + data.diff(oldData) + .add(function (newIdx) { + if (data.hasValue(newIdx)) { + var symbolEl = new WhiskerBox(data, newIdx, styleUpdater, true); + data.setItemGraphicEl(newIdx, symbolEl); + group.add(symbolEl); + } + }) + .update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + + // Empty data + if (!data.hasValue(newIdx)) { + group.remove(symbolEl); + return; + } + + if (!symbolEl) { + symbolEl = new WhiskerBox(data, newIdx, styleUpdater); + } + else { + symbolEl.updateData(data, newIdx); + } + + // Add back + group.add(symbolEl); + + data.setItemGraphicEl(newIdx, symbolEl); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }) + .execute(); + + this._data = data; +}; + +/** + * Remove symbols. + * @param {module:echarts/data/List} data + */ +whiskerBoxDrawProto.remove = function () { + var group = this.group; + var data = this._data; + this._data = null; + data && data.eachItemGraphicEl(function (el) { + el && group.remove(el); + }); +}; + +var seriesModelMixin = { + + /** + * @private + * @type {string} + */ + _baseAxisDim: null, + + /** + * @override + */ + getInitialData: function (option, ecModel) { + // When both types of xAxis and yAxis are 'value', layout is + // needed to be specified by user. Otherwise, layout can be + // judged by which axis is category. + + var categories; + + var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex')); + var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex')); + var xAxisType = xAxisModel.get('type'); + var yAxisType = yAxisModel.get('type'); + var addOrdinal; + + // FIXME + // 考虑时间轴 + + if (xAxisType === 'category') { + option.layout = 'horizontal'; + categories = xAxisModel.getCategories(); + addOrdinal = true; + } + else if (yAxisType === 'category') { + option.layout = 'vertical'; + categories = yAxisModel.getCategories(); + addOrdinal = true; + } + else { + option.layout = option.layout || 'horizontal'; + } + + var coordDims = ['x', 'y']; + var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1; + var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex]; + var otherAxisDim = coordDims[1 - baseAxisDimIndex]; + var data = option.data; + + addOrdinal && each$1(data, function (item, index) { + if (item.value && isArray(item.value)) { + item.value.unshift(index); + } else { + isArray(item) && item.unshift(index); + } + }); + + var defaultValueDimensions = this.defaultValueDimensions; + var dimensions = [{ + name: baseAxisDim, + otherDims: { + tooltip: false + }, + dimsDef: ['base'] + }, { + name: otherAxisDim, + dimsDef: defaultValueDimensions.slice() + }]; + + dimensions = completeDimensions(dimensions, data, { + encodeDef: this.get('encode'), + dimsDef: this.get('dimensions'), + // Consider empty data entry. + dimCount: defaultValueDimensions.length + 1 + }); + + var list = new List(dimensions, this); + list.initData(data, categories ? categories.slice() : null); + + return list; + }, + + /** + * If horizontal, base axis is x, otherwise y. + * @override + */ + getBaseAxis: function () { + var dim = this._baseAxisDim; + return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis; + } + +}; + +var viewMixin = { + + init: function () { + /** + * Old data. + * @private + * @type {module:echarts/chart/helper/WhiskerBoxDraw} + */ + var whiskerBoxDraw = this._whiskerBoxDraw = new WhiskerBoxDraw( + this.getStyleUpdater() + ); + this.group.add(whiskerBoxDraw.group); + }, + + render: function (seriesModel, ecModel, api) { + this._whiskerBoxDraw.updateData(seriesModel.getData()); + }, + + remove: function (ecModel) { + this._whiskerBoxDraw.remove(); + } +}; + +var BoxplotSeries = SeriesModel.extend({ + + type: 'series.boxplot', + + dependencies: ['xAxis', 'yAxis', 'grid'], + + // TODO + // box width represents group size, so dimension should have 'size'. + + /** + * @see + * The meanings of 'min' and 'max' depend on user, + * and echarts do not need to know it. + * @readOnly + */ + defaultValueDimensions: ['min', 'Q1', 'median', 'Q3', 'max'], + + /** + * @type {Array.} + * @readOnly + */ + dimensions: null, + + /** + * @override + */ + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + + hoverAnimation: true, + + // xAxisIndex: 0, + // yAxisIndex: 0, + + layout: null, // 'horizontal' or 'vertical' + boxWidth: [7, 50], // [min, max] can be percent of band width. + + itemStyle: { + normal: { + color: '#fff', + borderWidth: 1 + }, + emphasis: { + borderWidth: 2, + shadowBlur: 5, + shadowOffsetX: 2, + shadowOffsetY: 2, + shadowColor: 'rgba(0,0,0,0.4)' + } + }, + + animationEasing: 'elasticOut', + animationDuration: 800 + } +}); + +mixin(BoxplotSeries, seriesModelMixin, true); + +var BoxplotView = Chart.extend({ + + type: 'boxplot', + + getStyleUpdater: function () { + return updateStyle$1; + }, + + dispose: noop +}); + +mixin(BoxplotView, viewMixin, true); + +// Update common properties +var normalStyleAccessPath$1 = ['itemStyle', 'normal']; +var emphasisStyleAccessPath$1 = ['itemStyle', 'emphasis']; + +function updateStyle$1(itemGroup, data, idx) { + var itemModel = data.getItemModel(idx); + var normalItemStyleModel = itemModel.getModel(normalStyleAccessPath$1); + var borderColor = data.getItemVisual(idx, 'color'); + + // Exclude borderColor. + var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']); + + var whiskerEl = itemGroup.childAt(itemGroup.whiskerIndex); + whiskerEl.style.set(itemStyle); + whiskerEl.style.stroke = borderColor; + whiskerEl.dirty(); + + var bodyEl = itemGroup.childAt(itemGroup.bodyIndex); + bodyEl.style.set(itemStyle); + bodyEl.style.stroke = borderColor; + bodyEl.dirty(); + + var hoverStyle = itemModel.getModel(emphasisStyleAccessPath$1).getItemStyle(); + setHoverStyle(itemGroup, hoverStyle); +} + +var borderColorQuery = ['itemStyle', 'normal', 'borderColor']; + +var boxplotVisual = function (ecModel, api) { + + var globalColors = ecModel.get('color'); + + ecModel.eachRawSeriesByType('boxplot', function (seriesModel) { + + var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length]; + var data = seriesModel.getData(); + + data.setVisual({ + legendSymbol: 'roundRect', + // Use name 'color' but not 'borderColor' for legend usage and + // visual coding from other component like dataRange. + color: seriesModel.get(borderColorQuery) || defaulColor + }); + + // Only visible series has each data be visual encoded + if (!ecModel.isSeriesFiltered(seriesModel)) { + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + data.setItemVisual( + idx, + {color: itemModel.get(borderColorQuery, true)} + ); + }); + } + }); + +}; + +var each$16 = each$1; + +var boxplotLayout = function (ecModel) { + + var groupResult = groupSeriesByAxis(ecModel); + + each$16(groupResult, function (groupItem) { + var seriesModels = groupItem.seriesModels; + + if (!seriesModels.length) { + return; + } + + calculateBase(groupItem); + + each$16(seriesModels, function (seriesModel, idx) { + layoutSingleSeries( + seriesModel, + groupItem.boxOffsetList[idx], + groupItem.boxWidthList[idx] + ); + }); + }); +}; + +/** + * Group series by axis. + */ +function groupSeriesByAxis(ecModel) { + var result = []; + var axisList = []; + + ecModel.eachSeriesByType('boxplot', function (seriesModel) { + var baseAxis = seriesModel.getBaseAxis(); + var idx = indexOf(axisList, baseAxis); + + if (idx < 0) { + idx = axisList.length; + axisList[idx] = baseAxis; + result[idx] = {axis: baseAxis, seriesModels: []}; + } + + result[idx].seriesModels.push(seriesModel); + }); + + return result; +} + +/** + * Calculate offset and box width for each series. + */ +function calculateBase(groupItem) { + var extent; + var baseAxis = groupItem.axis; + var seriesModels = groupItem.seriesModels; + var seriesCount = seriesModels.length; + + var boxWidthList = groupItem.boxWidthList = []; + var boxOffsetList = groupItem.boxOffsetList = []; + var boundList = []; + + var bandWidth; + if (baseAxis.type === 'category') { + bandWidth = baseAxis.getBandWidth(); + } + else { + var maxDataCount = 0; + each$16(seriesModels, function (seriesModel) { + maxDataCount = Math.max(maxDataCount, seriesModel.getData().count()); + }); + extent = baseAxis.getExtent(), + Math.abs(extent[1] - extent[0]) / maxDataCount; + } + + each$16(seriesModels, function (seriesModel) { + var boxWidthBound = seriesModel.get('boxWidth'); + if (!isArray(boxWidthBound)) { + boxWidthBound = [boxWidthBound, boxWidthBound]; + } + boundList.push([ + parsePercent$1(boxWidthBound[0], bandWidth) || 0, + parsePercent$1(boxWidthBound[1], bandWidth) || 0 + ]); + }); + + var availableWidth = bandWidth * 0.8 - 2; + var boxGap = availableWidth / seriesCount * 0.3; + var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount; + var base = boxWidth / 2 - availableWidth / 2; + + each$16(seriesModels, function (seriesModel, idx) { + boxOffsetList.push(base); + base += boxGap + boxWidth; + + boxWidthList.push( + Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1]) + ); + }); +} + +/** + * Calculate points location for each series. + */ +function layoutSingleSeries(seriesModel, offset, boxWidth) { + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + var halfWidth = boxWidth / 2; + var chartLayout = seriesModel.get('layout'); + var variableDim = chartLayout === 'horizontal' ? 0 : 1; + var constDim = 1 - variableDim; + var coordDims = ['x', 'y']; + var vDims = []; + var cDim; + + each$1(data.dimensions, function (dimName) { + var dimInfo = data.getDimensionInfo(dimName); + var coordDim = dimInfo.coordDim; + if (coordDim === coordDims[constDim]) { + vDims.push(dimName); + } + else if (coordDim === coordDims[variableDim]) { + cDim = dimName; + } + }); + + if (cDim == null || vDims.length < 5) { + return; + } + + data.each([cDim].concat(vDims), function () { + var args = arguments; + var axisDimVal = args[0]; + var idx = args[vDims.length + 1]; + + var median = getPoint(args[3]); + var end1 = getPoint(args[1]); + var end5 = getPoint(args[5]); + var whiskerEnds = [ + [end1, getPoint(args[2])], + [end5, getPoint(args[4])] + ]; + layEndLine(end1); + layEndLine(end5); + layEndLine(median); + + var bodyEnds = []; + addBodyEnd(whiskerEnds[0][1], 0); + addBodyEnd(whiskerEnds[1][1], 1); + + data.setItemLayout(idx, { + chartLayout: chartLayout, + initBaseline: median[constDim], + median: median, + bodyEnds: bodyEnds, + whiskerEnds: whiskerEnds + }); + + function getPoint(val) { + var p = []; + p[variableDim] = axisDimVal; + p[constDim] = val; + var point; + if (isNaN(axisDimVal) || isNaN(val)) { + point = [NaN, NaN]; + } + else { + point = coordSys.dataToPoint(p); + point[variableDim] += offset; + } + return point; + } + + function addBodyEnd(point, start) { + var point1 = point.slice(); + var point2 = point.slice(); + point1[variableDim] += halfWidth; + point2[variableDim] -= halfWidth; + start + ? bodyEnds.push(point1, point2) + : bodyEnds.push(point2, point1); + } + + function layEndLine(endCenter) { + var line = [endCenter.slice(), endCenter.slice()]; + line[0][variableDim] -= halfWidth; + line[1][variableDim] += halfWidth; + whiskerEnds.push(line); + } + }); +} + +registerVisual(boxplotVisual); +registerLayout(boxplotLayout); + +var CandlestickSeries = SeriesModel.extend({ + + type: 'series.candlestick', + + dependencies: ['xAxis', 'yAxis', 'grid'], + + /** + * @readOnly + */ + defaultValueDimensions: ['open', 'close', 'lowest', 'highest'], + + /** + * @type {Array.} + * @readOnly + */ + dimensions: null, + + /** + * @override + */ + defaultOption: { + zlevel: 0, // 一级层叠 + z: 2, // 二级层叠 + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + + hoverAnimation: true, + + // xAxisIndex: 0, + // yAxisIndex: 0, + + layout: null, // 'horizontal' or 'vertical' + + itemStyle: { + normal: { + color: '#c23531', // 阳线 positive + color0: '#314656', // 阴线 negative '#c23531', '#314656' + borderWidth: 1, + // FIXME + // ec2中使用的是lineStyle.color 和 lineStyle.color0 + borderColor: '#c23531', + borderColor0: '#314656' + }, + emphasis: { + borderWidth: 2 + } + }, + + barMaxWidth: null, + barMinWidth: null, + barWidth: null, + + animationUpdate: false, + animationEasing: 'linear', + animationDuration: 300 + }, + + /** + * Get dimension for shadow in dataZoom + * @return {string} dimension name + */ + getShadowDim: function () { + return 'open'; + }, + + brushSelector: function (dataIndex, data, selectors) { + var itemLayout = data.getItemLayout(dataIndex); + return selectors.rect(itemLayout.brushRect); + } + +}); + +mixin(CandlestickSeries, seriesModelMixin, true); + +var CandlestickView = Chart.extend({ + + type: 'candlestick', + + getStyleUpdater: function () { + return updateStyle$2; + }, + + dispose: noop +}); + +mixin(CandlestickView, viewMixin, true); + +// Update common properties +var normalStyleAccessPath$2 = ['itemStyle', 'normal']; +var emphasisStyleAccessPath$2 = ['itemStyle', 'emphasis']; + +function updateStyle$2(itemGroup, data, idx) { + var itemModel = data.getItemModel(idx); + var normalItemStyleModel = itemModel.getModel(normalStyleAccessPath$2); + var color = data.getItemVisual(idx, 'color'); + var borderColor = data.getItemVisual(idx, 'borderColor') || color; + + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + var itemStyle = normalItemStyleModel.getItemStyle( + ['color', 'color0', 'borderColor', 'borderColor0'] + ); + + var whiskerEl = itemGroup.childAt(itemGroup.whiskerIndex); + whiskerEl.useStyle(itemStyle); + whiskerEl.style.stroke = borderColor; + + var bodyEl = itemGroup.childAt(itemGroup.bodyIndex); + bodyEl.useStyle(itemStyle); + bodyEl.style.fill = color; + bodyEl.style.stroke = borderColor; + + var hoverStyle = itemModel.getModel(emphasisStyleAccessPath$2).getItemStyle(); + setHoverStyle(itemGroup, hoverStyle); +} + +var preprocessor = function (option) { + if (!option || !isArray(option.series)) { + return; + } + + // Translate 'k' to 'candlestick'. + each$1(option.series, function (seriesItem) { + if (isObject(seriesItem) && seriesItem.type === 'k') { + seriesItem.type = 'candlestick'; + } + }); +}; + +var positiveBorderColorQuery = ['itemStyle', 'normal', 'borderColor']; +var negativeBorderColorQuery = ['itemStyle', 'normal', 'borderColor0']; +var positiveColorQuery = ['itemStyle', 'normal', 'color']; +var negativeColorQuery = ['itemStyle', 'normal', 'color0']; + +var candlestickVisual = function (ecModel, api) { + + ecModel.eachRawSeriesByType('candlestick', function (seriesModel) { + + var data = seriesModel.getData(); + + data.setVisual({ + legendSymbol: 'roundRect' + }); + + // Only visible series has each data be visual encoded + if (!ecModel.isSeriesFiltered(seriesModel)) { + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var sign = data.getItemLayout(idx).sign; + + data.setItemVisual( + idx, + { + color: itemModel.get( + sign > 0 ? positiveColorQuery : negativeColorQuery + ), + borderColor: itemModel.get( + sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery + ) + } + ); + }); + } + }); + +}; + +var retrieve2$1 = retrieve2; + +var candlestickLayout = function (ecModel) { + + ecModel.eachSeriesByType('candlestick', function (seriesModel) { + + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + var candleWidth = calculateCandleWidth(seriesModel, data); + var chartLayout = seriesModel.get('layout'); + var variableDim = chartLayout === 'horizontal' ? 0 : 1; + var constDim = 1 - variableDim; + var coordDims = ['x', 'y']; + var vDims = []; + var cDim; + + each$1(data.dimensions, function (dimName) { + var dimInfo = data.getDimensionInfo(dimName); + var coordDim = dimInfo.coordDim; + if (coordDim === coordDims[constDim]) { + vDims.push(dimName); + } + else if (coordDim === coordDims[variableDim]) { + cDim = dimName; + } + }); + + if (cDim == null || vDims.length < 4) { + return; + } + + var dataIndex = 0; + + data.each([cDim].concat(vDims), function () { + var args = arguments; + var axisDimVal = args[0]; + var idx = args[vDims.length + 1]; + + var openVal = args[1]; + var closeVal = args[2]; + var lowestVal = args[3]; + var highestVal = args[4]; + + var ocLow = Math.min(openVal, closeVal); + var ocHigh = Math.max(openVal, closeVal); + + var ocLowPoint = getPoint(ocLow); + var ocHighPoint = getPoint(ocHigh); + var lowestPoint = getPoint(lowestVal); + var highestPoint = getPoint(highestVal); + + var whiskerEnds = [ + [ + subPixelOptimizePoint(highestPoint), + subPixelOptimizePoint(ocHighPoint) + ], + [ + subPixelOptimizePoint(lowestPoint), + subPixelOptimizePoint(ocLowPoint) + ] + ]; + + var bodyEnds = []; + addBodyEnd(ocHighPoint, 0); + addBodyEnd(ocLowPoint, 1); + + var sign; + if (openVal > closeVal) { + sign = -1; + } + else if (openVal < closeVal) { + sign = 1; + } + else { + // If close === open, compare with close of last record + if (dataIndex > 0) { + sign = data.getItemModel(dataIndex - 1).get()[2] + <= closeVal + ? 1 + : -1; + } + else { + // No record of previous, set to be positive + sign = 1; + } + } + + data.setItemLayout(idx, { + chartLayout: chartLayout, + sign: sign, + initBaseline: openVal > closeVal + ? ocHighPoint[constDim] : ocLowPoint[constDim], // open point. + bodyEnds: bodyEnds, + whiskerEnds: whiskerEnds, + brushRect: makeBrushRect() + }); + + ++dataIndex; + + function getPoint(val) { + var p = []; + p[variableDim] = axisDimVal; + p[constDim] = val; + return (isNaN(axisDimVal) || isNaN(val)) + ? [NaN, NaN] + : coordSys.dataToPoint(p); + } + + function addBodyEnd(point, start) { + var point1 = point.slice(); + var point2 = point.slice(); + + point1[variableDim] = subPixelOptimize( + point1[variableDim] + candleWidth / 2, 1, false + ); + point2[variableDim] = subPixelOptimize( + point2[variableDim] - candleWidth / 2, 1, true + ); + + start + ? bodyEnds.push(point1, point2) + : bodyEnds.push(point2, point1); + } + + function makeBrushRect() { + var pmin = getPoint(Math.min(openVal, closeVal, lowestVal, highestVal)); + var pmax = getPoint(Math.max(openVal, closeVal, lowestVal, highestVal)); + + pmin[variableDim] -= candleWidth / 2; + pmax[variableDim] -= candleWidth / 2; + + return { + x: pmin[0], + y: pmin[1], + width: constDim ? candleWidth : pmax[0] - pmin[0], + height: constDim ? pmax[1] - pmin[1] : candleWidth + }; + } + + function subPixelOptimizePoint(point) { + point[variableDim] = subPixelOptimize(point[variableDim], 1); + return point; + } + + }, true); + }); +}; + +function calculateCandleWidth(seriesModel, data) { + var baseAxis = seriesModel.getBaseAxis(); + var extent; + + var bandWidth = baseAxis.type === 'category' + ? baseAxis.getBandWidth() + : ( + extent = baseAxis.getExtent(), + Math.abs(extent[1] - extent[0]) / data.count() + ); + + var barMaxWidth = parsePercent$1( + retrieve2$1(seriesModel.get('barMaxWidth'), bandWidth), + bandWidth + ); + var barMinWidth = parsePercent$1( + retrieve2$1(seriesModel.get('barMinWidth'), 1), + bandWidth + ); + var barWidth = seriesModel.get('barWidth'); + return barWidth != null + ? parsePercent$1(barWidth, bandWidth) + // Put max outer to ensure bar visible in spite of overlap. + : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth); +} + +registerPreprocessor(preprocessor); +registerVisual(candlestickVisual); +registerLayout(candlestickLayout); + +SeriesModel.extend({ + + type: 'series.effectScatter', + + dependencies: ['grid', 'polar'], + + getInitialData: function (option, ecModel) { + var list = createListFromArray(option.data, this, ecModel); + return list; + }, + + brushSelector: 'point', + + defaultOption: { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + + effectType: 'ripple', + + progressive: 0, + + // When to show the effect, option: 'render'|'emphasis' + showEffectOn: 'render', + + // Ripple effect config + rippleEffect: { + period: 4, + // Scale of ripple + scale: 2.5, + // Brush type can be fill or stroke + brushType: 'fill' + }, + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Polar coordinate system + // polarIndex: 0, + + // Geo coordinate system + // geoIndex: 0, + + // symbol: null, // 图形类型 + symbolSize: 10 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 + // symbolRotate: null, // 图形旋转控制 + + // large: false, + // Available when large is true + // largeThreshold: 2000, + + // itemStyle: { + // normal: { + // opacity: 1 + // } + // } + } + +}); + +/** + * Symbol with ripple effect + * @module echarts/chart/helper/EffectSymbol + */ + +var EFFECT_RIPPLE_NUMBER = 3; + +function normalizeSymbolSize$1(symbolSize) { + if (!isArray(symbolSize)) { + symbolSize = [+symbolSize, +symbolSize]; + } + return symbolSize; +} + +function updateRipplePath(rippleGroup, effectCfg) { + rippleGroup.eachChild(function (ripplePath) { + ripplePath.attr({ + z: effectCfg.z, + zlevel: effectCfg.zlevel, + style: { + stroke: effectCfg.brushType === 'stroke' ? effectCfg.color : null, + fill: effectCfg.brushType === 'fill' ? effectCfg.color : null + } + }); + }); +} +/** + * @constructor + * @param {module:echarts/data/List} data + * @param {number} idx + * @extends {module:zrender/graphic/Group} + */ +function EffectSymbol(data, idx) { + Group.call(this); + + var symbol = new SymbolClz$1(data, idx); + var rippleGroup = new Group(); + this.add(symbol); + this.add(rippleGroup); + + rippleGroup.beforeUpdate = function () { + this.attr(symbol.getScale()); + }; + this.updateData(data, idx); +} + +var effectSymbolProto = EffectSymbol.prototype; + +effectSymbolProto.stopEffectAnimation = function () { + this.childAt(1).removeAll(); +}; + +effectSymbolProto.startEffectAnimation = function (effectCfg) { + var symbolType = effectCfg.symbolType; + var color = effectCfg.color; + var rippleGroup = this.childAt(1); + + for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) { + // var ripplePath = createSymbol( + // symbolType, -0.5, -0.5, 1, 1, color + // ); + // If width/height are set too small (e.g., set to 1) on ios10 + // and macOS Sierra, a circle stroke become a rect, no matter what + // the scale is set. So we set width/height as 2. See #4136. + var ripplePath = createSymbol( + symbolType, -1, -1, 2, 2, color + ); + ripplePath.attr({ + style: { + strokeNoScale: true + }, + z2: 99, + silent: true, + scale: [0.5, 0.5] + }); + + var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset; + // TODO Configurable effectCfg.period + ripplePath.animate('', true) + .when(effectCfg.period, { + scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2] + }) + .delay(delay) + .start(); + ripplePath.animateStyle(true) + .when(effectCfg.period, { + opacity: 0 + }) + .delay(delay) + .start(); + + rippleGroup.add(ripplePath); + } + + updateRipplePath(rippleGroup, effectCfg); +}; + +/** + * Update effect symbol + */ +effectSymbolProto.updateEffectAnimation = function (effectCfg) { + var oldEffectCfg = this._effectCfg; + var rippleGroup = this.childAt(1); + + // Must reinitialize effect if following configuration changed + var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale']; + for (var i = 0; i < DIFFICULT_PROPS.length; i++) { + var propName = DIFFICULT_PROPS[i]; + if (oldEffectCfg[propName] !== effectCfg[propName]) { + this.stopEffectAnimation(); + this.startEffectAnimation(effectCfg); + return; + } + } + + updateRipplePath(rippleGroup, effectCfg); +}; + +/** + * Highlight symbol + */ +effectSymbolProto.highlight = function () { + this.trigger('emphasis'); +}; + +/** + * Downplay symbol + */ +effectSymbolProto.downplay = function () { + this.trigger('normal'); +}; + +/** + * Update symbol properties + * @param {module:echarts/data/List} data + * @param {number} idx + */ +effectSymbolProto.updateData = function (data, idx) { + var seriesModel = data.hostModel; + + this.childAt(0).updateData(data, idx); + + var rippleGroup = this.childAt(1); + var itemModel = data.getItemModel(idx); + var symbolType = data.getItemVisual(idx, 'symbol'); + var symbolSize = normalizeSymbolSize$1(data.getItemVisual(idx, 'symbolSize')); + var color = data.getItemVisual(idx, 'color'); + + rippleGroup.attr('scale', symbolSize); + + rippleGroup.traverse(function (ripplePath) { + ripplePath.attr({ + fill: color + }); + }); + + var symbolOffset = itemModel.getShallow('symbolOffset'); + if (symbolOffset) { + var pos = rippleGroup.position; + pos[0] = parsePercent$1(symbolOffset[0], symbolSize[0]); + pos[1] = parsePercent$1(symbolOffset[1], symbolSize[1]); + } + rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0; + + var effectCfg = {}; + + effectCfg.showEffectOn = seriesModel.get('showEffectOn'); + effectCfg.rippleScale = itemModel.get('rippleEffect.scale'); + effectCfg.brushType = itemModel.get('rippleEffect.brushType'); + effectCfg.period = itemModel.get('rippleEffect.period') * 1000; + effectCfg.effectOffset = idx / data.count(); + effectCfg.z = itemModel.getShallow('z') || 0; + effectCfg.zlevel = itemModel.getShallow('zlevel') || 0; + effectCfg.symbolType = symbolType; + effectCfg.color = color; + + this.off('mouseover').off('mouseout').off('emphasis').off('normal'); + + if (effectCfg.showEffectOn === 'render') { + this._effectCfg + ? this.updateEffectAnimation(effectCfg) + : this.startEffectAnimation(effectCfg); + + this._effectCfg = effectCfg; + } + else { + // Not keep old effect config + this._effectCfg = null; + + this.stopEffectAnimation(); + var symbol = this.childAt(0); + var onEmphasis = function () { + symbol.highlight(); + if (effectCfg.showEffectOn !== 'render') { + this.startEffectAnimation(effectCfg); + } + }; + var onNormal = function () { + symbol.downplay(); + if (effectCfg.showEffectOn !== 'render') { + this.stopEffectAnimation(); + } + }; + this.on('mouseover', onEmphasis, this) + .on('mouseout', onNormal, this) + .on('emphasis', onEmphasis, this) + .on('normal', onNormal, this); + } + + this._effectCfg = effectCfg; +}; + +effectSymbolProto.fadeOut = function (cb) { + this.off('mouseover').off('mouseout').off('emphasis').off('normal'); + cb && cb(); +}; + +inherits(EffectSymbol, Group); + +extendChartView({ + + type: 'effectScatter', + + init: function () { + this._symbolDraw = new SymbolDraw(EffectSymbol); + }, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var effectSymbolDraw = this._symbolDraw; + effectSymbolDraw.updateData(data); + this.group.add(effectSymbolDraw.group); + }, + + updateLayout: function () { + this._symbolDraw.updateLayout(); + }, + + remove: function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(api); + }, + + dispose: function () {} +}); + +registerVisual(curry( + visualSymbol, 'effectScatter', 'circle', null +)); +registerLayout(curry( + layoutPoints, 'effectScatter' +)); + +// Convert [ [{coord: []}, {coord: []}] ] +// to [ { coords: [[]] } ] +function preprocessOption(seriesOpt) { + var data = seriesOpt.data; + if (data && data[0] && data[0][0] && data[0][0].coord) { + if (__DEV__) { + console.warn('Lines data configuration has been changed to' + + ' { coords:[[1,2],[2,3]] }'); + } + seriesOpt.data = map(data, function (itemOpt) { + var coords = [ + itemOpt[0].coord, itemOpt[1].coord + ]; + var target = { + coords: coords + }; + if (itemOpt[0].name) { + target.fromName = itemOpt[0].name; + } + if (itemOpt[1].name) { + target.toName = itemOpt[1].name; + } + return mergeAll([target, itemOpt[0], itemOpt[1]]); + }); + } +} + +var LinesSeries = SeriesModel.extend({ + + type: 'series.lines', + + dependencies: ['grid', 'polar'], + + visualColorAccessPath: 'lineStyle.normal.color', + + init: function (option) { + // Not using preprocessor because mergeOption may not have series.type + preprocessOption(option); + + LinesSeries.superApply(this, 'init', arguments); + }, + + mergeOption: function (option) { + preprocessOption(option); + + LinesSeries.superApply(this, 'mergeOption', arguments); + }, + + getInitialData: function (option, ecModel) { + if (__DEV__) { + var CoordSys = CoordinateSystemManager.get(option.coordinateSystem); + if (!CoordSys) { + throw new Error('Unkown coordinate system ' + option.coordinateSystem); + } + } + + var lineData = new List(['value'], this); + lineData.hasItemOption = false; + lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) { + // dataItem is simply coords + if (dataItem instanceof Array) { + return NaN; + } + else { + lineData.hasItemOption = true; + var value = dataItem.value; + if (value != null) { + return value instanceof Array ? value[dimIndex] : value; + } + } + }); + + return lineData; + }, + + formatTooltip: function (dataIndex) { + var data = this.getData(); + var itemModel = data.getItemModel(dataIndex); + var name = itemModel.get('name'); + if (name) { + return name; + } + var fromName = itemModel.get('fromName'); + var toName = itemModel.get('toName'); + var html = []; + fromName != null && html.push(fromName); + toName != null && html.push(toName); + + return encodeHTML(html.join(' > ')); + }, + + defaultOption: { + coordinateSystem: 'geo', + zlevel: 0, + z: 2, + legendHoverLink: true, + + hoverAnimation: true, + // Cartesian coordinate system + xAxisIndex: 0, + yAxisIndex: 0, + + symbol: ['none', 'none'], + symbolSize: [10, 10], + // Geo coordinate system + geoIndex: 0, + + effect: { + show: false, + period: 4, + // Animation delay. support callback + // delay: 0, + // If move with constant speed px/sec + // period will be ignored if this property is > 0, + constantSpeed: 0, + symbol: 'circle', + symbolSize: 3, + loop: true, + // Length of trail, 0 - 1 + trailLength: 0.2 + // Same with lineStyle.normal.color + // color + }, + + large: false, + // Available when large is true + largeThreshold: 2000, + + // If lines are polyline + // polyline not support curveness, label, animation + polyline: false, + + label: { + normal: { + show: false, + position: 'end' + // distance: 5, + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + } + }, + + lineStyle: { + normal: { + opacity: 0.5 + } + } + } +}); + +/** + * Provide effect for line + * @module echarts/chart/helper/EffectLine + */ + +/** + * @constructor + * @extends {module:zrender/graphic/Group} + * @alias {module:echarts/chart/helper/Line} + */ +function EffectLine(lineData, idx, seriesScope) { + Group.call(this); + + this.add(this.createLine(lineData, idx, seriesScope)); + + this._updateEffectSymbol(lineData, idx); +} + +var effectLineProto = EffectLine.prototype; + +effectLineProto.createLine = function (lineData, idx, seriesScope) { + return new Line$1(lineData, idx, seriesScope); +}; + +effectLineProto._updateEffectSymbol = function (lineData, idx) { + var itemModel = lineData.getItemModel(idx); + var effectModel = itemModel.getModel('effect'); + var size = effectModel.get('symbolSize'); + var symbolType = effectModel.get('symbol'); + if (!isArray(size)) { + size = [size, size]; + } + var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color'); + var symbol = this.childAt(1); + + if (this._symbolType !== symbolType) { + // Remove previous + this.remove(symbol); + + symbol = createSymbol( + symbolType, -0.5, -0.5, 1, 1, color + ); + symbol.z2 = 100; + symbol.culling = true; + + this.add(symbol); + } + + // Symbol may be removed if loop is false + if (!symbol) { + return; + } + + // Shadow color is same with color in default + symbol.setStyle('shadowColor', color); + symbol.setStyle(effectModel.getItemStyle(['color'])); + + symbol.attr('scale', size); + + symbol.setColor(color); + symbol.attr('scale', size); + + this._symbolType = symbolType; + + this._updateEffectAnimation(lineData, effectModel, idx); +}; + +effectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) { + + var symbol = this.childAt(1); + if (!symbol) { + return; + } + + var self = this; + + var points = lineData.getItemLayout(idx); + + var period = effectModel.get('period') * 1000; + var loop = effectModel.get('loop'); + var constantSpeed = effectModel.get('constantSpeed'); + var delayExpr = retrieve(effectModel.get('delay'), function (idx) { + return idx / lineData.count() * period / 3; + }); + var isDelayFunc = typeof delayExpr === 'function'; + + // Ignore when updating + symbol.ignore = true; + + this.updateAnimationPoints(symbol, points); + + if (constantSpeed > 0) { + period = this.getLineLength(symbol) / constantSpeed * 1000; + } + + if (period !== this._period || loop !== this._loop) { + + symbol.stopAnimation(); + + var delay = delayExpr; + if (isDelayFunc) { + delay = delayExpr(idx); + } + if (symbol.__t > 0) { + delay = -period * symbol.__t; + } + symbol.__t = 0; + var animator = symbol.animate('', loop) + .when(period, { + __t: 1 + }) + .delay(delay) + .during(function () { + self.updateSymbolPosition(symbol); + }); + if (!loop) { + animator.done(function () { + self.remove(symbol); + }); + } + animator.start(); + } + + this._period = period; + this._loop = loop; +}; + +effectLineProto.getLineLength = function (symbol) { + // Not so accurate + return (dist(symbol.__p1, symbol.__cp1) + + dist(symbol.__cp1, symbol.__p2)); +}; + +effectLineProto.updateAnimationPoints = function (symbol, points) { + symbol.__p1 = points[0]; + symbol.__p2 = points[1]; + symbol.__cp1 = points[2] || [ + (points[0][0] + points[1][0]) / 2, + (points[0][1] + points[1][1]) / 2 + ]; +}; + +effectLineProto.updateData = function (lineData, idx, seriesScope) { + this.childAt(0).updateData(lineData, idx, seriesScope); + this._updateEffectSymbol(lineData, idx); +}; + +effectLineProto.updateSymbolPosition = function (symbol) { + var p1 = symbol.__p1; + var p2 = symbol.__p2; + var cp1 = symbol.__cp1; + var t = symbol.__t; + var pos = symbol.position; + var quadraticAt$$1 = quadraticAt; + var quadraticDerivativeAt$$1 = quadraticDerivativeAt; + pos[0] = quadraticAt$$1(p1[0], cp1[0], p2[0], t); + pos[1] = quadraticAt$$1(p1[1], cp1[1], p2[1], t); + + // Tangent + var tx = quadraticDerivativeAt$$1(p1[0], cp1[0], p2[0], t); + var ty = quadraticDerivativeAt$$1(p1[1], cp1[1], p2[1], t); + + symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; + + symbol.ignore = false; +}; + + +effectLineProto.updateLayout = function (lineData, idx) { + this.childAt(0).updateLayout(lineData, idx); + + var effectModel = lineData.getItemModel(idx).getModel('effect'); + this._updateEffectAnimation(lineData, effectModel, idx); +}; + +inherits(EffectLine, Group); + +/** + * @module echarts/chart/helper/Line + */ + +/** + * @constructor + * @extends {module:zrender/graphic/Group} + * @alias {module:echarts/chart/helper/Polyline} + */ +function Polyline$2(lineData, idx, seriesScope) { + Group.call(this); + + this._createPolyline(lineData, idx, seriesScope); +} + +var polylineProto = Polyline$2.prototype; + +polylineProto._createPolyline = function (lineData, idx, seriesScope) { + // var seriesModel = lineData.hostModel; + var points = lineData.getItemLayout(idx); + + var line = new Polyline({ + shape: { + points: points + } + }); + + this.add(line); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +polylineProto.updateData = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + + var line = this.childAt(0); + var target = { + shape: { + points: lineData.getItemLayout(idx) + } + }; + updateProps(line, target, seriesModel, idx); + + this._updateCommonStl(lineData, idx, seriesScope); +}; + +polylineProto._updateCommonStl = function (lineData, idx, seriesScope) { + var line = this.childAt(0); + var itemModel = lineData.getItemModel(idx); + + var visualColor = lineData.getItemVisual(idx, 'color'); + + var lineStyle = seriesScope && seriesScope.lineStyle; + var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle; + + if (!seriesScope || lineData.hasItemOption) { + lineStyle = itemModel.getModel('lineStyle.normal').getLineStyle(); + hoverLineStyle = itemModel.getModel('lineStyle.emphasis').getLineStyle(); + } + line.useStyle(defaults( + { + strokeNoScale: true, + fill: 'none', + stroke: visualColor + }, + lineStyle + )); + line.hoverStyle = hoverLineStyle; + + setHoverStyle(this); +}; + +polylineProto.updateLayout = function (lineData, idx) { + var polyline = this.childAt(0); + polyline.setShape('points', lineData.getItemLayout(idx)); +}; + +inherits(Polyline$2, Group); + +/** + * Provide effect for line + * @module echarts/chart/helper/EffectLine + */ + +/** + * @constructor + * @extends {module:echarts/chart/helper/EffectLine} + * @alias {module:echarts/chart/helper/Polyline} + */ +function EffectPolyline(lineData, idx, seriesScope) { + EffectLine.call(this, lineData, idx, seriesScope); + this._lastFrame = 0; + this._lastFramePercent = 0; +} + +var effectPolylineProto = EffectPolyline.prototype; + +// Overwrite +effectPolylineProto.createLine = function (lineData, idx, seriesScope) { + return new Polyline$2(lineData, idx, seriesScope); +}; + +// Overwrite +effectPolylineProto.updateAnimationPoints = function (symbol, points) { + this._points = points; + var accLenArr = [0]; + var len$$1 = 0; + for (var i = 1; i < points.length; i++) { + var p1 = points[i - 1]; + var p2 = points[i]; + len$$1 += dist(p1, p2); + accLenArr.push(len$$1); + } + if (len$$1 === 0) { + return; + } + + for (var i = 0; i < accLenArr.length; i++) { + accLenArr[i] /= len$$1; + } + this._offsets = accLenArr; + this._length = len$$1; +}; + +// Overwrite +effectPolylineProto.getLineLength = function (symbol) { + return this._length; +}; + +// Overwrite +effectPolylineProto.updateSymbolPosition = function (symbol) { + var t = symbol.__t; + var points = this._points; + var offsets = this._offsets; + var len$$1 = points.length; + + if (!offsets) { + // Has length 0 + return; + } + + var lastFrame = this._lastFrame; + var frame; + + if (t < this._lastFramePercent) { + // Start from the next frame + // PENDING start from lastFrame ? + var start = Math.min(lastFrame + 1, len$$1 - 1); + for (frame = start; frame >= 0; frame--) { + if (offsets[frame] <= t) { + break; + } + } + // PENDING really need to do this ? + frame = Math.min(frame, len$$1 - 2); + } + else { + for (var frame = lastFrame; frame < len$$1; frame++) { + if (offsets[frame] > t) { + break; + } + } + frame = Math.min(frame - 1, len$$1 - 2); + } + + lerp( + symbol.position, points[frame], points[frame + 1], + (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]) + ); + + var tx = points[frame + 1][0] - points[frame][0]; + var ty = points[frame + 1][1] - points[frame][1]; + symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; + + this._lastFrame = frame; + this._lastFramePercent = t; + + symbol.ignore = false; +}; + +inherits(EffectPolyline, EffectLine); + +// TODO Batch by color + +var LargeLineShape = extendShape({ + shape: { + polyline: false, + + segs: [] + }, + + buildPath: function (path, shape) { + var segs = shape.segs; + var isPolyline = shape.polyline; + + for (var i = 0; i < segs.length; i++) { + var seg = segs[i]; + if (isPolyline) { + path.moveTo(seg[0][0], seg[0][1]); + for (var j = 1; j < seg.length; j++) { + path.lineTo(seg[j][0], seg[j][1]); + } + } + else { + path.moveTo(seg[0][0], seg[0][1]); + if (seg.length > 2) { + path.quadraticCurveTo(seg[2][0], seg[2][1], seg[1][0], seg[1][1]); + } + else { + path.lineTo(seg[1][0], seg[1][1]); + } + } + } + }, + + findDataIndex: function (x, y) { + var shape = this.shape; + var segs = shape.segs; + var isPolyline = shape.polyline; + var lineWidth = Math.max(this.style.lineWidth, 1); + + // Not consider transform + for (var i = 0; i < segs.length; i++) { + var seg = segs[i]; + if (isPolyline) { + for (var j = 1; j < seg.length; j++) { + if (containStroke$1( + seg[j - 1][0], seg[j - 1][1], seg[j][0], seg[j][1], lineWidth, x, y + )) { + return i; + } + } + } + else { + if (seg.length > 2) { + if (containStroke$3( + seg[0][0], seg[0][1], seg[2][0], seg[2][1], seg[1][0], seg[1][1], lineWidth, x, y + )) { + return i; + } + } + else { + if (containStroke$1( + seg[0][0], seg[0][1], seg[1][0], seg[1][1], lineWidth, x, y + )) { + return i; + } + } + } + } + + return -1; + } +}); + +function LargeLineDraw() { + this.group = new Group(); + + this._lineEl = new LargeLineShape(); +} + +var largeLineProto = LargeLineDraw.prototype; + +/** + * Update symbols draw by new data + * @param {module:echarts/data/List} data + */ +largeLineProto.updateData = function (data) { + this.group.removeAll(); + + var lineEl = this._lineEl; + + var seriesModel = data.hostModel; + + lineEl.setShape({ + segs: data.mapArray(data.getItemLayout), + polyline: seriesModel.get('polyline') + }); + + lineEl.useStyle( + seriesModel.getModel('lineStyle.normal').getLineStyle() + ); + + var visualColor = data.getVisual('color'); + if (visualColor) { + lineEl.setStyle('stroke', visualColor); + } + lineEl.setStyle('fill'); + + // Enable tooltip + // PENDING May have performance issue when path is extremely large + lineEl.seriesIndex = seriesModel.seriesIndex; + lineEl.on('mousemove', function (e) { + lineEl.dataIndex = null; + var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY); + if (dataIndex > 0) { + // Provide dataIndex for tooltip + lineEl.dataIndex = dataIndex; + } + }); + + // Add back + this.group.add(lineEl); +}; + +largeLineProto.updateLayout = function (seriesModel) { + var data = seriesModel.getData(); + this._lineEl.setShape({ + segs: data.mapArray(data.getItemLayout) + }); +}; + +largeLineProto.remove = function () { + this.group.removeAll(); +}; + +extendChartView({ + + type: 'lines', + + init: function () {}, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var lineDraw = this._lineDraw; + + var hasEffect = seriesModel.get('effect.show'); + var isPolyline = seriesModel.get('polyline'); + var isLarge = seriesModel.get('large') && data.count() >= seriesModel.get('largeThreshold'); + + if (__DEV__) { + if (hasEffect && isLarge) { + console.warn('Large lines not support effect'); + } + } + if (hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLarge !== this._isLarge) { + if (lineDraw) { + lineDraw.remove(); + } + lineDraw = this._lineDraw = isLarge + ? new LargeLineDraw() + : new LineDraw( + isPolyline + ? (hasEffect ? EffectPolyline : Polyline$2) + : (hasEffect ? EffectLine : Line$1) + ); + this._hasEffet = hasEffect; + this._isPolyline = isPolyline; + this._isLarge = isLarge; + } + + var zlevel = seriesModel.get('zlevel'); + var trailLength = seriesModel.get('effect.trailLength'); + + var zr = api.getZr(); + // Avoid the drag cause ghost shadow + // FIXME Better way ? + // SVG doesn't support + var isSvg = zr.painter.getType() === 'svg'; + if (!isSvg) { + zr.painter.getLayer(zlevel).clear(true); + } + // Config layer with motion blur + if (this._lastZlevel != null && !isSvg) { + zr.configLayer(this._lastZlevel, { + motionBlur: false + }); + } + if (hasEffect && trailLength) { + if (__DEV__) { + var notInIndividual = false; + ecModel.eachSeries(function (otherSeriesModel) { + if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) { + notInIndividual = true; + } + }); + notInIndividual && console.warn('Lines with trail effect should have an individual zlevel'); + } + + if (!isSvg) { + zr.configLayer(zlevel, { + motionBlur: true, + lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0) + }); + } + } + + this.group.add(lineDraw.group); + + lineDraw.updateData(data); + + this._lastZlevel = zlevel; + }, + + updateLayout: function (seriesModel, ecModel, api) { + this._lineDraw.updateLayout(seriesModel); + // Not use motion when dragging or zooming + var zr = api.getZr(); + var isSvg = zr.painter.getType() === 'svg'; + if (!isSvg) { + zr.painter.getLayer(this._lastZlevel).clear(true); + } + }, + + remove: function (ecModel, api) { + this._lineDraw && this._lineDraw.remove(api, true); + // Clear motion when lineDraw is removed + var zr = api.getZr(); + var isSvg = zr.painter.getType() === 'svg'; + if (!isSvg) { + zr.painter.getLayer(this._lastZlevel).clear(true); + } + }, + + dispose: function () {} +}); + +var linesLayout = function (ecModel) { + ecModel.eachSeriesByType('lines', function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var lineData = seriesModel.getData(); + + // FIXME Use data dimensions ? + lineData.each(function (idx) { + var itemModel = lineData.getItemModel(idx); + + var coords = (itemModel.option instanceof Array) ? + itemModel.option : itemModel.get('coords'); + + if (__DEV__) { + if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) { + throw new Error('Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.'); + } + } + var pts = []; + + if (seriesModel.get('polyline')) { + for (var i = 0; i < coords.length; i++) { + pts.push(coordSys.dataToPoint(coords[i])); + } + } + else { + pts[0] = coordSys.dataToPoint(coords[0]); + pts[1] = coordSys.dataToPoint(coords[1]); + + var curveness = itemModel.get('lineStyle.normal.curveness'); + if (+curveness) { + pts[2] = [ + (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, + (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness + ]; + } + } + lineData.setItemLayout(idx, pts); + }); + }); +}; + +function normalize$2(a) { + if (!(a instanceof Array)) { + a = [a, a]; + } + return a; +} + +var linesVisual = function (ecModel) { + ecModel.eachSeriesByType('lines', function (seriesModel) { + var data = seriesModel.getData(); + var symbolType = normalize$2(seriesModel.get('symbol')); + var symbolSize = normalize$2(seriesModel.get('symbolSize')); + + var opacityQuery = 'lineStyle.normal.opacity'.split('.'); + + data.setVisual('fromSymbol', symbolType && symbolType[0]); + data.setVisual('toSymbol', symbolType && symbolType[1]); + data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]); + data.setVisual('toSymbolSize', symbolSize && symbolSize[1]); + data.setVisual('opacity', seriesModel.get(opacityQuery)); + + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var symbolType = normalize$2(itemModel.getShallow('symbol', true)); + var symbolSize = normalize$2(itemModel.getShallow('symbolSize', true)); + var opacity = itemModel.get(opacityQuery); + + symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]); + symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]); + symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]); + symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]); + + data.setItemVisual(idx, 'opacity', opacity); + }); + }); +}; + +registerLayout(linesLayout); +registerVisual(linesVisual); + +SeriesModel.extend({ + type: 'series.heatmap', + + getInitialData: function (option, ecModel) { + return createListFromArray(option.data, this, ecModel); + }, + + defaultOption: { + + // Cartesian2D or geo + coordinateSystem: 'cartesian2d', + + zlevel: 0, + + z: 2, + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Geo coordinate system + geoIndex: 0, + + blurSize: 30, + + pointSize: 20, + + maxOpacity: 1, + + minOpacity: 0 + } +}); + +/** + * @file defines echarts Heatmap Chart + * @author Ovilia (me@zhangwenli.com) + * Inspired by https://github.com/mourner/simpleheat + * + * @module + */ + +var GRADIENT_LEVELS = 256; + +/** + * Heatmap Chart + * + * @class + */ +function Heatmap() { + var canvas = createCanvas(); + this.canvas = canvas; + + this.blurSize = 30; + this.pointSize = 20; + + this.maxOpacity = 1; + this.minOpacity = 0; + + this._gradientPixels = {}; +} + +Heatmap.prototype = { + /** + * Renders Heatmap and returns the rendered canvas + * @param {Array} data array of data, each has x, y, value + * @param {number} width canvas width + * @param {number} height canvas height + */ + update: function(data, width, height, normalize, colorFunc, isInRange) { + var brush = this._getBrush(); + var gradientInRange = this._getGradient(data, colorFunc, 'inRange'); + var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange'); + var r = this.pointSize + this.blurSize; + + var canvas = this.canvas; + var ctx = canvas.getContext('2d'); + var len = data.length; + canvas.width = width; + canvas.height = height; + for (var i = 0; i < len; ++i) { + var p = data[i]; + var x = p[0]; + var y = p[1]; + var value = p[2]; + + // calculate alpha using value + var alpha = normalize(value); + + // draw with the circle brush with alpha + ctx.globalAlpha = alpha; + ctx.drawImage(brush, x - r, y - r); + } + + if (!canvas.width || !canvas.height) { + // Avoid "Uncaught DOMException: Failed to execute 'getImageData' on + // 'CanvasRenderingContext2D': The source height is 0." + return canvas; + } + + // colorize the canvas using alpha value and set with gradient + var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + + var pixels = imageData.data; + var offset = 0; + var pixelLen = pixels.length; + var minOpacity = this.minOpacity; + var maxOpacity = this.maxOpacity; + var diffOpacity = maxOpacity - minOpacity; + + while(offset < pixelLen) { + var alpha = pixels[offset + 3] / 256; + var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4; + // Simple optimize to ignore the empty data + if (alpha > 0) { + var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange; + // Any alpha > 0 will be mapped to [minOpacity, maxOpacity] + alpha > 0 && (alpha = alpha * diffOpacity + minOpacity); + pixels[offset++] = gradient[gradientOffset]; + pixels[offset++] = gradient[gradientOffset + 1]; + pixels[offset++] = gradient[gradientOffset + 2]; + pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256; + } + else { + offset += 4; + } + } + ctx.putImageData(imageData, 0, 0); + + return canvas; + }, + + /** + * get canvas of a black circle brush used for canvas to draw later + * @private + * @returns {Object} circle brush canvas + */ + _getBrush: function() { + var brushCanvas = this._brushCanvas || (this._brushCanvas = createCanvas()); + // set brush size + var r = this.pointSize + this.blurSize; + var d = r * 2; + brushCanvas.width = d; + brushCanvas.height = d; + + var ctx = brushCanvas.getContext('2d'); + ctx.clearRect(0, 0, d, d); + + // in order to render shadow without the distinct circle, + // draw the distinct circle in an invisible place, + // and use shadowOffset to draw shadow in the center of the canvas + ctx.shadowOffsetX = d; + ctx.shadowBlur = this.blurSize; + // draw the shadow in black, and use alpha and shadow blur to generate + // color in color map + ctx.shadowColor = '#000'; + + // draw circle in the left to the canvas + ctx.beginPath(); + ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true); + ctx.closePath(); + ctx.fill(); + return brushCanvas; + }, + + /** + * get gradient color map + * @private + */ + _getGradient: function (data, colorFunc, state) { + var gradientPixels = this._gradientPixels; + var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4)); + var color = [0, 0, 0, 0]; + var off = 0; + for (var i = 0; i < 256; i++) { + colorFunc[state](i / 255, true, color); + pixelsSingleState[off++] = color[0]; + pixelsSingleState[off++] = color[1]; + pixelsSingleState[off++] = color[2]; + pixelsSingleState[off++] = color[3]; + } + return pixelsSingleState; + } +}; + +function getIsInPiecewiseRange(dataExtent, pieceList, selected) { + var dataSpan = dataExtent[1] - dataExtent[0]; + pieceList = map(pieceList, function (piece) { + return { + interval: [ + (piece.interval[0] - dataExtent[0]) / dataSpan, + (piece.interval[1] - dataExtent[0]) / dataSpan + ] + }; + }); + var len = pieceList.length; + var lastIndex = 0; + + return function (val) { + // Try to find in the location of the last found + for (var i = lastIndex; i < len; i++) { + var interval = pieceList[i].interval; + if (interval[0] <= val && val <= interval[1]) { + lastIndex = i; + break; + } + } + if (i === len) { // Not found, back interation + for (var i = lastIndex - 1; i >= 0; i--) { + var interval = pieceList[i].interval; + if (interval[0] <= val && val <= interval[1]) { + lastIndex = i; + break; + } + } + } + return i >= 0 && i < len && selected[i]; + }; +} + +function getIsInContinuousRange(dataExtent, range) { + var dataSpan = dataExtent[1] - dataExtent[0]; + range = [ + (range[0] - dataExtent[0]) / dataSpan, + (range[1] - dataExtent[0]) / dataSpan + ]; + return function (val) { + return val >= range[0] && val <= range[1]; + }; +} + +function isGeoCoordSys(coordSys) { + var dimensions = coordSys.dimensions; + // Not use coorSys.type === 'geo' because coordSys maybe extended + return dimensions[0] === 'lng' && dimensions[1] === 'lat'; +} + +extendChartView({ + + type: 'heatmap', + + render: function (seriesModel, ecModel, api) { + var visualMapOfThisSeries; + ecModel.eachComponent('visualMap', function (visualMap) { + visualMap.eachTargetSeries(function (targetSeries) { + if (targetSeries === seriesModel) { + visualMapOfThisSeries = visualMap; + } + }); + }); + + if (__DEV__) { + if (!visualMapOfThisSeries) { + throw new Error('Heatmap must use with visualMap'); + } + } + + this.group.removeAll(); + var coordSys = seriesModel.coordinateSystem; + if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') { + this._renderOnCartesianAndCalendar(coordSys, seriesModel, api); + } + else if (isGeoCoordSys(coordSys)) { + this._renderOnGeo( + coordSys, seriesModel, visualMapOfThisSeries, api + ); + } + }, + + dispose: function () {}, + + _renderOnCartesianAndCalendar: function (coordSys, seriesModel, api) { + + if (coordSys.type === 'cartesian2d') { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + + if (__DEV__) { + if (!(xAxis.type === 'category' && yAxis.type === 'category')) { + throw new Error('Heatmap on cartesian must have two category axes'); + } + if (!(xAxis.onBand && yAxis.onBand)) { + throw new Error('Heatmap on cartesian must have two axes with boundaryGap true'); + } + } + + var width = xAxis.getBandWidth(); + var height = yAxis.getBandWidth(); + + } + + var group = this.group; + var data = seriesModel.getData(); + + var itemStyleQuery = 'itemStyle.normal'; + var hoverItemStyleQuery = 'itemStyle.emphasis'; + var labelQuery = 'label.normal'; + var hoverLabelQuery = 'label.emphasis'; + var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']); + var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle(); + var labelModel = seriesModel.getModel('label.normal'); + var hoverLabelModel = seriesModel.getModel('label.emphasis'); + var coordSysType = coordSys.type; + + var dataDims = coordSysType === 'cartesian2d' + ? [ + seriesModel.coordDimToDataDim('x')[0], + seriesModel.coordDimToDataDim('y')[0], + seriesModel.coordDimToDataDim('value')[0] + ] + : [ + seriesModel.coordDimToDataDim('time')[0], + seriesModel.coordDimToDataDim('value')[0] + ]; + + data.each(function (idx) { + var rect; + + if (coordSysType === 'cartesian2d') { + // Ignore empty data + if (isNaN(data.get(dataDims[2], idx))) { + return; + } + + var point = coordSys.dataToPoint([ + data.get(dataDims[0], idx), + data.get(dataDims[1], idx) + ]); + + rect = new Rect({ + shape: { + x: point[0] - width / 2, + y: point[1] - height / 2, + width: width, + height: height + }, + style: { + fill: data.getItemVisual(idx, 'color'), + opacity: data.getItemVisual(idx, 'opacity') + } + }); + } + else { + // Ignore empty data + if (isNaN(data.get(dataDims[1], idx))) { + return; + } + + rect = new Rect({ + z2: 1, + shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape, + style: { + fill: data.getItemVisual(idx, 'color'), + opacity: data.getItemVisual(idx, 'opacity') + } + }); + } + + var itemModel = data.getItemModel(idx); + + // Optimization for large datset + if (data.hasItemOption) { + style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']); + hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle(); + labelModel = itemModel.getModel(labelQuery); + hoverLabelModel = itemModel.getModel(hoverLabelQuery); + } + + var rawValue = seriesModel.getRawValue(idx); + var defaultText = '-'; + if (rawValue && rawValue[2] != null) { + defaultText = rawValue[2]; + } + + setLabelStyle( + style, hoverStl, labelModel, hoverLabelModel, + { + labelFetcher: seriesModel, + labelDataIndex: idx, + defaultText: defaultText, + isRectText: true + } + ); + + rect.setStyle(style); + setHoverStyle(rect, data.hasItemOption ? hoverStl : extend({}, hoverStl)); + + group.add(rect); + data.setItemGraphicEl(idx, rect); + }); + }, + + _renderOnGeo: function (geo, seriesModel, visualMapModel, api) { + var inRangeVisuals = visualMapModel.targetVisuals.inRange; + var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange; + // if (!visualMapping) { + // throw new Error('Data range must have color visuals'); + // } + + var data = seriesModel.getData(); + var hmLayer = this._hmLayer || (this._hmLayer || new Heatmap()); + hmLayer.blurSize = seriesModel.get('blurSize'); + hmLayer.pointSize = seriesModel.get('pointSize'); + hmLayer.minOpacity = seriesModel.get('minOpacity'); + hmLayer.maxOpacity = seriesModel.get('maxOpacity'); + + var rect = geo.getViewRect().clone(); + var roamTransform = geo.getRoamTransform().transform; + rect.applyTransform(roamTransform); + + // Clamp on viewport + var x = Math.max(rect.x, 0); + var y = Math.max(rect.y, 0); + var x2 = Math.min(rect.width + rect.x, api.getWidth()); + var y2 = Math.min(rect.height + rect.y, api.getHeight()); + var width = x2 - x; + var height = y2 - y; + + var points = data.mapArray(['lng', 'lat', 'value'], function (lng, lat, value) { + var pt = geo.dataToPoint([lng, lat]); + pt[0] -= x; + pt[1] -= y; + pt.push(value); + return pt; + }); + + var dataExtent = visualMapModel.getExtent(); + var isInRange = visualMapModel.type === 'visualMap.continuous' + ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) + : getIsInPiecewiseRange( + dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected + ); + + hmLayer.update( + points, width, height, + inRangeVisuals.color.getNormalizer(), + { + inRange: inRangeVisuals.color.getColorMapper(), + outOfRange: outOfRangeVisuals.color.getColorMapper() + }, + isInRange + ); + var img = new ZImage({ + style: { + width: width, + height: height, + x: x, + y: y, + image: hmLayer.canvas + }, + silent: true + }); + this.group.add(img); + } +}); + +var PictorialBarSeries = BaseBarSeries.extend({ + + type: 'series.pictorialBar', + + dependencies: ['grid'], + + defaultOption: { + symbol: 'circle', // Customized bar shape + symbolSize: null, // Can be ['100%', '100%'], null means auto. + symbolRotate: null, + + symbolPosition: null, // 'start' or 'end' or 'center', null means auto. + symbolOffset: null, + symbolMargin: null, // start margin and end margin. Can be a number or a percent string. + // Auto margin by defualt. + symbolRepeat: false, // false/null/undefined, means no repeat. + // Can be true, means auto calculate repeat times and cut by data. + // Can be a number, specifies repeat times, and do not cut by data. + // Can be 'fixed', means auto calculate repeat times but do not cut by data. + symbolRepeatDirection: 'end', // 'end' means from 'start' to 'end'. + + symbolClip: false, + symbolBoundingData: null, // Can be 60 or -40 or [-40, 60] + symbolPatternSize: 400, // 400 * 400 px + + barGap: '-100%', // In most case, overlap is needed. + + // z can be set in data item, which is z2 actually. + + // Disable progressive + progressive: 0, + hoverAnimation: false // Open only when needed. + }, + + getInitialData: function (option) { + // Disable stack. + option.stack = null; + return PictorialBarSeries.superApply(this, 'getInitialData', arguments); + } +}); + +var BAR_BORDER_WIDTH_QUERY$1 = ['itemStyle', 'normal', 'borderWidth']; + +// index: +isHorizontal +var LAYOUT_ATTRS = [ + {xy: 'x', wh: 'width', index: 0, posDesc: ['left', 'right']}, + {xy: 'y', wh: 'height', index: 1, posDesc: ['top', 'bottom']} +]; + +var pathForLineWidth = new Circle(); + +var BarView$1 = extendChartView({ + + type: 'pictorialBar', + + render: function (seriesModel, ecModel, api) { + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var isHorizontal = !!baseAxis.isHorizontal(); + var coordSysRect = cartesian.grid.getRect(); + + var opt = { + ecSize: {width: api.getWidth(), height: api.getHeight()}, + seriesModel: seriesModel, + coordSys: cartesian, + coordSysExtent: [ + [coordSysRect.x, coordSysRect.x + coordSysRect.width], + [coordSysRect.y, coordSysRect.y + coordSysRect.height] + ], + isHorizontal: isHorizontal, + valueDim: LAYOUT_ATTRS[+isHorizontal], + categoryDim: LAYOUT_ATTRS[1 - isHorizontal] + }; + + data.diff(oldData) + .add(function (dataIndex) { + if (!data.hasValue(dataIndex)) { + return; + } + + var itemModel = getItemModel(data, dataIndex); + var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt); + + var bar = createBar(data, opt, symbolMeta); + + data.setItemGraphicEl(dataIndex, bar); + group.add(bar); + + updateCommon$1(bar, opt, symbolMeta); + }) + .update(function (newIndex, oldIndex) { + var bar = oldData.getItemGraphicEl(oldIndex); + + if (!data.hasValue(newIndex)) { + group.remove(bar); + return; + } + + var itemModel = getItemModel(data, newIndex); + var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt); + + var pictorialShapeStr = getShapeStr(data, symbolMeta); + if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) { + group.remove(bar); + data.setItemGraphicEl(newIndex, null); + bar = null; + } + + if (bar) { + updateBar(bar, opt, symbolMeta); + } + else { + bar = createBar(data, opt, symbolMeta, true); + } + + data.setItemGraphicEl(newIndex, bar); + bar.__pictorialSymbolMeta = symbolMeta; + // Add back + group.add(bar); + + updateCommon$1(bar, opt, symbolMeta); + }) + .remove(function (dataIndex) { + var bar = oldData.getItemGraphicEl(dataIndex); + bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar); + }) + .execute(); + + this._data = data; + + return this.group; + }, + + dispose: noop, + + remove: function (ecModel, api) { + var group = this.group; + var data = this._data; + if (ecModel.get('animation')) { + if (data) { + data.eachItemGraphicEl(function (bar) { + removeBar(data, bar.dataIndex, ecModel, bar); + }); + } + } + else { + group.removeAll(); + } + } +}); + + +// Set or calculate default value about symbol, and calculate layout info. +function getSymbolMeta(data, dataIndex, itemModel, opt) { + var layout = data.getItemLayout(dataIndex); + var symbolRepeat = itemModel.get('symbolRepeat'); + var symbolClip = itemModel.get('symbolClip'); + var symbolPosition = itemModel.get('symbolPosition') || 'start'; + var symbolRotate = itemModel.get('symbolRotate'); + var rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + var symbolPatternSize = itemModel.get('symbolPatternSize') || 2; + var isAnimationEnabled = itemModel.isAnimationEnabled(); + + var symbolMeta = { + dataIndex: dataIndex, + layout: layout, + itemModel: itemModel, + symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle', + color: data.getItemVisual(dataIndex, 'color'), + symbolClip: symbolClip, + symbolRepeat: symbolRepeat, + symbolRepeatDirection: itemModel.get('symbolRepeatDirection'), + symbolPatternSize: symbolPatternSize, + rotation: rotation, + animationModel: isAnimationEnabled ? itemModel : null, + hoverAnimation: isAnimationEnabled && itemModel.get('hoverAnimation'), + z2: itemModel.getShallow('z', true) || 0 + }; + + prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta); + + prepareSymbolSize( + data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, + symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta + ); + + prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta); + + var symbolSize = symbolMeta.symbolSize; + var symbolOffset = itemModel.get('symbolOffset'); + if (isArray(symbolOffset)) { + symbolOffset = [ + parsePercent$1(symbolOffset[0], symbolSize[0]), + parsePercent$1(symbolOffset[1], symbolSize[1]) + ]; + } + + prepareLayoutInfo( + itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, + symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, + opt, symbolMeta + ); + + return symbolMeta; +} + +// bar length can be negative. +function prepareBarLength(itemModel, symbolRepeat, layout, opt, output) { + var valueDim = opt.valueDim; + var symbolBoundingData = itemModel.get('symbolBoundingData'); + var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis()); + var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)); + var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0); + var boundingLength; + + if (isArray(symbolBoundingData)) { + var symbolBoundingExtent = [ + convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, + convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx + ]; + symbolBoundingExtent[1] < symbolBoundingExtent[0] && (symbolBoundingExtent.reverse()); + boundingLength = symbolBoundingExtent[pxSignIdx]; + } + else if (symbolBoundingData != null) { + boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx; + } + else if (symbolRepeat) { + boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx; + } + else { + boundingLength = layout[valueDim.wh]; + } + + output.boundingLength = boundingLength; + + if (symbolRepeat) { + output.repeatCutLength = layout[valueDim.wh]; + } + + output.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0; +} + +function convertToCoordOnAxis(axis, value) { + return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value))); +} + +// Support ['100%', '100%'] +function prepareSymbolSize( + data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, + pxSign, symbolPatternSize, opt, output +) { + var valueDim = opt.valueDim; + var categoryDim = opt.categoryDim; + var categorySize = Math.abs(layout[categoryDim.wh]); + + var symbolSize = data.getItemVisual(dataIndex, 'symbolSize'); + if (isArray(symbolSize)) { + symbolSize = symbolSize.slice(); + } + else { + if (symbolSize == null) { + symbolSize = '100%'; + } + symbolSize = [symbolSize, symbolSize]; + } + + // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is + // to complicated to calculate real percent value if considering scaled lineWidth. + // So the actual size will bigger than layout size if lineWidth is bigger than zero, + // which can be tolerated in pictorial chart. + + symbolSize[categoryDim.index] = parsePercent$1( + symbolSize[categoryDim.index], + categorySize + ); + symbolSize[valueDim.index] = parsePercent$1( + symbolSize[valueDim.index], + symbolRepeat ? categorySize : Math.abs(boundingLength) + ); + + output.symbolSize = symbolSize; + + // If x or y is less than zero, show reversed shape. + var symbolScale = output.symbolScale = [ + symbolSize[0] / symbolPatternSize, + symbolSize[1] / symbolPatternSize + ]; + // Follow convention, 'right' and 'top' is the normal scale. + symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign; +} + +function prepareLineWidth(itemModel, symbolScale, rotation, opt, output) { + // In symbols are drawn with scale, so do not need to care about the case that width + // or height are too small. But symbol use strokeNoScale, where acture lineWidth should + // be calculated. + var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY$1) || 0; + + if (valueLineWidth) { + pathForLineWidth.attr({ + scale: symbolScale.slice(), + rotation: rotation + }); + pathForLineWidth.updateTransform(); + valueLineWidth /= pathForLineWidth.getLineScale(); + valueLineWidth *= symbolScale[opt.valueDim.index]; + } + + output.valueLineWidth = valueLineWidth; +} + +function prepareLayoutInfo( + itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, + symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output +) { + var categoryDim = opt.categoryDim; + var valueDim = opt.valueDim; + var pxSign = output.pxSign; + + var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0); + var pathLen = unitLength; + + // Note: rotation will not effect the layout of symbols, because user may + // want symbols to rotate on its center, which should not be translated + // when rotating. + + if (symbolRepeat) { + var absBoundingLength = Math.abs(boundingLength); + + var symbolMargin = retrieve(itemModel.get('symbolMargin'), '15%') + ''; + var hasEndGap = false; + if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) { + hasEndGap = true; + symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1); + } + symbolMargin = parsePercent$1(symbolMargin, symbolSize[valueDim.index]); + + var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0); + + // When symbol margin is less than 0, margin at both ends will be subtracted + // to ensure that all of the symbols will not be overflow the given area. + var endFix = hasEndGap ? 0 : symbolMargin * 2; + + // Both final repeatTimes and final symbolMargin area calculated based on + // boundingLength. + var repeatSpecified = isNumeric(symbolRepeat); + var repeatTimes = repeatSpecified + ? symbolRepeat + : toIntTimes((absBoundingLength + endFix) / uLenWithMargin); + + // Adjust calculate margin, to ensure each symbol is displayed + // entirely in the given layout area. + var mDiff = absBoundingLength - repeatTimes * unitLength; + symbolMargin = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1); + uLenWithMargin = unitLength + symbolMargin * 2; + endFix = hasEndGap ? 0 : symbolMargin * 2; + + // Update repeatTimes when not all symbol will be shown. + if (!repeatSpecified && symbolRepeat !== 'fixed') { + repeatTimes = repeatCutLength + ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) + : 0; + } + + pathLen = repeatTimes * uLenWithMargin - endFix; + output.repeatTimes = repeatTimes; + output.symbolMargin = symbolMargin; + } + + var sizeFix = pxSign * (pathLen / 2); + var pathPosition = output.pathPosition = []; + pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2; + pathPosition[valueDim.index] = symbolPosition === 'start' + ? sizeFix + : symbolPosition === 'end' + ? boundingLength - sizeFix + : boundingLength / 2; // 'center' + if (symbolOffset) { + pathPosition[0] += symbolOffset[0]; + pathPosition[1] += symbolOffset[1]; + } + + var bundlePosition = output.bundlePosition = []; + bundlePosition[categoryDim.index] = layout[categoryDim.xy]; + bundlePosition[valueDim.index] = layout[valueDim.xy]; + + var barRectShape = output.barRectShape = extend({}, layout); + barRectShape[valueDim.wh] = pxSign * Math.max( + Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix) + ); + barRectShape[categoryDim.wh] = layout[categoryDim.wh]; + + var clipShape = output.clipShape = {}; + // Consider that symbol may be overflow layout rect. + clipShape[categoryDim.xy] = -layout[categoryDim.xy]; + clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh]; + clipShape[valueDim.xy] = 0; + clipShape[valueDim.wh] = layout[valueDim.wh]; +} + +function createPath(symbolMeta) { + var symbolPatternSize = symbolMeta.symbolPatternSize; + var path = createSymbol( + // Consider texture img, make a big size. + symbolMeta.symbolType, + -symbolPatternSize / 2, + -symbolPatternSize / 2, + symbolPatternSize, + symbolPatternSize, + symbolMeta.color + ); + path.attr({ + culling: true + }); + path.type !== 'image' && path.setStyle({ + strokeNoScale: true + }); + + return path; +} + +function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) { + var bundle = bar.__pictorialBundle; + var symbolSize = symbolMeta.symbolSize; + var valueLineWidth = symbolMeta.valueLineWidth; + var pathPosition = symbolMeta.pathPosition; + var valueDim = opt.valueDim; + var repeatTimes = symbolMeta.repeatTimes || 0; + + var index = 0; + var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2; + + eachPath(bar, function (path) { + path.__pictorialAnimationIndex = index; + path.__pictorialRepeatTimes = repeatTimes; + if (index < repeatTimes) { + updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate); + } + else { + updateAttr(path, null, {scale: [0, 0]}, symbolMeta, isUpdate, function () { + bundle.remove(path); + }); + } + + updateHoverAnimation(path, symbolMeta); + + index++; + }); + + for (; index < repeatTimes; index++) { + var path = createPath(symbolMeta); + path.__pictorialAnimationIndex = index; + path.__pictorialRepeatTimes = repeatTimes; + bundle.add(path); + + var target = makeTarget(index); + + updateAttr( + path, + { + position: target.position, + scale: [0, 0] + }, + { + scale: target.scale, + rotation: target.rotation + }, + symbolMeta, + isUpdate + ); + + // FIXME + // If all emphasis/normal through action. + path + .on('mouseover', onMouseOver) + .on('mouseout', onMouseOut); + + updateHoverAnimation(path, symbolMeta); + } + + function makeTarget(index) { + var position = pathPosition.slice(); + // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index + // Otherwise: i = index; + var pxSign = symbolMeta.pxSign; + var i = index; + if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) { + i = repeatTimes - 1 - index; + } + position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index]; + + return { + position: position, + scale: symbolMeta.symbolScale.slice(), + rotation: symbolMeta.rotation + }; + } + + function onMouseOver() { + eachPath(bar, function (path) { + path.trigger('emphasis'); + }); + } + + function onMouseOut() { + eachPath(bar, function (path) { + path.trigger('normal'); + }); + } +} + +function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) { + var bundle = bar.__pictorialBundle; + var mainPath = bar.__pictorialMainPath; + + if (!mainPath) { + mainPath = bar.__pictorialMainPath = createPath(symbolMeta); + bundle.add(mainPath); + + updateAttr( + mainPath, + { + position: symbolMeta.pathPosition.slice(), + scale: [0, 0], + rotation: symbolMeta.rotation + }, + { + scale: symbolMeta.symbolScale.slice() + }, + symbolMeta, + isUpdate + ); + + mainPath + .on('mouseover', onMouseOver) + .on('mouseout', onMouseOut); + } + else { + updateAttr( + mainPath, + null, + { + position: symbolMeta.pathPosition.slice(), + scale: symbolMeta.symbolScale.slice(), + rotation: symbolMeta.rotation + }, + symbolMeta, + isUpdate + ); + } + + updateHoverAnimation(mainPath, symbolMeta); + + function onMouseOver() { + this.trigger('emphasis'); + } + + function onMouseOut() { + this.trigger('normal'); + } +} + +// bar rect is used for label. +function createOrUpdateBarRect(bar, symbolMeta, isUpdate) { + var rectShape = extend({}, symbolMeta.barRectShape); + + var barRect = bar.__pictorialBarRect; + if (!barRect) { + barRect = bar.__pictorialBarRect = new Rect({ + z2: 2, + shape: rectShape, + silent: true, + style: { + stroke: 'transparent', + fill: 'transparent', + lineWidth: 0 + } + }); + + bar.add(barRect); + } + else { + updateAttr(barRect, null, {shape: rectShape}, symbolMeta, isUpdate); + } +} + +function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) { + // If not clip, symbol will be remove and rebuilt. + if (symbolMeta.symbolClip) { + var clipPath = bar.__pictorialClipPath; + var clipShape = extend({}, symbolMeta.clipShape); + var valueDim = opt.valueDim; + var animationModel = symbolMeta.animationModel; + var dataIndex = symbolMeta.dataIndex; + + if (clipPath) { + updateProps( + clipPath, {shape: clipShape}, animationModel, dataIndex + ); + } + else { + clipShape[valueDim.wh] = 0; + clipPath = new Rect({shape: clipShape}); + bar.__pictorialBundle.setClipPath(clipPath); + bar.__pictorialClipPath = clipPath; + + var target = {}; + target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh]; + + graphic[isUpdate ? 'updateProps' : 'initProps']( + clipPath, {shape: target}, animationModel, dataIndex + ); + } + } +} + +function getItemModel(data, dataIndex) { + var itemModel = data.getItemModel(dataIndex); + itemModel.getAnimationDelayParams = getAnimationDelayParams; + itemModel.isAnimationEnabled = isAnimationEnabled; + return itemModel; +} + +function getAnimationDelayParams(path) { + // The order is the same as the z-order, see `symbolRepeatDiretion`. + return { + index: path.__pictorialAnimationIndex, + count: path.__pictorialRepeatTimes + }; +} + +function isAnimationEnabled() { + // `animation` prop can be set on itemModel in pictorial bar chart. + return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation'); +} + +function updateHoverAnimation(path, symbolMeta) { + path.off('emphasis').off('normal'); + + var scale = symbolMeta.symbolScale.slice(); + + symbolMeta.hoverAnimation && path + .on('emphasis', function() { + this.animateTo({ + scale: [scale[0] * 1.1, scale[1] * 1.1] + }, 400, 'elasticOut'); + }) + .on('normal', function() { + this.animateTo({ + scale: scale.slice() + }, 400, 'elasticOut'); + }); +} + +function createBar(data, opt, symbolMeta, isUpdate) { + // bar is the main element for each data. + var bar = new Group(); + // bundle is used for location and clip. + var bundle = new Group(); + bar.add(bundle); + bar.__pictorialBundle = bundle; + bundle.attr('position', symbolMeta.bundlePosition.slice()); + + if (symbolMeta.symbolRepeat) { + createOrUpdateRepeatSymbols(bar, opt, symbolMeta); + } + else { + createOrUpdateSingleSymbol(bar, opt, symbolMeta); + } + + createOrUpdateBarRect(bar, symbolMeta, isUpdate); + + createOrUpdateClip(bar, opt, symbolMeta, isUpdate); + + bar.__pictorialShapeStr = getShapeStr(data, symbolMeta); + bar.__pictorialSymbolMeta = symbolMeta; + + return bar; +} + +function updateBar(bar, opt, symbolMeta) { + var animationModel = symbolMeta.animationModel; + var dataIndex = symbolMeta.dataIndex; + var bundle = bar.__pictorialBundle; + + updateProps( + bundle, {position: symbolMeta.bundlePosition.slice()}, animationModel, dataIndex + ); + + if (symbolMeta.symbolRepeat) { + createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true); + } + else { + createOrUpdateSingleSymbol(bar, opt, symbolMeta, true); + } + + createOrUpdateBarRect(bar, symbolMeta, true); + + createOrUpdateClip(bar, opt, symbolMeta, true); +} + +function removeBar(data, dataIndex, animationModel, bar) { + // Not show text when animating + var labelRect = bar.__pictorialBarRect; + labelRect && (labelRect.style.text = null); + + var pathes = []; + eachPath(bar, function (path) { + pathes.push(path); + }); + bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath); + + // I do not find proper remove animation for clip yet. + bar.__pictorialClipPath && (animationModel = null); + + each$1(pathes, function (path) { + updateProps( + path, {scale: [0, 0]}, animationModel, dataIndex, + function () { + bar.parent && bar.parent.remove(bar); + } + ); + }); + + data.setItemGraphicEl(dataIndex, null); +} + +function getShapeStr(data, symbolMeta) { + return [ + data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none', + !!symbolMeta.symbolRepeat, + !!symbolMeta.symbolClip + ].join(':'); +} + +function eachPath(bar, cb, context) { + // Do not use Group#eachChild, because it do not support remove. + each$1(bar.__pictorialBundle.children(), function (el) { + el !== bar.__pictorialBarRect && cb.call(context, el); + }); +} + +function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) { + immediateAttrs && el.attr(immediateAttrs); + // when symbolCip used, only clip path has init animation, otherwise it would be weird effect. + if (symbolMeta.symbolClip && !isUpdate) { + animationAttrs && el.attr(animationAttrs); + } + else { + animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps']( + el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb + ); + } +} + +function updateCommon$1(bar, opt, symbolMeta) { + var color = symbolMeta.color; + var dataIndex = symbolMeta.dataIndex; + var itemModel = symbolMeta.itemModel; + // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + var normalStyle = itemModel.getModel('itemStyle.normal').getItemStyle(['color']); + var hoverStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle(); + var cursorStyle = itemModel.getShallow('cursor'); + + eachPath(bar, function (path) { + // PENDING setColor should be before setStyle!!! + path.setColor(color); + path.setStyle(defaults( + { + fill: color, + opacity: symbolMeta.opacity + }, + normalStyle + )); + setHoverStyle(path, hoverStyle); + + cursorStyle && (path.cursor = cursorStyle); + path.z2 = symbolMeta.z2; + }); + + var barRectHoverStyle = {}; + var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)]; + var barRect = bar.__pictorialBarRect; + + setLabel( + barRect.style, barRectHoverStyle, itemModel, + color, opt.seriesModel, dataIndex, barPositionOutside + ); + + setHoverStyle(barRect, barRectHoverStyle); +} + +function toIntTimes(times) { + var roundedTimes = Math.round(times); + // Escapse accurate error + return Math.abs(times - roundedTimes) < 1e-4 + ? roundedTimes + : Math.ceil(times); +} + +// In case developer forget to include grid component +registerLayout(curry( + barLayoutGrid, 'pictorialBar' +)); +registerVisual(curry( + visualSymbol, 'pictorialBar', 'roundRect', null +)); + +/** + * @constructor module:echarts/coord/single/SingleAxis + * @extends {module:echarts/coord/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + * @param {string} position + */ +var SingleAxis = function (dim, scale, coordExtent, axisType, position) { + + Axis.call(this, dim, scale, coordExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * Axis position + * - 'top' + * - 'bottom' + * - 'left' + * - 'right' + * @type {string} + */ + this.position = position || 'bottom'; + + /** + * Axis orient + * - 'horizontal' + * - 'vertical' + * @type {[type]} + */ + this.orient = null; + + /** + * @type {number} + */ + this._labelInterval = null; + +}; + +SingleAxis.prototype = { + + constructor: SingleAxis, + + /** + * Axis model + * @type {module:echarts/coord/single/AxisModel} + */ + model: null, + + /** + * Judge the orient of the axis. + * @return {boolean} + */ + isHorizontal: function () { + var position = this.position; + return position === 'top' || position === 'bottom'; + + }, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.coordinateSystem.pointToData(point, clamp)[0]; + }, + + /** + * Convert the local coord(processed by dataToCoord()) + * to global coord(concrete pixel coord). + * designated by module:echarts/coord/single/Single. + * @type {Function} + */ + toGlobalCoord: null, + + /** + * Convert the global coord to local coord. + * designated by module:echarts/coord/single/Single. + * @type {Function} + */ + toLocalCoord: null + +}; + +inherits(SingleAxis, Axis); + +/** + * Single coordinates system. + */ + +/** + * Create a single coordinates system. + * + * @param {module:echarts/coord/single/AxisModel} axisModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ +function Single(axisModel, ecModel, api) { + + /** + * @type {string} + * @readOnly + */ + this.dimension = 'single'; + + /** + * Add it just for draw tooltip. + * + * @type {Array.} + * @readOnly + */ + this.dimensions = ['single']; + + /** + * @private + * @type {module:echarts/coord/single/SingleAxis}. + */ + this._axis = null; + + /** + * @private + * @type {module:zrender/core/BoundingRect} + */ + this._rect; + + this._init(axisModel, ecModel, api); + + /** + * @type {module:echarts/coord/single/AxisModel} + */ + this.model = axisModel; +} + +Single.prototype = { + + type: 'singleAxis', + + axisPointerEnabled: true, + + constructor: Single, + + /** + * Initialize single coordinate system. + * + * @param {module:echarts/coord/single/AxisModel} axisModel + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @private + */ + _init: function (axisModel, ecModel, api) { + + var dim = this.dimension; + + var axis = new SingleAxis( + dim, + createScaleByModel(axisModel), + [0, 0], + axisModel.get('type'), + axisModel.get('position') + ); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + axis.orient = axisModel.get('orient'); + + axisModel.axis = axis; + axis.model = axisModel; + axis.coordinateSystem = this; + this._axis = axis; + }, + + /** + * Update axis scale after data processed + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ + update: function (ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.coordinateSystem === this) { + var data = seriesModel.getData(); + var dim = this.dimension; + this._axis.scale.unionExtentFromData( + data, seriesModel.coordDimToDataDim(dim) + ); + niceScaleExtent(this._axis.scale, this._axis.model); + } + }, this); + }, + + /** + * Resize the single coordinate system. + * + * @param {module:echarts/coord/single/AxisModel} axisModel + * @param {module:echarts/ExtensionAPI} api + */ + resize: function (axisModel, api) { + this._rect = getLayoutRect( + { + left: axisModel.get('left'), + top: axisModel.get('top'), + right: axisModel.get('right'), + bottom: axisModel.get('bottom'), + width: axisModel.get('width'), + height: axisModel.get('height') + }, + { + width: api.getWidth(), + height: api.getHeight() + } + ); + + this._adjustAxis(); + }, + + /** + * @return {module:zrender/core/BoundingRect} + */ + getRect: function () { + return this._rect; + }, + + /** + * @private + */ + _adjustAxis: function () { + + var rect = this._rect; + var axis = this._axis; + + var isHorizontal = axis.isHorizontal(); + var extent = isHorizontal ? [0, rect.width] : [0, rect.height]; + var idx = axis.reverse ? 1 : 0; + + axis.setExtent(extent[idx], extent[1 - idx]); + + this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y); + + }, + + /** + * @param {module:echarts/coord/single/SingleAxis} axis + * @param {number} coordBase + */ + _updateAxisTransform: function (axis, coordBase) { + + var axisExtent = axis.getExtent(); + var extentSum = axisExtent[0] + axisExtent[1]; + var isHorizontal = axis.isHorizontal(); + + axis.toGlobalCoord = isHorizontal + ? function (coord) { + return coord + coordBase; + } + : function (coord) { + return extentSum - coord + coordBase; + }; + + axis.toLocalCoord = isHorizontal + ? function (coord) { + return coord - coordBase; + } + : function (coord) { + return extentSum - coord + coordBase; + }; + }, + + /** + * Get axis. + * + * @return {module:echarts/coord/single/SingleAxis} + */ + getAxis: function () { + return this._axis; + }, + + /** + * Get axis, add it just for draw tooltip. + * + * @return {[type]} [description] + */ + getBaseAxis: function () { + return this._axis; + }, + + /** + * @return {Array.} + */ + getAxes: function () { + return [this._axis]; + }, + + /** + * @return {Object} {baseAxes: [], otherAxes: []} + */ + getTooltipAxes: function () { + return {baseAxes: [this.getAxis()]}; + }, + + /** + * If contain point. + * + * @param {Array.} point + * @return {boolean} + */ + containPoint: function (point) { + var rect = this.getRect(); + var axis = this.getAxis(); + var orient = axis.orient; + if (orient === 'horizontal') { + return axis.contain(axis.toLocalCoord(point[0])) + && (point[1] >= rect.y && point[1] <= (rect.y + rect.height)); + } + else { + return axis.contain(axis.toLocalCoord(point[1])) + && (point[0] >= rect.y && point[0] <= (rect.y + rect.height)); + } + }, + + /** + * @param {Array.} point + * @return {Array.} + */ + pointToData: function (point) { + var axis = this.getAxis(); + return [axis.coordToData(axis.toLocalCoord( + point[axis.orient === 'horizontal' ? 0 : 1] + ))]; + }, + + /** + * Convert the series data to concrete point. + * + * @param {number|Array.} val + * @return {Array.} + */ + dataToPoint: function (val) { + var axis = this.getAxis(); + var rect = this.getRect(); + var pt = []; + var idx = axis.orient === 'horizontal' ? 0 : 1; + + if (val instanceof Array) { + val = val[0]; + } + + pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val)); + pt[1 - idx] = idx === 0 ? (rect.y + rect.height / 2) : (rect.x + rect.width / 2); + return pt; + } + +}; + +/** + * Single coordinate system creator. + */ + +/** + * Create single coordinate system and inject it into seriesModel. + * + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @return {Array.} + */ +function create$3(ecModel, api) { + var singles = []; + + ecModel.eachComponent('singleAxis', function(axisModel, idx) { + + var single = new Single(axisModel, ecModel, api); + single.name = 'single_' + idx; + single.resize(axisModel, api); + axisModel.coordinateSystem = single; + singles.push(single); + + }); + + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'singleAxis') { + var singleAxisModel = ecModel.queryComponents({ + mainType: 'singleAxis', + index: seriesModel.get('singleAxisIndex'), + id: seriesModel.get('singleAxisId') + })[0]; + seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem; + } + }); + + return singles; +} + +CoordinateSystemManager.register('single', { + create: create$3, + dimensions: Single.prototype.dimensions +}); + +/** + * @param {Object} opt {labelInside} + * @return {Object} { + * position, rotation, labelDirection, labelOffset, + * tickDirection, labelRotate, labelInterval, z2 + * } + */ +function layout$1 (axisModel, opt) { + opt = opt || {}; + var single = axisModel.coordinateSystem; + var axis = axisModel.axis; + var layout = {}; + + var axisPosition = axis.position; + var orient = axis.orient; + + var rect = single.getRect(); + var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height]; + + var positionMap = { + horizontal: {top: rectBound[2], bottom: rectBound[3]}, + vertical: {left: rectBound[0], right: rectBound[1]} + }; + + layout.position = [ + orient === 'vertical' + ? positionMap.vertical[axisPosition] + : rectBound[0], + orient === 'horizontal' + ? positionMap.horizontal[axisPosition] + : rectBound[3] + ]; + + var r = {horizontal: 0, vertical: 1}; + layout.rotation = Math.PI / 2 * r[orient]; + + var directionMap = {top: -1, bottom: 1, right: 1, left: -1}; + + layout.labelDirection = layout.tickDirection + = layout.nameDirection + = directionMap[axisPosition]; + + if (axisModel.get('axisTick.inside')) { + layout.tickDirection = -layout.tickDirection; + } + + if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) { + layout.labelDirection = -layout.labelDirection; + } + + var labelRotation = opt.rotate; + labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate')); + layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation; + + layout.labelInterval = axis.getLabelInterval(); + + layout.z2 = 1; + + return layout; +} + +var getInterval$2 = AxisBuilder.getInterval; +var ifIgnoreOnTick$2 = AxisBuilder.ifIgnoreOnTick; + +var axisBuilderAttrs$2 = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; + +var selfBuilderAttr = 'splitLine'; + +var SingleAxisView = AxisView.extend({ + + type: 'singleAxis', + + axisPointerClass: 'SingleAxisPointer', + + render: function (axisModel, ecModel, api, payload) { + + var group = this.group; + + group.removeAll(); + + var layout = layout$1(axisModel); + + var axisBuilder = new AxisBuilder(axisModel, layout); + + each$1(axisBuilderAttrs$2, axisBuilder.add, axisBuilder); + + group.add(axisBuilder.getGroup()); + + if (axisModel.get(selfBuilderAttr + '.show')) { + this['_' + selfBuilderAttr](axisModel, layout.labelInterval); + } + + SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload); + }, + + _splitLine: function(axisModel, labelInterval) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitLineModel = axisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineWidth = lineStyleModel.get('width'); + var lineColors = lineStyleModel.get('color'); + var lineInterval = getInterval$2(splitLineModel, labelInterval); + + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + + var gridRect = axisModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + + var splitLines = []; + var lineCount = 0; + + var ticksCoords = axis.getTicksCoords(); + + var p1 = []; + var p2 = []; + + var showMinLabel = axisModel.get('axisLabel.showMinLabel'); + var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); + + for (var i = 0; i < ticksCoords.length; ++i) { + if (ifIgnoreOnTick$2( + axis, i, lineInterval, ticksCoords.length, + showMinLabel, showMaxLabel + )) { + continue; + } + var tickCoord = axis.toGlobalCoord(ticksCoords[i]); + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } + else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + var colorIndex = (lineCount++) % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Line( + subPixelOptimizeLine({ + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + style: { + lineWidth: lineWidth + }, + silent: true + }))); + } + + for (var i = 0; i < splitLines.length; ++i) { + this.group.add(mergePath(splitLines[i], { + style: { + stroke: lineColors[i % lineColors.length], + lineDash: lineStyleModel.getLineDash(lineWidth), + lineWidth: lineWidth + }, + silent: true + })); + } + } +}); + +var AxisModel$4 = ComponentModel.extend({ + + type: 'singleAxis', + + layoutMode: 'box', + + /** + * @type {module:echarts/coord/single/SingleAxis} + */ + axis: null, + + /** + * @type {module:echarts/coord/single/Single} + */ + coordinateSystem: null, + + /** + * @override + */ + getCoordSysModel: function () { + return this; + } + +}); + +var defaultOption$2 = { + + left: '5%', + top: '5%', + right: '5%', + bottom: '5%', + + type: 'value', + + position: 'bottom', + + orient: 'horizontal', + + axisLine: { + show: true, + lineStyle: { + width: 2, + type: 'solid' + } + }, + + // Single coordinate system and single axis is the, + // which is used as the parent tooltip model. + // same model, so we set default tooltip show as true. + tooltip: { + show: true + }, + + axisTick: { + show: true, + length: 6, + lineStyle: { + width: 2 + } + }, + + axisLabel: { + show: true, + interval: 'auto' + }, + + splitLine: { + show: true, + lineStyle: { + type: 'dashed', + opacity: 0.2 + } + } +}; + +function getAxisType$2(axisName, option) { + return option.type || (option.data ? 'category' : 'value'); +} + +merge(AxisModel$4.prototype, axisModelCommonMixin); + +axisModelCreator('single', AxisModel$4, getAxisType$2, defaultOption$2); + +/** + * @param {Object} finder contains {seriesIndex, dataIndex, dataIndexInside} + * @param {module:echarts/model/Global} ecModel + * @return {Object} {point: [x, y], el: ...} point Will not be null. + */ +var findPointFromSeries = function (finder, ecModel) { + var point = []; + var seriesIndex = finder.seriesIndex; + var seriesModel; + if (seriesIndex == null || !( + seriesModel = ecModel.getSeriesByIndex(seriesIndex) + )) { + return {point: []}; + } + + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, finder); + if (dataIndex == null || isArray(dataIndex)) { + return {point: []}; + } + + var el = data.getItemGraphicEl(dataIndex); + var coordSys = seriesModel.coordinateSystem; + + if (seriesModel.getTooltipPosition) { + point = seriesModel.getTooltipPosition(dataIndex) || []; + } + else if (coordSys && coordSys.dataToPoint) { + point = coordSys.dataToPoint( + data.getValues( + map(coordSys.dimensions, function (dim) { + return seriesModel.coordDimToDataDim(dim)[0]; + }), dataIndex, true + ) + ) || []; + } + else if (el) { + // Use graphic bounding rect + var rect = el.getBoundingRect().clone(); + rect.applyTransform(el.transform); + point = [ + rect.x + rect.width / 2, + rect.y + rect.height / 2 + ]; + } + + return {point: point, el: el}; +}; + +var each$17 = each$1; +var curry$3 = curry; +var get$2 = makeGetter(); + +/** + * Basic logic: check all axis, if they do not demand show/highlight, + * then hide/downplay them. + * + * @param {Object} coordSysAxesInfo + * @param {Object} payload + * @param {string} [payload.currTrigger] 'click' | 'mousemove' | 'leave' + * @param {Array.} [payload.x] x and y, which are mandatory, specify a point to + * trigger axisPointer and tooltip. + * @param {Array.} [payload.y] x and y, which are mandatory, specify a point to + * trigger axisPointer and tooltip. + * @param {Object} [payload.seriesIndex] finder, optional, restrict target axes. + * @param {Object} [payload.dataIndex] finder, restrict target axes. + * @param {Object} [payload.axesInfo] finder, restrict target axes. + * [{ + * axisDim: 'x'|'y'|'angle'|..., + * axisIndex: ..., + * value: ... + * }, ...] + * @param {Function} [payload.dispatchAction] + * @param {Object} [payload.tooltipOption] + * @param {Object|Array.|Function} [payload.position] Tooltip position, + * which can be specified in dispatchAction + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + * @return {Object} content of event obj for echarts.connect. + */ +var axisTrigger = function (payload, ecModel, api) { + var currTrigger = payload.currTrigger; + var point = [payload.x, payload.y]; + var finder = payload; + var dispatchAction = payload.dispatchAction || bind(api.dispatchAction, api); + var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; + + // Pending + // See #6121. But we are not able to reproduce it yet. + if (!coordSysAxesInfo) { + return; + } + + if (illegalPoint(point)) { + // Used in the default behavior of `connection`: use the sample seriesIndex + // and dataIndex. And also used in the tooltipView trigger. + point = findPointFromSeries({ + seriesIndex: finder.seriesIndex, + // Do not use dataIndexInside from other ec instance. + // FIXME: auto detect it? + dataIndex: finder.dataIndex + }, ecModel).point; + } + var isIllegalPoint = illegalPoint(point); + + // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}). + // Notice: In this case, it is difficult to get the `point` (which is necessary to show + // tooltip, so if point is not given, we just use the point found by sample seriesIndex + // and dataIndex. + var inputAxesInfo = finder.axesInfo; + + var axesInfo = coordSysAxesInfo.axesInfo; + var shouldHide = currTrigger === 'leave' || illegalPoint(point); + var outputFinder = {}; + + var showValueMap = {}; + var dataByCoordSys = {list: [], map: {}}; + var updaters = { + showPointer: curry$3(showPointer, showValueMap), + showTooltip: curry$3(showTooltip, dataByCoordSys) + }; + + // Process for triggered axes. + each$17(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) { + // If a point given, it must be contained by the coordinate system. + var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point); + + each$17(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) { + var axis = axisInfo.axis; + var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo); + // If no inputAxesInfo, no axis is restricted. + if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) { + var val = inputAxisInfo && inputAxisInfo.value; + if (val == null && !isIllegalPoint) { + val = axis.pointToData(point); + } + val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder); + } + }); + }); + + // Process for linked axes. + var linkTriggers = {}; + each$17(axesInfo, function (tarAxisInfo, tarKey) { + var linkGroup = tarAxisInfo.linkGroup; + + // If axis has been triggered in the previous stage, it should not be triggered by link. + if (linkGroup && !showValueMap[tarKey]) { + each$17(linkGroup.axesInfo, function (srcAxisInfo, srcKey) { + var srcValItem = showValueMap[srcKey]; + // If srcValItem exist, source axis is triggered, so link to target axis. + if (srcAxisInfo !== tarAxisInfo && srcValItem) { + var val = srcValItem.value; + linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper( + val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo) + ))); + linkTriggers[tarAxisInfo.key] = val; + } + }); + } + }); + each$17(linkTriggers, function (val, tarKey) { + processOnAxis(axesInfo[tarKey], val, updaters, true, outputFinder); + }); + + updateModelActually(showValueMap, axesInfo, outputFinder); + dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction); + dispatchHighDownActually(axesInfo, dispatchAction, api); + + return outputFinder; +}; + +function processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) { + var axis = axisInfo.axis; + + if (axis.scale.isBlank() || !axis.containData(newValue)) { + return; + } + + if (!axisInfo.involveSeries) { + updaters.showPointer(axisInfo, newValue); + return; + } + + // Heavy calculation. So put it after axis.containData checking. + var payloadInfo = buildPayloadsBySeries(newValue, axisInfo); + var payloadBatch = payloadInfo.payloadBatch; + var snapToValue = payloadInfo.snapToValue; + + // Fill content of event obj for echarts.connect. + // By defualt use the first involved series data as a sample to connect. + if (payloadBatch[0] && outputFinder.seriesIndex == null) { + extend(outputFinder, payloadBatch[0]); + } + + // If no linkSource input, this process is for collecting link + // target, where snap should not be accepted. + if (!dontSnap && axisInfo.snap) { + if (axis.containData(snapToValue) && snapToValue != null) { + newValue = snapToValue; + } + } + + updaters.showPointer(axisInfo, newValue, payloadBatch, outputFinder); + // Tooltip should always be snapToValue, otherwise there will be + // incorrect "axis value ~ series value" mapping displayed in tooltip. + updaters.showTooltip(axisInfo, payloadInfo, snapToValue); +} + +function buildPayloadsBySeries(value, axisInfo) { + var axis = axisInfo.axis; + var dim = axis.dim; + var snapToValue = value; + var payloadBatch = []; + var minDist = Number.MAX_VALUE; + var minDiff = -1; + + each$17(axisInfo.seriesModels, function (series, idx) { + var dataDim = series.coordDimToDataDim(dim); + var seriesNestestValue; + var dataIndices; + + if (series.getAxisTooltipData) { + var result = series.getAxisTooltipData(dataDim, value, axis); + dataIndices = result.dataIndices; + seriesNestestValue = result.nestestValue; + } + else { + dataIndices = series.getData().indicesOfNearest( + dataDim[0], + value, + // Add a threshold to avoid find the wrong dataIndex + // when data length is not same. + false, axis.type === 'category' ? 0.5 : null + ); + if (!dataIndices.length) { + return; + } + seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]); + } + + if (seriesNestestValue == null || !isFinite(seriesNestestValue)) { + return; + } + + var diff = value - seriesNestestValue; + var dist = Math.abs(diff); + // Consider category case + if (dist <= minDist) { + if (dist < minDist || (diff >= 0 && minDiff < 0)) { + minDist = dist; + minDiff = diff; + snapToValue = seriesNestestValue; + payloadBatch.length = 0; + } + each$17(dataIndices, function (dataIndex) { + payloadBatch.push({ + seriesIndex: series.seriesIndex, + dataIndexInside: dataIndex, + dataIndex: series.getData().getRawIndex(dataIndex) + }); + }); + } + }); + + return { + payloadBatch: payloadBatch, + snapToValue: snapToValue + }; +} + +function showPointer(showValueMap, axisInfo, value, payloadBatch) { + showValueMap[axisInfo.key] = {value: value, payloadBatch: payloadBatch}; +} + +function showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) { + var payloadBatch = payloadInfo.payloadBatch; + var axis = axisInfo.axis; + var axisModel = axis.model; + var axisPointerModel = axisInfo.axisPointerModel; + + // If no data, do not create anything in dataByCoordSys, + // whose length will be used to judge whether dispatch action. + if (!axisInfo.triggerTooltip || !payloadBatch.length) { + return; + } + + var coordSysModel = axisInfo.coordSys.model; + var coordSysKey = makeKey(coordSysModel); + var coordSysItem = dataByCoordSys.map[coordSysKey]; + if (!coordSysItem) { + coordSysItem = dataByCoordSys.map[coordSysKey] = { + coordSysId: coordSysModel.id, + coordSysIndex: coordSysModel.componentIndex, + coordSysType: coordSysModel.type, + coordSysMainType: coordSysModel.mainType, + dataByAxis: [] + }; + dataByCoordSys.list.push(coordSysItem); + } + + coordSysItem.dataByAxis.push({ + axisDim: axis.dim, + axisIndex: axisModel.componentIndex, + axisType: axisModel.type, + axisId: axisModel.id, + value: value, + // Caustion: viewHelper.getValueLabel is actually on "view stage", which + // depends that all models have been updated. So it should not be performed + // here. Considering axisPointerModel used here is volatile, which is hard + // to be retrieve in TooltipView, we prepare parameters here. + valueLabelOpt: { + precision: axisPointerModel.get('label.precision'), + formatter: axisPointerModel.get('label.formatter') + }, + seriesDataIndices: payloadBatch.slice() + }); +} + +function updateModelActually(showValueMap, axesInfo, outputFinder) { + var outputAxesInfo = outputFinder.axesInfo = []; + // Basic logic: If no 'show' required, 'hide' this axisPointer. + each$17(axesInfo, function (axisInfo, key) { + var option = axisInfo.axisPointerModel.option; + var valItem = showValueMap[key]; + + if (valItem) { + !axisInfo.useHandle && (option.status = 'show'); + option.value = valItem.value; + // For label formatter param and highlight. + option.seriesDataIndices = (valItem.payloadBatch || []).slice(); + } + // When always show (e.g., handle used), remain + // original value and status. + else { + // If hide, value still need to be set, consider + // click legend to toggle axis blank. + !axisInfo.useHandle && (option.status = 'hide'); + } + + // If status is 'hide', should be no info in payload. + option.status === 'show' && outputAxesInfo.push({ + axisDim: axisInfo.axis.dim, + axisIndex: axisInfo.axis.model.componentIndex, + value: option.value + }); + }); +} + +function dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) { + // Basic logic: If no showTip required, hideTip will be dispatched. + if (illegalPoint(point) || !dataByCoordSys.list.length) { + dispatchAction({type: 'hideTip'}); + return; + } + + // In most case only one axis (or event one series is used). It is + // convinient to fetch payload.seriesIndex and payload.dataIndex + // dirtectly. So put the first seriesIndex and dataIndex of the first + // axis on the payload. + var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {}; + + dispatchAction({ + type: 'showTip', + escapeConnect: true, + x: point[0], + y: point[1], + tooltipOption: payload.tooltipOption, + position: payload.position, + dataIndexInside: sampleItem.dataIndexInside, + dataIndex: sampleItem.dataIndex, + seriesIndex: sampleItem.seriesIndex, + dataByCoordSys: dataByCoordSys.list + }); +} + +function dispatchHighDownActually(axesInfo, dispatchAction, api) { + // FIXME + // highlight status modification shoule be a stage of main process? + // (Consider confilct (e.g., legend and axisPointer) and setOption) + + var zr = api.getZr(); + var highDownKey = 'axisPointerLastHighlights'; + var lastHighlights = get$2(zr)[highDownKey] || {}; + var newHighlights = get$2(zr)[highDownKey] = {}; + + // Update highlight/downplay status according to axisPointer model. + // Build hash map and remove duplicate incidentally. + each$17(axesInfo, function (axisInfo, key) { + var option = axisInfo.axisPointerModel.option; + option.status === 'show' && each$17(option.seriesDataIndices, function (batchItem) { + var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex; + newHighlights[key] = batchItem; + }); + }); + + // Diff. + var toHighlight = []; + var toDownplay = []; + each$1(lastHighlights, function (batchItem, key) { + !newHighlights[key] && toDownplay.push(batchItem); + }); + each$1(newHighlights, function (batchItem, key) { + !lastHighlights[key] && toHighlight.push(batchItem); + }); + + toDownplay.length && api.dispatchAction({ + type: 'downplay', escapeConnect: true, batch: toDownplay + }); + toHighlight.length && api.dispatchAction({ + type: 'highlight', escapeConnect: true, batch: toHighlight + }); +} + +function findInputAxisInfo(inputAxesInfo, axisInfo) { + for (var i = 0; i < (inputAxesInfo || []).length; i++) { + var inputAxisInfo = inputAxesInfo[i]; + if (axisInfo.axis.dim === inputAxisInfo.axisDim + && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex + ) { + return inputAxisInfo; + } + } +} + +function makeMapperParam(axisInfo) { + var axisModel = axisInfo.axis.model; + var item = {}; + var dim = item.axisDim = axisInfo.axis.dim; + item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex; + item.axisName = item[dim + 'AxisName'] = axisModel.name; + item.axisId = item[dim + 'AxisId'] = axisModel.id; + return item; +} + +function illegalPoint(point) { + return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]); +} + +var AxisPointerModel = extendComponentModel({ + + type: 'axisPointer', + + coordSysAxesInfo: null, + + defaultOption: { + // 'auto' means that show when triggered by tooltip or handle. + show: 'auto', + // 'click' | 'mousemove' | 'none' + triggerOn: null, // set default in AxisPonterView.js + + zlevel: 0, + z: 50, + + type: 'line', + // axispointer triggered by tootip determine snap automatically, + // see `modelHelper`. + snap: false, + triggerTooltip: true, + + value: null, + status: null, // Init value depends on whether handle is used. + + // [group0, group1, ...] + // Each group can be: { + // mapper: function () {}, + // singleTooltip: 'multiple', // 'multiple' or 'single' + // xAxisId: ..., + // yAxisName: ..., + // angleAxisIndex: ... + // } + // mapper: can be ignored. + // input: {axisInfo, value} + // output: {axisInfo, value} + link: [], + + // Do not set 'auto' here, otherwise global animation: false + // will not effect at this axispointer. + animation: null, + animationDurationUpdate: 200, + + lineStyle: { + color: '#aaa', + width: 1, + type: 'solid' + }, + + shadowStyle: { + color: 'rgba(150,150,150,0.3)' + }, + + label: { + show: true, + formatter: null, // string | Function + precision: 'auto', // Or a number like 0, 1, 2 ... + margin: 3, + color: '#fff', + padding: [5, 7, 5, 7], + backgroundColor: 'auto', // default: axis line color + borderColor: null, + borderWidth: 0, + shadowBlur: 3, + shadowColor: '#aaa' + // Considering applicability, common style should + // better not have shadowOffset. + // shadowOffsetX: 0, + // shadowOffsetY: 2 + }, + + handle: { + show: false, + icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line + size: 45, + // handle margin is from symbol center to axis, which is stable when circular move. + margin: 50, + // color: '#1b8bbd' + // color: '#2f4554' + color: '#333', + shadowBlur: 3, + shadowColor: '#aaa', + shadowOffsetX: 0, + shadowOffsetY: 2, + + // For mobile performance + throttle: 40 + } + } + +}); + +var get$3 = makeGetter(); +var each$18 = each$1; + +/** + * @param {string} key + * @param {module:echarts/ExtensionAPI} api + * @param {Function} handler + * param: {string} currTrigger + * param: {Array.} point + */ +function register(key, api, handler) { + if (env$1.node) { + return; + } + + var zr = api.getZr(); + get$3(zr).records || (get$3(zr).records = {}); + + initGlobalListeners(zr, api); + + var record = get$3(zr).records[key] || (get$3(zr).records[key] = {}); + record.handler = handler; +} + +function initGlobalListeners(zr, api) { + if (get$3(zr).initialized) { + return; + } + + get$3(zr).initialized = true; + + useHandler('click', curry(doEnter, 'click')); + useHandler('mousemove', curry(doEnter, 'mousemove')); + // useHandler('mouseout', onLeave); + useHandler('globalout', onLeave); + + function useHandler(eventType, cb) { + zr.on(eventType, function (e) { + var dis = makeDispatchAction(api); + + each$18(get$3(zr).records, function (record) { + record && cb(record, e, dis.dispatchAction); + }); + + dispatchTooltipFinally(dis.pendings, api); + }); + } +} + +function dispatchTooltipFinally(pendings, api) { + var showLen = pendings.showTip.length; + var hideLen = pendings.hideTip.length; + + var actuallyPayload; + if (showLen) { + actuallyPayload = pendings.showTip[showLen - 1]; + } + else if (hideLen) { + actuallyPayload = pendings.hideTip[hideLen - 1]; + } + if (actuallyPayload) { + actuallyPayload.dispatchAction = null; + api.dispatchAction(actuallyPayload); + } +} + +function onLeave(record, e, dispatchAction) { + record.handler('leave', null, dispatchAction); +} + +function doEnter(currTrigger, record, e, dispatchAction) { + record.handler(currTrigger, e, dispatchAction); +} + +function makeDispatchAction(api) { + var pendings = { + showTip: [], + hideTip: [] + }; + // FIXME + // better approach? + // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip, + // which may be conflict, (axisPointer call showTip but tooltip call hideTip); + // So we have to add "final stage" to merge those dispatched actions. + var dispatchAction = function (payload) { + var pendingList = pendings[payload.type]; + if (pendingList) { + pendingList.push(payload); + } + else { + payload.dispatchAction = dispatchAction; + api.dispatchAction(payload); + } + }; + + return { + dispatchAction: dispatchAction, + pendings: pendings + }; +} + +/** + * @param {string} key + * @param {module:echarts/ExtensionAPI} api + */ +function unregister(key, api) { + if (env$1.node) { + return; + } + var zr = api.getZr(); + var record = (get$3(zr).records || {})[key]; + if (record) { + get$3(zr).records[key] = null; + } +} + +var AxisPointerView = extendComponentView({ + + type: 'axisPointer', + + render: function (globalAxisPointerModel, ecModel, api) { + var globalTooltipModel = ecModel.getComponent('tooltip'); + var triggerOn = globalAxisPointerModel.get('triggerOn') + || (globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click'); + + // Register global listener in AxisPointerView to enable + // AxisPointerView to be independent to Tooltip. + register( + 'axisPointer', + api, + function (currTrigger, e, dispatchAction) { + // If 'none', it is not controlled by mouse totally. + if (triggerOn !== 'none' + && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0) + ) { + dispatchAction({ + type: 'updateAxisPointer', + currTrigger: currTrigger, + x: e && e.offsetX, + y: e && e.offsetY + }); + } + } + ); + }, + + /** + * @override + */ + remove: function (ecModel, api) { + unregister(api.getZr(), 'axisPointer'); + AxisPointerView.superApply(this._model, 'remove', arguments); + }, + + /** + * @override + */ + dispose: function (ecModel, api) { + unregister('axisPointer', api); + AxisPointerView.superApply(this._model, 'dispose', arguments); + } + +}); + +var get$4 = makeGetter(); +var clone$3 = clone; +var bind$2 = bind; + +/** + * Base axis pointer class in 2D. + * Implemenents {module:echarts/component/axis/IAxisPointer}. + */ +function BaseAxisPointer () { +} + +BaseAxisPointer.prototype = { + + /** + * @private + */ + _group: null, + + /** + * @private + */ + _lastGraphicKey: null, + + /** + * @private + */ + _handle: null, + + /** + * @private + */ + _dragging: false, + + /** + * @private + */ + _lastValue: null, + + /** + * @private + */ + _lastStatus: null, + + /** + * @private + */ + _payloadInfo: null, + + /** + * In px, arbitrary value. Do not set too small, + * no animation is ok for most cases. + * @protected + */ + animationThreshold: 15, + + /** + * @implement + */ + render: function (axisModel, axisPointerModel, api, forceRender) { + var value = axisPointerModel.get('value'); + var status = axisPointerModel.get('status'); + + // Bind them to `this`, not in closure, otherwise they will not + // be replaced when user calling setOption in not merge mode. + this._axisModel = axisModel; + this._axisPointerModel = axisPointerModel; + this._api = api; + + // Optimize: `render` will be called repeatly during mouse move. + // So it is power consuming if performing `render` each time, + // especially on mobile device. + if (!forceRender + && this._lastValue === value + && this._lastStatus === status + ) { + return; + } + this._lastValue = value; + this._lastStatus = status; + + var group = this._group; + var handle = this._handle; + + if (!status || status === 'hide') { + // Do not clear here, for animation better. + group && group.hide(); + handle && handle.hide(); + return; + } + group && group.show(); + handle && handle.show(); + + // Otherwise status is 'show' + var elOption = {}; + this.makeElOption(elOption, value, axisModel, axisPointerModel, api); + + // Enable change axis pointer type. + var graphicKey = elOption.graphicKey; + if (graphicKey !== this._lastGraphicKey) { + this.clear(api); + } + this._lastGraphicKey = graphicKey; + + var moveAnimation = this._moveAnimation = + this.determineAnimation(axisModel, axisPointerModel); + + if (!group) { + group = this._group = new Group(); + this.createPointerEl(group, elOption, axisModel, axisPointerModel); + this.createLabelEl(group, elOption, axisModel, axisPointerModel); + api.getZr().add(group); + } + else { + var doUpdateProps = curry(updateProps$1, axisPointerModel, moveAnimation); + this.updatePointerEl(group, elOption, doUpdateProps, axisPointerModel); + this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel); + } + + updateMandatoryProps(group, axisPointerModel, true); + + this._renderHandle(value); + }, + + /** + * @implement + */ + remove: function (api) { + this.clear(api); + }, + + /** + * @implement + */ + dispose: function (api) { + this.clear(api); + }, + + /** + * @protected + */ + determineAnimation: function (axisModel, axisPointerModel) { + var animation = axisPointerModel.get('animation'); + var axis = axisModel.axis; + var isCategoryAxis = axis.type === 'category'; + var useSnap = axisPointerModel.get('snap'); + + // Value axis without snap always do not snap. + if (!useSnap && !isCategoryAxis) { + return false; + } + + if (animation === 'auto' || animation == null) { + var animationThreshold = this.animationThreshold; + if (isCategoryAxis && axis.getBandWidth() > animationThreshold) { + return true; + } + + // It is important to auto animation when snap used. Consider if there is + // a dataZoom, animation will be disabled when too many points exist, while + // it will be enabled for better visual effect when little points exist. + if (useSnap) { + var seriesDataCount = getAxisInfo(axisModel).seriesDataCount; + var axisExtent = axis.getExtent(); + // Approximate band width + return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold; + } + + return false; + } + + return animation === true; + }, + + /** + * add {pointer, label, graphicKey} to elOption + * @protected + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + // Shoule be implemenented by sub-class. + }, + + /** + * @protected + */ + createPointerEl: function (group, elOption, axisModel, axisPointerModel) { + var pointerOption = elOption.pointer; + if (pointerOption) { + var pointerEl = get$4(group).pointerEl = new graphic[pointerOption.type]( + clone$3(elOption.pointer) + ); + group.add(pointerEl); + } + }, + + /** + * @protected + */ + createLabelEl: function (group, elOption, axisModel, axisPointerModel) { + if (elOption.label) { + var labelEl = get$4(group).labelEl = new Rect( + clone$3(elOption.label) + ); + + group.add(labelEl); + updateLabelShowHide(labelEl, axisPointerModel); + } + }, + + /** + * @protected + */ + updatePointerEl: function (group, elOption, updateProps$$1) { + var pointerEl = get$4(group).pointerEl; + if (pointerEl) { + pointerEl.setStyle(elOption.pointer.style); + updateProps$$1(pointerEl, {shape: elOption.pointer.shape}); + } + }, + + /** + * @protected + */ + updateLabelEl: function (group, elOption, updateProps$$1, axisPointerModel) { + var labelEl = get$4(group).labelEl; + if (labelEl) { + labelEl.setStyle(elOption.label.style); + updateProps$$1(labelEl, { + // Consider text length change in vertical axis, animation should + // be used on shape, otherwise the effect will be weird. + shape: elOption.label.shape, + position: elOption.label.position + }); + + updateLabelShowHide(labelEl, axisPointerModel); + } + }, + + /** + * @private + */ + _renderHandle: function (value) { + if (this._dragging || !this.updateHandleTransform) { + return; + } + + var axisPointerModel = this._axisPointerModel; + var zr = this._api.getZr(); + var handle = this._handle; + var handleModel = axisPointerModel.getModel('handle'); + + var status = axisPointerModel.get('status'); + if (!handleModel.get('show') || !status || status === 'hide') { + handle && zr.remove(handle); + this._handle = null; + return; + } + + var isInit; + if (!this._handle) { + isInit = true; + handle = this._handle = createIcon( + handleModel.get('icon'), + { + cursor: 'move', + draggable: true, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + onmousedown: bind$2(this._onHandleDragMove, this, 0, 0), + drift: bind$2(this._onHandleDragMove, this), + ondragend: bind$2(this._onHandleDragEnd, this) + } + ); + zr.add(handle); + } + + updateMandatoryProps(handle, axisPointerModel, false); + + // update style + var includeStyles = [ + 'color', 'borderColor', 'borderWidth', 'opacity', + 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY' + ]; + handle.setStyle(handleModel.getItemStyle(null, includeStyles)); + + // update position + var handleSize = handleModel.get('size'); + if (!isArray(handleSize)) { + handleSize = [handleSize, handleSize]; + } + handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]); + + createOrUpdate( + this, + '_doDispatchAxisPointer', + handleModel.get('throttle') || 0, + 'fixRate' + ); + + this._moveHandleToValue(value, isInit); + }, + + /** + * @private + */ + _moveHandleToValue: function (value, isInit) { + updateProps$1( + this._axisPointerModel, + !isInit && this._moveAnimation, + this._handle, + getHandleTransProps(this.getHandleTransform( + value, this._axisModel, this._axisPointerModel + )) + ); + }, + + /** + * @private + */ + _onHandleDragMove: function (dx, dy) { + var handle = this._handle; + if (!handle) { + return; + } + + this._dragging = true; + + // Persistent for throttle. + var trans = this.updateHandleTransform( + getHandleTransProps(handle), + [dx, dy], + this._axisModel, + this._axisPointerModel + ); + this._payloadInfo = trans; + + handle.stopAnimation(); + handle.attr(getHandleTransProps(trans)); + get$4(handle).lastProp = null; + + this._doDispatchAxisPointer(); + }, + + /** + * Throttled method. + * @private + */ + _doDispatchAxisPointer: function () { + var handle = this._handle; + if (!handle) { + return; + } + + var payloadInfo = this._payloadInfo; + var axisModel = this._axisModel; + this._api.dispatchAction({ + type: 'updateAxisPointer', + x: payloadInfo.cursorPoint[0], + y: payloadInfo.cursorPoint[1], + tooltipOption: payloadInfo.tooltipOption, + axesInfo: [{ + axisDim: axisModel.axis.dim, + axisIndex: axisModel.componentIndex + }] + }); + }, + + /** + * @private + */ + _onHandleDragEnd: function (moveAnimation) { + this._dragging = false; + var handle = this._handle; + if (!handle) { + return; + } + + var value = this._axisPointerModel.get('value'); + // Consider snap or categroy axis, handle may be not consistent with + // axisPointer. So move handle to align the exact value position when + // drag ended. + this._moveHandleToValue(value); + + // For the effect: tooltip will be shown when finger holding on handle + // button, and will be hidden after finger left handle button. + this._api.dispatchAction({ + type: 'hideTip' + }); + }, + + /** + * Should be implemenented by sub-class if support `handle`. + * @protected + * @param {number} value + * @param {module:echarts/model/Model} axisModel + * @param {module:echarts/model/Model} axisPointerModel + * @return {Object} {position: [x, y], rotation: 0} + */ + getHandleTransform: null, + + /** + * * Should be implemenented by sub-class if support `handle`. + * @protected + * @param {Object} transform {position, rotation} + * @param {Array.} delta [dx, dy] + * @param {module:echarts/model/Model} axisModel + * @param {module:echarts/model/Model} axisPointerModel + * @return {Object} {position: [x, y], rotation: 0, cursorPoint: [x, y]} + */ + updateHandleTransform: null, + + /** + * @private + */ + clear: function (api) { + this._lastValue = null; + this._lastStatus = null; + + var zr = api.getZr(); + var group = this._group; + var handle = this._handle; + if (zr && group) { + this._lastGraphicKey = null; + group && zr.remove(group); + handle && zr.remove(handle); + this._group = null; + this._handle = null; + this._payloadInfo = null; + } + }, + + /** + * @protected + */ + doClear: function () { + // Implemented by sub-class if necessary. + }, + + /** + * @protected + * @param {Array.} xy + * @param {Array.} wh + * @param {number} [xDimIndex=0] or 1 + */ + buildLabel: function (xy, wh, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x: xy[xDimIndex], + y: xy[1 - xDimIndex], + width: wh[xDimIndex], + height: wh[1 - xDimIndex] + }; + } +}; + +BaseAxisPointer.prototype.constructor = BaseAxisPointer; + + +function updateProps$1(animationModel, moveAnimation, el, props) { + // Animation optimize. + if (!propsEqual(get$4(el).lastProp, props)) { + get$4(el).lastProp = props; + moveAnimation + ? updateProps(el, props, animationModel) + : (el.stopAnimation(), el.attr(props)); + } +} + +function propsEqual(lastProps, newProps) { + if (isObject(lastProps) && isObject(newProps)) { + var equals = true; + each$1(newProps, function (item, key) { + equals = equals && propsEqual(lastProps[key], item); + }); + return !!equals; + } + else { + return lastProps === newProps; + } +} + +function updateLabelShowHide(labelEl, axisPointerModel) { + labelEl[axisPointerModel.get('label.show') ? 'show' : 'hide'](); +} + +function getHandleTransProps(trans) { + return { + position: trans.position.slice(), + rotation: trans.rotation || 0 + }; +} + +function updateMandatoryProps(group, axisPointerModel, silent) { + var z = axisPointerModel.get('z'); + var zlevel = axisPointerModel.get('zlevel'); + + group && group.traverse(function (el) { + if (el.type !== 'group') { + z != null && (el.z = z); + zlevel != null && (el.zlevel = zlevel); + el.silent = silent; + } + }); +} + +enableClassExtend(BaseAxisPointer); + +/** + * @param {module:echarts/model/Model} axisPointerModel + */ +function buildElStyle(axisPointerModel) { + var axisPointerType = axisPointerModel.get('type'); + var styleModel = axisPointerModel.getModel(axisPointerType + 'Style'); + var style; + if (axisPointerType === 'line') { + style = styleModel.getLineStyle(); + style.fill = null; + } + else if (axisPointerType === 'shadow') { + style = styleModel.getAreaStyle(); + style.stroke = null; + } + return style; +} + +/** + * @param {Function} labelPos {align, verticalAlign, position} + */ +function buildLabelElOption( + elOption, axisModel, axisPointerModel, api, labelPos +) { + var value = axisPointerModel.get('value'); + var text = getValueLabel( + value, axisModel.axis, axisModel.ecModel, + axisPointerModel.get('seriesDataIndices'), + { + precision: axisPointerModel.get('label.precision'), + formatter: axisPointerModel.get('label.formatter') + } + ); + var labelModel = axisPointerModel.getModel('label'); + var paddings = normalizeCssArray$1(labelModel.get('padding') || 0); + + var font = labelModel.getFont(); + var textRect = getBoundingRect(text, font); + + var position = labelPos.position; + var width = textRect.width + paddings[1] + paddings[3]; + var height = textRect.height + paddings[0] + paddings[2]; + + // Adjust by align. + var align = labelPos.align; + align === 'right' && (position[0] -= width); + align === 'center' && (position[0] -= width / 2); + var verticalAlign = labelPos.verticalAlign; + verticalAlign === 'bottom' && (position[1] -= height); + verticalAlign === 'middle' && (position[1] -= height / 2); + + // Not overflow ec container + confineInContainer(position, width, height, api); + + var bgColor = labelModel.get('backgroundColor'); + if (!bgColor || bgColor === 'auto') { + bgColor = axisModel.get('axisLine.lineStyle.color'); + } + + elOption.label = { + shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')}, + position: position.slice(), + // TODO: rich + style: { + text: text, + textFont: font, + textFill: labelModel.getTextColor(), + textPosition: 'inside', + fill: bgColor, + stroke: labelModel.get('borderColor') || 'transparent', + lineWidth: labelModel.get('borderWidth') || 0, + shadowBlur: labelModel.get('shadowBlur'), + shadowColor: labelModel.get('shadowColor'), + shadowOffsetX: labelModel.get('shadowOffsetX'), + shadowOffsetY: labelModel.get('shadowOffsetY') + }, + // Lable should be over axisPointer. + z2: 10 + }; +} + +// Do not overflow ec container +function confineInContainer(position, width, height, api) { + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + position[0] = Math.min(position[0] + width, viewWidth) - width; + position[1] = Math.min(position[1] + height, viewHeight) - height; + position[0] = Math.max(position[0], 0); + position[1] = Math.max(position[1], 0); +} + +/** + * @param {number} value + * @param {module:echarts/coord/Axis} axis + * @param {module:echarts/model/Global} ecModel + * @param {Object} opt + * @param {Array.} seriesDataIndices + * @param {number|string} opt.precision 'auto' or a number + * @param {string|Function} opt.formatter label formatter + */ +function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) { + var text = axis.scale.getLabel( + // If `precision` is set, width can be fixed (like '12.00500'), which + // helps to debounce when when moving label. + value, {precision: opt.precision} + ); + var formatter = opt.formatter; + + if (formatter) { + var params = { + value: getAxisRawValue(axis, value), + seriesData: [] + }; + each$1(seriesDataIndices, function (idxItem) { + var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); + var dataIndex = idxItem.dataIndexInside; + var dataParams = series && series.getDataParams(dataIndex); + dataParams && params.seriesData.push(dataParams); + }); + + if (isString(formatter)) { + text = formatter.replace('{value}', text); + } + else if (isFunction(formatter)) { + text = formatter(params); + } + } + + return text; +} + +/** + * @param {module:echarts/coord/Axis} axis + * @param {number} value + * @param {Object} layoutInfo { + * rotation, position, labelOffset, labelDirection, labelMargin + * } + */ +function getTransformedPosition (axis, value, layoutInfo) { + var transform = create$1(); + rotate(transform, transform, layoutInfo.rotation); + translate(transform, transform, layoutInfo.position); + + return applyTransform$1([ + axis.dataToCoord(value), + (layoutInfo.labelOffset || 0) + + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0) + ], transform); +} + +function buildCartesianSingleLabelElOption( + value, elOption, layoutInfo, axisModel, axisPointerModel, api +) { + var textLayout = AxisBuilder.innerTextLayout( + layoutInfo.rotation, 0, layoutInfo.labelDirection + ); + layoutInfo.labelMargin = axisPointerModel.get('label.margin'); + buildLabelElOption(elOption, axisModel, axisPointerModel, api, { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + align: textLayout.textAlign, + verticalAlign: textLayout.textVerticalAlign + }); +} + +/** + * @param {Array.} p1 + * @param {Array.} p2 + * @param {number} [xDimIndex=0] or 1 + */ +function makeLineShape(p1, p2, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x1: p1[xDimIndex], + y1: p1[1 - xDimIndex], + x2: p2[xDimIndex], + y2: p2[1 - xDimIndex] + }; +} + +/** + * @param {Array.} xy + * @param {Array.} wh + * @param {number} [xDimIndex=0] or 1 + */ +function makeRectShape(xy, wh, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x: xy[xDimIndex], + y: xy[1 - xDimIndex], + width: wh[xDimIndex], + height: wh[1 - xDimIndex] + }; +} + +function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) { + return { + cx: cx, + cy: cy, + r0: r0, + r: r, + startAngle: startAngle, + endAngle: endAngle, + clockwise: true + }; +} + +var CartesianAxisPointer = BaseAxisPointer.extend({ + + /** + * @override + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + var grid = axis.grid; + var axisPointerType = axisPointerModel.get('type'); + var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); + var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true)); + + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder[axisPointerType]( + axis, pixelValue, otherExtent, elStyle + ); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var layoutInfo = layout(grid.model, axisModel); + buildCartesianSingleLabelElOption( + value, elOption, layoutInfo, axisModel, axisPointerModel, api + ); + }, + + /** + * @override + */ + getHandleTransform: function (value, axisModel, axisPointerModel) { + var layoutInfo = layout(axisModel.axis.grid.model, axisModel, { + labelInside: false + }); + layoutInfo.labelMargin = axisPointerModel.get('handle.margin'); + return { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) + }; + }, + + /** + * @override + */ + updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) { + var axis = axisModel.axis; + var grid = axis.grid; + var axisExtent = axis.getGlobalExtent(true); + var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); + var dimIndex = axis.dim === 'x' ? 0 : 1; + + var currPosition = transform.position; + currPosition[dimIndex] += delta[dimIndex]; + currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); + currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); + + var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; + var cursorPoint = [cursorOtherValue, cursorOtherValue]; + cursorPoint[dimIndex] = currPosition[dimIndex]; + + // Make tooltip do not overlap axisPointer and in the middle of the grid. + var tooltipOptions = [{verticalAlign: 'middle'}, {align: 'center'}]; + + return { + position: currPosition, + rotation: transform.rotation, + cursorPoint: cursorPoint, + tooltipOption: tooltipOptions[dimIndex] + }; + } + +}); + +function getCartesian(grid, axis) { + var opt = {}; + opt[axis.dim + 'AxisIndex'] = axis.index; + return grid.getCartesian(opt); +} + +var pointerShapeBuilder = { + + line: function (axis, pixelValue, otherExtent, elStyle) { + var targetShape = makeLineShape( + [pixelValue, otherExtent[0]], + [pixelValue, otherExtent[1]], + getAxisDimIndex(axis) + ); + subPixelOptimizeLine({ + shape: targetShape, + style: elStyle + }); + return { + type: 'Line', + shape: targetShape + }; + }, + + shadow: function (axis, pixelValue, otherExtent, elStyle) { + var bandWidth = axis.getBandWidth(); + var span = otherExtent[1] - otherExtent[0]; + return { + type: 'Rect', + shape: makeRectShape( + [pixelValue - bandWidth / 2, otherExtent[0]], + [bandWidth, span], + getAxisDimIndex(axis) + ) + }; + } +}; + +function getAxisDimIndex(axis) { + return axis.dim === 'x' ? 0 : 1; +} + +AxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer); + +// CartesianAxisPointer is not supposed to be required here. But consider +// echarts.simple.js and online build tooltip, which only require gridSimple, +// CartesianAxisPointer should be able to required somewhere. +registerPreprocessor(function (option) { + // Always has a global axisPointerModel for default setting. + if (option) { + (!option.axisPointer || option.axisPointer.length === 0) + && (option.axisPointer = {}); + + var link = option.axisPointer.link; + // Normalize to array to avoid object mergin. But if link + // is not set, remain null/undefined, otherwise it will + // override existent link setting. + if (link && !isArray(link)) { + option.axisPointer.link = [link]; + } + } +}); + +// This process should proformed after coordinate systems created +// and series data processed. So put it on statistic processing stage. +registerProcessor(PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) { + // Build axisPointerModel, mergin tooltip.axisPointer model for each axis. + // allAxesInfo should be updated when setOption performed. + ecModel.getComponent('axisPointer').coordSysAxesInfo + = collect(ecModel, api); +}); + +// Broadcast to all views. +registerAction({ + type: 'updateAxisPointer', + event: 'updateAxisPointer', + update: ':updateAxisPointer' +}, axisTrigger); + +var XY = ['x', 'y']; +var WH = ['width', 'height']; + +var SingleAxisPointer = BaseAxisPointer.extend({ + + /** + * @override + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + var coordSys = axis.coordinateSystem; + var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis)); + var pixelValue = coordSys.dataToPoint(value)[0]; + + var axisPointerType = axisPointerModel.get('type'); + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder$1[axisPointerType]( + axis, pixelValue, otherExtent, elStyle + ); + pointerOption.style = elStyle; + + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var layoutInfo = layout$1(axisModel); + buildCartesianSingleLabelElOption( + value, elOption, layoutInfo, axisModel, axisPointerModel, api + ); + }, + + /** + * @override + */ + getHandleTransform: function (value, axisModel, axisPointerModel) { + var layoutInfo = layout$1(axisModel, {labelInside: false}); + layoutInfo.labelMargin = axisPointerModel.get('handle.margin'); + return { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) + }; + }, + + /** + * @override + */ + updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) { + var axis = axisModel.axis; + var coordSys = axis.coordinateSystem; + var dimIndex = getPointDimIndex(axis); + var axisExtent = getGlobalExtent(coordSys, dimIndex); + var currPosition = transform.position; + currPosition[dimIndex] += delta[dimIndex]; + currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); + currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); + var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex); + var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; + var cursorPoint = [cursorOtherValue, cursorOtherValue]; + cursorPoint[dimIndex] = currPosition[dimIndex]; + + return { + position: currPosition, + rotation: transform.rotation, + cursorPoint: cursorPoint, + tooltipOption: { + verticalAlign: 'middle' + } + }; + } +}); + +var pointerShapeBuilder$1 = { + + line: function (axis, pixelValue, otherExtent, elStyle) { + var targetShape = makeLineShape( + [pixelValue, otherExtent[0]], + [pixelValue, otherExtent[1]], + getPointDimIndex(axis) + ); + subPixelOptimizeLine({ + shape: targetShape, + style: elStyle + }); + return { + type: 'Line', + shape: targetShape + }; + }, + + shadow: function (axis, pixelValue, otherExtent, elStyle) { + var bandWidth = axis.getBandWidth(); + var span = otherExtent[1] - otherExtent[0]; + return { + type: 'Rect', + shape: makeRectShape( + [pixelValue - bandWidth / 2, otherExtent[0]], + [bandWidth, span], + getPointDimIndex(axis) + ) + }; + } +}; + +function getPointDimIndex(axis) { + return axis.isHorizontal() ? 0 : 1; +} + +function getGlobalExtent(coordSys, dimIndex) { + var rect = coordSys.getRect(); + return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]]; +} + +AxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer); + +extendComponentView({ + type: 'single' +}); + +/** + * @file Define the themeRiver view's series model + * @author Deqing Li(annong035@gmail.com) + */ + +var DATA_NAME_INDEX = 2; + +var ThemeRiverSeries = SeriesModel.extend({ + + type: 'series.themeRiver', + + dependencies: ['singleAxis'], + + /** + * @readOnly + * @type {module:zrender/core/util#HashMap} + */ + nameMap: null, + + /** + * @override + */ + init: function (option) { + ThemeRiverSeries.superApply(this, 'init', arguments); + + // Put this function here is for the sake of consistency of code style. + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + this.legendDataProvider = function () { + return this.getRawData(); + }; + }, + + /** + * If there is no value of a certain point in the time for some event,set it value to 0. + * + * @param {Array} data initial data in the option + * @return {Array} + */ + fixData: function (data) { + var rawDataLength = data.length; + + // grouped data by name + var dataByName = nest() + .key(function (dataItem) { + return dataItem[2]; + }) + .entries(data); + + // data group in each layer + var layData = map(dataByName, function (d) { + return { + name: d.key, + dataList: d.values + }; + }); + + var layerNum = layData.length; + var largestLayer = -1; + var index = -1; + for (var i = 0; i < layerNum; ++i) { + var len = layData[i].dataList.length; + if (len > largestLayer) { + largestLayer = len; + index = i; + } + } + + for (var k = 0; k < layerNum; ++k) { + if (k === index) { + continue; + } + var name = layData[k].name; + for (var j = 0; j < largestLayer; ++j) { + var timeValue = layData[index].dataList[j][0]; + var length = layData[k].dataList.length; + var keyIndex = -1; + for (var l = 0; l < length; ++l) { + var value = layData[k].dataList[l][0]; + if (value === timeValue) { + keyIndex = l; + break; + } + } + if (keyIndex === -1) { + data[rawDataLength] = []; + data[rawDataLength][0] = timeValue; + data[rawDataLength][1] = 0; + data[rawDataLength][2] = name; + rawDataLength++; + + } + } + } + return data; + }, + + /** + * @override + * @param {Object} option the initial option that user gived + * @param {module:echarts/model/Model} ecModel the model object for themeRiver option + * @return {module:echarts/data/List} + */ + getInitialData: function (option, ecModel) { + + var dimensions = []; + + var singleAxisModel = ecModel.queryComponents({ + mainType: 'singleAxis', + index: this.get('singleAxisIndex'), + id: this.get('singleAxisId') + })[0]; + + var axisType = singleAxisModel.get('type'); + + dimensions = [ + { + name: 'time', + // FIXME common? + type: axisType === 'category' + ? 'ordinal' + : axisType === 'time' + ? 'time' + : 'float' + }, + { + name: 'value', + type: 'float' + }, + { + name: 'name', + type: 'ordinal' + } + ]; + + // filter the data item with the value of label is undefined + var filterData = filter(option.data, function (dataItem) { + return dataItem[2] !== undefined; + }); + + var data = this.fixData(filterData || []); + var nameList = []; + var nameMap = this.nameMap = createHashMap(); + var count = 0; + + for (var i = 0; i < data.length; ++i) { + nameList.push(data[i][DATA_NAME_INDEX]); + if (!nameMap.get(data[i][DATA_NAME_INDEX])) { + nameMap.set(data[i][DATA_NAME_INDEX], count); + count++; + } + } + + dimensions = completeDimensions(dimensions, data); + + var list = new List(dimensions, this); + + list.initData(data, nameList); + + return list; + }, + + /** + * Used by single coordinate + * + * @param {string} axisDim the dimension for single coordinate + * @return {Array. } specified dimensions on the axis. + */ + coordDimToDataDim: function (axisDim) { + return ['time']; + }, + + /** + * The raw data is divided into multiple layers and each layer + * has same name. + * + * @return {Array.>} + */ + getLayerSeries: function () { + var data = this.getData(); + var lenCount = data.count(); + var indexArr = []; + + for (var i = 0; i < lenCount; ++i) { + indexArr[i] = i; + } + // data group by name + var dataByName = nest() + .key(function (index) { + return data.get('name', index); + }) + .entries(indexArr); + + var layerSeries = map(dataByName, function (d) { + return { + name: d.key, + indices: d.values + }; + }); + + for (var j = 0; j < layerSeries.length; ++j) { + layerSeries[j].indices.sort(comparer); + } + + function comparer(index1, index2) { + return data.get('time', index1) - data.get('time', index2); + } + + return layerSeries; + }, + + /** + * Get data indices for show tooltip content + * + * @param {Array.|string} dim single coordinate dimension + * @param {number} value axis value + * @param {module:echarts/coord/single/SingleAxis} baseAxis single Axis used + * the themeRiver. + * @return {Object} {dataIndices, nestestValue} + */ + getAxisTooltipData: function (dim, value, baseAxis) { + if (!isArray(dim)) { + dim = dim ? [dim] : []; + } + + var data = this.getData(); + var layerSeries = this.getLayerSeries(); + var indices = []; + var layerNum = layerSeries.length; + var nestestValue; + + for (var i = 0; i < layerNum; ++i) { + var minDist = Number.MAX_VALUE; + var nearestIdx = -1; + var pointNum = layerSeries[i].indices.length; + for (var j = 0; j < pointNum; ++j) { + var theValue = data.get(dim[0], layerSeries[i].indices[j]); + var dist = Math.abs(theValue - value); + if (dist <= minDist) { + nestestValue = theValue; + minDist = dist; + nearestIdx = layerSeries[i].indices[j]; + } + } + indices.push(nearestIdx); + } + + return {dataIndices: indices, nestestValue: nestestValue}; + }, + + /** + * @override + * @param {number} dataIndex index of data + */ + formatTooltip: function (dataIndex) { + var data = this.getData(); + var htmlName = data.get('name', dataIndex); + var htmlValue = data.get('value', dataIndex); + if (isNaN(htmlValue) || htmlValue == null) { + htmlValue = '-'; + } + return encodeHTML(htmlName + ' : ' + htmlValue); + }, + + defaultOption: { + zlevel: 0, + z: 2, + + coordinateSystem: 'singleAxis', + + // gap in axis's orthogonal orientation + boundaryGap: ['10%', '10%'], + + // legendHoverLink: true, + + singleAxisIndex: 0, + + animationEasing: 'linear', + + label: { + normal: { + margin: 4, + textAlign: 'right', + show: true, + position: 'left', + color: '#000', + fontSize: 11 + }, + emphasis: { + show: true + } + } + } +}); + +/** + * @file The file used to draw themeRiver view + * @author Deqing Li(annong035@gmail.com) + */ + +extendChartView({ + + type: 'themeRiver', + + init: function () { + this._layers = []; + }, + + render: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var group = this.group; + + var layerSeries = seriesModel.getLayerSeries(); + + var layoutInfo = data.getLayout('layoutInfo'); + var rect = layoutInfo.rect; + var boundaryGap = layoutInfo.boundaryGap; + + group.attr('position', [0, rect.y + boundaryGap[0]]); + + function keyGetter(item) { + return item.name; + } + var dataDiffer = new DataDiffer( + this._layersSeries || [], layerSeries, + keyGetter, keyGetter + ); + + var newLayersGroups = {}; + + dataDiffer + .add(bind(process, this, 'add')) + .update(bind(process, this, 'update')) + .remove(bind(process, this, 'remove')) + .execute(); + + function process(status, idx, oldIdx) { + var oldLayersGroups = this._layers; + if (status === 'remove') { + group.remove(oldLayersGroups[idx]); + return; + } + var points0 = []; + var points1 = []; + var color; + var indices = layerSeries[idx].indices; + for (var j = 0; j < indices.length; j++) { + var layout = data.getItemLayout(indices[j]); + var x = layout.x; + var y0 = layout.y0; + var y = layout.y; + + points0.push([x, y0]); + points1.push([x, y0 + y]); + + color = data.getItemVisual(indices[j], 'color'); + } + + var polygon; + var text; + var textLayout = data.getItemLayout(indices[0]); + var itemModel = data.getItemModel(indices[j - 1]); + var labelModel = itemModel.getModel('label.normal'); + var margin = labelModel.get('margin'); + if (status === 'add') { + var layerGroup = newLayersGroups[idx] = new Group(); + polygon = new Polygon$1({ + shape: { + points: points0, + stackedOnPoints: points1, + smooth: 0.4, + stackedOnSmooth: 0.4, + smoothConstraint: false + }, + z2: 0 + }); + text = new Text({ + style: { + x: textLayout.x - margin, + y: textLayout.y0 + textLayout.y / 2 + } + }); + layerGroup.add(polygon); + layerGroup.add(text); + group.add(layerGroup); + + polygon.setClipPath(createGridClipShape$3(polygon.getBoundingRect(), seriesModel, function () { + polygon.removeClipPath(); + })); + } + else { + var layerGroup = oldLayersGroups[oldIdx]; + polygon = layerGroup.childAt(0); + text = layerGroup.childAt(1); + group.add(layerGroup); + + newLayersGroups[idx] = layerGroup; + + updateProps(polygon, { + shape: { + points: points0, + stackedOnPoints: points1 + } + }, seriesModel); + + updateProps(text, { + style: { + x: textLayout.x - margin, + y: textLayout.y0 + textLayout.y / 2 + } + }, seriesModel); + } + + var hoverItemStyleModel = itemModel.getModel('itemStyle.emphasis'); + var itemStyleModel = itemModel.getModel('itemStyle.normal'); + + setTextStyle(text.style, labelModel, { + text: labelModel.get('show') + ? seriesModel.getFormattedLabel(indices[j - 1], 'normal') + || data.getName(indices[j - 1]) + : null, + textVerticalAlign: 'middle' + }); + + polygon.setStyle(extend({ + fill: color + }, itemStyleModel.getItemStyle(['color']))); + + setHoverStyle(polygon, hoverItemStyleModel.getItemStyle()); + } + + this._layersSeries = layerSeries; + this._layers = newLayersGroups; + }, + + dispose: function () {} +}); + +// add animation to the view +function createGridClipShape$3(rect, seriesModel, cb) { + var rectEl = new Rect({ + shape: { + x: rect.x - 10, + y: rect.y - 10, + width: 0, + height: rect.height + 20 + } + }); + initProps(rectEl, { + shape: { + width: rect.width + 20, + height: rect.height + 20 + } + }, seriesModel, cb); + + return rectEl; +} + +/** + * @file Using layout algorithm transform the raw data to layout information. + * @author Deqing Li(annong035@gmail.com) + */ + +var themeRiverLayout = function (ecModel, api) { + + ecModel.eachSeriesByType('themeRiver', function (seriesModel) { + + var data = seriesModel.getData(); + + var single = seriesModel.coordinateSystem; + + var layoutInfo = {}; + + // use the axis boundingRect for view + var rect = single.getRect(); + + layoutInfo.rect = rect; + + var boundaryGap = seriesModel.get('boundaryGap'); + + var axis = single.getAxis(); + + layoutInfo.boundaryGap = boundaryGap; + + if (axis.orient === 'horizontal') { + boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.height); + boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.height); + var height = rect.height - boundaryGap[0] - boundaryGap[1]; + themeRiverLayout$1(data, seriesModel, height); + } + else { + boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.width); + boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.width); + var width = rect.width - boundaryGap[0] - boundaryGap[1]; + themeRiverLayout$1(data, seriesModel, width); + } + + data.setLayout('layoutInfo', layoutInfo); + }); +}; + +/** + * The layout information about themeriver + * + * @param {module:echarts/data/List} data data in the series + * @param {module:echarts/model/Series} seriesModel the model object of themeRiver series + * @param {number} height value used to compute every series height + */ +function themeRiverLayout$1(data, seriesModel, height) { + if (!data.count()) { + return; + } + var coordSys = seriesModel.coordinateSystem; + // the data in each layer are organized into a series. + var layerSeries = seriesModel.getLayerSeries(); + + // the points in each layer. + var layerPoints = map(layerSeries, function (singleLayer) { + return map(singleLayer.indices, function (idx) { + var pt = coordSys.dataToPoint(data.get('time', idx)); + pt[1] = data.get('value', idx); + return pt; + }); + }); + + var base = computeBaseline(layerPoints); + var baseLine = base.y0; + var ky = height / base.max; + + // set layout information for each item. + var n = layerSeries.length; + var m = layerSeries[0].indices.length; + var baseY0; + for (var j = 0; j < m; ++j) { + baseY0 = baseLine[j] * ky; + data.setItemLayout(layerSeries[0].indices[j], { + layerIndex: 0, + x: layerPoints[0][j][0], + y0: baseY0, + y: layerPoints[0][j][1] * ky + }); + for (var i = 1; i < n; ++i) { + baseY0 += layerPoints[i - 1][j][1] * ky; + data.setItemLayout(layerSeries[i].indices[j], { + layerIndex: i, + x: layerPoints[i][j][0], + y0: baseY0, + y: layerPoints[i][j][1] * ky + }); + } + } +} + +/** + * Compute the baseLine of the rawdata + * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics + * + * @param {Array.} data the points in each layer + * @return {Object} + */ +function computeBaseline(data) { + var layerNum = data.length; + var pointNum = data[0].length; + var sums = []; + var y0 = []; + var max = 0; + var temp; + var base = {}; + + for (var i = 0; i < pointNum; ++i) { + for (var j = 0, temp = 0; j < layerNum; ++j) { + temp += data[j][i][1]; + } + if (temp > max) { + max = temp; + } + sums.push(temp); + } + + for (var k = 0; k < pointNum; ++k) { + y0[k] = (max - sums[k]) / 2; + } + max = 0; + + for (var l = 0; l < pointNum; ++l) { + var sum = sums[l] + y0[l]; + if (sum > max) { + max = sum; + } + } + base.y0 = y0; + base.max = max; + + return base; +} + +/** + * @file Visual encoding for themeRiver view + * @author Deqing Li(annong035@gmail.com) + */ + +var themeRiverVisual = function (ecModel) { + ecModel.eachSeriesByType('themeRiver', function (seriesModel) { + var data = seriesModel.getData(); + var rawData = seriesModel.getRawData(); + var colorList = seriesModel.get('color'); + var idxMap = createHashMap(); + + data.each(function (idx) { + idxMap.set(data.getRawIndex(idx), idx); + }); + + rawData.each(function (rawIndex) { + var name = rawData.getName(rawIndex); + var color = colorList[(seriesModel.nameMap.get(name) - 1) % colorList.length]; + + rawData.setItemVisual(rawIndex, 'color', color); + + var idx = idxMap.get(rawIndex); + + if (idx != null) { + data.setItemVisual(idx, 'color', color); + } + }); + }); +}; + +registerLayout(themeRiverLayout); +registerVisual(themeRiverVisual); +registerProcessor(curry(dataFilter, 'themeRiver')); + +function dataToCoordSize(dataSize, dataItem) { + // dataItem is necessary in log axis. + dataItem = dataItem || [0, 0]; + return map(['x', 'y'], function (dim, dimIdx) { + var axis = this.getAxis(dim); + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + return axis.type === 'category' + ? axis.getBandWidth() + : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); + }, this); +} + +var prepareCartesian2d = function (coordSys) { + var rect = coordSys.grid.getRect(); + return { + coordSys: { + // The name exposed to user is always 'cartesian2d' but not 'grid'. + type: 'cartesian2d', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: bind(coordSys.dataToPoint, coordSys), + size: bind(dataToCoordSize, coordSys) + } + }; +}; + +function dataToCoordSize$1(dataSize, dataItem) { + dataItem = dataItem || [0, 0]; + return map([0, 1], function (dimIdx) { + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + var p1 = []; + var p2 = []; + p1[dimIdx] = val - halfSize; + p2[dimIdx] = val + halfSize; + p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx]; + return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]); + }, this); +} + +var prepareGeo = function (coordSys) { + var rect = coordSys.getBoundingRect(); + return { + coordSys: { + type: 'geo', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: bind(coordSys.dataToPoint, coordSys), + size: bind(dataToCoordSize$1, coordSys) + } + }; +}; + +function dataToCoordSize$2(dataSize, dataItem) { + // dataItem is necessary in log axis. + var axis = this.getAxis(); + var val = dataItem instanceof Array ? dataItem[0] : dataItem; + var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2; + return axis.type === 'category' + ? axis.getBandWidth() + : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); +} + +var prepareSingleAxis = function (coordSys) { + var rect = coordSys.getRect(); + + return { + coordSys: { + type: 'singleAxis', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: bind(coordSys.dataToPoint, coordSys), + size: bind(dataToCoordSize$2, coordSys) + } + }; +}; + +function dataToCoordSize$3(dataSize, dataItem) { + // dataItem is necessary in log axis. + return map(['Radius', 'Angle'], function (dim, dimIdx) { + var axis = this['get' + dim + 'Axis'](); + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + var method = 'dataTo' + dim; + + var result = axis.type === 'category' + ? axis.getBandWidth() + : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize)); + + if (dim === 'Angle') { + result = result * Math.PI / 180; + } + + return result; + + }, this); +} + +var preparePolar = function (coordSys) { + var radiusAxis = coordSys.getRadiusAxis(); + var angleAxis = coordSys.getAngleAxis(); + var radius = radiusAxis.getExtent(); + radius[0] > radius[1] && radius.reverse(); + + return { + coordSys: { + type: 'polar', + cx: coordSys.cx, + cy: coordSys.cy, + r: radius[1], + r0: radius[0] + }, + api: { + coord: bind(function (data) { + var radius = radiusAxis.dataToRadius(data[0]); + var angle = angleAxis.dataToAngle(data[1]); + var coord = coordSys.coordToPoint([radius, angle]); + coord.push(radius, angle * Math.PI / 180); + return coord; + }), + size: bind(dataToCoordSize$3, coordSys) + } + }; +}; + +var prepareCalendar = function (coordSys) { + var rect = coordSys.getRect(); + var rangeInfo = coordSys.getRangeInfo(); + + return { + coordSys: { + type: 'calendar', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + cellWidth: coordSys.getCellWidth(), + cellHeight: coordSys.getCellHeight(), + rangeInfo: { + start: rangeInfo.start, + end: rangeInfo.end, + weeks: rangeInfo.weeks, + dayCount: rangeInfo.allDay + } + }, + api: { + coord: bind(coordSys.dataToPoint, coordSys) + } + }; +}; + +var ITEM_STYLE_NORMAL_PATH = ['itemStyle', 'normal']; +var ITEM_STYLE_EMPHASIS_PATH = ['itemStyle', 'emphasis']; +var LABEL_NORMAL = ['label', 'normal']; +var LABEL_EMPHASIS = ['label', 'emphasis']; +// Use prefix to avoid index to be the same as el.name, +// which will cause weird udpate animation. +var GROUP_DIFF_PREFIX = 'e\0\0'; + +/** + * To reduce total package size of each coordinate systems, the modules `prepareCustom` + * of each coordinate systems are not required by each coordinate systems directly, but + * required by the module `custom`. + * + * prepareInfoForCustomSeries {Function}: optional + * @return {Object} {coordSys: {...}, api: { + * coord: function (data, clamp) {}, // return point in global. + * size: function (dataSize, dataItem) {} // return size of each axis in coordSys. + * }} + */ +var prepareCustoms = { + cartesian2d: prepareCartesian2d, + geo: prepareGeo, + singleAxis: prepareSingleAxis, + polar: preparePolar, + calendar: prepareCalendar +}; + +// ------ +// Model +// ------ + +extendSeriesModel({ + + type: 'series.custom', + + dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'], + + defaultOption: { + coordinateSystem: 'cartesian2d', // Can be set as 'none' + zlevel: 0, + z: 2, + legendHoverLink: true + + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + + // Polar coordinate system + // polarIndex: 0, + + // Geo coordinate system + // geoIndex: 0, + + // label: {} + // itemStyle: {} + }, + + getInitialData: function (option, ecModel) { + return createListFromArray(option.data, this, ecModel); + } +}); + +// ----- +// View +// ----- + +extendChartView({ + + type: 'custom', + + /** + * @private + * @type {module:echarts/data/List} + */ + _data: null, + + /** + * @override + */ + render: function (customSeries, ecModel, api) { + var oldData = this._data; + var data = customSeries.getData(); + var group = this.group; + var renderItem = makeRenderItem(customSeries, data, ecModel, api); + + data.diff(oldData) + .add(function (newIdx) { + data.hasValue(newIdx) && createOrUpdate$1( + null, newIdx, renderItem(newIdx), customSeries, group, data + ); + }) + .update(function (newIdx, oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + data.hasValue(newIdx) + ? createOrUpdate$1( + el, newIdx, renderItem(newIdx), customSeries, group, data + ) + : (el && group.remove(el)); + }) + .remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }) + .execute(); + + this._data = data; + }, + + /** + * @override + */ + dispose: noop +}); + + +function createEl(elOption) { + var graphicType = elOption.type; + var el; + + if (graphicType === 'path') { + var shape = elOption.shape; + el = makePath( + shape.pathData, + null, + { + x: shape.x || 0, + y: shape.y || 0, + width: shape.width || 0, + height: shape.height || 0 + }, + 'center' + ); + el.__customPathData = elOption.pathData; + } + else if (graphicType === 'image') { + el = new ZImage({ + }); + el.__customImagePath = elOption.style.image; + } + else if (graphicType === 'text') { + el = new Text({ + }); + el.__customText = elOption.style.text; + } + else { + var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)]; + + if (__DEV__) { + assert(Clz, 'graphic type "' + graphicType + '" can not be found.'); + } + + el = new Clz(); + } + + el.__customGraphicType = graphicType; + el.name = elOption.name; + + return el; +} + +function updateEl(el, dataIndex, elOption, animatableModel, data, isInit) { + var targetProps = {}; + var elOptionStyle = elOption.style || {}; + + elOption.shape && (targetProps.shape = clone(elOption.shape)); + elOption.position && (targetProps.position = elOption.position.slice()); + elOption.scale && (targetProps.scale = elOption.scale.slice()); + elOption.origin && (targetProps.origin = elOption.origin.slice()); + elOption.rotation && (targetProps.rotation = elOption.rotation); + + if (el.type === 'image' && elOption.style) { + var targetStyle = targetProps.style = {}; + each$1(['x', 'y', 'width', 'height'], function (prop) { + prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit); + }); + } + + if (el.type === 'text' && elOption.style) { + var targetStyle = targetProps.style = {}; + each$1(['x', 'y'], function (prop) { + prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit); + }); + // Compatible with previous: both support + // textFill and fill, textStroke and stroke in 'text' element. + !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && ( + elOptionStyle.textFill = elOptionStyle.fill + ); + !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && ( + elOptionStyle.textStroke = elOptionStyle.stroke + ); + } + + if (el.type !== 'group') { + el.useStyle(elOptionStyle); + + // Init animation. + if (isInit) { + el.style.opacity = 0; + var targetOpacity = elOptionStyle.opacity; + targetOpacity == null && (targetOpacity = 1); + initProps(el, {style: {opacity: targetOpacity}}, animatableModel, dataIndex); + } + } + + if (isInit) { + el.attr(targetProps); + } + else { + updateProps(el, targetProps, animatableModel, dataIndex); + } + + // z2 must not be null/undefined, otherwise sort error may occur. + el.attr({z2: elOption.z2 || 0, silent: elOption.silent}); + + elOption.styleEmphasis !== false && setHoverStyle(el, elOption.styleEmphasis); +} + +function prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, isInit) { + if (elOptionStyle[prop] != null && !isInit) { + targetStyle[prop] = elOptionStyle[prop]; + elOptionStyle[prop] = oldElStyle[prop]; + } +} + +function makeRenderItem(customSeries, data, ecModel, api) { + var renderItem = customSeries.get('renderItem'); + var coordSys = customSeries.coordinateSystem; + var prepareResult = {}; + + if (coordSys) { + if (__DEV__) { + assert(renderItem, 'series.render is required.'); + assert( + coordSys.prepareCustoms || prepareCustoms[coordSys.type], + 'This coordSys does not support custom series.' + ); + } + + prepareResult = coordSys.prepareCustoms + ? coordSys.prepareCustoms() + : prepareCustoms[coordSys.type](coordSys); + } + + var userAPI = defaults({ + getWidth: api.getWidth, + getHeight: api.getHeight, + getZr: api.getZr, + getDevicePixelRatio: api.getDevicePixelRatio, + value: value, + style: style, + styleEmphasis: styleEmphasis, + visual: visual, + barLayout: barLayout, + currentSeriesIndices: currentSeriesIndices, + font: font + }, prepareResult.api || {}); + + var userParams = { + context: {}, + seriesId: customSeries.id, + seriesName: customSeries.name, + seriesIndex: customSeries.seriesIndex, + coordSys: prepareResult.coordSys, + dataInsideLength: data.count(), + encode: wrapEncodeDef(customSeries.getData()) + }; + + // Do not support call `api` asynchronously without dataIndexInside input. + var currDataIndexInside; + var currDirty = true; + var currItemModel; + var currLabelNormalModel; + var currLabelEmphasisModel; + var currLabelValueDim; + var currVisualColor; + + return function (dataIndexInside) { + currDataIndexInside = dataIndexInside; + currDirty = true; + return renderItem && renderItem( + defaults({ + dataIndexInside: dataIndexInside, + dataIndex: data.getRawIndex(dataIndexInside) + }, userParams), + userAPI + ) || {}; + }; + + // Do not update cache until api called. + function updateCache(dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + if (currDirty) { + currItemModel = data.getItemModel(dataIndexInside); + currLabelNormalModel = currItemModel.getModel(LABEL_NORMAL); + currLabelEmphasisModel = currItemModel.getModel(LABEL_EMPHASIS); + currLabelValueDim = findLabelValueDim(data); + currVisualColor = data.getItemVisual(dataIndexInside, 'color'); + + currDirty = false; + } + } + + /** + * @public + * @param {number|string} dim + * @param {number} [dataIndexInside=currDataIndexInside] + * @return {number|string} value + */ + function value(dim, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + return data.get(data.getDimension(dim || 0), dataIndexInside); + } + + /** + * By default, `visual` is applied to style (to support visualMap). + * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`, + * it can be implemented as: + * `api.style({stroke: api.visual('color'), fill: null})`; + * @public + * @param {Object} [extra] + * @param {number} [dataIndexInside=currDataIndexInside] + */ + function style(extra, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + updateCache(dataIndexInside); + + var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle(); + + currVisualColor != null && (itemStyle.fill = currVisualColor); + var opacity = data.getItemVisual(dataIndexInside, 'opacity'); + opacity != null && (itemStyle.opacity = opacity); + + if (currLabelValueDim != null) { + setTextStyle(itemStyle, currLabelNormalModel, null, { + autoColor: currVisualColor, + isRectText: true + }); + + itemStyle.text = currLabelNormalModel.getShallow('show') + ? retrieve2( + customSeries.getFormattedLabel(dataIndexInside, 'normal'), + data.get(currLabelValueDim, dataIndexInside) + ) + : null; + } + + extra && extend(itemStyle, extra); + return itemStyle; + } + + /** + * @public + * @param {Object} [extra] + * @param {number} [dataIndexInside=currDataIndexInside] + */ + function styleEmphasis(extra, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + updateCache(dataIndexInside); + + var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle(); + + if (currLabelValueDim != null) { + setTextStyle(itemStyle, currLabelEmphasisModel, null, { + isRectText: true + }, true); + + itemStyle.text = currLabelEmphasisModel.getShallow('show') + ? retrieve3( + customSeries.getFormattedLabel(dataIndexInside, 'emphasis'), + customSeries.getFormattedLabel(dataIndexInside, 'normal'), + data.get(currLabelValueDim, dataIndexInside) + ) + : null; + } + + extra && extend(itemStyle, extra); + return itemStyle; + } + + /** + * @public + * @param {string} visualType + * @param {number} [dataIndexInside=currDataIndexInside] + */ + function visual(visualType, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + return data.getItemVisual(dataIndexInside, visualType); + } + + /** + * @public + * @param {number} opt.count Positive interger. + * @param {number} [opt.barWidth] + * @param {number} [opt.barMaxWidth] + * @param {number} [opt.barGap] + * @param {number} [opt.barCategoryGap] + * @return {Object} {width, offset, offsetCenter} is not support, return undefined. + */ + function barLayout(opt) { + if (coordSys.getBaseAxis) { + var baseAxis = coordSys.getBaseAxis(); + return barLayoutGrid.getLayoutOnAxis(defaults({axis: baseAxis}, opt), api); + } + } + + /** + * @public + * @return {Array.} + */ + function currentSeriesIndices() { + return ecModel.getCurrentSeriesIndices(); + } + + /** + * @public + * @param {Object} opt + * @param {string} [opt.fontStyle] + * @param {number} [opt.fontWeight] + * @param {number} [opt.fontSize] + * @param {string} [opt.fontFamily] + * @return {string} font string + */ + function font(opt) { + return getFont(opt, ecModel); + } +} + +function wrapEncodeDef(data) { + var encodeDef = {}; + each$1(data.dimensions, function (dimName, dataDimIndex) { + var dimInfo = data.getDimensionInfo(dimName); + if (!dimInfo.isExtraCoord) { + var coordDim = dimInfo.coordDim; + var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || []; + dataDims[dimInfo.coordDimIndex] = dataDimIndex; + } + }); + return encodeDef; +} + +function createOrUpdate$1(el, dataIndex, elOption, animatableModel, group, data) { + el = doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data); + el && data.setItemGraphicEl(dataIndex, el); +} + +function doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data) { + var elOptionType = elOption.type; + if (el + && elOptionType !== el.__customGraphicType + && (elOptionType !== 'path' || elOption.pathData !== el.__customPathData) + && (elOptionType !== 'image' || elOption.style.image !== el.__customImagePath) + && (elOptionType !== 'text' || elOption.style.text !== el.__customText) + ) { + group.remove(el); + el = null; + } + + // `elOption.type` is undefined when `renderItem` returns nothing. + if (elOptionType == null) { + return; + } + + var isInit = !el; + !el && (el = createEl(elOption)); + updateEl(el, dataIndex, elOption, animatableModel, data, isInit); + + if (elOptionType === 'group') { + var oldChildren = el.children() || []; + var newChildren = elOption.children || []; + + if (elOption.diffChildrenByName) { + // lower performance. + diffGroupChildren({ + oldChildren: oldChildren, + newChildren: newChildren, + dataIndex: dataIndex, + animatableModel: animatableModel, + group: el, + data: data + }); + } + else { + // better performance. + var index = 0; + for (; index < newChildren.length; index++) { + doCreateOrUpdate( + el.childAt(index), + dataIndex, + newChildren[index], + animatableModel, + el, + data + ); + } + for (; index < oldChildren.length; index++) { + oldChildren[index] && el.remove(oldChildren[index]); + } + } + } + + group.add(el); + + return el; +} + +function diffGroupChildren(context) { + (new DataDiffer( + context.oldChildren, + context.newChildren, + getKey, + getKey, + context + )) + .add(processAddUpdate) + .update(processAddUpdate) + .remove(processRemove) + .execute(); +} + +function getKey(item, idx) { + var name = item && item.name; + return name != null ? name : GROUP_DIFF_PREFIX + idx; +} + +function processAddUpdate(newIndex, oldIndex) { + var context = this.context; + var childOption = newIndex != null ? context.newChildren[newIndex] : null; + var child = oldIndex != null ? context.oldChildren[oldIndex] : null; + + doCreateOrUpdate( + child, + context.dataIndex, + childOption, + context.animatableModel, + context.group, + context.data + ); +} + +function processRemove(oldIndex) { + var context = this.context; + var child = context.oldChildren[oldIndex]; + child && context.group.remove(child); +} + +// ------------- +// Preprocessor +// ------------- + +registerPreprocessor(function (option) { + var graphicOption = option.graphic; + + // Convert + // {graphic: [{left: 10, type: 'circle'}, ...]} + // or + // {graphic: {left: 10, type: 'circle'}} + // to + // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]} + if (isArray(graphicOption)) { + if (!graphicOption[0] || !graphicOption[0].elements) { + option.graphic = [{elements: graphicOption}]; + } + else { + // Only one graphic instance can be instantiated. (We dont + // want that too many views are created in echarts._viewMap) + option.graphic = [option.graphic[0]]; + } + } + else if (graphicOption && !graphicOption.elements) { + option.graphic = [{elements: [graphicOption]}]; + } +}); + +// ------ +// Model +// ------ + +var GraphicModel = extendComponentModel({ + + type: 'graphic', + + defaultOption: { + + // Extra properties for each elements: + // + // left/right/top/bottom: (like 12, '22%', 'center', default undefined) + // If left/rigth is set, shape.x/shape.cx/position will not be used. + // If top/bottom is set, shape.y/shape.cy/position will not be used. + // This mechanism is useful when you want to position a group/element + // against the right side or the center of this container. + // + // width/height: (can only be pixel value, default 0) + // Only be used to specify contianer(group) size, if needed. And + // can not be percentage value (like '33%'). See the reason in the + // layout algorithm below. + // + // bounding: (enum: 'all' (default) | 'raw') + // Specify how to calculate boundingRect when locating. + // 'all': Get uioned and transformed boundingRect + // from both itself and its descendants. + // This mode simplies confining a group of elements in the bounding + // of their ancester container (e.g., using 'right: 0'). + // 'raw': Only use the boundingRect of itself and before transformed. + // This mode is similar to css behavior, which is useful when you + // want an element to be able to overflow its container. (Consider + // a rotated circle needs to be located in a corner.) + + // Note: elements is always behind its ancestors in this elements array. + elements: [], + parentId: null + }, + + /** + * Save el options for the sake of the performance (only update modified graphics). + * The order is the same as those in option. (ancesters -> descendants) + * + * @private + * @type {Array.} + */ + _elOptionsToUpdate: null, + + /** + * @override + */ + mergeOption: function (option) { + // Prevent default merge to elements + var elements = this.option.elements; + this.option.elements = null; + + GraphicModel.superApply(this, 'mergeOption', arguments); + + this.option.elements = elements; + }, + + /** + * @override + */ + optionUpdated: function (newOption, isInit) { + var thisOption = this.option; + var newList = (isInit ? thisOption : newOption).elements; + var existList = thisOption.elements = isInit ? [] : thisOption.elements; + + var flattenedList = []; + this._flatten(newList, flattenedList); + + var mappingResult = mappingToExists(existList, flattenedList); + makeIdAndName(mappingResult); + + // Clear elOptionsToUpdate + var elOptionsToUpdate = this._elOptionsToUpdate = []; + + each$1(mappingResult, function (resultItem, index) { + var newElOption = resultItem.option; + + if (__DEV__) { + assert( + isObject(newElOption) || resultItem.exist, + 'Empty graphic option definition' + ); + } + + if (!newElOption) { + return; + } + + elOptionsToUpdate.push(newElOption); + + setKeyInfoToNewElOption(resultItem, newElOption); + + mergeNewElOptionToExist(existList, index, newElOption); + + setLayoutInfoToExist(existList[index], newElOption); + + }, this); + + // Clean + for (var i = existList.length - 1; i >= 0; i--) { + if (existList[i] == null) { + existList.splice(i, 1); + } + else { + // $action should be volatile, otherwise option gotten from + // `getOption` will contain unexpected $action. + delete existList[i].$action; + } + } + }, + + /** + * Convert + * [{ + * type: 'group', + * id: 'xx', + * children: [{type: 'circle'}, {type: 'polygon'}] + * }] + * to + * [ + * {type: 'group', id: 'xx'}, + * {type: 'circle', parentId: 'xx'}, + * {type: 'polygon', parentId: 'xx'} + * ] + * + * @private + * @param {Array.} optionList option list + * @param {Array.} result result of flatten + * @param {Object} parentOption parent option + */ + _flatten: function (optionList, result, parentOption) { + each$1(optionList, function (option) { + if (!option) { + return; + } + + if (parentOption) { + option.parentOption = parentOption; + } + + result.push(option); + + var children = option.children; + if (option.type === 'group' && children) { + this._flatten(children, result, option); + } + // Deleting for JSON output, and for not affecting group creation. + delete option.children; + }, this); + }, + + // FIXME + // Pass to view using payload? setOption has a payload? + useElOptionsToUpdate: function () { + var els = this._elOptionsToUpdate; + // Clear to avoid render duplicately when zooming. + this._elOptionsToUpdate = null; + return els; + } +}); + +// ----- +// View +// ----- + +extendComponentView({ + + type: 'graphic', + + /** + * @override + */ + init: function (ecModel, api) { + + /** + * @private + * @type {module:zrender/core/util.HashMap} + */ + this._elMap = createHashMap(); + + /** + * @private + * @type {module:echarts/graphic/GraphicModel} + */ + this._lastGraphicModel; + }, + + /** + * @override + */ + render: function (graphicModel, ecModel, api) { + + // Having leveraged between use cases and algorithm complexity, a very + // simple layout mechanism is used: + // The size(width/height) can be determined by itself or its parent (not + // implemented yet), but can not by its children. (Top-down travel) + // The location(x/y) can be determined by the bounding rect of itself + // (can including its descendants or not) and the size of its parent. + // (Bottom-up travel) + + // When `chart.clear()` or `chart.setOption({...}, true)` with the same id, + // view will be reused. + if (graphicModel !== this._lastGraphicModel) { + this._clear(); + } + this._lastGraphicModel = graphicModel; + + this._updateElements(graphicModel, api); + this._relocate(graphicModel, api); + }, + + /** + * Update graphic elements. + * + * @private + * @param {Object} graphicModel graphic model + * @param {module:echarts/ExtensionAPI} api extension API + */ + _updateElements: function (graphicModel, api) { + var elOptionsToUpdate = graphicModel.useElOptionsToUpdate(); + + if (!elOptionsToUpdate) { + return; + } + + var elMap = this._elMap; + var rootGroup = this.group; + + // Top-down tranverse to assign graphic settings to each elements. + each$1(elOptionsToUpdate, function (elOption) { + var $action = elOption.$action; + var id = elOption.id; + var existEl = elMap.get(id); + var parentId = elOption.parentId; + var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup; + + if (elOption.type === 'text') { + var elOptionStyle = elOption.style; + + // In top/bottom mode, textVerticalAlign should not be used, which cause + // inaccurately locating. + if (elOption.hv && elOption.hv[1]) { + elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null; + } + + // Compatible with previous setting: both support fill and textFill, + // stroke and textStroke. + !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && ( + elOptionStyle.textFill = elOptionStyle.fill + ); + !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && ( + elOptionStyle.textStroke = elOptionStyle.stroke + ); + } + + // Remove unnecessary props to avoid potential problems. + var elOptionCleaned = getCleanedElOption(elOption); + + // For simple, do not support parent change, otherwise reorder is needed. + if (__DEV__) { + existEl && assert( + targetElParent === existEl.parent, + 'Changing parent is not supported.' + ); + } + + if (!$action || $action === 'merge') { + existEl + ? existEl.attr(elOptionCleaned) + : createEl$1(id, targetElParent, elOptionCleaned, elMap); + } + else if ($action === 'replace') { + removeEl(existEl, elMap); + createEl$1(id, targetElParent, elOptionCleaned, elMap); + } + else if ($action === 'remove') { + removeEl(existEl, elMap); + } + + var el = elMap.get(id); + if (el) { + el.__ecGraphicWidth = elOption.width; + el.__ecGraphicHeight = elOption.height; + } + }); + }, + + /** + * Locate graphic elements. + * + * @private + * @param {Object} graphicModel graphic model + * @param {module:echarts/ExtensionAPI} api extension API + */ + _relocate: function (graphicModel, api) { + var elOptions = graphicModel.option.elements; + var rootGroup = this.group; + var elMap = this._elMap; + + // Bottom-up tranvese all elements (consider ec resize) to locate elements. + for (var i = elOptions.length - 1; i >= 0; i--) { + var elOption = elOptions[i]; + var el = elMap.get(elOption.id); + + if (!el) { + continue; + } + + var parentEl = el.parent; + var containerInfo = parentEl === rootGroup + ? { + width: api.getWidth(), + height: api.getHeight() + } + : { // Like 'position:absolut' in css, default 0. + width: parentEl.__ecGraphicWidth || 0, + height: parentEl.__ecGraphicHeight || 0 + }; + + positionElement( + el, elOption, containerInfo, null, + {hv: elOption.hv, boundingMode: elOption.bounding} + ); + } + }, + + /** + * Clear all elements. + * + * @private + */ + _clear: function () { + var elMap = this._elMap; + elMap.each(function (el) { + removeEl(el, elMap); + }); + this._elMap = createHashMap(); + }, + + /** + * @override + */ + dispose: function () { + this._clear(); + } +}); + +function createEl$1(id, targetElParent, elOption, elMap) { + var graphicType = elOption.type; + + if (__DEV__) { + assert(graphicType, 'graphic type MUST be set'); + } + + var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)]; + + if (__DEV__) { + assert(Clz, 'graphic type can not be found'); + } + + var el = new Clz(elOption); + targetElParent.add(el); + elMap.set(id, el); + el.__ecGraphicId = id; +} + +function removeEl(existEl, elMap) { + var existElParent = existEl && existEl.parent; + if (existElParent) { + existEl.type === 'group' && existEl.traverse(function (el) { + removeEl(el, elMap); + }); + elMap.removeKey(existEl.__ecGraphicId); + existElParent.remove(existEl); + } +} + +// Remove unnecessary props to avoid potential problems. +function getCleanedElOption(elOption) { + elOption = extend({}, elOption); + each$1( + ['id', 'parentId', '$action', 'hv', 'bounding'].concat(LOCATION_PARAMS), + function (name) { + delete elOption[name]; + } + ); + return elOption; +} + +function isSetLoc(obj, props) { + var isSet; + each$1(props, function (prop) { + obj[prop] != null && obj[prop] !== 'auto' && (isSet = true); + }); + return isSet; +} + +function setKeyInfoToNewElOption(resultItem, newElOption) { + var existElOption = resultItem.exist; + + // Set id and type after id assigned. + newElOption.id = resultItem.keyInfo.id; + !newElOption.type && existElOption && (newElOption.type = existElOption.type); + + // Set parent id if not specified + if (newElOption.parentId == null) { + var newElParentOption = newElOption.parentOption; + if (newElParentOption) { + newElOption.parentId = newElParentOption.id; + } + else if (existElOption) { + newElOption.parentId = existElOption.parentId; + } + } + + // Clear + newElOption.parentOption = null; +} + +function mergeNewElOptionToExist(existList, index, newElOption) { + // Update existing options, for `getOption` feature. + var newElOptCopy = extend({}, newElOption); + var existElOption = existList[index]; + + var $action = newElOption.$action || 'merge'; + if ($action === 'merge') { + if (existElOption) { + + if (__DEV__) { + var newType = newElOption.type; + assert( + !newType || existElOption.type === newType, + 'Please set $action: "replace" to change `type`' + ); + } + + // We can ensure that newElOptCopy and existElOption are not + // the same object, so `merge` will not change newElOptCopy. + merge(existElOption, newElOptCopy, true); + // Rigid body, use ignoreSize. + mergeLayoutParam(existElOption, newElOptCopy, {ignoreSize: true}); + // Will be used in render. + copyLayoutParams(newElOption, existElOption); + } + else { + existList[index] = newElOptCopy; + } + } + else if ($action === 'replace') { + existList[index] = newElOptCopy; + } + else if ($action === 'remove') { + // null will be cleaned later. + existElOption && (existList[index] = null); + } +} + +function setLayoutInfoToExist(existItem, newElOption) { + if (!existItem) { + return; + } + existItem.hv = newElOption.hv = [ + // Rigid body, dont care `width`. + isSetLoc(newElOption, ['left', 'right']), + // Rigid body, dont care `height`. + isSetLoc(newElOption, ['top', 'bottom']) + ]; + // Give default group size. Otherwise layout error may occur. + if (existItem.type === 'group') { + existItem.width == null && (existItem.width = newElOption.width = 0); + existItem.height == null && (existItem.height = newElOption.height = 0); + } +} + +var LegendModel = extendComponentModel({ + + type: 'legend.plain', + + dependencies: ['series'], + + layoutMode: { + type: 'box', + // legend.width/height are maxWidth/maxHeight actually, + // whereas realy width/height is calculated by its content. + // (Setting {left: 10, right: 10} does not make sense). + // So consider the case: + // `setOption({legend: {left: 10});` + // then `setOption({legend: {right: 10});` + // The previous `left` should be cleared by setting `ignoreSize`. + ignoreSize: true + }, + + init: function (option, parentModel, ecModel) { + this.mergeDefaultAndTheme(option, ecModel); + + option.selected = option.selected || {}; + }, + + mergeOption: function (option) { + LegendModel.superCall(this, 'mergeOption', option); + }, + + optionUpdated: function () { + this._updateData(this.ecModel); + + var legendData = this._data; + + // If selectedMode is single, try to select one + if (legendData[0] && this.get('selectedMode') === 'single') { + var hasSelected = false; + // If has any selected in option.selected + for (var i = 0; i < legendData.length; i++) { + var name = legendData[i].get('name'); + if (this.isSelected(name)) { + // Force to unselect others + this.select(name); + hasSelected = true; + break; + } + } + // Try select the first if selectedMode is single + !hasSelected && this.select(legendData[0].get('name')); + } + }, + + _updateData: function (ecModel) { + var legendData = map(this.get('data') || [], function (dataItem) { + // Can be string or number + if (typeof dataItem === 'string' || typeof dataItem === 'number') { + dataItem = { + name: dataItem + }; + } + return new Model(dataItem, this, this.ecModel); + }, this); + this._data = legendData; + + var availableNames = map(ecModel.getSeries(), function (series) { + return series.name; + }); + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.legendDataProvider) { + var data = seriesModel.legendDataProvider(); + availableNames = availableNames.concat(data.mapArray(data.getName)); + } + }); + /** + * @type {Array.} + * @private + */ + this._availableNames = availableNames; + }, + + /** + * @return {Array.} + */ + getData: function () { + return this._data; + }, + + /** + * @param {string} name + */ + select: function (name) { + var selected = this.option.selected; + var selectedMode = this.get('selectedMode'); + if (selectedMode === 'single') { + var data = this._data; + each$1(data, function (dataItem) { + selected[dataItem.get('name')] = false; + }); + } + selected[name] = true; + }, + + /** + * @param {string} name + */ + unSelect: function (name) { + if (this.get('selectedMode') !== 'single') { + this.option.selected[name] = false; + } + }, + + /** + * @param {string} name + */ + toggleSelected: function (name) { + var selected = this.option.selected; + // Default is true + if (!selected.hasOwnProperty(name)) { + selected[name] = true; + } + this[selected[name] ? 'unSelect' : 'select'](name); + }, + + /** + * @param {string} name + */ + isSelected: function (name) { + var selected = this.option.selected; + return !(selected.hasOwnProperty(name) && !selected[name]) + && indexOf(this._availableNames, name) >= 0; + }, + + defaultOption: { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 4, + show: true, + + // 布局方式,默认为水平布局,可选为: + // 'horizontal' | 'vertical' + orient: 'horizontal', + + left: 'center', + // right: 'center', + + top: 0, + // bottom: null, + + // 水平对齐 + // 'auto' | 'left' | 'right' + // 默认为 'auto', 根据 x 的位置判断是左对齐还是右对齐 + align: 'auto', + + backgroundColor: 'rgba(0,0,0,0)', + // 图例边框颜色 + borderColor: '#ccc', + borderRadius: 0, + // 图例边框线宽,单位px,默认为0(无边框) + borderWidth: 0, + // 图例内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + padding: 5, + // 各个item之间的间隔,单位px,默认为10, + // 横向布局时为水平间隔,纵向布局时为纵向间隔 + itemGap: 10, + // 图例图形宽度 + itemWidth: 25, + // 图例图形高度 + itemHeight: 14, + + // 图例关闭时候的颜色 + inactiveColor: '#ccc', + + textStyle: { + // 图例文字颜色 + color: '#333' + }, + // formatter: '', + // 选择模式,默认开启图例开关 + selectedMode: true, + // 配置默认选中状态,可配合LEGEND.SELECTED事件做动态数据载入 + // selected: null, + // 图例内容(详见legend.data,数组中每一项代表一个item + // data: [], + + // Tooltip 相关配置 + tooltip: { + show: false + } + } +}); + +function legendSelectActionHandler(methodName, payload, ecModel) { + var selectedMap = {}; + var isToggleSelect = methodName === 'toggleSelected'; + var isSelected; + // Update all legend components + ecModel.eachComponent('legend', function (legendModel) { + if (isToggleSelect && isSelected != null) { + // Force other legend has same selected status + // Or the first is toggled to true and other are toggled to false + // In the case one legend has some item unSelected in option. And if other legend + // doesn't has the item, they will assume it is selected. + legendModel[isSelected ? 'select' : 'unSelect'](payload.name); + } + else { + legendModel[methodName](payload.name); + isSelected = legendModel.isSelected(payload.name); + } + var legendData = legendModel.getData(); + each$1(legendData, function (model) { + var name = model.get('name'); + // Wrap element + if (name === '\n' || name === '') { + return; + } + var isItemSelected = legendModel.isSelected(name); + if (selectedMap.hasOwnProperty(name)) { + // Unselected if any legend is unselected + selectedMap[name] = selectedMap[name] && isItemSelected; + } + else { + selectedMap[name] = isItemSelected; + } + }); + }); + // Return the event explicitly + return { + name: payload.name, + selected: selectedMap + }; +} +/** + * @event legendToggleSelect + * @type {Object} + * @property {string} type 'legendToggleSelect' + * @property {string} [from] + * @property {string} name Series name or data item name + */ +registerAction( + 'legendToggleSelect', 'legendselectchanged', + curry(legendSelectActionHandler, 'toggleSelected') +); + +/** + * @event legendSelect + * @type {Object} + * @property {string} type 'legendSelect' + * @property {string} name Series name or data item name + */ +registerAction( + 'legendSelect', 'legendselected', + curry(legendSelectActionHandler, 'select') +); + +/** + * @event legendUnSelect + * @type {Object} + * @property {string} type 'legendUnSelect' + * @property {string} name Series name or data item name + */ +registerAction( + 'legendUnSelect', 'legendunselected', + curry(legendSelectActionHandler, 'unSelect') +); + +/** + * Layout list like component. + * It will box layout each items in group of component and then position the whole group in the viewport + * @param {module:zrender/group/Group} group + * @param {module:echarts/model/Component} componentModel + * @param {module:echarts/ExtensionAPI} + */ +function layout$2(group, componentModel, api) { + var boxLayoutParams = componentModel.getBoxLayoutParams(); + var padding = componentModel.get('padding'); + var viewportSize = {width: api.getWidth(), height: api.getHeight()}; + + var rect = getLayoutRect( + boxLayoutParams, + viewportSize, + padding + ); + + box( + componentModel.get('orient'), + group, + componentModel.get('itemGap'), + rect.width, + rect.height + ); + + positionElement( + group, + boxLayoutParams, + viewportSize, + padding + ); +} + +function makeBackground(rect, componentModel) { + var padding = normalizeCssArray$1( + componentModel.get('padding') + ); + var style = componentModel.getItemStyle(['color', 'opacity']); + style.fill = componentModel.get('backgroundColor'); + var rect = new Rect({ + shape: { + x: rect.x - padding[3], + y: rect.y - padding[0], + width: rect.width + padding[1] + padding[3], + height: rect.height + padding[0] + padding[2], + r: componentModel.get('borderRadius') + }, + style: style, + silent: true, + z2: -1 + }); + // FIXME + // `subPixelOptimizeRect` may bring some gap between edge of viewpart + // and background rect when setting like `left: 0`, `top: 0`. + // graphic.subPixelOptimizeRect(rect); + + return rect; +} + +var curry$4 = curry; +var each$19 = each$1; +var Group$3 = Group; + +var LegendView = extendComponentView({ + + type: 'legend.plain', + + newlineDisabled: false, + + /** + * @override + */ + init: function () { + + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group.add(this._contentGroup = new Group$3()); + + /** + * @private + * @type {module:zrender/Element} + */ + this._backgroundEl; + }, + + /** + * @protected + */ + getContentGroup: function () { + return this._contentGroup; + }, + + /** + * @override + */ + render: function (legendModel, ecModel, api) { + + this.resetInner(); + + if (!legendModel.get('show', true)) { + return; + } + + var itemAlign = legendModel.get('align'); + if (!itemAlign || itemAlign === 'auto') { + itemAlign = ( + legendModel.get('left') === 'right' + && legendModel.get('orient') === 'vertical' + ) ? 'right' : 'left'; + } + + this.renderInner(itemAlign, legendModel, ecModel, api); + + // Perform layout. + var positionInfo = legendModel.getBoxLayoutParams(); + var viewportSize = {width: api.getWidth(), height: api.getHeight()}; + var padding = legendModel.get('padding'); + + var maxSize = getLayoutRect(positionInfo, viewportSize, padding); + var mainRect = this.layoutInner(legendModel, itemAlign, maxSize); + + // Place mainGroup, based on the calculated `mainRect`. + var layoutRect = getLayoutRect( + defaults({width: mainRect.width, height: mainRect.height}, positionInfo), + viewportSize, + padding + ); + this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]); + + // Render background after group is layout. + this.group.add( + this._backgroundEl = makeBackground(mainRect, legendModel) + ); + }, + + /** + * @protected + */ + resetInner: function () { + this.getContentGroup().removeAll(); + this._backgroundEl && this.group.remove(this._backgroundEl); + }, + + /** + * @protected + */ + renderInner: function (itemAlign, legendModel, ecModel, api) { + var contentGroup = this.getContentGroup(); + var legendDrawnMap = createHashMap(); + var selectMode = legendModel.get('selectedMode'); + + each$19(legendModel.getData(), function (itemModel, dataIndex) { + var name = itemModel.get('name'); + + // Use empty string or \n as a newline string + if (!this.newlineDisabled && (name === '' || name === '\n')) { + contentGroup.add(new Group$3({ + newline: true + })); + return; + } + + var seriesModel = ecModel.getSeriesByName(name)[0]; + + if (legendDrawnMap.get(name)) { + // Have been drawed + return; + } + + // Series legend + if (seriesModel) { + var data = seriesModel.getData(); + var color = data.getVisual('color'); + + // If color is a callback function + if (typeof color === 'function') { + // Use the first data + color = color(seriesModel.getDataParams(0)); + } + + // Using rect symbol defaultly + var legendSymbolType = data.getVisual('legendSymbol') || 'roundRect'; + var symbolType = data.getVisual('symbol'); + + var itemGroup = this._createItem( + name, dataIndex, itemModel, legendModel, + legendSymbolType, symbolType, + itemAlign, color, + selectMode + ); + + itemGroup.on('click', curry$4(dispatchSelectAction, name, api)) + .on('mouseover', curry$4(dispatchHighlightAction, seriesModel, null, api)) + .on('mouseout', curry$4(dispatchDownplayAction, seriesModel, null, api)); + + legendDrawnMap.set(name, true); + } + else { + // Data legend of pie, funnel + ecModel.eachRawSeries(function (seriesModel) { + // In case multiple series has same data name + if (legendDrawnMap.get(name)) { + return; + } + if (seriesModel.legendDataProvider) { + var data = seriesModel.legendDataProvider(); + var idx = data.indexOfName(name); + if (idx < 0) { + return; + } + + var color = data.getItemVisual(idx, 'color'); + + var legendSymbolType = 'roundRect'; + + var itemGroup = this._createItem( + name, dataIndex, itemModel, legendModel, + legendSymbolType, null, + itemAlign, color, + selectMode + ); + + itemGroup.on('click', curry$4(dispatchSelectAction, name, api)) + // FIXME Should not specify the series name + .on('mouseover', curry$4(dispatchHighlightAction, seriesModel, name, api)) + .on('mouseout', curry$4(dispatchDownplayAction, seriesModel, name, api)); + + legendDrawnMap.set(name, true); + } + }, this); + } + + if (__DEV__) { + if (!legendDrawnMap.get(name)) { + console.warn(name + ' series not exists. Legend data should be same with series name or data name.'); + } + } + }, this); + }, + + _createItem: function ( + name, dataIndex, itemModel, legendModel, + legendSymbolType, symbolType, + itemAlign, color, selectMode + ) { + var itemWidth = legendModel.get('itemWidth'); + var itemHeight = legendModel.get('itemHeight'); + var inactiveColor = legendModel.get('inactiveColor'); + + var isSelected = legendModel.isSelected(name); + var itemGroup = new Group$3(); + + var textStyleModel = itemModel.getModel('textStyle'); + + var itemIcon = itemModel.get('icon'); + + var tooltipModel = itemModel.getModel('tooltip'); + var legendGlobalTooltipModel = tooltipModel.parentModel; + + // Use user given icon first + legendSymbolType = itemIcon || legendSymbolType; + itemGroup.add(createSymbol( + legendSymbolType, + 0, + 0, + itemWidth, + itemHeight, + isSelected ? color : inactiveColor, + true + )); + + // Compose symbols + // PENDING + if (!itemIcon && symbolType + // At least show one symbol, can't be all none + && ((symbolType !== legendSymbolType) || symbolType == 'none') + ) { + var size = itemHeight * 0.8; + if (symbolType === 'none') { + symbolType = 'circle'; + } + // Put symbol in the center + itemGroup.add(createSymbol( + symbolType, (itemWidth - size) / 2, (itemHeight - size) / 2, size, size, + isSelected ? color : inactiveColor + )); + } + + var textX = itemAlign === 'left' ? itemWidth + 5 : -5; + var textAlign = itemAlign; + + var formatter = legendModel.get('formatter'); + var content = name; + if (typeof formatter === 'string' && formatter) { + content = formatter.replace('{name}', name != null ? name : ''); + } + else if (typeof formatter === 'function') { + content = formatter(name); + } + + itemGroup.add(new Text({ + style: setTextStyle({}, textStyleModel, { + text: content, + x: textX, + y: itemHeight / 2, + textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor, + textAlign: textAlign, + textVerticalAlign: 'middle' + }) + })); + + // Add a invisible rect to increase the area of mouse hover + var hitRect = new Rect({ + shape: itemGroup.getBoundingRect(), + invisible: true, + tooltip: tooltipModel.get('show') ? extend({ + content: name, + // Defaul formatter + formatter: legendGlobalTooltipModel.get('formatter', true) || function () { + return name; + }, + formatterParams: { + componentType: 'legend', + legendIndex: legendModel.componentIndex, + name: name, + $vars: ['name'] + } + }, tooltipModel.option) : null + }); + itemGroup.add(hitRect); + + itemGroup.eachChild(function (child) { + child.silent = true; + }); + + hitRect.silent = !selectMode; + + this.getContentGroup().add(itemGroup); + + setHoverStyle(itemGroup); + + itemGroup.__legendDataIndex = dataIndex; + + return itemGroup; + }, + + /** + * @protected + */ + layoutInner: function (legendModel, itemAlign, maxSize) { + var contentGroup = this.getContentGroup(); + + // Place items in contentGroup. + box( + legendModel.get('orient'), + contentGroup, + legendModel.get('itemGap'), + maxSize.width, + maxSize.height + ); + + var contentRect = contentGroup.getBoundingRect(); + contentGroup.attr('position', [-contentRect.x, -contentRect.y]); + + return this.group.getBoundingRect(); + } + +}); + +function dispatchSelectAction(name, api) { + api.dispatchAction({ + type: 'legendToggleSelect', + name: name + }); +} + +function dispatchHighlightAction(seriesModel, dataName, api) { + // If element hover will move to a hoverLayer. + var el = api.getZr().storage.getDisplayList()[0]; + if (!(el && el.useHoverLayer)) { + seriesModel.get('legendHoverLink') && api.dispatchAction({ + type: 'highlight', + seriesName: seriesModel.name, + name: dataName + }); + } +} + +function dispatchDownplayAction(seriesModel, dataName, api) { + // If element hover will move to a hoverLayer. + var el = api.getZr().storage.getDisplayList()[0]; + if (!(el && el.useHoverLayer)) { + seriesModel.get('legendHoverLink') && api.dispatchAction({ + type: 'downplay', + seriesName: seriesModel.name, + name: dataName + }); + } +} + +var legendFilter = function (ecModel) { + + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + if (legendModels && legendModels.length) { + ecModel.filterSeries(function (series) { + // If in any legend component the status is not selected. + // Because in legend series is assumed selected when it is not in the legend data. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(series.name)) { + return false; + } + } + return true; + }); + } + +}; + +// Do not contain scrollable legend, for sake of file size. + +// Series Filter +registerProcessor(legendFilter); + +ComponentModel.registerSubTypeDefaulter('legend', function () { + // Default 'plain' when no type specified. + return 'plain'; +}); + +var ScrollableLegendModel = LegendModel.extend({ + + type: 'legend.scroll', + + /** + * @param {number} scrollDataIndex + */ + setScrollDataIndex: function (scrollDataIndex) { + this.option.scrollDataIndex = scrollDataIndex; + }, + + defaultOption: { + scrollDataIndex: 0, + pageButtonItemGap: 5, + pageButtonGap: null, + pageButtonPosition: 'end', // 'start' or 'end' + pageFormatter: '{current}/{total}', // If null/undefined, do not show page. + pageIcons: { + horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'], + vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z'] + }, + pageIconColor: '#2f4554', + pageIconInactiveColor: '#aaa', + pageIconSize: 15, // Can be [10, 3], which represents [width, height] + pageTextStyle: { + color: '#333' + }, + + animationDurationUpdate: 800 + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel, extraOpt) { + var inputPositionParams = getLayoutParams(option); + + ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt); + + mergeAndNormalizeLayoutParams(this, option, inputPositionParams); + }, + + /** + * @override + */ + mergeOption: function (option, extraOpt) { + ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt); + + mergeAndNormalizeLayoutParams(this, this.option, option); + }, + + getOrient: function () { + return this.get('orient') === 'vertical' + ? {index: 1, name: 'vertical'} + : {index: 0, name: 'horizontal'}; + } + +}); + +// Do not `ignoreSize` to enable setting {left: 10, right: 10}. +function mergeAndNormalizeLayoutParams(legendModel, target, raw) { + var orient = legendModel.getOrient(); + var ignoreSize = [1, 1]; + ignoreSize[orient.index] = 0; + mergeLayoutParam(target, raw, { + type: 'box', ignoreSize: ignoreSize + }); +} + +/** + * Separate legend and scrollable legend to reduce package size. + */ + +var Group$4 = Group; + +var WH$1 = ['width', 'height']; +var XY$1 = ['x', 'y']; + +var ScrollableLegendView = LegendView.extend({ + + type: 'legend.scroll', + + newlineDisabled: true, + + init: function () { + + ScrollableLegendView.superCall(this, 'init'); + + /** + * @private + * @type {number} For `scroll`. + */ + this._currentIndex = 0; + + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group.add(this._containerGroup = new Group$4()); + this._containerGroup.add(this.getContentGroup()); + + /** + * @private + * @type {module:zrender/container/Group} + */ + this.group.add(this._controllerGroup = new Group$4()); + + /** + * + * @private + */ + this._showController; + }, + + /** + * @override + */ + resetInner: function () { + ScrollableLegendView.superCall(this, 'resetInner'); + + this._controllerGroup.removeAll(); + this._containerGroup.removeClipPath(); + this._containerGroup.__rectSize = null; + }, + + /** + * @override + */ + renderInner: function (itemAlign, legendModel, ecModel, api) { + var me = this; + + // Render content items. + ScrollableLegendView.superCall(this, 'renderInner', itemAlign, legendModel, ecModel, api); + + var controllerGroup = this._controllerGroup; + + var pageIconSize = legendModel.get('pageIconSize', true); + if (!isArray(pageIconSize)) { + pageIconSize = [pageIconSize, pageIconSize]; + } + + createPageButton('pagePrev', 0); + + var pageTextStyleModel = legendModel.getModel('pageTextStyle'); + controllerGroup.add(new Text({ + name: 'pageText', + style: { + textFill: pageTextStyleModel.getTextColor(), + font: pageTextStyleModel.getFont(), + textVerticalAlign: 'middle', + textAlign: 'center' + }, + silent: true + })); + + createPageButton('pageNext', 1); + + function createPageButton(name, iconIdx) { + var pageDataIndexName = name + 'DataIndex'; + var icon = createIcon( + legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx], + { + // Buttons will be created in each render, so we do not need + // to worry about avoiding using legendModel kept in scope. + onclick: bind( + me._pageGo, me, pageDataIndexName, legendModel, api + ) + }, + { + x: -pageIconSize[0] / 2, + y: -pageIconSize[1] / 2, + width: pageIconSize[0], + height: pageIconSize[1] + } + ); + icon.name = name; + controllerGroup.add(icon); + } + }, + + /** + * @override + */ + layoutInner: function (legendModel, itemAlign, maxSize) { + var contentGroup = this.getContentGroup(); + var containerGroup = this._containerGroup; + var controllerGroup = this._controllerGroup; + + var orientIdx = legendModel.getOrient().index; + var wh = WH$1[orientIdx]; + var hw = WH$1[1 - orientIdx]; + var yx = XY$1[1 - orientIdx]; + + // Place items in contentGroup. + box( + legendModel.get('orient'), + contentGroup, + legendModel.get('itemGap'), + !orientIdx ? null : maxSize.width, + orientIdx ? null : maxSize.height + ); + + box( + // Buttons in controller are layout always horizontally. + 'horizontal', + controllerGroup, + legendModel.get('pageButtonItemGap', true) + ); + + var contentRect = contentGroup.getBoundingRect(); + var controllerRect = controllerGroup.getBoundingRect(); + var showController = this._showController = contentRect[wh] > maxSize[wh]; + + var contentPos = [-contentRect.x, -contentRect.y]; + // Remain contentPos when scroll animation perfroming. + contentPos[orientIdx] = contentGroup.position[orientIdx]; + + // Layout container group based on 0. + var containerPos = [0, 0]; + var controllerPos = [-controllerRect.x, -controllerRect.y]; + var pageButtonGap = retrieve2( + legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true) + ); + + // Place containerGroup and controllerGroup and contentGroup. + if (showController) { + var pageButtonPosition = legendModel.get('pageButtonPosition', true); + // controller is on the right / bottom. + if (pageButtonPosition === 'end') { + controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh]; + } + // controller is on the left / top. + else { + containerPos[orientIdx] += controllerRect[wh] + pageButtonGap; + } + } + + // Always align controller to content as 'middle'. + controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2; + + contentGroup.attr('position', contentPos); + containerGroup.attr('position', containerPos); + controllerGroup.attr('position', controllerPos); + + // Calculate `mainRect` and set `clipPath`. + // mainRect should not be calculated by `this.group.getBoundingRect()` + // for sake of the overflow. + var mainRect = this.group.getBoundingRect(); + var mainRect = {x: 0, y: 0}; + // Consider content may be overflow (should be clipped). + mainRect[wh] = showController ? maxSize[wh] : contentRect[wh]; + mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]); + // `containerRect[yx] + containerPos[1 - orientIdx]` is 0. + mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]); + + containerGroup.__rectSize = maxSize[wh]; + if (showController) { + var clipShape = {x: 0, y: 0}; + clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0); + clipShape[hw] = mainRect[hw]; + containerGroup.setClipPath(new Rect({shape: clipShape})); + // Consider content may be larger than container, container rect + // can not be obtained from `containerGroup.getBoundingRect()`. + containerGroup.__rectSize = clipShape[wh]; + } + else { + // Do not remove or ignore controller. Keep them set as place holders. + controllerGroup.eachChild(function (child) { + child.attr({invisible: true, silent: true}); + }); + } + + // Content translate animation. + var pageInfo = this._getPageInfo(legendModel); + pageInfo.pageIndex != null && updateProps( + contentGroup, + {position: pageInfo.contentPosition}, + // When switch from "show controller" to "not show controller", view should be + // updated immediately without animation, otherwise causes weird efffect. + showController ? legendModel : false + ); + + this._updatePageInfoView(legendModel, pageInfo); + + return mainRect; + }, + + _pageGo: function (to, legendModel, api) { + var scrollDataIndex = this._getPageInfo(legendModel)[to]; + + scrollDataIndex != null && api.dispatchAction({ + type: 'legendScroll', + scrollDataIndex: scrollDataIndex, + legendId: legendModel.id + }); + }, + + _updatePageInfoView: function (legendModel, pageInfo) { + var controllerGroup = this._controllerGroup; + + each$1(['pagePrev', 'pageNext'], function (name) { + var canJump = pageInfo[name + 'DataIndex'] != null; + var icon = controllerGroup.childOfName(name); + if (icon) { + icon.setStyle( + 'fill', + canJump + ? legendModel.get('pageIconColor', true) + : legendModel.get('pageIconInactiveColor', true) + ); + icon.cursor = canJump ? 'pointer' : 'default'; + } + }); + + var pageText = controllerGroup.childOfName('pageText'); + var pageFormatter = legendModel.get('pageFormatter'); + var pageIndex = pageInfo.pageIndex; + var current = pageIndex != null ? pageIndex + 1 : 0; + var total = pageInfo.pageCount; + + pageText && pageFormatter && pageText.setStyle( + 'text', + isString(pageFormatter) + ? pageFormatter.replace('{current}', current).replace('{total}', total) + : pageFormatter({current: current, total: total}) + ); + }, + + /** + * @param {module:echarts/model/Model} legendModel + * @return {Object} { + * contentPosition: Array., null when data item not found. + * pageIndex: number, null when data item not found. + * pageCount: number, always be a number, can be 0. + * pagePrevDataIndex: number, null when no next page. + * pageNextDataIndex: number, null when no previous page. + * } + */ + _getPageInfo: function (legendModel) { + // Align left or top by the current dataIndex. + var currDataIndex = legendModel.get('scrollDataIndex', true); + var contentGroup = this.getContentGroup(); + var contentRect = contentGroup.getBoundingRect(); + var containerRectSize = this._containerGroup.__rectSize; + + var orientIdx = legendModel.getOrient().index; + var wh = WH$1[orientIdx]; + var hw = WH$1[1 - orientIdx]; + var xy = XY$1[orientIdx]; + var contentPos = contentGroup.position.slice(); + + var pageIndex; + var pagePrevDataIndex; + var pageNextDataIndex; + + var targetItemGroup; + if (this._showController) { + contentGroup.eachChild(function (child) { + if (child.__legendDataIndex === currDataIndex) { + targetItemGroup = child; + } + }); + } + else { + targetItemGroup = contentGroup.childAt(0); + } + + var pageCount = containerRectSize ? Math.ceil(contentRect[wh] / containerRectSize) : 0; + + if (targetItemGroup) { + var itemRect = targetItemGroup.getBoundingRect(); + var itemLoc = targetItemGroup.position[orientIdx] + itemRect[xy]; + contentPos[orientIdx] = -itemLoc - contentRect[xy]; + pageIndex = Math.floor( + pageCount * (itemLoc + itemRect[xy] + containerRectSize / 2) / contentRect[wh] + ); + pageIndex = (contentRect[wh] && pageCount) + ? Math.max(0, Math.min(pageCount - 1, pageIndex)) + : -1; + + var winRect = {x: 0, y: 0}; + winRect[wh] = containerRectSize; + winRect[hw] = contentRect[hw]; + winRect[xy] = -contentPos[orientIdx] - contentRect[xy]; + + var startIdx; + var children = contentGroup.children(); + + contentGroup.eachChild(function (child, index) { + var itemRect = getItemRect(child); + + if (itemRect.intersect(winRect)) { + startIdx == null && (startIdx = index); + // It is user-friendly that the last item shown in the + // current window is shown at the begining of next window. + pageNextDataIndex = child.__legendDataIndex; + } + + // If the last item is shown entirely, no next page. + if (index === children.length - 1 + && itemRect[xy] + itemRect[wh] <= winRect[xy] + winRect[wh] + ) { + pageNextDataIndex = null; + } + }); + + // Always align based on the left/top most item, so the left/top most + // item in the previous window is needed to be found here. + if (startIdx != null) { + var startItem = children[startIdx]; + var startRect = getItemRect(startItem); + winRect[xy] = startRect[xy] + startRect[wh] - winRect[wh]; + + // If the first item is shown entirely, no previous page. + if (startIdx <= 0 && startRect[xy] >= winRect[xy]) { + pagePrevDataIndex = null; + } + else { + while (startIdx > 0 && getItemRect(children[startIdx - 1]).intersect(winRect)) { + startIdx--; + } + pagePrevDataIndex = children[startIdx].__legendDataIndex; + } + } + } + + return { + contentPosition: contentPos, + pageIndex: pageIndex, + pageCount: pageCount, + pagePrevDataIndex: pagePrevDataIndex, + pageNextDataIndex: pageNextDataIndex + }; + + function getItemRect(el) { + var itemRect = el.getBoundingRect().clone(); + itemRect[xy] += el.position[orientIdx]; + return itemRect; + } + } + +}); + +/** + * @event legendScroll + * @type {Object} + * @property {string} type 'legendScroll' + * @property {string} scrollDataIndex + */ +registerAction( + 'legendScroll', 'legendscroll', + function (payload, ecModel) { + var scrollDataIndex = payload.scrollDataIndex; + + scrollDataIndex != null && ecModel.eachComponent( + {mainType: 'legend', subType: 'scroll', query: payload}, + function (legendModel) { + legendModel.setScrollDataIndex(scrollDataIndex); + } + ); + } +); + +/** + * Legend component entry file8 + */ + +extendComponentModel({ + + type: 'tooltip', + + dependencies: ['axisPointer'], + + defaultOption: { + zlevel: 0, + + z: 8, + + show: true, + + // tooltip主体内容 + showContent: true, + + // 'trigger' only works on coordinate system. + // 'item' | 'axis' | 'none' + trigger: 'item', + + // 'click' | 'mousemove' | 'none' + triggerOn: 'mousemove|click', + + alwaysShowContent: false, + + displayMode: 'single', // 'single' | 'multipleByCoordSys' + + // 位置 {Array} | {Function} + // position: null + // Consider triggered from axisPointer handle, verticalAlign should be 'middle' + // align: null, + // verticalAlign: null, + + // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。 + confine: false, + + // 内容格式器:{string}(Template) ¦ {Function} + // formatter: null + + showDelay: 0, + + // 隐藏延迟,单位ms + hideDelay: 100, + + // 动画变换时间,单位s + transitionDuration: 0.4, + + enterable: false, + + // 提示背景颜色,默认为透明度为0.7的黑色 + backgroundColor: 'rgba(50,50,50,0.7)', + + // 提示边框颜色 + borderColor: '#333', + + // 提示边框圆角,单位px,默认为4 + borderRadius: 4, + + // 提示边框线宽,单位px,默认为0(无边框) + borderWidth: 0, + + // 提示内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + padding: 5, + + // Extra css text + extraCssText: '', + + // 坐标轴指示器,坐标轴触发有效 + axisPointer: { + // 默认为直线 + // 可选为:'line' | 'shadow' | 'cross' + type: 'line', + + // type 为 line 的时候有效,指定 tooltip line 所在的轴,可选 + // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto' + // 默认 'auto',会选择类型为 cateogry 的轴,对于双数值轴,笛卡尔坐标系会默认选择 x 轴 + // 极坐标系会默认选择 angle 轴 + axis: 'auto', + + animation: 'auto', + animationDurationUpdate: 200, + animationEasingUpdate: 'exponentialOut', + + crossStyle: { + color: '#999', + width: 1, + type: 'dashed', + + // TODO formatter + textStyle: {} + } + + // lineStyle and shadowStyle should not be specified here, + // otherwise it will always override those styles on option.axisPointer. + }, + textStyle: { + color: '#fff', + fontSize: 14 + } + } +}); + +var each$21 = each$1; +var toCamelCase$1 = toCamelCase; + +var vendors = ['', '-webkit-', '-moz-', '-o-']; + +var gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;'; + +/** + * @param {number} duration + * @return {string} + * @inner + */ +function assembleTransition(duration) { + var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)'; + var transitionText = 'left ' + duration + 's ' + transitionCurve + ',' + + 'top ' + duration + 's ' + transitionCurve; + return map(vendors, function (vendorPrefix) { + return vendorPrefix + 'transition:' + transitionText; + }).join(';'); +} + +/** + * @param {Object} textStyle + * @return {string} + * @inner + */ +function assembleFont(textStyleModel) { + var cssText = []; + + var fontSize = textStyleModel.get('fontSize'); + var color = textStyleModel.getTextColor(); + + color && cssText.push('color:' + color); + + cssText.push('font:' + textStyleModel.getFont()); + + fontSize && + cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px'); + + each$21(['decoration', 'align'], function (name) { + var val = textStyleModel.get(name); + val && cssText.push('text-' + name + ':' + val); + }); + + return cssText.join(';'); +} + +/** + * @param {Object} tooltipModel + * @return {string} + * @inner + */ +function assembleCssText(tooltipModel) { + + var cssText = []; + + var transitionDuration = tooltipModel.get('transitionDuration'); + var backgroundColor = tooltipModel.get('backgroundColor'); + var textStyleModel = tooltipModel.getModel('textStyle'); + var padding = tooltipModel.get('padding'); + + // Animation transition. Do not animate when transitionDuration is 0. + transitionDuration && + cssText.push(assembleTransition(transitionDuration)); + + if (backgroundColor) { + if (env$1.canvasSupported) { + cssText.push('background-Color:' + backgroundColor); + } + else { + // for ie + cssText.push( + 'background-Color:#' + toHex(backgroundColor) + ); + cssText.push('filter:alpha(opacity=70)'); + } + } + + // Border style + each$21(['width', 'color', 'radius'], function (name) { + var borderName = 'border-' + name; + var camelCase = toCamelCase$1(borderName); + var val = tooltipModel.get(camelCase); + val != null && + cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px')); + }); + + // Text style + cssText.push(assembleFont(textStyleModel)); + + // Padding + if (padding != null) { + cssText.push('padding:' + normalizeCssArray$1(padding).join('px ') + 'px'); + } + + return cssText.join(';') + ';'; +} + +/** + * @alias module:echarts/component/tooltip/TooltipContent + * @constructor + */ +function TooltipContent(container, api) { + var el = document.createElement('div'); + var zr = this._zr = api.getZr(); + + this.el = el; + + this._x = api.getWidth() / 2; + this._y = api.getHeight() / 2; + + container.appendChild(el); + + this._container = container; + + this._show = false; + + /** + * @private + */ + this._hideTimeout; + + var self = this; + el.onmouseenter = function () { + // clear the timeout in hideLater and keep showing tooltip + if (self._enterable) { + clearTimeout(self._hideTimeout); + self._show = true; + } + self._inContent = true; + }; + el.onmousemove = function (e) { + e = e || window.event; + if (!self._enterable) { + // Try trigger zrender event to avoid mouse + // in and out shape too frequently + var handler = zr.handler; + normalizeEvent(container, e, true); + handler.dispatch('mousemove', e); + } + }; + el.onmouseleave = function () { + if (self._enterable) { + if (self._show) { + self.hideLater(self._hideDelay); + } + } + self._inContent = false; + }; +} + +TooltipContent.prototype = { + + constructor: TooltipContent, + + /** + * @private + * @type {boolean} + */ + _enterable: true, + + /** + * Update when tooltip is rendered + */ + update: function () { + // FIXME + // Move this logic to ec main? + var container = this._container; + var stl = container.currentStyle + || document.defaultView.getComputedStyle(container); + var domStyle = container.style; + if (domStyle.position !== 'absolute' && stl.position !== 'absolute') { + domStyle.position = 'relative'; + } + // Hide the tooltip + // PENDING + // this.hide(); + }, + + show: function (tooltipModel) { + clearTimeout(this._hideTimeout); + var el = this.el; + + el.style.cssText = gCssText + assembleCssText(tooltipModel) + // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore + + ';left:' + this._x + 'px;top:' + this._y + 'px;' + + (tooltipModel.get('extraCssText') || ''); + + el.style.display = el.innerHTML ? 'block' : 'none'; + + this._show = true; + }, + + setContent: function (content) { + this.el.innerHTML = content == null ? '' : content; + }, + + setEnterable: function (enterable) { + this._enterable = enterable; + }, + + getSize: function () { + var el = this.el; + return [el.clientWidth, el.clientHeight]; + }, + + moveTo: function (x, y) { + // xy should be based on canvas root. But tooltipContent is + // the sibling of canvas root. So padding of ec container + // should be considered here. + var zr = this._zr; + var viewportRootOffset; + if (zr && zr.painter && (viewportRootOffset = zr.painter.getViewportRootOffset())) { + x += viewportRootOffset.offsetLeft; + y += viewportRootOffset.offsetTop; + } + + var style = this.el.style; + style.left = x + 'px'; + style.top = y + 'px'; + + this._x = x; + this._y = y; + }, + + hide: function () { + this.el.style.display = 'none'; + this._show = false; + }, + + hideLater: function (time) { + if (this._show && !(this._inContent && this._enterable)) { + if (time) { + this._hideDelay = time; + // Set show false to avoid invoke hideLater mutiple times + this._show = false; + this._hideTimeout = setTimeout(bind(this.hide, this), time); + } + else { + this.hide(); + } + } + }, + + isShow: function () { + return this._show; + } +}; + +var bind$3 = bind; +var each$20 = each$1; +var parsePercent$2 = parsePercent$1; + +var proxyRect = new Rect({ + shape: {x: -1, y: -1, width: 2, height: 2} +}); + +extendComponentView({ + + type: 'tooltip', + + init: function (ecModel, api) { + if (env$1.node) { + return; + } + var tooltipContent = new TooltipContent(api.getDom(), api); + this._tooltipContent = tooltipContent; + }, + + render: function (tooltipModel, ecModel, api) { + if (env$1.node) { + return; + } + + // Reset + this.group.removeAll(); + + /** + * @private + * @type {module:echarts/component/tooltip/TooltipModel} + */ + this._tooltipModel = tooltipModel; + + /** + * @private + * @type {module:echarts/model/Global} + */ + this._ecModel = ecModel; + + /** + * @private + * @type {module:echarts/ExtensionAPI} + */ + this._api = api; + + /** + * Should be cleaned when render. + * @private + * @type {Array.>} + */ + this._lastDataByCoordSys = null; + + /** + * @private + * @type {boolean} + */ + this._alwaysShowContent = tooltipModel.get('alwaysShowContent'); + + var tooltipContent = this._tooltipContent; + tooltipContent.update(); + tooltipContent.setEnterable(tooltipModel.get('enterable')); + + this._initGlobalListener(); + + this._keepShow(); + }, + + _initGlobalListener: function () { + var tooltipModel = this._tooltipModel; + var triggerOn = tooltipModel.get('triggerOn'); + + register( + 'itemTooltip', + this._api, + bind$3(function (currTrigger, e, dispatchAction) { + // If 'none', it is not controlled by mouse totally. + if (triggerOn !== 'none') { + if (triggerOn.indexOf(currTrigger) >= 0) { + this._tryShow(e, dispatchAction); + } + else if (currTrigger === 'leave') { + this._hide(dispatchAction); + } + } + }, this) + ); + }, + + _keepShow: function () { + var tooltipModel = this._tooltipModel; + var ecModel = this._ecModel; + var api = this._api; + + // Try to keep the tooltip show when refreshing + if (this._lastX != null + && this._lastY != null + // When user is willing to control tooltip totally using API, + // self.manuallyShowTip({x, y}) might cause tooltip hide, + // which is not expected. + && tooltipModel.get('triggerOn') !== 'none' + ) { + var self = this; + clearTimeout(this._refreshUpdateTimeout); + this._refreshUpdateTimeout = setTimeout(function () { + // Show tip next tick after other charts are rendered + // In case highlight action has wrong result + // FIXME + self.manuallyShowTip(tooltipModel, ecModel, api, { + x: self._lastX, + y: self._lastY + }); + }); + } + }, + + /** + * Show tip manually by + * dispatchAction({ + * type: 'showTip', + * x: 10, + * y: 10 + * }); + * Or + * dispatchAction({ + * type: 'showTip', + * seriesIndex: 0, + * dataIndex or dataIndexInside or name + * }); + * + * TODO Batch + */ + manuallyShowTip: function (tooltipModel, ecModel, api, payload) { + if (payload.from === this.uid || env$1.node) { + return; + } + + var dispatchAction = makeDispatchAction$1(payload, api); + + // Reset ticket + this._ticket = ''; + + // When triggered from axisPointer. + var dataByCoordSys = payload.dataByCoordSys; + + if (payload.tooltip && payload.x != null && payload.y != null) { + var el = proxyRect; + el.position = [payload.x, payload.y]; + el.update(); + el.tooltip = payload.tooltip; + // Manually show tooltip while view is not using zrender elements. + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + target: el + }, dispatchAction); + } + else if (dataByCoordSys) { + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + position: payload.position, + event: {}, + dataByCoordSys: payload.dataByCoordSys, + tooltipOption: payload.tooltipOption + }, dispatchAction); + } + else if (payload.seriesIndex != null) { + + if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) { + return; + } + + var pointInfo = findPointFromSeries(payload, ecModel); + var cx = pointInfo.point[0]; + var cy = pointInfo.point[1]; + if (cx != null && cy != null) { + this._tryShow({ + offsetX: cx, + offsetY: cy, + position: payload.position, + target: pointInfo.el, + event: {} + }, dispatchAction); + } + } + else if (payload.x != null && payload.y != null) { + // FIXME + // should wrap dispatchAction like `axisPointer/globalListener` ? + api.dispatchAction({ + type: 'updateAxisPointer', + x: payload.x, + y: payload.y + }); + + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + position: payload.position, + target: api.getZr().findHover(payload.x, payload.y).target, + event: {} + }, dispatchAction); + } + }, + + manuallyHideTip: function (tooltipModel, ecModel, api, payload) { + var tooltipContent = this._tooltipContent; + + if (!this._alwaysShowContent) { + tooltipContent.hideLater(this._tooltipModel.get('hideDelay')); + } + + this._lastX = this._lastY = null; + + if (payload.from !== this.uid) { + this._hide(makeDispatchAction$1(payload, api)); + } + }, + + // Be compatible with previous design, that is, when tooltip.type is 'axis' and + // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer + // and tooltip. + _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) { + var seriesIndex = payload.seriesIndex; + var dataIndex = payload.dataIndex; + var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; + + if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) { + return; + } + + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + if (!seriesModel) { + return; + } + + var data = seriesModel.getData(); + var tooltipModel = buildTooltipModel([ + data.getItemModel(dataIndex), + seriesModel, + (seriesModel.coordinateSystem || {}).model, + tooltipModel + ]); + + if (tooltipModel.get('trigger') !== 'axis') { + return; + } + + api.dispatchAction({ + type: 'updateAxisPointer', + seriesIndex: seriesIndex, + dataIndex: dataIndex, + position: payload.position + }); + + return true; + }, + + _tryShow: function (e, dispatchAction) { + var el = e.target; + var tooltipModel = this._tooltipModel; + + if (!tooltipModel) { + return; + } + + // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed + this._lastX = e.offsetX; + this._lastY = e.offsetY; + + var dataByCoordSys = e.dataByCoordSys; + if (dataByCoordSys && dataByCoordSys.length) { + this._showAxisTooltip(dataByCoordSys, e); + } + // Always show item tooltip if mouse is on the element with dataIndex + else if (el && el.dataIndex != null) { + this._lastDataByCoordSys = null; + this._showSeriesItemTooltip(e, el, dispatchAction); + } + // Tooltip provided directly. Like legend. + else if (el && el.tooltip) { + this._lastDataByCoordSys = null; + this._showComponentItemTooltip(e, el, dispatchAction); + } + else { + this._lastDataByCoordSys = null; + this._hide(dispatchAction); + } + }, + + _showOrMove: function (tooltipModel, cb) { + // showDelay is used in this case: tooltip.enterable is set + // as true. User intent to move mouse into tooltip and click + // something. `showDelay` makes it easyer to enter the content + // but tooltip do not move immediately. + var delay = tooltipModel.get('showDelay'); + cb = bind(cb, this); + clearTimeout(this._showTimout); + delay > 0 + ? (this._showTimout = setTimeout(cb, delay)) + : cb(); + }, + + _showAxisTooltip: function (dataByCoordSys, e) { + var ecModel = this._ecModel; + var globalTooltipModel = this._tooltipModel; + var point = [e.offsetX, e.offsetY]; + var singleDefaultHTML = []; + var singleParamsList = []; + var singleTooltipModel = buildTooltipModel([ + e.tooltipOption, + globalTooltipModel + ]); + + each$20(dataByCoordSys, function (itemCoordSys) { + // var coordParamList = []; + // var coordDefaultHTML = []; + // var coordTooltipModel = buildTooltipModel([ + // e.tooltipOption, + // itemCoordSys.tooltipOption, + // ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex), + // globalTooltipModel + // ]); + // var displayMode = coordTooltipModel.get('displayMode'); + // var paramsList = displayMode === 'single' ? singleParamsList : []; + + each$20(itemCoordSys.dataByAxis, function (item) { + var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex); + var axisValue = item.value; + var seriesDefaultHTML = []; + + if (!axisModel || axisValue == null) { + return; + } + + var valueLabel = getValueLabel( + axisValue, axisModel.axis, ecModel, + item.seriesDataIndices, + item.valueLabelOpt + ); + + each$1(item.seriesDataIndices, function (idxItem) { + var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); + var dataIndex = idxItem.dataIndexInside; + var dataParams = series && series.getDataParams(dataIndex); + dataParams.axisDim = item.axisDim; + dataParams.axisIndex = item.axisIndex; + dataParams.axisType = item.axisType; + dataParams.axisId = item.axisId; + dataParams.axisValue = getAxisRawValue(axisModel.axis, axisValue); + dataParams.axisValueLabel = valueLabel; + + if (dataParams) { + singleParamsList.push(dataParams); + seriesDefaultHTML.push(series.formatTooltip(dataIndex, true)); + } + }); + + // Default tooltip content + // FIXME + // (1) shold be the first data which has name? + // (2) themeRiver, firstDataIndex is array, and first line is unnecessary. + var firstLine = valueLabel; + singleDefaultHTML.push( + (firstLine ? encodeHTML(firstLine) + '
' : '') + + seriesDefaultHTML.join('
') + ); + }); + }, this); + + // In most case, the second axis is shown upper than the first one. + singleDefaultHTML.reverse(); + singleDefaultHTML = singleDefaultHTML.join('

'); + + var positionExpr = e.position; + this._showOrMove(singleTooltipModel, function () { + if (this._updateContentNotChangedOnAxis(dataByCoordSys)) { + this._updatePosition( + singleTooltipModel, + positionExpr, + point[0], point[1], + this._tooltipContent, + singleParamsList + ); + } + else { + this._showTooltipContent( + singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(), + point[0], point[1], positionExpr + ); + } + }); + + // Do not trigger events here, because this branch only be entered + // from dispatchAction. + }, + + _showSeriesItemTooltip: function (e, el, dispatchAction) { + var ecModel = this._ecModel; + // Use dataModel in element if possible + // Used when mouseover on a element like markPoint or edge + // In which case, the data is not main data in series. + var seriesIndex = el.seriesIndex; + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + + // For example, graph link. + var dataModel = el.dataModel || seriesModel; + var dataIndex = el.dataIndex; + var dataType = el.dataType; + var data = dataModel.getData(); + + var tooltipModel = buildTooltipModel([ + data.getItemModel(dataIndex), + dataModel, + seriesModel && (seriesModel.coordinateSystem || {}).model, + this._tooltipModel + ]); + + var tooltipTrigger = tooltipModel.get('trigger'); + if (tooltipTrigger != null && tooltipTrigger !== 'item') { + return; + } + + var params = dataModel.getDataParams(dataIndex, dataType); + var defaultHtml = dataModel.formatTooltip(dataIndex, false, dataType); + var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex; + + this._showOrMove(tooltipModel, function () { + this._showTooltipContent( + tooltipModel, defaultHtml, params, asyncTicket, + e.offsetX, e.offsetY, e.position, e.target + ); + }); + + // FIXME + // duplicated showtip if manuallyShowTip is called from dispatchAction. + dispatchAction({ + type: 'showTip', + dataIndexInside: dataIndex, + dataIndex: data.getRawIndex(dataIndex), + seriesIndex: seriesIndex, + from: this.uid + }); + }, + + _showComponentItemTooltip: function (e, el, dispatchAction) { + var tooltipOpt = el.tooltip; + if (typeof tooltipOpt === 'string') { + var content = tooltipOpt; + tooltipOpt = { + content: content, + // Fixed formatter + formatter: content + }; + } + var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel); + var defaultHtml = subTooltipModel.get('content'); + var asyncTicket = Math.random(); + + // Do not check whether `trigger` is 'none' here, because `trigger` + // only works on cooridinate system. In fact, we have not found case + // that requires setting `trigger` nothing on component yet. + + this._showOrMove(subTooltipModel, function () { + this._showTooltipContent( + subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {}, + asyncTicket, e.offsetX, e.offsetY, e.position, el + ); + }); + + // If not dispatch showTip, tip may be hide triggered by axis. + dispatchAction({ + type: 'showTip', + from: this.uid + }); + }, + + _showTooltipContent: function ( + tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el + ) { + // Reset ticket + this._ticket = ''; + + if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) { + return; + } + + var tooltipContent = this._tooltipContent; + + var formatter = tooltipModel.get('formatter'); + positionExpr = positionExpr || tooltipModel.get('position'); + var html = defaultHtml; + + if (formatter && typeof formatter === 'string') { + html = formatTpl(formatter, params, true); + } + else if (typeof formatter === 'function') { + var callback = bind$3(function (cbTicket, html) { + if (cbTicket === this._ticket) { + tooltipContent.setContent(html); + this._updatePosition( + tooltipModel, positionExpr, x, y, tooltipContent, params, el + ); + } + }, this); + this._ticket = asyncTicket; + html = formatter(params, asyncTicket, callback); + } + + tooltipContent.setContent(html); + tooltipContent.show(tooltipModel); + + this._updatePosition( + tooltipModel, positionExpr, x, y, tooltipContent, params, el + ); + }, + + /** + * @param {string|Function|Array.|Object} positionExpr + * @param {number} x Mouse x + * @param {number} y Mouse y + * @param {boolean} confine Whether confine tooltip content in view rect. + * @param {Object|} params + * @param {module:zrender/Element} el target element + * @param {module:echarts/ExtensionAPI} api + * @return {Array.} + */ + _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) { + var viewWidth = this._api.getWidth(); + var viewHeight = this._api.getHeight(); + positionExpr = positionExpr || tooltipModel.get('position'); + + var contentSize = content.getSize(); + var align = tooltipModel.get('align'); + var vAlign = tooltipModel.get('verticalAlign'); + var rect = el && el.getBoundingRect().clone(); + el && rect.applyTransform(el.transform); + + if (typeof positionExpr === 'function') { + // Callback of position can be an array or a string specify the position + positionExpr = positionExpr([x, y], params, content.el, rect, { + viewSize: [viewWidth, viewHeight], + contentSize: contentSize.slice() + }); + } + + if (isArray(positionExpr)) { + x = parsePercent$2(positionExpr[0], viewWidth); + y = parsePercent$2(positionExpr[1], viewHeight); + } + else if (isObject(positionExpr)) { + positionExpr.width = contentSize[0]; + positionExpr.height = contentSize[1]; + var layoutRect = getLayoutRect( + positionExpr, {width: viewWidth, height: viewHeight} + ); + x = layoutRect.x; + y = layoutRect.y; + align = null; + // When positionExpr is left/top/right/bottom, + // align and verticalAlign will not work. + vAlign = null; + } + // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element + else if (typeof positionExpr === 'string' && el) { + var pos = calcTooltipPosition( + positionExpr, rect, contentSize + ); + x = pos[0]; + y = pos[1]; + } + else { + var pos = refixTooltipPosition( + x, y, content.el, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20 + ); + x = pos[0]; + y = pos[1]; + } + + align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0); + vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0); + + if (tooltipModel.get('confine')) { + var pos = confineTooltipPosition( + x, y, content.el, viewWidth, viewHeight + ); + x = pos[0]; + y = pos[1]; + } + + content.moveTo(x, y); + }, + + // FIXME + // Should we remove this but leave this to user? + _updateContentNotChangedOnAxis: function (dataByCoordSys) { + var lastCoordSys = this._lastDataByCoordSys; + var contentNotChanged = !!lastCoordSys + && lastCoordSys.length === dataByCoordSys.length; + + contentNotChanged && each$20(lastCoordSys, function (lastItemCoordSys, indexCoordSys) { + var lastDataByAxis = lastItemCoordSys.dataByAxis || {}; + var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {}; + var thisDataByAxis = thisItemCoordSys.dataByAxis || []; + contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length; + + contentNotChanged && each$20(lastDataByAxis, function (lastItem, indexAxis) { + var thisItem = thisDataByAxis[indexAxis] || {}; + var lastIndices = lastItem.seriesDataIndices || []; + var newIndices = thisItem.seriesDataIndices || []; + + contentNotChanged &= + lastItem.value === thisItem.value + && lastItem.axisType === thisItem.axisType + && lastItem.axisId === thisItem.axisId + && lastIndices.length === newIndices.length; + + contentNotChanged && each$20(lastIndices, function (lastIdxItem, j) { + var newIdxItem = newIndices[j]; + contentNotChanged &= + lastIdxItem.seriesIndex === newIdxItem.seriesIndex + && lastIdxItem.dataIndex === newIdxItem.dataIndex; + }); + }); + }); + + this._lastDataByCoordSys = dataByCoordSys; + + return !!contentNotChanged; + }, + + _hide: function (dispatchAction) { + // Do not directly hideLater here, because this behavior may be prevented + // in dispatchAction when showTip is dispatched. + + // FIXME + // duplicated hideTip if manuallyHideTip is called from dispatchAction. + this._lastDataByCoordSys = null; + dispatchAction({ + type: 'hideTip', + from: this.uid + }); + }, + + dispose: function (ecModel, api) { + if (env$1.node) { + return; + } + this._tooltipContent.hide(); + unregister('itemTooltip', api); + } +}); + + +/** + * @param {Array.} modelCascade + * From top to bottom. (the last one should be globalTooltipModel); + */ +function buildTooltipModel(modelCascade) { + var resultModel = modelCascade.pop(); + while (modelCascade.length) { + var tooltipOpt = modelCascade.pop(); + if (tooltipOpt) { + if (tooltipOpt instanceof Model) { + tooltipOpt = tooltipOpt.get('tooltip', true); + } + // In each data item tooltip can be simply write: + // { + // value: 10, + // tooltip: 'Something you need to know' + // } + if (typeof tooltipOpt === 'string') { + tooltipOpt = {formatter: tooltipOpt}; + } + resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel); + } + } + return resultModel; +} + +function makeDispatchAction$1(payload, api) { + return payload.dispatchAction || bind(api.dispatchAction, api); +} + +function refixTooltipPosition(x, y, el, viewWidth, viewHeight, gapH, gapV) { + var size = getOuterSize(el); + var width = size.width; + var height = size.height; + + if (gapH != null) { + if (x + width + gapH > viewWidth) { + x -= width + gapH; + } + else { + x += gapH; + } + } + if (gapV != null) { + if (y + height + gapV > viewHeight) { + y -= height + gapV; + } + else { + y += gapV; + } + } + return [x, y]; +} + +function confineTooltipPosition(x, y, el, viewWidth, viewHeight) { + var size = getOuterSize(el); + var width = size.width; + var height = size.height; + + x = Math.min(x + width, viewWidth) - width; + y = Math.min(y + height, viewHeight) - height; + x = Math.max(x, 0); + y = Math.max(y, 0); + + return [x, y]; +} + +function getOuterSize(el) { + var width = el.clientWidth; + var height = el.clientHeight; + + // Consider browser compatibility. + // IE8 does not support getComputedStyle. + if (document.defaultView && document.defaultView.getComputedStyle) { + var stl = document.defaultView.getComputedStyle(el); + if (stl) { + width += parseInt(stl.paddingLeft, 10) + parseInt(stl.paddingRight, 10) + + parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10); + height += parseInt(stl.paddingTop, 10) + parseInt(stl.paddingBottom, 10) + + parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10); + } + } + + return {width: width, height: height}; +} + +function calcTooltipPosition(position, rect, contentSize) { + var domWidth = contentSize[0]; + var domHeight = contentSize[1]; + var gap = 5; + var x = 0; + var y = 0; + var rectWidth = rect.width; + var rectHeight = rect.height; + switch (position) { + case 'inside': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y + rectHeight / 2 - domHeight / 2; + break; + case 'top': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y - domHeight - gap; + break; + case 'bottom': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y + rectHeight + gap; + break; + case 'left': + x = rect.x - domWidth - gap; + y = rect.y + rectHeight / 2 - domHeight / 2; + break; + case 'right': + x = rect.x + rectWidth + gap; + y = rect.y + rectHeight / 2 - domHeight / 2; + } + return [x, y]; +} + +function isCenterAlign(align) { + return align === 'center' || align === 'middle'; +} + +// FIXME Better way to pack data in graphic element + +/** + * @action + * @property {string} type + * @property {number} seriesIndex + * @property {number} dataIndex + * @property {number} [x] + * @property {number} [y] + */ +registerAction( + { + type: 'showTip', + event: 'showTip', + update: 'tooltip:manuallyShowTip' + }, + // noop + function () {} +); + +registerAction( + { + type: 'hideTip', + event: 'hideTip', + update: 'tooltip:manuallyHideTip' + }, + // noop + function () {} +); + +function getSeriesStackId$1(seriesModel) { + return seriesModel.get('stack') + || '__ec_stack_' + seriesModel.seriesIndex; +} + +function getAxisKey$1(axis) { + return axis.dim; +} + +/** + * @param {string} seriesType + * @param {module:echarts/model/Global} ecModel + * @param {module:echarts/ExtensionAPI} api + */ +function barLayoutPolar(seriesType, ecModel, api) { + + var width = api.getWidth(); + var height = api.getHeight(); + + var lastStackCoords = {}; + var lastStackCoordsOrigin = {}; + + var barWidthAndOffset = calRadialBar( + filter( + ecModel.getSeriesByType(seriesType), + function (seriesModel) { + return !ecModel.isSeriesFiltered(seriesModel) + && seriesModel.coordinateSystem + && seriesModel.coordinateSystem.type === 'polar'; + } + ) + ); + + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + // Check series coordinate, do layout for polar only + if (seriesModel.coordinateSystem.type !== 'polar') { + return; + } + + var data = seriesModel.getData(); + var polar = seriesModel.coordinateSystem; + var angleAxis = polar.getAngleAxis(); + var baseAxis = polar.getBaseAxis(); + + var stackId = getSeriesStackId$1(seriesModel); + var columnLayoutInfo + = barWidthAndOffset[getAxisKey$1(baseAxis)][stackId]; + var columnOffset = columnLayoutInfo.offset; + var columnWidth = columnLayoutInfo.width; + var valueAxis = polar.getOtherAxis(baseAxis); + + var center = seriesModel.get('center') || ['50%', '50%']; + var cx = parsePercent$1(center[0], width); + var cy = parsePercent$1(center[1], height); + + var barMinHeight = seriesModel.get('barMinHeight') || 0; + var barMinAngle = seriesModel.get('barMinAngle') || 0; + + var valueAxisStart = valueAxis.getExtent()[0]; + var valueMax = valueAxis.model.get('max'); + var valueMin = valueAxis.model.get('min'); + + var coordDims = [ + seriesModel.coordDimToDataDim('radius')[0], + seriesModel.coordDimToDataDim('angle')[0] + ]; + var coords = data.mapArray(coordDims, function (radius, angle) { + return polar.dataToPoint([radius, angle]); + }, true); + + lastStackCoords[stackId] = lastStackCoords[stackId] || []; + lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243 + + data.each(seriesModel.coordDimToDataDim(valueAxis.dim)[0], function (value, idx) { + if (isNaN(value)) { + return; + } + + if (!lastStackCoords[stackId][idx]) { + lastStackCoords[stackId][idx] = { + p: valueAxisStart, // Positive stack + n: valueAxisStart // Negative stack + }; + lastStackCoordsOrigin[stackId][idx] = { + p: valueAxisStart, // Positive stack + n: valueAxisStart // Negative stack + }; + } + var sign = value >= 0 ? 'p' : 'n'; + var coord = polar.pointToCoord(coords[idx]); + + var lastCoordOrigin = lastStackCoordsOrigin[stackId][idx][sign]; + var r0; + var r; + var startAngle; + var endAngle; + + if (valueAxis.dim === 'radius') { + // radial sector + r0 = lastCoordOrigin; + r = coord[0]; + startAngle = (-coord[1] + columnOffset) * Math.PI / 180; + endAngle = startAngle + columnWidth * Math.PI / 180; + + if (Math.abs(r) < barMinHeight) { + r = r0 + (r < 0 ? -1 : 1) * barMinHeight; + } + + lastStackCoordsOrigin[stackId][idx][sign] = r; + } + else { + // tangential sector + r0 = coord[0] + columnOffset; + r = r0 + columnWidth; + + // clamp data if min or max is defined for valueAxis + if (valueMax != null) { + value = Math.min(value, valueMax); + } + if (valueMin != null) { + value = Math.max(value, valueMin); + } + + var angle = angleAxis.dataToAngle(value); + if (Math.abs(angle - lastCoordOrigin) < barMinAngle) { + angle = lastCoordOrigin - (value < 0 ? -1 : 1) + * barMinAngle; + } + + startAngle = -lastCoordOrigin * Math.PI / 180; + endAngle = -angle * Math.PI / 180; + + // if the previous stack is at the end of the ring, + // add a round to differentiate it from origin + var extent = angleAxis.getExtent(); + var stackCoord = angle; + if (stackCoord === extent[0] && value > 0) { + stackCoord = extent[1]; + } + else if (stackCoord === extent[1] && value < 0) { + stackCoord = extent[0]; + } + lastStackCoordsOrigin[stackId][idx][sign] = stackCoord; + } + + data.setItemLayout(idx, { + cx: cx, + cy: cy, + r0: r0, + r: r, + startAngle: startAngle, + endAngle: endAngle + }); + + }, true); + + }, this); + +} + +/** + * Calculate bar width and offset for radial bar charts + */ +function calRadialBar(barSeries, api) { + // Columns info on each category axis. Key is polar name + var columnsMap = {}; + + each$1(barSeries, function (seriesModel, idx) { + var data = seriesModel.getData(); + var polar = seriesModel.coordinateSystem; + + var baseAxis = polar.getBaseAxis(); + + var axisExtent = baseAxis.getExtent(); + var bandWidth = baseAxis.type === 'category' + ? baseAxis.getBandWidth() + : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count()); + + var columnsOnAxis = columnsMap[getAxisKey$1(baseAxis)] || { + bandWidth: bandWidth, + remainedWidth: bandWidth, + autoWidthCount: 0, + categoryGap: '20%', + gap: '30%', + stacks: {} + }; + var stacks = columnsOnAxis.stacks; + columnsMap[getAxisKey$1(baseAxis)] = columnsOnAxis; + + var stackId = getSeriesStackId$1(seriesModel); + + if (!stacks[stackId]) { + columnsOnAxis.autoWidthCount++; + } + stacks[stackId] = stacks[stackId] || { + width: 0, + maxWidth: 0 + }; + + var barWidth = parsePercent$1( + seriesModel.get('barWidth'), + bandWidth + ); + var barMaxWidth = parsePercent$1( + seriesModel.get('barMaxWidth'), + bandWidth + ); + var barGap = seriesModel.get('barGap'); + var barCategoryGap = seriesModel.get('barCategoryGap'); + + if (barWidth && !stacks[stackId].width) { + barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth); + stacks[stackId].width = barWidth; + columnsOnAxis.remainedWidth -= barWidth; + } + + barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); + (barGap != null) && (columnsOnAxis.gap = barGap); + (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap); + }); + + + var result = {}; + + each$1(columnsMap, function (columnsOnAxis, coordSysName) { + + result[coordSysName] = {}; + + var stacks = columnsOnAxis.stacks; + var bandWidth = columnsOnAxis.bandWidth; + var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth); + var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1); + + var remainedWidth = columnsOnAxis.remainedWidth; + var autoWidthCount = columnsOnAxis.autoWidthCount; + var autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + // Find if any auto calculated bar exceeded maxBarWidth + each$1(stacks, function (column, stack) { + var maxWidth = column.maxWidth; + if (maxWidth && maxWidth < autoWidth) { + maxWidth = Math.min(maxWidth, remainedWidth); + if (column.width) { + maxWidth = Math.min(maxWidth, column.width); + } + remainedWidth -= maxWidth; + column.width = maxWidth; + autoWidthCount--; + } + }); + + // Recalculate width again + autoWidth = (remainedWidth - categoryGap) + / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + + var widthSum = 0; + var lastColumn; + each$1(stacks, function (column, idx) { + if (!column.width) { + column.width = autoWidth; + } + lastColumn = column; + widthSum += column.width * (1 + barGapPercent); + }); + if (lastColumn) { + widthSum -= lastColumn.width * barGapPercent; + } + + var offset = -widthSum / 2; + each$1(stacks, function (column, stackId) { + result[coordSysName][stackId] = result[coordSysName][stackId] || { + offset: offset, + width: column.width + }; + + offset += column.width * (1 + barGapPercent); + }); + }); + + return result; +} + +function RadiusAxis(scale, radiusExtent) { + + Axis.call(this, 'radius', scale, radiusExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = 'category'; +} + +RadiusAxis.prototype = { + + constructor: RadiusAxis, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1]; + }, + + dataToRadius: Axis.prototype.dataToCoord, + + radiusToData: Axis.prototype.coordToData +}; + +inherits(RadiusAxis, Axis); + +function AngleAxis(scale, angleExtent) { + + angleExtent = angleExtent || [0, 360]; + + Axis.call(this, 'angle', scale, angleExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = 'category'; +} + +AngleAxis.prototype = { + + constructor: AngleAxis, + + /** + * @override + */ + pointToData: function (point, clamp) { + return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1]; + }, + + dataToAngle: Axis.prototype.dataToCoord, + + angleToData: Axis.prototype.coordToData +}; + +inherits(AngleAxis, Axis); + +/** + * @module echarts/coord/polar/Polar + */ + +/** + * @alias {module:echarts/coord/polar/Polar} + * @constructor + * @param {string} name + */ +var Polar = function (name) { + + /** + * @type {string} + */ + this.name = name || ''; + + /** + * x of polar center + * @type {number} + */ + this.cx = 0; + + /** + * y of polar center + * @type {number} + */ + this.cy = 0; + + /** + * @type {module:echarts/coord/polar/RadiusAxis} + * @private + */ + this._radiusAxis = new RadiusAxis(); + + /** + * @type {module:echarts/coord/polar/AngleAxis} + * @private + */ + this._angleAxis = new AngleAxis(); + + this._radiusAxis.polar = this._angleAxis.polar = this; +}; + +Polar.prototype = { + + type: 'polar', + + axisPointerEnabled: true, + + constructor: Polar, + + /** + * @param {Array.} + * @readOnly + */ + dimensions: ['radius', 'angle'], + + /** + * @type {module:echarts/coord/PolarModel} + */ + model: null, + + /** + * If contain coord + * @param {Array.} point + * @return {boolean} + */ + containPoint: function (point) { + var coord = this.pointToCoord(point); + return this._radiusAxis.contain(coord[0]) + && this._angleAxis.contain(coord[1]); + }, + + /** + * If contain data + * @param {Array.} data + * @return {boolean} + */ + containData: function (data) { + return this._radiusAxis.containData(data[0]) + && this._angleAxis.containData(data[1]); + }, + + /** + * @param {string} dim + * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + */ + getAxis: function (dim) { + return this['_' + dim + 'Axis']; + }, + + /** + * @return {Array.} + */ + getAxes: function () { + return [this._radiusAxis, this._angleAxis]; + }, + + /** + * Get axes by type of scale + * @param {string} scaleType + * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + */ + getAxesByScale: function (scaleType) { + var axes = []; + var angleAxis = this._angleAxis; + var radiusAxis = this._radiusAxis; + angleAxis.scale.type === scaleType && axes.push(angleAxis); + radiusAxis.scale.type === scaleType && axes.push(radiusAxis); + + return axes; + }, + + /** + * @return {module:echarts/coord/polar/AngleAxis} + */ + getAngleAxis: function () { + return this._angleAxis; + }, + + /** + * @return {module:echarts/coord/polar/RadiusAxis} + */ + getRadiusAxis: function () { + return this._radiusAxis; + }, + + /** + * @param {module:echarts/coord/polar/Axis} + * @return {module:echarts/coord/polar/Axis} + */ + getOtherAxis: function (axis) { + var angleAxis = this._angleAxis; + return axis === angleAxis ? this._radiusAxis : angleAxis; + }, + + /** + * Base axis will be used on stacking. + * + * @return {module:echarts/coord/polar/Axis} + */ + getBaseAxis: function () { + return this.getAxesByScale('ordinal')[0] + || this.getAxesByScale('time')[0] + || this.getAngleAxis(); + }, + + /** + * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined + * @return {Object} {baseAxes: [], otherAxes: []} + */ + getTooltipAxes: function (dim) { + var baseAxis = (dim != null && dim !== 'auto') + ? this.getAxis(dim) : this.getBaseAxis(); + return { + baseAxes: [baseAxis], + otherAxes: [this.getOtherAxis(baseAxis)] + }; + }, + + /** + * Convert a single data item to (x, y) point. + * Parameter data is an array which the first element is radius and the second is angle + * @param {Array.} data + * @param {boolean} [clamp=false] + * @return {Array.} + */ + dataToPoint: function (data, clamp) { + return this.coordToPoint([ + this._radiusAxis.dataToRadius(data[0], clamp), + this._angleAxis.dataToAngle(data[1], clamp) + ]); + }, + + /** + * Convert a (x, y) point to data + * @param {Array.} point + * @param {boolean} [clamp=false] + * @return {Array.} + */ + pointToData: function (point, clamp) { + var coord = this.pointToCoord(point); + return [ + this._radiusAxis.radiusToData(coord[0], clamp), + this._angleAxis.angleToData(coord[1], clamp) + ]; + }, + + /** + * Convert a (x, y) point to (radius, angle) coord + * @param {Array.} point + * @return {Array.} + */ + pointToCoord: function (point) { + var dx = point[0] - this.cx; + var dy = point[1] - this.cy; + var angleAxis = this.getAngleAxis(); + var extent = angleAxis.getExtent(); + var minAngle = Math.min(extent[0], extent[1]); + var maxAngle = Math.max(extent[0], extent[1]); + // Fix fixed extent in polarCreator + // FIXME + angleAxis.inverse + ? (minAngle = maxAngle - 360) + : (maxAngle = minAngle + 360); + + var radius = Math.sqrt(dx * dx + dy * dy); + dx /= radius; + dy /= radius; + + var radian = Math.atan2(-dy, dx) / Math.PI * 180; + + // move to angleExtent + var dir = radian < minAngle ? 1 : -1; + while (radian < minAngle || radian > maxAngle) { + radian += dir * 360; + } + + return [radius, radian]; + }, + + /** + * Convert a (radius, angle) coord to (x, y) point + * @param {Array.} coord + * @return {Array.} + */ + coordToPoint: function (coord) { + var radius = coord[0]; + var radian = coord[1] / 180 * Math.PI; + var x = Math.cos(radian) * radius + this.cx; + // Inverse the y + var y = -Math.sin(radian) * radius + this.cy; + + return [x, y]; + } + +}; + +var PolarAxisModel = ComponentModel.extend({ + + type: 'polarAxis', + + /** + * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + */ + axis: null, + + /** + * @override + */ + getCoordSysModel: function () { + return this.ecModel.queryComponents({ + mainType: 'polar', + index: this.option.polarIndex, + id: this.option.polarId + })[0]; + } + +}); + +merge(PolarAxisModel.prototype, axisModelCommonMixin); + +var polarAxisDefaultExtendedOption = { + angle: { + // polarIndex: 0, + // polarId: '', + + startAngle: 90, + + clockwise: true, + + splitNumber: 12, + + axisLabel: { + rotate: false + } + }, + radius: { + // polarIndex: 0, + // polarId: '', + + splitNumber: 5 + } +}; + +function getAxisType$3(axisDim, option) { + // Default axis with data is category axis + return option.type || (option.data ? 'category' : 'value'); +} + +axisModelCreator('angle', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.angle); +axisModelCreator('radius', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.radius); + +extendComponentModel({ + + type: 'polar', + + dependencies: ['polarAxis', 'angleAxis'], + + /** + * @type {module:echarts/coord/polar/Polar} + */ + coordinateSystem: null, + + /** + * @param {string} axisType + * @return {module:echarts/coord/polar/AxisModel} + */ + findAxisModel: function (axisType) { + var foundAxisModel; + var ecModel = this.ecModel; + + ecModel.eachComponent(axisType, function (axisModel) { + if (axisModel.getCoordSysModel() === this) { + foundAxisModel = axisModel; + } + }, this); + return foundAxisModel; + }, + + defaultOption: { + + zlevel: 0, + + z: 0, + + center: ['50%', '50%'], + + radius: '80%' + } +}); + +// TODO Axis scale + +// 依赖 PolarModel 做预处理 +/** + * Resize method bound to the polar + * @param {module:echarts/coord/polar/PolarModel} polarModel + * @param {module:echarts/ExtensionAPI} api + */ +function resizePolar(polar, polarModel, api) { + var center = polarModel.get('center'); + var width = api.getWidth(); + var height = api.getHeight(); + + polar.cx = parsePercent$1(center[0], width); + polar.cy = parsePercent$1(center[1], height); + + var radiusAxis = polar.getRadiusAxis(); + var size = Math.min(width, height) / 2; + var radius = parsePercent$1(polarModel.get('radius'), size); + radiusAxis.inverse + ? radiusAxis.setExtent(radius, 0) + : radiusAxis.setExtent(0, radius); +} + +/** + * Update polar + */ +function updatePolarScale(ecModel, api) { + var polar = this; + var angleAxis = polar.getAngleAxis(); + var radiusAxis = polar.getRadiusAxis(); + // Reset scale + angleAxis.scale.setExtent(Infinity, -Infinity); + radiusAxis.scale.setExtent(Infinity, -Infinity); + + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.coordinateSystem === polar) { + var data = seriesModel.getData(); + radiusAxis.scale.unionExtentFromData(data, 'radius'); + angleAxis.scale.unionExtentFromData(data, 'angle'); + } + }); + + niceScaleExtent(angleAxis.scale, angleAxis.model); + niceScaleExtent(radiusAxis.scale, radiusAxis.model); + + // Fix extent of category angle axis + if (angleAxis.type === 'category' && !angleAxis.onBand) { + var extent = angleAxis.getExtent(); + var diff = 360 / angleAxis.scale.count(); + angleAxis.inverse ? (extent[1] += diff) : (extent[1] -= diff); + angleAxis.setExtent(extent[0], extent[1]); + } +} + +/** + * Set common axis properties + * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis} + * @param {module:echarts/coord/polar/AxisModel} + * @inner + */ +function setAxis(axis, axisModel) { + axis.type = axisModel.get('type'); + axis.scale = createScaleByModel(axisModel); + axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category'; + axis.inverse = axisModel.get('inverse'); + + if (axisModel.mainType === 'angleAxis') { + axis.inverse ^= axisModel.get('clockwise'); + var startAngle = axisModel.get('startAngle'); + axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360)); + } + + // Inject axis instance + axisModel.axis = axis; + axis.model = axisModel; +} + + +var polarCreator = { + + dimensions: Polar.prototype.dimensions, + + create: function (ecModel, api) { + var polarList = []; + ecModel.eachComponent('polar', function (polarModel, idx) { + var polar = new Polar(idx); + // Inject resize and update method + polar.update = updatePolarScale; + + var radiusAxis = polar.getRadiusAxis(); + var angleAxis = polar.getAngleAxis(); + + var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); + var angleAxisModel = polarModel.findAxisModel('angleAxis'); + + setAxis(radiusAxis, radiusAxisModel); + setAxis(angleAxis, angleAxisModel); + + resizePolar(polar, polarModel, api); + + polarList.push(polar); + + polarModel.coordinateSystem = polar; + polar.model = polarModel; + }); + // Inject coordinateSystem to series + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'polar') { + var polarModel = ecModel.queryComponents({ + mainType: 'polar', + index: seriesModel.get('polarIndex'), + id: seriesModel.get('polarId') + })[0]; + + if (__DEV__) { + if (!polarModel) { + throw new Error( + 'Polar "' + retrieve( + seriesModel.get('polarIndex'), + seriesModel.get('polarId'), + 0 + ) + '" not found' + ); + } + } + seriesModel.coordinateSystem = polarModel.coordinateSystem; + } + }); + + return polarList; + } +}; + +CoordinateSystemManager.register('polar', polarCreator); + +var elementList$1 = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea']; + +function getAxisLineShape(polar, rExtent, angle) { + rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse()); + var start = polar.coordToPoint([rExtent[0], angle]); + var end = polar.coordToPoint([rExtent[1], angle]); + + return { + x1: start[0], + y1: start[1], + x2: end[0], + y2: end[1] + }; +} + +function getRadiusIdx(polar) { + var radiusAxis = polar.getRadiusAxis(); + return radiusAxis.inverse ? 0 : 1; +} + +AxisView.extend({ + + type: 'angleAxis', + + axisPointerClass: 'PolarAxisPointer', + + render: function (angleAxisModel, ecModel) { + this.group.removeAll(); + if (!angleAxisModel.get('show')) { + return; + } + + var angleAxis = angleAxisModel.axis; + var polar = angleAxis.polar; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var ticksAngles = angleAxis.getTicksCoords(); + + if (angleAxis.type !== 'category') { + // Remove the last tick which will overlap the first tick + ticksAngles.pop(); + } + + each$1(elementList$1, function (name) { + if (angleAxisModel.get(name +'.show') + && (!angleAxis.scale.isBlank() || name === 'axisLine') + ) { + this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent); + } + }, this); + }, + + /** + * @private + */ + _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle'); + + var circle = new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: radiusExtent[getRadiusIdx(polar)] + }, + style: lineStyleModel.getLineStyle(), + z2: 1, + silent: true + }); + circle.style.fill = null; + + this.group.add(circle); + }, + + /** + * @private + */ + _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var tickModel = angleAxisModel.getModel('axisTick'); + + var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length'); + var radius = radiusExtent[getRadiusIdx(polar)]; + + var lines = map(ticksAngles, function (tickAngle) { + return new Line({ + shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngle) + }); + }); + this.group.add(mergePath( + lines, { + style: defaults( + tickModel.getModel('lineStyle').getLineStyle(), + { + stroke: angleAxisModel.get('axisLine.lineStyle.color') + } + ) + } + )); + }, + + /** + * @private + */ + _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var axis = angleAxisModel.axis; + + var categoryData = angleAxisModel.get('data'); + + var labelModel = angleAxisModel.getModel('axisLabel'); + var labels = angleAxisModel.getFormattedLabels(); + + var labelMargin = labelModel.get('margin'); + var labelsAngles = axis.getLabelsCoords(); + + // Use length of ticksAngles because it may remove the last tick to avoid overlapping + for (var i = 0; i < ticksAngles.length; i++) { + var r = radiusExtent[getRadiusIdx(polar)]; + var p = polar.coordToPoint([r + labelMargin, labelsAngles[i]]); + var cx = polar.cx; + var cy = polar.cy; + + var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3 + ? 'center' : (p[0] > cx ? 'left' : 'right'); + var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3 + ? 'middle' : (p[1] > cy ? 'top' : 'bottom'); + + if (categoryData && categoryData[i] && categoryData[i].textStyle) { + labelModel = new Model(categoryData[i].textStyle, labelModel, labelModel.ecModel); + } + + var textEl = new Text({silent: true}); + this.group.add(textEl); + setTextStyle(textEl.style, labelModel, { + x: p[0], + y: p[1], + textFill: labelModel.getTextColor() || angleAxisModel.get('axisLine.lineStyle.color'), + text: labels[i], + textAlign: labelTextAlign, + textVerticalAlign: labelTextVerticalAlign + }); + } + }, + + /** + * @private + */ + _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + var splitLineModel = angleAxisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + var lineCount = 0; + + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + + var splitLines = []; + + for (var i = 0; i < ticksAngles.length; i++) { + var colorIndex = (lineCount++) % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Line({ + shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i]) + })); + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitLines.length; i++) { + this.group.add(mergePath(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length] + }, lineStyleModel.getLineStyle()), + silent: true, + z: angleAxisModel.get('z') + })); + } + }, + + /** + * @private + */ + _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) { + + var splitAreaModel = angleAxisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var lineCount = 0; + + areaColors = areaColors instanceof Array ? areaColors : [areaColors]; + + var splitAreas = []; + + var RADIAN = Math.PI / 180; + var prevAngle = -ticksAngles[0] * RADIAN; + var r0 = Math.min(radiusExtent[0], radiusExtent[1]); + var r1 = Math.max(radiusExtent[0], radiusExtent[1]); + + var clockwise = angleAxisModel.get('clockwise'); + + for (var i = 1; i < ticksAngles.length; i++) { + var colorIndex = (lineCount++) % areaColors.length; + splitAreas[colorIndex] = splitAreas[colorIndex] || []; + splitAreas[colorIndex].push(new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: r0, + r: r1, + startAngle: prevAngle, + endAngle: -ticksAngles[i] * RADIAN, + clockwise: clockwise + }, + silent: true + })); + prevAngle = -ticksAngles[i] * RADIAN; + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitAreas.length; i++) { + this.group.add(mergePath(splitAreas[i], { + style: defaults({ + fill: areaColors[i % areaColors.length] + }, areaStyleModel.getAreaStyle()), + silent: true + })); + } + } +}); + +var axisBuilderAttrs$3 = [ + 'axisLine', 'axisTickLabel', 'axisName' +]; +var selfBuilderAttrs$1 = [ + 'splitLine', 'splitArea' +]; + +AxisView.extend({ + + type: 'radiusAxis', + + axisPointerClass: 'PolarAxisPointer', + + render: function (radiusAxisModel, ecModel) { + this.group.removeAll(); + if (!radiusAxisModel.get('show')) { + return; + } + var radiusAxis = radiusAxisModel.axis; + var polar = radiusAxis.polar; + var angleAxis = polar.getAngleAxis(); + var ticksCoords = radiusAxis.getTicksCoords(); + var axisAngle = angleAxis.getExtent()[0]; + var radiusExtent = radiusAxis.getExtent(); + + var layout = layoutAxis(polar, radiusAxisModel, axisAngle); + var axisBuilder = new AxisBuilder(radiusAxisModel, layout); + each$1(axisBuilderAttrs$3, axisBuilder.add, axisBuilder); + this.group.add(axisBuilder.getGroup()); + + each$1(selfBuilderAttrs$1, function (name) { + if (radiusAxisModel.get(name +'.show') && !radiusAxis.scale.isBlank()) { + this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords); + } + }, this); + }, + + /** + * @private + */ + _splitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { + var splitLineModel = radiusAxisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + var lineCount = 0; + + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + + var splitLines = []; + + for (var i = 0; i < ticksCoords.length; i++) { + var colorIndex = (lineCount++) % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: ticksCoords[i] + }, + silent: true + })); + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitLines.length; i++) { + this.group.add(mergePath(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length], + fill: null + }, lineStyleModel.getLineStyle()), + silent: true + })); + } + }, + + /** + * @private + */ + _splitArea: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { + + var splitAreaModel = radiusAxisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var lineCount = 0; + + areaColors = areaColors instanceof Array ? areaColors : [areaColors]; + + var splitAreas = []; + + var prevRadius = ticksCoords[0]; + for (var i = 1; i < ticksCoords.length; i++) { + var colorIndex = (lineCount++) % areaColors.length; + splitAreas[colorIndex] = splitAreas[colorIndex] || []; + splitAreas[colorIndex].push(new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: prevRadius, + r: ticksCoords[i], + startAngle: 0, + endAngle: Math.PI * 2 + }, + silent: true + })); + prevRadius = ticksCoords[i]; + } + + // Simple optimization + // Batching the lines if color are the same + for (var i = 0; i < splitAreas.length; i++) { + this.group.add(mergePath(splitAreas[i], { + style: defaults({ + fill: areaColors[i % areaColors.length] + }, areaStyleModel.getAreaStyle()), + silent: true + })); + } + } +}); + +/** + * @inner + */ +function layoutAxis(polar, radiusAxisModel, axisAngle) { + return { + position: [polar.cx, polar.cy], + rotation: axisAngle / 180 * Math.PI, + labelDirection: -1, + tickDirection: -1, + nameDirection: 1, + labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'), + // Over splitLine and splitArea + z2: 1 + }; +} + +var PolarAxisPointer = BaseAxisPointer.extend({ + + /** + * @override + */ + makeElOption: function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + + if (axis.dim === 'angle') { + this.animationThreshold = Math.PI / 18; + } + + var polar = axis.polar; + var otherAxis = polar.getOtherAxis(axis); + var otherExtent = otherAxis.getExtent(); + + var coordValue; + coordValue = axis['dataTo' + capitalFirst(axis.dim)](value); + + var axisPointerType = axisPointerModel.get('type'); + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder$2[axisPointerType]( + axis, polar, coordValue, otherExtent, elStyle + ); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var labelMargin = axisPointerModel.get('label.margin'); + var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin); + buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos); + } + + // Do not support handle, utill any user requires it. + +}); + +function getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) { + var axis = axisModel.axis; + var coord = axis.dataToCoord(value); + var axisAngle = polar.getAngleAxis().getExtent()[0]; + axisAngle = axisAngle / 180 * Math.PI; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var position; + var align; + var verticalAlign; + + if (axis.dim === 'radius') { + var transform = create$1(); + rotate(transform, transform, axisAngle); + translate(transform, transform, [polar.cx, polar.cy]); + position = applyTransform$1([coord, -labelMargin], transform); + + var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0; + var labelLayout = AxisBuilder.innerTextLayout( + axisAngle, labelRotation * Math.PI / 180, -1 + ); + align = labelLayout.textAlign; + verticalAlign = labelLayout.textVerticalAlign; + } + else { // angle axis + var r = radiusExtent[1]; + position = polar.coordToPoint([r + labelMargin, coord]); + var cx = polar.cx; + var cy = polar.cy; + align = Math.abs(position[0] - cx) / r < 0.3 + ? 'center' : (position[0] > cx ? 'left' : 'right'); + verticalAlign = Math.abs(position[1] - cy) / r < 0.3 + ? 'middle' : (position[1] > cy ? 'top' : 'bottom'); + } + + return { + position: position, + align: align, + verticalAlign: verticalAlign + }; +} + + +var pointerShapeBuilder$2 = { + + line: function (axis, polar, coordValue, otherExtent, elStyle) { + return axis.dim === 'angle' + ? { + type: 'Line', + shape: makeLineShape( + polar.coordToPoint([otherExtent[0], coordValue]), + polar.coordToPoint([otherExtent[1], coordValue]) + ) + } + : { + type: 'Circle', + shape: { + cx: polar.cx, + cy: polar.cy, + r: coordValue + } + }; + }, + + shadow: function (axis, polar, coordValue, otherExtent, elStyle) { + var bandWidth = axis.getBandWidth(); + var radian = Math.PI / 180; + + return axis.dim === 'angle' + ? { + type: 'Sector', + shape: makeSectorShape( + polar.cx, polar.cy, + otherExtent[0], otherExtent[1], + // In ECharts y is negative if angle is positive + (-coordValue - bandWidth / 2) * radian, + (-coordValue + bandWidth / 2) * radian + ) + } + : { + type: 'Sector', + shape: makeSectorShape( + polar.cx, polar.cy, + coordValue - bandWidth / 2, + coordValue + bandWidth / 2, + 0, Math.PI * 2 + ) + }; + } +}; + +AxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer); + +// For reducing size of echarts.min, barLayoutPolar is required by polar. +registerLayout(curry(barLayoutPolar, 'bar')); + +// Polar view +extendComponentView({ + type: 'polar' +}); + +var GeoModel = ComponentModel.extend({ + + type: 'geo', + + /** + * @type {module:echarts/coord/geo/Geo} + */ + coordinateSystem: null, + + layoutMode: 'box', + + init: function (option) { + ComponentModel.prototype.init.apply(this, arguments); + + // Default label emphasis `show` + defaultEmphasis(option.label, ['show']); + }, + + optionUpdated: function () { + var option = this.option; + var self = this; + + option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap); + + this._optionModelMap = reduce(option.regions || [], function (optionModelMap, regionOpt) { + if (regionOpt.name) { + optionModelMap.set(regionOpt.name, new Model(regionOpt, self)); + } + return optionModelMap; + }, createHashMap()); + + this.updateSelectedMap(option.regions); + }, + + defaultOption: { + + zlevel: 0, + + z: 0, + + show: true, + + left: 'center', + + top: 'center', + + + // width:, + // height:, + // right + // bottom + + // Aspect is width / height. Inited to be geoJson bbox aspect + // This parameter is used for scale this aspect + aspectScale: 0.75, + + ///// Layout with center and size + // If you wan't to put map in a fixed size box with right aspect ratio + // This two properties may more conveninet + // layoutCenter: [50%, 50%] + // layoutSize: 100 + + + silent: false, + + // Map type + map: '', + + // Define left-top, right-bottom coords to control view + // For example, [ [180, 90], [-180, -90] ] + boundingCoords: null, + + // Default on center of map + center: null, + + zoom: 1, + + scaleLimit: null, + + // selectedMode: false + + label: { + normal: { + show: false, + color: '#000' + }, + emphasis: { + show: true, + color: 'rgb(100,0,0)' + } + }, + + itemStyle: { + normal: { + // color: 各异, + borderWidth: 0.5, + borderColor: '#444', + color: '#eee' + }, + emphasis: { // 也是选中样式 + color: 'rgba(255,215,0,0.8)' + } + }, + + regions: [] + }, + + /** + * Get model of region + * @param {string} name + * @return {module:echarts/model/Model} + */ + getRegionModel: function (name) { + return this._optionModelMap.get(name) || new Model(null, this, this.ecModel); + }, + + /** + * Format label + * @param {string} name Region name + * @param {string} [status='normal'] 'normal' or 'emphasis' + * @return {string} + */ + getFormattedLabel: function (name, status) { + var regionModel = this.getRegionModel(name); + var formatter = regionModel.get('label.' + status + '.formatter'); + var params = { + name: name + }; + if (typeof formatter === 'function') { + params.status = status; + return formatter(params); + } + else if (typeof formatter === 'string') { + return formatter.replace('{a}', name != null ? name : ''); + } + }, + + setZoom: function (zoom) { + this.option.zoom = zoom; + }, + + setCenter: function (center) { + this.option.center = center; + } +}); + +mixin(GeoModel, selectableMixin); + +extendComponentView({ + + type: 'geo', + + init: function (ecModel, api) { + var mapDraw = new MapDraw(api, true); + this._mapDraw = mapDraw; + + this.group.add(mapDraw.group); + }, + + render: function (geoModel, ecModel, api, payload) { + // Not render if it is an toggleSelect action from self + if (payload && payload.type === 'geoToggleSelect' + && payload.from === this.uid + ) { + return; + } + + var mapDraw = this._mapDraw; + if (geoModel.get('show')) { + mapDraw.draw(geoModel, ecModel, api, this, payload); + } + else { + this._mapDraw.group.removeAll(); + } + + this.group.silent = geoModel.get('silent'); + }, + + dispose: function () { + this._mapDraw && this._mapDraw.remove(); + } + +}); + +function makeAction(method, actionInfo) { + actionInfo.update = 'updateView'; + registerAction(actionInfo, function (payload, ecModel) { + var selected = {}; + + ecModel.eachComponent( + { mainType: 'geo', query: payload}, + function (geoModel) { + geoModel[method](payload.name); + var geo = geoModel.coordinateSystem; + each$1(geo.regions, function (region) { + selected[region.name] = geoModel.isSelected(region.name) || false; + }); + } + ); + + return { + selected: selected, + name: payload.name + }; + }); +} + +makeAction('toggleSelected', { + type: 'geoToggleSelect', + event: 'geoselectchanged' +}); +makeAction('select', { + type: 'geoSelect', + event: 'geoselected' +}); +makeAction('unSelect', { + type: 'geoUnSelect', + event: 'geounselected' +}); + +var DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear']; + +var preprocessor$1 = function (option, isNew) { + var brushComponents = option && option.brush; + if (!isArray(brushComponents)) { + brushComponents = brushComponents ? [brushComponents] : []; + } + + if (!brushComponents.length) { + return; + } + + var brushComponentSpecifiedBtns = []; + + each$1(brushComponents, function (brushOpt) { + var tbs = brushOpt.hasOwnProperty('toolbox') + ? brushOpt.toolbox : []; + + if (tbs instanceof Array) { + brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs); + } + }); + + var toolbox = option && option.toolbox; + + if (isArray(toolbox)) { + toolbox = toolbox[0]; + } + if (!toolbox) { + toolbox = {feature: {}}; + option.toolbox = [toolbox]; + } + + var toolboxFeature = (toolbox.feature || (toolbox.feature = {})); + var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {}); + var brushTypes = toolboxBrush.type || (toolboxBrush.type = []); + + brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns); + + removeDuplicate(brushTypes); + + if (isNew && !brushTypes.length) { + brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS); + } +}; + +function removeDuplicate(arr) { + var map$$1 = {}; + each$1(arr, function (val) { + map$$1[val] = 1; + }); + arr.length = 0; + each$1(map$$1, function (flag, val) { + arr.push(val); + }); +} + +/** + * @file Visual solution, for consistent option specification. + */ + +var each$22 = each$1; + +function hasKeys(obj) { + if (obj) { + for (var name in obj){ + if (obj.hasOwnProperty(name)) { + return true; + } + } + } +} + +/** + * @param {Object} option + * @param {Array.} stateList + * @param {Function} [supplementVisualOption] + * @return {Object} visualMappings > + */ +function createVisualMappings(option, stateList, supplementVisualOption) { + var visualMappings = {}; + + each$22(stateList, function (state) { + var mappings = visualMappings[state] = createMappings(); + + each$22(option[state], function (visualData, visualType) { + if (!VisualMapping.isValidType(visualType)) { + return; + } + var mappingOption = { + type: visualType, + visual: visualData + }; + supplementVisualOption && supplementVisualOption(mappingOption, state); + mappings[visualType] = new VisualMapping(mappingOption); + + // Prepare a alpha for opacity, for some case that opacity + // is not supported, such as rendering using gradient color. + if (visualType === 'opacity') { + mappingOption = clone(mappingOption); + mappingOption.type = 'colorAlpha'; + mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption); + } + }); + }); + + return visualMappings; + + function createMappings() { + var Creater = function () {}; + // Make sure hidden fields will not be visited by + // object iteration (with hasOwnProperty checking). + Creater.prototype.__hidden = Creater.prototype; + var obj = new Creater(); + return obj; + } +} + +/** + * @param {Object} thisOption + * @param {Object} newOption + * @param {Array.} keys + */ +function replaceVisualOption(thisOption, newOption, keys) { + // Visual attributes merge is not supported, otherwise it + // brings overcomplicated merge logic. See #2853. So if + // newOption has anyone of these keys, all of these keys + // will be reset. Otherwise, all keys remain. + var has; + each$1(keys, function (key) { + if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) { + has = true; + } + }); + has && each$1(keys, function (key) { + if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) { + thisOption[key] = clone(newOption[key]); + } + else { + delete thisOption[key]; + } + }); +} + +/** + * @param {Array.} stateList + * @param {Object} visualMappings > + * @param {module:echarts/data/List} list + * @param {Function} getValueState param: valueOrIndex, return: state. + * @param {object} [scope] Scope for getValueState + * @param {string} [dimension] Concrete dimension, if used. + */ +function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) { + var visualTypesMap = {}; + each$1(stateList, function (state) { + var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]); + visualTypesMap[state] = visualTypes; + }); + + var dataIndex; + + function getVisual(key) { + return data.getItemVisual(dataIndex, key); + } + + function setVisual(key, value) { + data.setItemVisual(dataIndex, key, value); + } + + if (dimension == null) { + data.each(eachItem, true); + } + else { + data.each([dimension], eachItem, true); + } + + function eachItem(valueOrIndex, index) { + dataIndex = dimension == null ? valueOrIndex : index; + + var rawDataItem = data.getRawDataItem(dataIndex); + // Consider performance + if (rawDataItem && rawDataItem.visualMap === false) { + return; + } + + var valueState = getValueState.call(scope, valueOrIndex); + var mappings = visualMappings[valueState]; + var visualTypes = visualTypesMap[valueState]; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + mappings[type] && mappings[type].applyVisual( + valueOrIndex, getVisual, setVisual + ); + } + } +} + +// Key of the first level is brushType: `line`, `rect`, `polygon`. +// Key of the second level is chart element type: `point`, `rect`. +// See moudule:echarts/component/helper/BrushController +// function param: +// {Object} itemLayout fetch from data.getItemLayout(dataIndex) +// {Object} selectors {point: selector, rect: selector, ...} +// {Object} area {range: [[], [], ..], boudingRect} +// function return: +// {boolean} Whether in the given brush. +var selector = { + lineX: getLineSelectors(0), + lineY: getLineSelectors(1), + rect: { + point: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]); + }, + rect: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.intersect(itemLayout); + } + }, + polygon: { + point: function (itemLayout, selectors, area) { + return itemLayout + && area.boundingRect.contain(itemLayout[0], itemLayout[1]) + && contain$1(area.range, itemLayout[0], itemLayout[1]); + }, + rect: function (itemLayout, selectors, area) { + var points = area.range; + + if (!itemLayout || points.length <= 1) { + return false; + } + + var x = itemLayout.x; + var y = itemLayout.y; + var width = itemLayout.width; + var height = itemLayout.height; + var p = points[0]; + + if (contain$1(points, x, y) + || contain$1(points, x + width, y) + || contain$1(points, x, y + height) + || contain$1(points, x + width, y + height) + || BoundingRect.create(itemLayout).contain(p[0], p[1]) + || lineIntersectPolygon(x, y, x + width, y, points) + || lineIntersectPolygon(x, y, x, y + height, points) + || lineIntersectPolygon(x + width, y, x + width, y + height, points) + || lineIntersectPolygon(x, y + height, x + width, y + height, points) + ) { + return true; + } + } + } +}; + +function getLineSelectors(xyIndex) { + var xy = ['x', 'y']; + var wh = ['width', 'height']; + + return { + point: function (itemLayout, selectors, area) { + if (itemLayout) { + var range = area.range; + var p = itemLayout[xyIndex]; + return inLineRange(p, range); + } + }, + rect: function (itemLayout, selectors, area) { + if (itemLayout) { + var range = area.range; + var layoutRange = [ + itemLayout[xy[xyIndex]], + itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]] + ]; + layoutRange[1] < layoutRange[0] && layoutRange.reverse(); + return inLineRange(layoutRange[0], range) + || inLineRange(layoutRange[1], range) + || inLineRange(range[0], layoutRange) + || inLineRange(range[1], layoutRange); + } + } + }; +} + +function inLineRange(p, range) { + return range[0] <= p && p <= range[1]; +} + +function lineIntersectPolygon(lx, ly, l2x, l2y, points) { + for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) { + var p = points[i]; + if (lineIntersect(lx, ly, l2x, l2y, p[0], p[1], p2[0], p2[1])) { + return true; + } + p2 = p; + } +} + +// Code from with some fix. +// See +function lineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { + var delta = determinant(a2x - a1x, b1x - b2x, a2y - a1y, b1y - b2y); + if (nearZero(delta)) { // parallel + return false; + } + var namenda = determinant(b1x - a1x, b1x - b2x, b1y - a1y, b1y - b2y) / delta; + if (namenda < 0 || namenda > 1) { + return false; + } + var miu = determinant(a2x - a1x, b1x - a1x, a2y - a1y, b1y - a1y) / delta; + if (miu < 0 || miu > 1) { + return false; + } + return true; +} + +function nearZero(val) { + return val <= (1e-6) && val >= -(1e-6); +} + +function determinant(v1, v2, v3, v4) { + return v1 * v4 - v2 * v3; +} + +var each$23 = each$1; +var indexOf$2 = indexOf; +var curry$5 = curry; + +var COORD_CONVERTS = ['dataToPoint', 'pointToData']; + +// FIXME +// how to genarialize to more coordinate systems. +var INCLUDE_FINDER_MAIN_TYPES = [ + 'grid', 'xAxis', 'yAxis', 'geo', 'graph', + 'polar', 'radiusAxis', 'angleAxis', 'bmap' +]; + +/** + * [option in constructor]: + * { + * Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder. + * } + * + * + * [targetInfo]: + * + * There can be multiple axes in a single targetInfo. Consider the case + * of `grid` component, a targetInfo represents a grid which contains one or more + * cartesian and one or more axes. And consider the case of parallel system, + * which has multiple axes in a coordinate system. + * Can be { + * panelId: ..., + * coordSys: , + * coordSyses: all cartesians. + * gridModel: + * xAxes: correspond to coordSyses on index + * yAxes: correspond to coordSyses on index + * } + * or { + * panelId: ..., + * coordSys: + * coordSyses: [] + * geoModel: + * } + * + * + * [panelOpt]: + * + * Make from targetInfo. Input to BrushController. + * { + * panelId: ..., + * rect: ... + * } + * + * + * [area]: + * + * Generated by BrushController or user input. + * { + * panelId: Used to locate coordInfo directly. If user inpput, no panelId. + * brushType: determine how to convert to/from coord('rect' or 'polygon' or 'lineX/Y'). + * Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder. + * range: pixel range. + * coordRange: representitive coord range (the first one of coordRanges). + * coordRanges: coord ranges, used in multiple cartesian in one grid. + * } + */ + +/** + * @param {Object} option contains Index/Id/Name of xAxis/yAxis/geo/grid + * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]} + * @param {module:echarts/model/Global} ecModel + * @param {Object} [opt] + * @param {Array.} [opt.include] include coordinate system types. + */ +function BrushTargetManager(option, ecModel, opt) { + /** + * @private + * @type {Array.} + */ + var targetInfoList = this._targetInfoList = []; + var info = {}; + var foundCpts = parseFinder$1(ecModel, option); + + each$23(targetInfoBuilders, function (builder, type) { + if (!opt || !opt.include || indexOf$2(opt.include, type) >= 0) { + builder(foundCpts, targetInfoList, info); + } + }); +} + +var proto = BrushTargetManager.prototype; + +proto.setOutputRanges = function (areas, ecModel) { + this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) { + (area.coordRanges || (area.coordRanges = [])).push(coordRange); + // area.coordRange is the first of area.coordRanges + if (!area.coordRange) { + area.coordRange = coordRange; + // In 'category' axis, coord to pixel is not reversible, so we can not + // rebuild range by coordRange accrately, which may bring trouble when + // brushing only one item. So we use __rangeOffset to rebuilding range + // by coordRange. And this it only used in brush component so it is no + // need to be adapted to coordRanges. + var result = coordConvert[area.brushType](0, coordSys, coordRange); + area.__rangeOffset = { + offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]), + xyMinMax: result.xyMinMax + }; + } + }); +}; + +proto.matchOutputRanges = function (areas, ecModel, cb) { + each$23(areas, function (area) { + var targetInfo = this.findTargetInfo(area, ecModel); + + if (targetInfo && targetInfo !== true) { + each$1( + targetInfo.coordSyses, + function (coordSys) { + var result = coordConvert[area.brushType](1, coordSys, area.range); + cb(area, result.values, coordSys, ecModel); + } + ); + } + }, this); +}; + +proto.setInputRanges = function (areas, ecModel) { + each$23(areas, function (area) { + var targetInfo = this.findTargetInfo(area, ecModel); + + if (__DEV__) { + assert( + !targetInfo || targetInfo === true || area.coordRange, + 'coordRange must be specified when coord index specified.' + ); + assert( + !targetInfo || targetInfo !== true || area.range, + 'range must be specified in global brush.' + ); + } + + area.range = area.range || []; + + // convert coordRange to global range and set panelId. + if (targetInfo && targetInfo !== true) { + area.panelId = targetInfo.panelId; + // (1) area.range shoule always be calculate from coordRange but does + // not keep its original value, for the sake of the dataZoom scenario, + // where area.coordRange remains unchanged but area.range may be changed. + // (2) Only support converting one coordRange to pixel range in brush + // component. So do not consider `coordRanges`. + // (3) About __rangeOffset, see comment above. + var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange); + var rangeOffset = area.__rangeOffset; + area.range = rangeOffset + ? diffProcessor[area.brushType]( + result.values, + rangeOffset.offset, + getScales(result.xyMinMax, rangeOffset.xyMinMax) + ) + : result.values; + } + }, this); +}; + +proto.makePanelOpts = function (api, getDefaultBrushType) { + return map(this._targetInfoList, function (targetInfo) { + var rect = targetInfo.getPanelRect(); + return { + panelId: targetInfo.panelId, + defaultBrushType: getDefaultBrushType && getDefaultBrushType(targetInfo), + clipPath: makeRectPanelClipPath(rect), + isTargetByCursor: makeRectIsTargetByCursor( + rect, api, targetInfo.coordSysModel + ), + getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect) + }; + }); +}; + +proto.controlSeries = function (area, seriesModel, ecModel) { + // Check whether area is bound in coord, and series do not belong to that coord. + // If do not do this check, some brush (like lineX) will controll all axes. + var targetInfo = this.findTargetInfo(area, ecModel); + return targetInfo === true || ( + targetInfo && indexOf$2(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0 + ); +}; + +/** + * If return Object, a coord found. + * If reutrn true, global found. + * Otherwise nothing found. + * + * @param {Object} area + * @param {Array} targetInfoList + * @return {Object|boolean} + */ +proto.findTargetInfo = function (area, ecModel) { + var targetInfoList = this._targetInfoList; + var foundCpts = parseFinder$1(ecModel, area); + + for (var i = 0; i < targetInfoList.length; i++) { + var targetInfo = targetInfoList[i]; + var areaPanelId = area.panelId; + if (areaPanelId) { + if (targetInfo.panelId === areaPanelId) { + return targetInfo; + } + } + else { + for (var i = 0; i < targetInfoMatchers.length; i++) { + if (targetInfoMatchers[i](foundCpts, targetInfo)) { + return targetInfo; + } + } + } + } + + return true; +}; + +function formatMinMax(minMax) { + minMax[0] > minMax[1] && minMax.reverse(); + return minMax; +} + +function parseFinder$1(ecModel, option) { + return parseFinder( + ecModel, option, {includeMainTypes: INCLUDE_FINDER_MAIN_TYPES} + ); +} + +var targetInfoBuilders = { + + grid: function (foundCpts, targetInfoList) { + var xAxisModels = foundCpts.xAxisModels; + var yAxisModels = foundCpts.yAxisModels; + var gridModels = foundCpts.gridModels; + // Remove duplicated. + var gridModelMap = createHashMap(); + var xAxesHas = {}; + var yAxesHas = {}; + + if (!xAxisModels && !yAxisModels && !gridModels) { + return; + } + + each$23(xAxisModels, function (axisModel) { + var gridModel = axisModel.axis.grid.model; + gridModelMap.set(gridModel.id, gridModel); + xAxesHas[gridModel.id] = true; + }); + each$23(yAxisModels, function (axisModel) { + var gridModel = axisModel.axis.grid.model; + gridModelMap.set(gridModel.id, gridModel); + yAxesHas[gridModel.id] = true; + }); + each$23(gridModels, function (gridModel) { + gridModelMap.set(gridModel.id, gridModel); + xAxesHas[gridModel.id] = true; + yAxesHas[gridModel.id] = true; + }); + + gridModelMap.each(function (gridModel) { + var grid = gridModel.coordinateSystem; + var cartesians = []; + + each$23(grid.getCartesians(), function (cartesian, index) { + if (indexOf$2(xAxisModels, cartesian.getAxis('x').model) >= 0 + || indexOf$2(yAxisModels, cartesian.getAxis('y').model) >= 0 + ) { + cartesians.push(cartesian); + } + }); + targetInfoList.push({ + panelId: 'grid--' + gridModel.id, + gridModel: gridModel, + coordSysModel: gridModel, + // Use the first one as the representitive coordSys. + coordSys: cartesians[0], + coordSyses: cartesians, + getPanelRect: panelRectBuilder.grid, + xAxisDeclared: xAxesHas[gridModel.id], + yAxisDeclared: yAxesHas[gridModel.id] + }); + }); + }, + + geo: function (foundCpts, targetInfoList) { + each$23(foundCpts.geoModels, function (geoModel) { + var coordSys = geoModel.coordinateSystem; + targetInfoList.push({ + panelId: 'geo--' + geoModel.id, + geoModel: geoModel, + coordSysModel: geoModel, + coordSys: coordSys, + coordSyses: [coordSys], + getPanelRect: panelRectBuilder.geo + }); + }); + } +}; + +var targetInfoMatchers = [ + + // grid + function (foundCpts, targetInfo) { + var xAxisModel = foundCpts.xAxisModel; + var yAxisModel = foundCpts.yAxisModel; + var gridModel = foundCpts.gridModel; + + !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model); + !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model); + + return gridModel && gridModel === targetInfo.gridModel; + }, + + // geo + function (foundCpts, targetInfo) { + var geoModel = foundCpts.geoModel; + return geoModel && geoModel === targetInfo.geoModel; + } +]; + +var panelRectBuilder = { + + grid: function () { + // grid is not Transformable. + return this.coordSys.grid.getRect().clone(); + }, + + geo: function () { + var coordSys = this.coordSys; + var rect = coordSys.getBoundingRect().clone(); + // geo roam and zoom transform + rect.applyTransform(getTransform(coordSys)); + return rect; + } +}; + +var coordConvert = { + + lineX: curry$5(axisConvert, 0), + + lineY: curry$5(axisConvert, 1), + + rect: function (to, coordSys, rangeOrCoordRange) { + var xminymin = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]]); + var xmaxymax = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]]); + var values = [ + formatMinMax([xminymin[0], xmaxymax[0]]), + formatMinMax([xminymin[1], xmaxymax[1]]) + ]; + return {values: values, xyMinMax: values}; + }, + + polygon: function (to, coordSys, rangeOrCoordRange) { + var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]]; + var values = map(rangeOrCoordRange, function (item) { + var p = coordSys[COORD_CONVERTS[to]](item); + xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]); + xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]); + xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]); + xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]); + return p; + }); + return {values: values, xyMinMax: xyMinMax}; + } +}; + +function axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) { + if (__DEV__) { + assert( + coordSys.type === 'cartesian2d', + 'lineX/lineY brush is available only in cartesian2d.' + ); + } + + var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]); + var values = formatMinMax(map([0, 1], function (i) { + return to + ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i])) + : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i])); + })); + var xyMinMax = []; + xyMinMax[axisNameIndex] = values; + xyMinMax[1 - axisNameIndex] = [NaN, NaN]; + + return {values: values, xyMinMax: xyMinMax}; +} + +var diffProcessor = { + lineX: curry$5(axisDiffProcessor, 0), + + lineY: curry$5(axisDiffProcessor, 1), + + rect: function (values, refer, scales) { + return [ + [values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], + [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]] + ]; + }, + + polygon: function (values, refer, scales) { + return map(values, function (item, idx) { + return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]]; + }); + } +}; + +function axisDiffProcessor(axisNameIndex, values, refer, scales) { + return [ + values[0] - scales[axisNameIndex] * refer[0], + values[1] - scales[axisNameIndex] * refer[1] + ]; +} + +// We have to process scale caused by dataZoom manually, +// although it might be not accurate. +function getScales(xyMinMaxCurr, xyMinMaxOrigin) { + var sizeCurr = getSize(xyMinMaxCurr); + var sizeOrigin = getSize(xyMinMaxOrigin); + var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]]; + isNaN(scales[0]) && (scales[0] = 1); + isNaN(scales[1]) && (scales[1] = 1); + return scales; +} + +function getSize(xyMinMax) { + return xyMinMax + ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] + : [NaN, NaN]; +} + +var STATE_LIST = ['inBrush', 'outOfBrush']; +var DISPATCH_METHOD = '__ecBrushSelect'; +var DISPATCH_FLAG = '__ecInBrushSelectEvent'; +var PRIORITY_BRUSH = PRIORITY.VISUAL.BRUSH; + +/** + * Layout for visual, the priority higher than other layout, and before brush visual. + */ +registerLayout(PRIORITY_BRUSH, function (ecModel, api, payload) { + ecModel.eachComponent({mainType: 'brush'}, function (brushModel) { + + payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption( + payload.key === 'brush' ? payload.brushOption : {brushType: false} + ); + + var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel); + + brushTargetManager.setInputRanges(brushModel.areas, ecModel); + }); +}); + +/** + * Register the visual encoding if this modules required. + */ +registerVisual(PRIORITY_BRUSH, function (ecModel, api, payload) { + + var brushSelected = []; + var throttleType; + var throttleDelay; + + ecModel.eachComponent({mainType: 'brush'}, function (brushModel, brushIndex) { + + var thisBrushSelected = { + brushId: brushModel.id, + brushIndex: brushIndex, + brushName: brushModel.name, + areas: clone(brushModel.areas), + selected: [] + }; + // Every brush component exists in event params, convenient + // for user to find by index. + brushSelected.push(thisBrushSelected); + + var brushOption = brushModel.option; + var brushLink = brushOption.brushLink; + var linkedSeriesMap = []; + var selectedDataIndexForLink = []; + var rangeInfoBySeries = []; + var hasBrushExists = 0; + + if (!brushIndex) { // Only the first throttle setting works. + throttleType = brushOption.throttleType; + throttleDelay = brushOption.throttleDelay; + } + + // Add boundingRect and selectors to range. + var areas = map(brushModel.areas, function (area) { + return bindSelector( + defaults( + {boundingRect: boundingRectBuilders[area.brushType](area)}, + area + ) + ); + }); + + var visualMappings = createVisualMappings( + brushModel.option, STATE_LIST, function (mappingOption) { + mappingOption.mappingMethod = 'fixed'; + } + ); + + isArray(brushLink) && each$1(brushLink, function (seriesIndex) { + linkedSeriesMap[seriesIndex] = 1; + }); + + function linkOthers(seriesIndex) { + return brushLink === 'all' || linkedSeriesMap[seriesIndex]; + } + + // If no supported brush or no brush on the series, + // all visuals should be in original state. + function brushed(rangeInfoList) { + return !!rangeInfoList.length; + } + + /** + * Logic for each series: (If the logic has to be modified one day, do it carefully!) + * + * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers ) => StepA: ┬record, ┬ StepB: ┬visualByRecord. + * !brushed┘ ├hasBrushExist ┤ └nothing,┘ ├visualByRecord. + * └!hasBrushExist┘ └nothing. + * ( !brushed && ┬hasBrushExist ┬ && linkOthers ) => StepA: nothing, StepB: ┬visualByRecord. + * └!hasBrushExist┘ └nothing. + * ( brushed ┬ && !linkOthers ) => StepA: nothing, StepB: ┬visualByCheck. + * !brushed┘ └nothing. + * ( !brushed && !linkOthers ) => StepA: nothing, StepB: nothing. + */ + + // Step A + ecModel.eachSeries(function (seriesModel, seriesIndex) { + var rangeInfoList = rangeInfoBySeries[seriesIndex] = []; + + seriesModel.subType === 'parallel' + ? stepAParallel(seriesModel, seriesIndex, rangeInfoList) + : stepAOthers(seriesModel, seriesIndex, rangeInfoList); + }); + + function stepAParallel(seriesModel, seriesIndex) { + var coordSys = seriesModel.coordinateSystem; + hasBrushExists |= coordSys.hasAxisBrushed(); + + linkOthers(seriesIndex) && coordSys.eachActiveState( + seriesModel.getData(), + function (activeState, dataIndex) { + activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1); + } + ); + } + + function stepAOthers(seriesModel, seriesIndex, rangeInfoList) { + var selectorsByBrushType = getSelectorsByBrushType(seriesModel); + if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) { + return; + } + + each$1(areas, function (area) { + selectorsByBrushType[area.brushType] + && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel) + && rangeInfoList.push(area); + hasBrushExists |= brushed(rangeInfoList); + }); + + if (linkOthers(seriesIndex) && brushed(rangeInfoList)) { + var data = seriesModel.getData(); + data.each(function (dataIndex) { + if (checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)) { + selectedDataIndexForLink[dataIndex] = 1; + } + }); + } + } + + // Step B + ecModel.eachSeries(function (seriesModel, seriesIndex) { + var seriesBrushSelected = { + seriesId: seriesModel.id, + seriesIndex: seriesIndex, + seriesName: seriesModel.name, + dataIndex: [] + }; + // Every series exists in event params, convenient + // for user to find series by seriesIndex. + thisBrushSelected.selected.push(seriesBrushSelected); + + var selectorsByBrushType = getSelectorsByBrushType(seriesModel); + var rangeInfoList = rangeInfoBySeries[seriesIndex]; + + var data = seriesModel.getData(); + var getValueState = linkOthers(seriesIndex) + ? function (dataIndex) { + return selectedDataIndexForLink[dataIndex] + ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') + : 'outOfBrush'; + } + : function (dataIndex) { + return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) + ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') + : 'outOfBrush'; + }; + + // If no supported brush or no brush, all visuals are in original state. + (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) + && applyVisual( + STATE_LIST, visualMappings, data, getValueState + ); + }); + + }); + + dispatchAction(api, throttleType, throttleDelay, brushSelected, payload); +}); + +function dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) { + // This event will not be triggered when `setOpion`, otherwise dead lock may + // triggered when do `setOption` in event listener, which we do not find + // satisfactory way to solve yet. Some considered resolutions: + // (a) Diff with prevoius selected data ant only trigger event when changed. + // But store previous data and diff precisely (i.e., not only by dataIndex, but + // also detect value changes in selected data) might bring complexity or fragility. + // (b) Use spectial param like `silent` to suppress event triggering. + // But such kind of volatile param may be weird in `setOption`. + if (!payload) { + return; + } + + var zr = api.getZr(); + if (zr[DISPATCH_FLAG]) { + return; + } + + if (!zr[DISPATCH_METHOD]) { + zr[DISPATCH_METHOD] = doDispatch; + } + + var fn = createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType); + + fn(api, brushSelected); +} + +function doDispatch(api, brushSelected) { + if (!api.isDisposed()) { + var zr = api.getZr(); + zr[DISPATCH_FLAG] = true; + api.dispatchAction({ + type: 'brushSelect', + batch: brushSelected + }); + zr[DISPATCH_FLAG] = false; + } +} + +function checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) { + for (var i = 0, len = rangeInfoList.length; i < len; i++) { + var area = rangeInfoList[i]; + if (selectorsByBrushType[area.brushType]( + dataIndex, data, area.selectors, area + )) { + return true; + } + } +} + +function getSelectorsByBrushType(seriesModel) { + var brushSelector = seriesModel.brushSelector; + if (isString(brushSelector)) { + var sels = []; + each$1(selector, function (selectorsByElementType, brushType) { + sels[brushType] = function (dataIndex, data, selectors, area) { + var itemLayout = data.getItemLayout(dataIndex); + return selectorsByElementType[brushSelector](itemLayout, selectors, area); + }; + }); + return sels; + } + else if (isFunction(brushSelector)) { + var bSelector = {}; + each$1(selector, function (sel, brushType) { + bSelector[brushType] = brushSelector; + }); + return bSelector; + } + return brushSelector; +} + +function brushModelNotControll(brushModel, seriesIndex) { + var seriesIndices = brushModel.option.seriesIndex; + return seriesIndices != null + && seriesIndices !== 'all' + && ( + isArray(seriesIndices) + ? indexOf(seriesIndices, seriesIndex) < 0 + : seriesIndex !== seriesIndices + ); +} + +function bindSelector(area) { + var selectors = area.selectors = {}; + each$1(selector[area.brushType], function (selFn, elType) { + // Do not use function binding or curry for performance. + selectors[elType] = function (itemLayout) { + return selFn(itemLayout, selectors, area); + }; + }); + return area; +} + +var boundingRectBuilders = { + + lineX: noop, + + lineY: noop, + + rect: function (area) { + return getBoundingRectFromMinMax(area.range); + }, + + polygon: function (area) { + var minMax; + var range = area.range; + + for (var i = 0, len = range.length; i < len; i++) { + minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]]; + var rg = range[i]; + rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]); + rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]); + rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]); + rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]); + } + + return minMax && getBoundingRectFromMinMax(minMax); + } +}; + +function getBoundingRectFromMinMax(minMax) { + return new BoundingRect( + minMax[0][0], + minMax[1][0], + minMax[0][1] - minMax[0][0], + minMax[1][1] - minMax[1][0] + ); +} + +var DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd']; + +var BrushModel = extendComponentModel({ + + type: 'brush', + + dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'], + + /** + * @protected + */ + defaultOption: { + // inBrush: null, + // outOfBrush: null, + toolbox: null, // Default value see preprocessor. + brushLink: null, // Series indices array, broadcast using dataIndex. + // or 'all', which means all series. 'none' or null means no series. + seriesIndex: 'all', // seriesIndex array, specify series controlled by this brush component. + geoIndex: null, // + xAxisIndex: null, + yAxisIndex: null, + + brushType: 'rect', // Default brushType, see BrushController. + brushMode: 'single', // Default brushMode, 'single' or 'multiple' + transformable: true, // Default transformable. + brushStyle: { // Default brushStyle + borderWidth: 1, + color: 'rgba(120,140,180,0.3)', + borderColor: 'rgba(120,140,180,0.8)' + }, + + throttleType: 'fixRate',// Throttle in brushSelected event. 'fixRate' or 'debounce'. + // If null, no throttle. Valid only in the first brush component + throttleDelay: 0, // Unit: ms, 0 means every event will be triggered. + + // FIXME + // 试验效果 + removeOnClick: true, + + z: 10000 + }, + + /** + * @readOnly + * @type {Array.} + */ + areas: [], + + /** + * Current activated brush type. + * If null, brush is inactived. + * see module:echarts/component/helper/BrushController + * @readOnly + * @type {string} + */ + brushType: null, + + /** + * Current brush opt. + * see module:echarts/component/helper/BrushController + * @readOnly + * @type {Object} + */ + brushOption: {}, + + /** + * @readOnly + * @type {Array.} + */ + coordInfoList: [], + + optionUpdated: function (newOption, isInit) { + var thisOption = this.option; + + !isInit && replaceVisualOption( + thisOption, newOption, ['inBrush', 'outOfBrush'] + ); + + thisOption.inBrush = thisOption.inBrush || {}; + // Always give default visual, consider setOption at the second time. + thisOption.outOfBrush = thisOption.outOfBrush || {color: DEFAULT_OUT_OF_BRUSH_COLOR}; + }, + + /** + * If ranges is null/undefined, range state remain. + * + * @param {Array.} [ranges] + */ + setAreas: function (areas) { + if (__DEV__) { + assert(isArray(areas)); + each$1(areas, function (area) { + assert(area.brushType, 'Illegal areas'); + }); + } + + // If ranges is null/undefined, range state remain. + // This helps user to dispatchAction({type: 'brush'}) with no areas + // set but just want to get the current brush select info from a `brush` event. + if (!areas) { + return; + } + + this.areas = map(areas, function (area) { + return generateBrushOption(this.option, area); + }, this); + }, + + /** + * see module:echarts/component/helper/BrushController + * @param {Object} brushOption + */ + setBrushOption: function (brushOption) { + this.brushOption = generateBrushOption(this.option, brushOption); + this.brushType = this.brushOption.brushType; + } + +}); + +function generateBrushOption(option, brushOption) { + return merge( + { + brushType: option.brushType, + brushMode: option.brushMode, + transformable: option.transformable, + brushStyle: new Model(option.brushStyle).getItemStyle(), + removeOnClick: option.removeOnClick, + z: option.z + }, + brushOption, + true + ); +} + +extendComponentView({ + + type: 'brush', + + init: function (ecModel, api) { + + /** + * @readOnly + * @type {module:echarts/model/Global} + */ + this.ecModel = ecModel; + + /** + * @readOnly + * @type {module:echarts/ExtensionAPI} + */ + this.api = api; + + /** + * @readOnly + * @type {module:echarts/component/brush/BrushModel} + */ + this.model; + + /** + * @private + * @type {module:echarts/component/helper/BrushController} + */ + (this._brushController = new BrushController(api.getZr())) + .on('brush', bind(this._onBrush, this)) + .mount(); + }, + + /** + * @override + */ + render: function (brushModel) { + this.model = brushModel; + return updateController.apply(this, arguments); + }, + + /** + * @override + */ + updateView: updateController, + + /** + * @override + */ + updateLayout: updateController, + + /** + * @override + */ + updateVisual: updateController, + + /** + * @override + */ + dispose: function () { + this._brushController.dispose(); + }, + + /** + * @private + */ + _onBrush: function (areas, opt) { + var modelId = this.model.id; + + this.model.brushTargetManager.setOutputRanges(areas, this.ecModel); + + // Action is not dispatched on drag end, because the drag end + // emits the same params with the last drag move event, and + // may have some delay when using touch pad, which makes + // animation not smooth (when using debounce). + (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({ + type: 'brush', + brushId: modelId, + areas: clone(areas), + $from: modelId + }); + } + +}); + +function updateController(brushModel, ecModel, api, payload) { + // Do not update controller when drawing. + (!payload || payload.$from !== brushModel.id) && this._brushController + .setPanels(brushModel.brushTargetManager.makePanelOpts(api)) + .enableBrush(brushModel.brushOption) + .updateCovers(brushModel.areas.slice()); +} + +/** + * payload: { + * brushIndex: number, or, + * brushId: string, or, + * brushName: string, + * globalRanges: Array + * } + */ +registerAction( + {type: 'brush', event: 'brush', update: 'updateView'}, + function (payload, ecModel) { + ecModel.eachComponent({mainType: 'brush', query: payload}, function (brushModel) { + brushModel.setAreas(payload.areas); + }); + } +); + +/** + * payload: { + * brushComponents: [ + * { + * brushId, + * brushIndex, + * brushName, + * series: [ + * { + * seriesId, + * seriesIndex, + * seriesName, + * rawIndices: [21, 34, ...] + * }, + * ... + * ] + * }, + * ... + * ] + * } + */ +registerAction( + {type: 'brushSelect', event: 'brushSelected', update: 'none'}, + function () {} +); + +var features = {}; + +function register$1(name, ctor) { + features[name] = ctor; +} + +function get$5(name) { + return features[name]; +} + +var lang = { + toolbox: { + brush: { + title: { + rect: '矩形选择', + polygon: '圈选', + lineX: '横向选择', + lineY: '纵向选择', + keep: '保持选择', + clear: '清除选择' + } + }, + dataView: { + title: '数据视图', + lang: ['数据视图', '关闭', '刷新'] + }, + dataZoom: { + title: { + zoom: '区域缩放', + back: '区域缩放还原' + } + }, + magicType: { + title: { + line: '切换为折线图', + bar: '切换为柱状图', + stack: '切换为堆叠', + tiled: '切换为平铺' + } + }, + restore: { + title: '还原' + }, + saveAsImage: { + title: '保存为图片', + lang: ['右键另存为图片'] + } + } +}; + +var brushLang = lang.toolbox.brush; + +function Brush(model, ecModel, api) { + this.model = model; + this.ecModel = ecModel; + this.api = api; + + /** + * @private + * @type {string} + */ + this._brushType; + + /** + * @private + * @type {string} + */ + this._brushMode; +} + +Brush.defaultOption = { + show: true, + type: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'], + icon: { + rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', // jshint ignore:line + polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', // jshint ignore:line + lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', // jshint ignore:line + lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', // jshint ignore:line + keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', // jshint ignore:line + clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line + }, + // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear` + title: clone(brushLang.title) +}; + +var proto$1 = Brush.prototype; + +proto$1.render = +proto$1.updateView = +proto$1.updateLayout = function (featureModel, ecModel, api) { + var brushType; + var brushMode; + var isBrushed; + + ecModel.eachComponent({mainType: 'brush'}, function (brushModel) { + brushType = brushModel.brushType; + brushMode = brushModel.brushOption.brushMode || 'single'; + isBrushed |= brushModel.areas.length; + }); + this._brushType = brushType; + this._brushMode = brushMode; + + each$1(featureModel.get('type', true), function (type) { + featureModel.setIconStatus( + type, + ( + type === 'keep' + ? brushMode === 'multiple' + : type === 'clear' + ? isBrushed + : type === brushType + ) ? 'emphasis' : 'normal' + ); + }); +}; + +proto$1.getIcons = function () { + var model = this.model; + var availableIcons = model.get('icon', true); + var icons = {}; + each$1(model.get('type', true), function (type) { + if (availableIcons[type]) { + icons[type] = availableIcons[type]; + } + }); + return icons; +}; + +proto$1.onclick = function (ecModel, api, type) { + var brushType = this._brushType; + var brushMode = this._brushMode; + + if (type === 'clear') { + // Trigger parallel action firstly + api.dispatchAction({ + type: 'axisAreaSelect', + intervals: [] + }); + + api.dispatchAction({ + type: 'brush', + command: 'clear', + // Clear all areas of all brush components. + areas: [] + }); + } + else { + api.dispatchAction({ + type: 'takeGlobalCursor', + key: 'brush', + brushOption: { + brushType: type === 'keep' + ? brushType + : (brushType === type ? false : type), + brushMode: type === 'keep' + ? (brushMode === 'multiple' ? 'single' : 'multiple') + : brushMode + } + }); + } +}; + +register$1('brush', Brush); + +/** + * Brush component entry + */ + +registerPreprocessor(preprocessor$1); + +// (24*60*60*1000) +var PROXIMATE_ONE_DAY = 86400000; + +/** + * Calendar + * + * @constructor + * + * @param {Object} calendarModel calendarModel + * @param {Object} ecModel ecModel + * @param {Object} api api + */ +function Calendar(calendarModel, ecModel, api) { + this._model = calendarModel; +} + +Calendar.prototype = { + + constructor: Calendar, + + type: 'calendar', + + dimensions: ['time', 'value'], + + // Required in createListFromData + getDimensionsInfo: function () { + return [{name: 'time', type: 'time'}]; + }, + + getRangeInfo: function () { + return this._rangeInfo; + }, + + getModel: function () { + return this._model; + }, + + getRect: function () { + return this._rect; + }, + + getCellWidth: function () { + return this._sw; + }, + + getCellHeight: function () { + return this._sh; + }, + + getOrient: function () { + return this._orient; + }, + + /** + * getFirstDayOfWeek + * + * @example + * 0 : start at Sunday + * 1 : start at Monday + * + * @return {number} + */ + getFirstDayOfWeek: function () { + return this._firstDayOfWeek; + }, + + /** + * get date info + * + * @param {string|number} date date + * @return {Object} + * { + * y: string, local full year, eg., '1940', + * m: string, local month, from '01' ot '12', + * d: string, local date, from '01' to '31' (if exists), + * day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6, + * time: timestamp, + * formatedDate: string, yyyy-MM-dd, + * date: original date object. + * } + */ + getDateInfo: function (date) { + + date = parseDate(date); + + var y = date.getFullYear(); + + var m = date.getMonth() + 1; + m = m < 10 ? '0' + m : m; + + var d = date.getDate(); + d = d < 10 ? '0' + d : d; + + var day = date.getDay(); + + day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7); + + return { + y: y, + m: m, + d: d, + day: day, + time: date.getTime(), + formatedDate: y + '-' + m + '-' + d, + date: date + }; + }, + + getNextNDay: function (date, n) { + n = n || 0; + if (n === 0) { + return this.getDateInfo(date); + } + + date = new Date(this.getDateInfo(date).time); + date.setDate(date.getDate() + n); + + return this.getDateInfo(date); + }, + + update: function (ecModel, api) { + + this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay'); + this._orient = this._model.get('orient'); + this._lineWidth = this._model.getModel('itemStyle.normal').getItemStyle().lineWidth || 0; + + + this._rangeInfo = this._getRangeInfo(this._initRangeOption()); + var weeks = this._rangeInfo.weeks || 1; + var whNames = ['width', 'height']; + var cellSize = this._model.get('cellSize').slice(); + var layoutParams = this._model.getBoxLayoutParams(); + var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks]; + + each$1([0, 1], function (idx) { + if (cellSizeSpecified(cellSize, idx)) { + layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx]; + } + }); + + var whGlobal = { + width: api.getWidth(), + height: api.getHeight() + }; + var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal); + + each$1([0, 1], function (idx) { + if (!cellSizeSpecified(cellSize, idx)) { + cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx]; + } + }); + + function cellSizeSpecified(cellSize, idx) { + return cellSize[idx] != null && cellSize[idx] !== 'auto'; + } + + this._sw = cellSize[0]; + this._sh = cellSize[1]; + }, + + + /** + * Convert a time data(time, value) item to (x, y) point. + * + * @override + * @param {Array|number} data data + * @param {boolean} [clamp=true] out of range + * @return {Array} point + */ + dataToPoint: function (data, clamp) { + isArray(data) && (data = data[0]); + clamp == null && (clamp = true); + + var dayInfo = this.getDateInfo(data); + var range = this._rangeInfo; + var date = dayInfo.formatedDate; + + // if not in range return [NaN, NaN] + if (clamp && !(dayInfo.time >= range.start.time && dayInfo.time <= range.end.time)) { + return [NaN, NaN]; + } + + var week = dayInfo.day; + var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek; + + if (this._orient === 'vertical') { + return [ + this._rect.x + week * this._sw + this._sw / 2, + this._rect.y + nthWeek * this._sh + this._sh / 2 + ]; + + } + + return [ + this._rect.x + nthWeek * this._sw + this._sw / 2, + this._rect.y + week * this._sh + this._sh / 2 + ]; + + }, + + /** + * Convert a (x, y) point to time data + * + * @override + * @param {string} point point + * @return {string} data + */ + pointToData: function (point) { + + var date = this.pointToDate(point); + + return date && date.time; + }, + + /** + * Convert a time date item to (x, y) four point. + * + * @param {Array} data date[0] is date + * @param {boolean} [clamp=true] out of range + * @return {Object} point + */ + dataToRect: function (data, clamp) { + var point = this.dataToPoint(data, clamp); + + return { + contentShape: { + x: point[0] - (this._sw - this._lineWidth) / 2, + y: point[1] - (this._sh - this._lineWidth) / 2, + width: this._sw - this._lineWidth, + height: this._sh - this._lineWidth + }, + + center: point, + + tl: [ + point[0] - this._sw / 2, + point[1] - this._sh / 2 + ], + + tr: [ + point[0] + this._sw / 2, + point[1] - this._sh / 2 + ], + + br: [ + point[0] + this._sw / 2, + point[1] + this._sh / 2 + ], + + bl: [ + point[0] - this._sw / 2, + point[1] + this._sh / 2 + ] + + }; + }, + + /** + * Convert a (x, y) point to time date + * + * @param {Array} point point + * @return {Object} date + */ + pointToDate: function (point) { + var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1; + var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1; + var range = this._rangeInfo.range; + + if (this._orient === 'vertical') { + return this._getDateByWeeksAndDay(nthY, nthX - 1, range); + } + + return this._getDateByWeeksAndDay(nthX, nthY - 1, range); + }, + + /** + * @inheritDoc + */ + convertToPixel: curry(doConvert$2, 'dataToPoint'), + + /** + * @inheritDoc + */ + convertFromPixel: curry(doConvert$2, 'pointToData'), + + /** + * initRange + * + * @private + * @return {Array} [start, end] + */ + _initRangeOption: function () { + var range = this._model.get('range'); + + var rg = range; + + if (isArray(rg) && rg.length === 1) { + rg = rg[0]; + } + + if (/^\d{4}$/.test(rg)) { + range = [rg + '-01-01', rg + '-12-31']; + } + + if (/^\d{4}[\/|-]\d{1,2}$/.test(rg)) { + + var start = this.getDateInfo(rg); + var firstDay = start.date; + firstDay.setMonth(firstDay.getMonth() + 1); + + var end = this.getNextNDay(firstDay, -1); + range = [start.formatedDate, end.formatedDate]; + } + + if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rg)) { + range = [rg, rg]; + } + + var tmp = this._getRangeInfo(range); + + if (tmp.start.time > tmp.end.time) { + range.reverse(); + } + + return range; + }, + + /** + * range info + * + * @private + * @param {Array} range range ['2017-01-01', '2017-07-08'] + * If range[0] > range[1], they will not be reversed. + * @return {Object} obj + */ + _getRangeInfo: function (range) { + range = [ + this.getDateInfo(range[0]), + this.getDateInfo(range[1]) + ]; + + var reversed; + if (range[0].time > range[1].time) { + reversed = true; + range.reverse(); + } + + var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY) + - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1; + + // Consider case: + // Firstly set system timezone as "Time Zone: America/Toronto", + // ``` + // var first = new Date(1478412000000 - 3600 * 1000 * 2.5); + // var second = new Date(1478412000000); + // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1; + // ``` + // will get wrong result because of DST. So we should fix it. + var date = new Date(range[0].time); + var startDateNum = date.getDate(); + var endDateNum = range[1].date.getDate(); + date.setDate(startDateNum + allDay - 1); + // The bias can not over a month, so just compare date. + if (date.getDate() !== endDateNum) { + var sign = date.getTime() - range[1].time > 0 ? 1 : -1; + while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) { + allDay -= sign; + date.setDate(startDateNum + allDay - 1); + } + } + + var weeks = Math.floor((allDay + range[0].day + 6) / 7); + var nthWeek = reversed ? -weeks + 1: weeks - 1; + + reversed && range.reverse(); + + return { + range: [range[0].formatedDate, range[1].formatedDate], + start: range[0], + end: range[1], + allDay: allDay, + weeks: weeks, + // From 0. + nthWeek: nthWeek, + fweek: range[0].day, + lweek: range[1].day + }; + }, + + /** + * get date by nthWeeks and week day in range + * + * @private + * @param {number} nthWeek the week + * @param {number} day the week day + * @param {Array} range [d1, d2] + * @return {Object} + */ + _getDateByWeeksAndDay: function (nthWeek, day, range) { + var rangeInfo = this._getRangeInfo(range); + + if (nthWeek > rangeInfo.weeks + || (nthWeek === 0 && day < rangeInfo.fweek) + || (nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) + ) { + return false; + } + + var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day; + var date = new Date(rangeInfo.start.time); + date.setDate(rangeInfo.start.d + nthDay); + + return this.getDateInfo(date); + } +}; + +Calendar.dimensions = Calendar.prototype.dimensions; + +Calendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo; + +Calendar.create = function (ecModel, api) { + var calendarList = []; + + ecModel.eachComponent('calendar', function (calendarModel) { + var calendar = new Calendar(calendarModel, ecModel, api); + calendarList.push(calendar); + calendarModel.coordinateSystem = calendar; + }); + + ecModel.eachSeries(function (calendarSeries) { + if (calendarSeries.get('coordinateSystem') === 'calendar') { + // Inject coordinate system + calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0]; + } + }); + return calendarList; +}; + +function doConvert$2(methodName, ecModel, finder, value) { + var calendarModel = finder.calendarModel; + var seriesModel = finder.seriesModel; + + var coordSys = calendarModel + ? calendarModel.coordinateSystem + : seriesModel + ? seriesModel.coordinateSystem + : null; + + return coordSys === this ? coordSys[methodName](value) : null; +} + +CoordinateSystemManager.register('calendar', Calendar); + +var CalendarModel = ComponentModel.extend({ + + type: 'calendar', + + /** + * @type {module:echarts/coord/calendar/Calendar} + */ + coordinateSystem: null, + + defaultOption: { + zlevel: 0, + z: 2, + left: 80, + top: 60, + + cellSize: 20, + + // horizontal vertical + orient: 'horizontal', + + // month separate line style + splitLine: { + show: true, + lineStyle: { + color: '#000', + width: 1, + type: 'solid' + } + }, + + // rect style temporarily unused emphasis + itemStyle: { + normal: { + color: '#fff', + borderWidth: 1, + borderColor: '#ccc' + } + }, + + // week text style + dayLabel: { + show: true, + + // a week first day + firstDay: 0, + + // start end + position: 'start', + margin: '50%', // 50% of cellSize + nameMap: 'en', + color: '#000' + }, + + // month text style + monthLabel: { + show: true, + + // start end + position: 'start', + margin: 5, + + // center or left + align: 'center', + + // cn en [] + nameMap: 'en', + formatter: null, + color: '#000' + }, + + // year text style + yearLabel: { + show: true, + + // top bottom left right + position: null, + margin: 30, + formatter: null, + color: '#ccc', + fontFamily: 'sans-serif', + fontWeight: 'bolder', + fontSize: 20 + } + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel, extraOpt) { + var inputPositionParams = getLayoutParams(option); + + CalendarModel.superApply(this, 'init', arguments); + + mergeAndNormalizeLayoutParams$1(option, inputPositionParams); + }, + + /** + * @override + */ + mergeOption: function (option, extraOpt) { + CalendarModel.superApply(this, 'mergeOption', arguments); + + mergeAndNormalizeLayoutParams$1(this.option, option); + } +}); + +function mergeAndNormalizeLayoutParams$1(target, raw) { + // Normalize cellSize + var cellSize = target.cellSize; + + if (!isArray(cellSize)) { + cellSize = target.cellSize = [cellSize, cellSize]; + } + else if (cellSize.length === 1) { + cellSize[1] = cellSize[0]; + } + + var ignoreSize = map([0, 1], function (hvIdx) { + // If user have set `width` or both `left` and `right`, cellSize + // will be automatically set to 'auto', otherwise the default + // setting of cellSize will make `width` setting not work. + if (sizeCalculable(raw, hvIdx)) { + cellSize[hvIdx] = 'auto'; + } + return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto'; + }); + + mergeLayoutParam(target, raw, { + type: 'box', ignoreSize: ignoreSize + }); +} + +var MONTH_TEXT = { + EN: [ + 'Jan', 'Feb', 'Mar', + 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec' + ], + CN: [ + '一月', '二月', '三月', + '四月', '五月', '六月', + '七月', '八月', '九月', + '十月', '十一月', '十二月' + ] +}; + +var WEEK_TEXT = { + EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], + CN: ['日', '一', '二', '三', '四', '五', '六'] +}; + +extendComponentView({ + + type: 'calendar', + + /** + * top/left line points + * @private + */ + _tlpoints: null, + + /** + * bottom/right line points + * @private + */ + _blpoints: null, + + /** + * first day of month + * @private + */ + _firstDayOfMonth: null, + + /** + * first day point of month + * @private + */ + _firstDayPoints: null, + + render: function (calendarModel, ecModel, api) { + + var group = this.group; + + group.removeAll(); + + var coordSys = calendarModel.coordinateSystem; + + // range info + var rangeData = coordSys.getRangeInfo(); + var orient = coordSys.getOrient(); + + this._renderDayRect(calendarModel, rangeData, group); + + // _renderLines must be called prior to following function + this._renderLines(calendarModel, rangeData, orient, group); + + this._renderYearText(calendarModel, rangeData, orient, group); + + this._renderMonthText(calendarModel, orient, group); + + this._renderWeekText(calendarModel, rangeData, orient, group); + }, + + // render day rect + _renderDayRect: function (calendarModel, rangeData, group) { + var coordSys = calendarModel.coordinateSystem; + var itemRectStyleModel = calendarModel.getModel('itemStyle.normal').getItemStyle(); + var sw = coordSys.getCellWidth(); + var sh = coordSys.getCellHeight(); + + for (var i = rangeData.start.time; + i <= rangeData.end.time; + i = coordSys.getNextNDay(i, 1).time + ) { + + var point = coordSys.dataToRect([i], false).tl; + + // every rect + var rect = new Rect({ + shape: { + x: point[0], + y: point[1], + width: sw, + height: sh + }, + cursor: 'default', + style: itemRectStyleModel + }); + + group.add(rect); + } + + }, + + // render separate line + _renderLines: function (calendarModel, rangeData, orient, group) { + + var self = this; + + var coordSys = calendarModel.coordinateSystem; + + var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle(); + var show = calendarModel.get('splitLine.show'); + + var lineWidth = lineStyleModel.lineWidth; + + this._tlpoints = []; + this._blpoints = []; + this._firstDayOfMonth = []; + this._firstDayPoints = []; + + + var firstDay = rangeData.start; + + for (var i = 0; firstDay.time <= rangeData.end.time; i++) { + addPoints(firstDay.formatedDate); + + if (i === 0) { + firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m); + } + + var date = firstDay.date; + date.setMonth(date.getMonth() + 1); + firstDay = coordSys.getDateInfo(date); + } + + addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate); + + function addPoints(date) { + + self._firstDayOfMonth.push(coordSys.getDateInfo(date)); + self._firstDayPoints.push(coordSys.dataToRect([date], false).tl); + + var points = self._getLinePointsOfOneWeek(calendarModel, date, orient); + + self._tlpoints.push(points[0]); + self._blpoints.push(points[points.length - 1]); + + show && self._drawSplitline(points, lineStyleModel, group); + } + + + // render top/left line + show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); + + // render bottom/right line + show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group); + + }, + + // get points at both ends + _getEdgesPoints: function (points, lineWidth, orient) { + var rs = [points[0].slice(), points[points.length - 1].slice()]; + var idx = orient === 'horizontal' ? 0 : 1; + + // both ends of the line are extend half lineWidth + rs[0][idx] = rs[0][idx] - lineWidth / 2; + rs[1][idx] = rs[1][idx] + lineWidth / 2; + + return rs; + }, + + // render split line + _drawSplitline: function (points, lineStyleModel, group) { + + var poyline = new Polyline({ + z2: 20, + shape: { + points: points + }, + style: lineStyleModel + }); + + group.add(poyline); + }, + + // render month line of one week points + _getLinePointsOfOneWeek: function (calendarModel, date, orient) { + + var coordSys = calendarModel.coordinateSystem; + date = coordSys.getDateInfo(date); + + var points = []; + + for (var i = 0; i < 7; i++) { + + var tmpD = coordSys.getNextNDay(date.time, i); + var point = coordSys.dataToRect([tmpD.time], false); + + points[2 * tmpD.day] = point.tl; + points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr']; + } + + return points; + + }, + + _formatterLabel: function (formatter, params) { + + if (typeof formatter === 'string' && formatter) { + return formatTplSimple(formatter, params); + } + + if (typeof formatter === 'function') { + return formatter(params); + } + + return params.nameMap; + + }, + + _yearTextPositionControl: function (textEl, point, orient, position, margin) { + + point = point.slice(); + var aligns = ['center', 'bottom']; + + if (position === 'bottom') { + point[1] += margin; + aligns = ['center', 'top']; + } + else if (position === 'left') { + point[0] -= margin; + } + else if (position === 'right') { + point[0] += margin; + aligns = ['center', 'top']; + } + else { // top + point[1] -= margin; + } + + var rotate = 0; + if (position === 'left' || position === 'right') { + rotate = Math.PI / 2; + } + + return { + rotation: rotate, + position: point, + style: { + textAlign: aligns[0], + textVerticalAlign: aligns[1] + } + }; + }, + + // render year + _renderYearText: function (calendarModel, rangeData, orient, group) { + var yearLabel = calendarModel.getModel('yearLabel'); + + if (!yearLabel.get('show')) { + return; + } + + var margin = yearLabel.get('margin'); + var pos = yearLabel.get('position'); + + if (!pos) { + pos = orient !== 'horizontal' ? 'top' : 'left'; + } + + var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]]; + var xc = (points[0][0] + points[1][0]) / 2; + var yc = (points[0][1] + points[1][1]) / 2; + + var idx = orient === 'horizontal' ? 0 : 1; + + var posPoints = { + top: [xc, points[idx][1]], + bottom: [xc, points[1 - idx][1]], + left: [points[1 - idx][0], yc], + right: [points[idx][0], yc] + }; + + var name = rangeData.start.y; + + if (+rangeData.end.y > +rangeData.start.y) { + name = name + '-' + rangeData.end.y; + } + + var formatter = yearLabel.get('formatter'); + + var params = { + start: rangeData.start.y, + end: rangeData.end.y, + nameMap: name + }; + + var content = this._formatterLabel(formatter, params); + + var yearText = new Text({z2: 30}); + setTextStyle(yearText.style, yearLabel, {text: content}), + yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin)); + + group.add(yearText); + }, + + _monthTextPositionControl: function (point, isCenter, orient, position, margin) { + var align = 'left'; + var vAlign = 'top'; + var x = point[0]; + var y = point[1]; + + if (orient === 'horizontal') { + y = y + margin; + + if (isCenter) { + align = 'center'; + } + + if (position === 'start') { + vAlign = 'bottom'; + } + } + else { + x = x + margin; + + if (isCenter) { + vAlign = 'middle'; + } + + if (position === 'start') { + align = 'right'; + } + } + + return { + x: x, + y: y, + textAlign: align, + textVerticalAlign: vAlign + }; + }, + + // render month and year text + _renderMonthText: function (calendarModel, orient, group) { + var monthLabel = calendarModel.getModel('monthLabel'); + + if (!monthLabel.get('show')) { + return; + } + + var nameMap = monthLabel.get('nameMap'); + var margin = monthLabel.get('margin'); + var pos = monthLabel.get('position'); + var align = monthLabel.get('align'); + + var termPoints = [this._tlpoints, this._blpoints]; + + if (isString(nameMap)) { + nameMap = MONTH_TEXT[nameMap.toUpperCase()] || []; + } + + var idx = pos === 'start' ? 0 : 1; + var axis = orient === 'horizontal' ? 0 : 1; + margin = pos === 'start' ? -margin : margin; + var isCenter = (align === 'center'); + + for (var i = 0; i < termPoints[idx].length - 1; i++) { + + var tmp = termPoints[idx][i].slice(); + var firstDay = this._firstDayOfMonth[i]; + + if (isCenter) { + var firstDayPoints = this._firstDayPoints[i]; + tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2; + } + + var formatter = monthLabel.get('formatter'); + var name = nameMap[+firstDay.m - 1]; + var params = { + yyyy: firstDay.y, + yy: (firstDay.y + '').slice(2), + MM: firstDay.m, + M: +firstDay.m, + nameMap: name + }; + + var content = this._formatterLabel(formatter, params); + + var monthText = new Text({z2: 30}); + extend( + setTextStyle(monthText.style, monthLabel, {text: content}), + this._monthTextPositionControl(tmp, isCenter, orient, pos, margin) + ); + + group.add(monthText); + } + }, + + _weekTextPositionControl: function (point, orient, position, margin, cellSize) { + var align = 'center'; + var vAlign = 'middle'; + var x = point[0]; + var y = point[1]; + var isStart = position === 'start'; + + if (orient === 'horizontal') { + x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2; + align = isStart ? 'right' : 'left'; + } + else { + y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2; + vAlign = isStart ? 'bottom' : 'top'; + } + + return { + x: x, + y: y, + textAlign: align, + textVerticalAlign: vAlign + }; + }, + + // render weeks + _renderWeekText: function (calendarModel, rangeData, orient, group) { + var dayLabel = calendarModel.getModel('dayLabel'); + + if (!dayLabel.get('show')) { + return; + } + + var coordSys = calendarModel.coordinateSystem; + var pos = dayLabel.get('position'); + var nameMap = dayLabel.get('nameMap'); + var margin = dayLabel.get('margin'); + var firstDayOfWeek = coordSys.getFirstDayOfWeek(); + + if (isString(nameMap)) { + nameMap = WEEK_TEXT[nameMap.toUpperCase()] || []; + } + + var start = coordSys.getNextNDay( + rangeData.end.time, (7 - rangeData.lweek) + ).time; + + var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()]; + margin = parsePercent$1(margin, cellSize[orient === 'horizontal' ? 0 : 1]); + + if (pos === 'start') { + start = coordSys.getNextNDay( + rangeData.start.time, -(7 + rangeData.fweek) + ).time; + margin = -margin; + } + + for (var i = 0; i < 7; i++) { + + var tmpD = coordSys.getNextNDay(start, i); + var point = coordSys.dataToRect([tmpD.time], false).center; + var day = i; + day = Math.abs((i + firstDayOfWeek) % 7); + var weekText = new Text({z2: 30}); + + extend( + setTextStyle(weekText.style, dayLabel, {text: nameMap[day]}), + this._weekTextPositionControl(point, orient, pos, margin, cellSize) + ); + group.add(weekText); + } + } +}); + +/** + * @file calendar.js + * @author dxh + */ + +// Model +extendComponentModel({ + + type: 'title', + + layoutMode: {type: 'box', ignoreSize: true}, + + defaultOption: { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 6, + show: true, + + text: '', + // 超链接跳转 + // link: null, + // 仅支持self | blank + target: 'blank', + subtext: '', + + // 超链接跳转 + // sublink: null, + // 仅支持self | blank + subtarget: 'blank', + + // 'center' ¦ 'left' ¦ 'right' + // ¦ {number}(x坐标,单位px) + left: 0, + // 'top' ¦ 'bottom' ¦ 'center' + // ¦ {number}(y坐标,单位px) + top: 0, + + // 水平对齐 + // 'auto' | 'left' | 'right' | 'center' + // 默认根据 left 的位置判断是左对齐还是右对齐 + // textAlign: null + // + // 垂直对齐 + // 'auto' | 'top' | 'bottom' | 'middle' + // 默认根据 top 位置判断是上对齐还是下对齐 + // textBaseline: null + + backgroundColor: 'rgba(0,0,0,0)', + + // 标题边框颜色 + borderColor: '#ccc', + + // 标题边框线宽,单位px,默认为0(无边框) + borderWidth: 0, + + // 标题内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + padding: 5, + + // 主副标题纵向间隔,单位px,默认为10, + itemGap: 10, + textStyle: { + fontSize: 18, + fontWeight: 'bolder', + color: '#333' + }, + subtextStyle: { + color: '#aaa' + } + } +}); + +// View +extendComponentView({ + + type: 'title', + + render: function (titleModel, ecModel, api) { + this.group.removeAll(); + + if (!titleModel.get('show')) { + return; + } + + var group = this.group; + + var textStyleModel = titleModel.getModel('textStyle'); + var subtextStyleModel = titleModel.getModel('subtextStyle'); + + var textAlign = titleModel.get('textAlign'); + var textBaseline = titleModel.get('textBaseline'); + + var textEl = new Text({ + style: setTextStyle({}, textStyleModel, { + text: titleModel.get('text'), + textFill: textStyleModel.getTextColor() + }, {disableBox: true}), + z2: 10 + }); + + var textRect = textEl.getBoundingRect(); + + var subText = titleModel.get('subtext'); + var subTextEl = new Text({ + style: setTextStyle({}, subtextStyleModel, { + text: subText, + textFill: subtextStyleModel.getTextColor(), + y: textRect.height + titleModel.get('itemGap'), + textVerticalAlign: 'top' + }, {disableBox: true}), + z2: 10 + }); + + var link = titleModel.get('link'); + var sublink = titleModel.get('sublink'); + + textEl.silent = !link; + subTextEl.silent = !sublink; + + if (link) { + textEl.on('click', function () { + window.open(link, '_' + titleModel.get('target')); + }); + } + if (sublink) { + subTextEl.on('click', function () { + window.open(sublink, '_' + titleModel.get('subtarget')); + }); + } + + group.add(textEl); + subText && group.add(subTextEl); + // If no subText, but add subTextEl, there will be an empty line. + + var groupRect = group.getBoundingRect(); + var layoutOption = titleModel.getBoxLayoutParams(); + layoutOption.width = groupRect.width; + layoutOption.height = groupRect.height; + var layoutRect = getLayoutRect( + layoutOption, { + width: api.getWidth(), + height: api.getHeight() + }, titleModel.get('padding') + ); + // Adjust text align based on position + if (!textAlign) { + // Align left if title is on the left. center and right is same + textAlign = titleModel.get('left') || titleModel.get('right'); + if (textAlign === 'middle') { + textAlign = 'center'; + } + // Adjust layout by text align + if (textAlign === 'right') { + layoutRect.x += layoutRect.width; + } + else if (textAlign === 'center') { + layoutRect.x += layoutRect.width / 2; + } + } + if (!textBaseline) { + textBaseline = titleModel.get('top') || titleModel.get('bottom'); + if (textBaseline === 'center') { + textBaseline = 'middle'; + } + if (textBaseline === 'bottom') { + layoutRect.y += layoutRect.height; + } + else if (textBaseline === 'middle') { + layoutRect.y += layoutRect.height / 2; + } + + textBaseline = textBaseline || 'top'; + } + + group.attr('position', [layoutRect.x, layoutRect.y]); + var alignStyle = { + textAlign: textAlign, + textVerticalAlign: textBaseline + }; + textEl.setStyle(alignStyle); + subTextEl.setStyle(alignStyle); + + // Render background + // Get groupRect again because textAlign has been changed + groupRect = group.getBoundingRect(); + var padding = layoutRect.margin; + var style = titleModel.getItemStyle(['color', 'opacity']); + style.fill = titleModel.get('backgroundColor'); + var rect = new Rect({ + shape: { + x: groupRect.x - padding[3], + y: groupRect.y - padding[0], + width: groupRect.width + padding[1] + padding[3], + height: groupRect.height + padding[0] + padding[2], + r: titleModel.get('borderRadius') + }, + style: style, + silent: true + }); + subPixelOptimizeRect(rect); + + group.add(rect); + } +}); + +ComponentModel.registerSubTypeDefaulter('dataZoom', function () { + // Default 'slider' when no type specified. + return 'slider'; +}); + +var AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single']; +// Supported coords. +var COORDS = ['cartesian2d', 'polar', 'singleAxis']; + +/** + * @param {string} coordType + * @return {boolean} + */ +function isCoordSupported(coordType) { + return indexOf(COORDS, coordType) >= 0; +} + +/** + * Create "each" method to iterate names. + * + * @pubilc + * @param {Array.} names + * @param {Array.=} attrs + * @return {Function} + */ +function createNameEach(names, attrs) { + names = names.slice(); + var capitalNames = map(names, capitalFirst); + attrs = (attrs || []).slice(); + var capitalAttrs = map(attrs, capitalFirst); + + return function (callback, context) { + each$1(names, function (name, index) { + var nameObj = {name: name, capital: capitalNames[index]}; + + for (var j = 0; j < attrs.length; j++) { + nameObj[attrs[j]] = name + capitalAttrs[j]; + } + + callback.call(context, nameObj); + }); + }; +} + +/** + * Iterate each dimension name. + * + * @public + * @param {Function} callback The parameter is like: + * { + * name: 'angle', + * capital: 'Angle', + * axis: 'angleAxis', + * axisIndex: 'angleAixs', + * index: 'angleIndex' + * } + * @param {Object} context + */ +var eachAxisDim$1 = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']); + +/** + * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'. + * dataZoomModels and 'links' make up one or more graphics. + * This function finds the graphic where the source dataZoomModel is in. + * + * @public + * @param {Function} forEachNode Node iterator. + * @param {Function} forEachEdgeType edgeType iterator + * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id. + * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}} + */ +function createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) { + + return function (sourceNode) { + var result = { + nodes: [], + records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean). + }; + + forEachEdgeType(function (edgeType) { + result.records[edgeType.name] = {}; + }); + + if (!sourceNode) { + return result; + } + + absorb(sourceNode, result); + + var existsLink; + do { + existsLink = false; + forEachNode(processSingleNode); + } + while (existsLink); + + function processSingleNode(node) { + if (!isNodeAbsorded(node, result) && isLinked(node, result)) { + absorb(node, result); + existsLink = true; + } + } + + return result; + }; + + function isNodeAbsorded(node, result) { + return indexOf(result.nodes, node) >= 0; + } + + function isLinked(node, result) { + var hasLink = false; + forEachEdgeType(function (edgeType) { + each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) { + result.records[edgeType.name][edgeId] && (hasLink = true); + }); + }); + return hasLink; + } + + function absorb(node, result) { + result.nodes.push(node); + forEachEdgeType(function (edgeType) { + each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) { + result.records[edgeType.name][edgeId] = true; + }); + }); + } +} + +var each$25 = each$1; +var asc$1 = asc; + +/** + * Operate single axis. + * One axis can only operated by one axis operator. + * Different dataZoomModels may be defined to operate the same axis. + * (i.e. 'inside' data zoom and 'slider' data zoom components) + * So dataZoomModels share one axisProxy in that case. + * + * @class + */ +var AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) { + + /** + * @private + * @type {string} + */ + this._dimName = dimName; + + /** + * @private + */ + this._axisIndex = axisIndex; + + /** + * @private + * @type {Array.} + */ + this._valueWindow; + + /** + * @private + * @type {Array.} + */ + this._percentWindow; + + /** + * @private + * @type {Array.} + */ + this._dataExtent; + + /** + * {minSpan, maxSpan, minValueSpan, maxValueSpan} + * @private + * @type {Object} + */ + this._minMaxSpan; + + /** + * @readOnly + * @type {module: echarts/model/Global} + */ + this.ecModel = ecModel; + + /** + * @private + * @type {module: echarts/component/dataZoom/DataZoomModel} + */ + this._dataZoomModel = dataZoomModel; +}; + +AxisProxy.prototype = { + + constructor: AxisProxy, + + /** + * Whether the axisProxy is hosted by dataZoomModel. + * + * @public + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + * @return {boolean} + */ + hostedBy: function (dataZoomModel) { + return this._dataZoomModel === dataZoomModel; + }, + + /** + * @return {Array.} Value can only be NaN or finite value. + */ + getDataValueWindow: function () { + return this._valueWindow.slice(); + }, + + /** + * @return {Array.} + */ + getDataPercentWindow: function () { + return this._percentWindow.slice(); + }, + + /** + * @public + * @param {number} axisIndex + * @return {Array} seriesModels + */ + getTargetSeriesModels: function () { + var seriesModels = []; + var ecModel = this.ecModel; + + ecModel.eachSeries(function (seriesModel) { + if (isCoordSupported(seriesModel.get('coordinateSystem'))) { + var dimName = this._dimName; + var axisModel = ecModel.queryComponents({ + mainType: dimName + 'Axis', + index: seriesModel.get(dimName + 'AxisIndex'), + id: seriesModel.get(dimName + 'AxisId') + })[0]; + if (this._axisIndex === (axisModel && axisModel.componentIndex)) { + seriesModels.push(seriesModel); + } + } + }, this); + + return seriesModels; + }, + + getAxisModel: function () { + return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex); + }, + + getOtherAxisModel: function () { + var axisDim = this._dimName; + var ecModel = this.ecModel; + var axisModel = this.getAxisModel(); + var isCartesian = axisDim === 'x' || axisDim === 'y'; + var otherAxisDim; + var coordSysIndexName; + if (isCartesian) { + coordSysIndexName = 'gridIndex'; + otherAxisDim = axisDim === 'x' ? 'y' : 'x'; + } + else { + coordSysIndexName = 'polarIndex'; + otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle'; + } + var foundOtherAxisModel; + ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) { + if ((otherAxisModel.get(coordSysIndexName) || 0) + === (axisModel.get(coordSysIndexName) || 0) + ) { + foundOtherAxisModel = otherAxisModel; + } + }); + return foundOtherAxisModel; + }, + + getMinMaxSpan: function () { + return clone(this._minMaxSpan); + }, + + /** + * Only calculate by given range and this._dataExtent, do not change anything. + * + * @param {Object} opt + * @param {number} [opt.start] + * @param {number} [opt.end] + * @param {number} [opt.startValue] + * @param {number} [opt.endValue] + */ + calculateDataWindow: function (opt) { + var dataExtent = this._dataExtent; + var axisModel = this.getAxisModel(); + var scale = axisModel.axis.scale; + var rangePropMode = this._dataZoomModel.getRangePropMode(); + var percentExtent = [0, 100]; + var percentWindow = [ + opt.start, + opt.end + ]; + var valueWindow = []; + + each$25(['startValue', 'endValue'], function (prop) { + valueWindow.push(opt[prop] != null ? scale.parse(opt[prop]) : null); + }); + + // Normalize bound. + each$25([0, 1], function (idx) { + var boundValue = valueWindow[idx]; + var boundPercent = percentWindow[idx]; + + // Notice: dataZoom is based either on `percentProp` ('start', 'end') or + // on `valueProp` ('startValue', 'endValue'). The former one is suitable + // for cases that a dataZoom component controls multiple axes with different + // unit or extent, and the latter one is suitable for accurate zoom by pixel + // (e.g., in dataZoomSelect). `valueProp` can be calculated from `percentProp`, + // but it is awkward that `percentProp` can not be obtained from `valueProp` + // accurately (because all of values that are overflow the `dataExtent` will + // be calculated to percent '100%'). So we have to use + // `dataZoom.getRangePropMode()` to mark which prop is used. + // `rangePropMode` is updated only when setOption or dispatchAction, otherwise + // it remains its original value. + + if (rangePropMode[idx] === 'percent') { + if (boundPercent == null) { + boundPercent = percentExtent[idx]; + } + // Use scale.parse to math round for category or time axis. + boundValue = scale.parse(linearMap( + boundPercent, percentExtent, dataExtent, true + )); + } + else { + // Calculating `percent` from `value` may be not accurate, because + // This calculation can not be inversed, because all of values that + // are overflow the `dataExtent` will be calculated to percent '100%' + boundPercent = linearMap( + boundValue, dataExtent, percentExtent, true + ); + } + + // valueWindow[idx] = round(boundValue); + // percentWindow[idx] = round(boundPercent); + valueWindow[idx] = boundValue; + percentWindow[idx] = boundPercent; + }); + + return { + valueWindow: asc$1(valueWindow), + percentWindow: asc$1(percentWindow) + }; + }, + + /** + * Notice: reset should not be called before series.restoreData() called, + * so it is recommanded to be called in "process stage" but not "model init + * stage". + * + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + */ + reset: function (dataZoomModel) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + // Culculate data window and data extent, and record them. + this._dataExtent = calculateDataExtent( + this, this._dimName, this.getTargetSeriesModels() + ); + + var dataWindow = this.calculateDataWindow(dataZoomModel.option); + + this._valueWindow = dataWindow.valueWindow; + this._percentWindow = dataWindow.percentWindow; + + setMinMaxSpan(this); + + // Update axis setting then. + setAxisModel(this); + }, + + /** + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + */ + restore: function (dataZoomModel) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + this._valueWindow = this._percentWindow = null; + setAxisModel(this, true); + }, + + /** + * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel + */ + filterData: function (dataZoomModel) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + var axisDim = this._dimName; + var seriesModels = this.getTargetSeriesModels(); + var filterMode = dataZoomModel.get('filterMode'); + var valueWindow = this._valueWindow; + + if (filterMode === 'none') { + return; + } + + // FIXME + // Toolbox may has dataZoom injected. And if there are stacked bar chart + // with NaN data, NaN will be filtered and stack will be wrong. + // So we need to force the mode to be set empty. + // In fect, it is not a big deal that do not support filterMode-'filter' + // when using toolbox#dataZoom, utill tooltip#dataZoom support "single axis + // selection" some day, which might need "adapt to data extent on the + // otherAxis", which is disabled by filterMode-'empty'. + var otherAxisModel = this.getOtherAxisModel(); + if (dataZoomModel.get('$fromToolbox') + && otherAxisModel + && otherAxisModel.get('type') === 'category' + ) { + filterMode = 'empty'; + } + + // Process series data + each$25(seriesModels, function (seriesModel) { + var seriesData = seriesModel.getData(); + var dataDims = seriesModel.coordDimToDataDim(axisDim); + + if (filterMode === 'weakFilter') { + seriesData && seriesData.filterSelf(function (dataIndex) { + var leftOut; + var rightOut; + var hasValue; + for (var i = 0; i < dataDims.length; i++) { + var value = seriesData.get(dataDims[i], dataIndex); + var thisHasValue = !isNaN(value); + var thisLeftOut = value < valueWindow[0]; + var thisRightOut = value > valueWindow[1]; + if (thisHasValue && !thisLeftOut && !thisRightOut) { + return true; + } + thisHasValue && (hasValue = true); + thisLeftOut && (leftOut = true); + thisRightOut && (rightOut = true); + } + // If both left out and right out, do not filter. + return hasValue && leftOut && rightOut; + }); + } + else { + seriesData && each$25(dataDims, function (dim) { + if (filterMode === 'empty') { + seriesModel.setData( + seriesData.map(dim, function (value) { + return !isInWindow(value) ? NaN : value; + }) + ); + } + else { + seriesData.filterSelf(dim, isInWindow); + } + }); + } + }); + + function isInWindow(value) { + return value >= valueWindow[0] && value <= valueWindow[1]; + } + } +}; + +function calculateDataExtent(axisProxy, axisDim, seriesModels) { + var dataExtent = [Infinity, -Infinity]; + + each$25(seriesModels, function (seriesModel) { + var seriesData = seriesModel.getData(); + if (seriesData) { + each$25(seriesModel.coordDimToDataDim(axisDim), function (dim) { + var seriesExtent = seriesData.getDataExtent(dim); + seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]); + seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]); + }); + } + }); + + if (dataExtent[1] < dataExtent[0]) { + dataExtent = [NaN, NaN]; + } + + // It is important to get "consistent" extent when more then one axes is + // controlled by a `dataZoom`, otherwise those axes will not be synchronized + // when zooming. But it is difficult to know what is "consistent", considering + // axes have different type or even different meanings (For example, two + // time axes are used to compare data of the same date in different years). + // So basically dataZoom just obtains extent by series.data (in category axis + // extent can be obtained from axis.data). + // Nevertheless, user can set min/max/scale on axes to make extent of axes + // consistent. + fixExtentByAxis(axisProxy, dataExtent); + + return dataExtent; +} + +function fixExtentByAxis(axisProxy, dataExtent) { + var axisModel = axisProxy.getAxisModel(); + var min = axisModel.getMin(true); + + // For category axis, if min/max/scale are not set, extent is determined + // by axis.data by default. + var isCategoryAxis = axisModel.get('type') === 'category'; + var axisDataLen = isCategoryAxis && (axisModel.get('data') || []).length; + + if (min != null && min !== 'dataMin' && typeof min !== 'function') { + dataExtent[0] = min; + } + else if (isCategoryAxis) { + dataExtent[0] = axisDataLen > 0 ? 0 : NaN; + } + + var max = axisModel.getMax(true); + if (max != null && max !== 'dataMax' && typeof max !== 'function') { + dataExtent[1] = max; + } + else if (isCategoryAxis) { + dataExtent[1] = axisDataLen > 0 ? axisDataLen - 1 : NaN; + } + + if (!axisModel.get('scale', true)) { + dataExtent[0] > 0 && (dataExtent[0] = 0); + dataExtent[1] < 0 && (dataExtent[1] = 0); + } + + // For value axis, if min/max/scale are not set, we just use the extent obtained + // by series data, which may be a little different from the extent calculated by + // `axisHelper.getScaleExtent`. But the different just affects the experience a + // little when zooming. So it will not be fixed until some users require it strongly. + + return dataExtent; +} + +function setAxisModel(axisProxy, isRestore) { + var axisModel = axisProxy.getAxisModel(); + + var percentWindow = axisProxy._percentWindow; + var valueWindow = axisProxy._valueWindow; + + if (!percentWindow) { + return; + } + + // [0, 500]: arbitrary value, guess axis extent. + var precision = getPixelPrecision(valueWindow, [0, 500]); + precision = Math.min(precision, 20); + // isRestore or isFull + var useOrigin = isRestore || (percentWindow[0] === 0 && percentWindow[1] === 100); + + axisModel.setRange( + useOrigin ? null : +valueWindow[0].toFixed(precision), + useOrigin ? null : +valueWindow[1].toFixed(precision) + ); +} + +function setMinMaxSpan(axisProxy) { + var minMaxSpan = axisProxy._minMaxSpan = {}; + var dataZoomModel = axisProxy._dataZoomModel; + + each$25(['min', 'max'], function (minMax) { + minMaxSpan[minMax + 'Span'] = dataZoomModel.get(minMax + 'Span'); + + // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan + var valueSpan = dataZoomModel.get(minMax + 'ValueSpan'); + + if (valueSpan != null) { + minMaxSpan[minMax + 'ValueSpan'] = valueSpan; + valueSpan = axisProxy.getAxisModel().axis.scale.parse(valueSpan); + + if (valueSpan != null) { + var dataExtent = axisProxy._dataExtent; + minMaxSpan[minMax + 'Span'] = linearMap( + dataExtent[0] + valueSpan, dataExtent, [0, 100], true + ); + } + } + }); +} + +var each$24 = each$1; +var eachAxisDim = eachAxisDim$1; + +var DataZoomModel = extendComponentModel({ + + type: 'dataZoom', + + dependencies: [ + 'xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series' + ], + + /** + * @protected + */ + defaultOption: { + zlevel: 0, + z: 4, // Higher than normal component (z: 2). + orient: null, // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'. + xAxisIndex: null, // Default the first horizontal category axis. + yAxisIndex: null, // Default the first vertical category axis. + + filterMode: 'filter', // Possible values: 'filter' or 'empty' or 'weakFilter'. + // 'filter': data items which are out of window will be removed. This option is + // applicable when filtering outliers. For each data item, it will be + // filtered if one of the relevant dimensions is out of the window. + // 'weakFilter': data items which are out of window will be removed. This option + // is applicable when filtering outliers. For each data item, it will be + // filtered only if all of the relevant dimensions are out of the same + // side of the window. + // 'empty': data items which are out of window will be set to empty. + // This option is applicable when user should not neglect + // that there are some data items out of window. + // 'none': Do not filter. + // Taking line chart as an example, line will be broken in + // the filtered points when filterModel is set to 'empty', but + // be connected when set to 'filter'. + + throttle: null, // Dispatch action by the fixed rate, avoid frequency. + // default 100. Do not throttle when use null/undefined. + // If animation === true and animationDurationUpdate > 0, + // default value is 100, otherwise 20. + start: 0, // Start percent. 0 ~ 100 + end: 100, // End percent. 0 ~ 100 + startValue: null, // Start value. If startValue specified, start is ignored. + endValue: null, // End value. If endValue specified, end is ignored. + minSpan: null, // 0 ~ 100 + maxSpan: null, // 0 ~ 100 + minValueSpan: null, // The range of dataZoom can not be smaller than that. + maxValueSpan: null, // The range of dataZoom can not be larger than that. + rangeMode: null // Array, can be 'value' or 'percent'. + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel) { + + /** + * key like x_0, y_1 + * @private + * @type {Object} + */ + this._dataIntervalByAxis = {}; + + /** + * @private + */ + this._dataInfo = {}; + + /** + * key like x_0, y_1 + * @private + */ + this._axisProxies = {}; + + /** + * @readOnly + */ + this.textStyleModel; + + /** + * @private + */ + this._autoThrottle = true; + + /** + * 'percent' or 'value' + * @private + */ + this._rangePropMode = ['percent', 'percent']; + + var rawOption = retrieveRaw(option); + + this.mergeDefaultAndTheme(option, ecModel); + + this.doInit(rawOption); + }, + + /** + * @override + */ + mergeOption: function (newOption) { + var rawOption = retrieveRaw(newOption); + + //FIX #2591 + merge(this.option, newOption, true); + + this.doInit(rawOption); + }, + + /** + * @protected + */ + doInit: function (rawOption) { + var thisOption = this.option; + + // Disable realtime view update if canvas is not supported. + if (!env$1.canvasSupported) { + thisOption.realtime = false; + } + + this._setDefaultThrottle(rawOption); + + updateRangeUse(this, rawOption); + + each$24([['start', 'startValue'], ['end', 'endValue']], function (names, index) { + // start/end has higher priority over startValue/endValue if they + // both set, but we should make chart.setOption({endValue: 1000}) + // effective, rather than chart.setOption({endValue: 1000, end: null}). + if (this._rangePropMode[index] === 'value') { + thisOption[names[0]] = null; + } + // Otherwise do nothing and use the merge result. + }, this); + + this.textStyleModel = this.getModel('textStyle'); + + this._resetTarget(); + + this._giveAxisProxies(); + }, + + /** + * @private + */ + _giveAxisProxies: function () { + var axisProxies = this._axisProxies; + + this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) { + var axisModel = this.dependentModels[dimNames.axis][axisIndex]; + + // If exists, share axisProxy with other dataZoomModels. + var axisProxy = axisModel.__dzAxisProxy || ( + // Use the first dataZoomModel as the main model of axisProxy. + axisModel.__dzAxisProxy = new AxisProxy( + dimNames.name, axisIndex, this, ecModel + ) + ); + // FIXME + // dispose __dzAxisProxy + + axisProxies[dimNames.name + '_' + axisIndex] = axisProxy; + }, this); + }, + + /** + * @private + */ + _resetTarget: function () { + var thisOption = this.option; + + var autoMode = this._judgeAutoMode(); + + eachAxisDim(function (dimNames) { + var axisIndexName = dimNames.axisIndex; + thisOption[axisIndexName] = normalizeToArray( + thisOption[axisIndexName] + ); + }, this); + + if (autoMode === 'axisIndex') { + this._autoSetAxisIndex(); + } + else if (autoMode === 'orient') { + this._autoSetOrient(); + } + }, + + /** + * @private + */ + _judgeAutoMode: function () { + // Auto set only works for setOption at the first time. + // The following is user's reponsibility. So using merged + // option is OK. + var thisOption = this.option; + + var hasIndexSpecified = false; + eachAxisDim(function (dimNames) { + // When user set axisIndex as a empty array, we think that user specify axisIndex + // but do not want use auto mode. Because empty array may be encountered when + // some error occured. + if (thisOption[dimNames.axisIndex] != null) { + hasIndexSpecified = true; + } + }, this); + + var orient = thisOption.orient; + + if (orient == null && hasIndexSpecified) { + return 'orient'; + } + else if (!hasIndexSpecified) { + if (orient == null) { + thisOption.orient = 'horizontal'; + } + return 'axisIndex'; + } + }, + + /** + * @private + */ + _autoSetAxisIndex: function () { + var autoAxisIndex = true; + var orient = this.get('orient', true); + var thisOption = this.option; + var dependentModels = this.dependentModels; + + if (autoAxisIndex) { + // Find axis that parallel to dataZoom as default. + var dimName = orient === 'vertical' ? 'y' : 'x'; + + if (dependentModels[dimName + 'Axis'].length) { + thisOption[dimName + 'AxisIndex'] = [0]; + autoAxisIndex = false; + } + else { + each$24(dependentModels.singleAxis, function (singleAxisModel) { + if (autoAxisIndex && singleAxisModel.get('orient', true) === orient) { + thisOption.singleAxisIndex = [singleAxisModel.componentIndex]; + autoAxisIndex = false; + } + }); + } + } + + if (autoAxisIndex) { + // Find the first category axis as default. (consider polar) + eachAxisDim(function (dimNames) { + if (!autoAxisIndex) { + return; + } + var axisIndices = []; + var axisModels = this.dependentModels[dimNames.axis]; + if (axisModels.length && !axisIndices.length) { + for (var i = 0, len = axisModels.length; i < len; i++) { + if (axisModels[i].get('type') === 'category') { + axisIndices.push(i); + } + } + } + thisOption[dimNames.axisIndex] = axisIndices; + if (axisIndices.length) { + autoAxisIndex = false; + } + }, this); + } + + if (autoAxisIndex) { + // FIXME + // 这里是兼容ec2的写法(没指定xAxisIndex和yAxisIndex时把scatter和双数值轴折柱纳入dataZoom控制), + // 但是实际是否需要Grid.js#getScaleByOption来判断(考虑time,log等axis type)? + + // If both dataZoom.xAxisIndex and dataZoom.yAxisIndex is not specified, + // dataZoom component auto adopts series that reference to + // both xAxis and yAxis which type is 'value'. + this.ecModel.eachSeries(function (seriesModel) { + if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) { + eachAxisDim(function (dimNames) { + var axisIndices = thisOption[dimNames.axisIndex]; + + var axisIndex = seriesModel.get(dimNames.axisIndex); + var axisId = seriesModel.get(dimNames.axisId); + + var axisModel = seriesModel.ecModel.queryComponents({ + mainType: dimNames.axis, + index: axisIndex, + id: axisId + })[0]; + + if (__DEV__) { + if (!axisModel) { + throw new Error( + dimNames.axis + ' "' + retrieve( + axisIndex, + axisId, + 0 + ) + '" not found' + ); + } + } + axisIndex = axisModel.componentIndex; + + if (indexOf(axisIndices, axisIndex) < 0) { + axisIndices.push(axisIndex); + } + }); + } + }, this); + } + }, + + /** + * @private + */ + _autoSetOrient: function () { + var dim; + + // Find the first axis + this.eachTargetAxis(function (dimNames) { + !dim && (dim = dimNames.name); + }, this); + + this.option.orient = dim === 'y' ? 'vertical' : 'horizontal'; + }, + + /** + * @private + */ + _isSeriesHasAllAxesTypeOf: function (seriesModel, axisType) { + // FIXME + // 需要series的xAxisIndex和yAxisIndex都首先自动设置上。 + // 例如series.type === scatter时。 + + var is = true; + eachAxisDim(function (dimNames) { + var seriesAxisIndex = seriesModel.get(dimNames.axisIndex); + var axisModel = this.dependentModels[dimNames.axis][seriesAxisIndex]; + + if (!axisModel || axisModel.get('type') !== axisType) { + is = false; + } + }, this); + return is; + }, + + /** + * @private + */ + _setDefaultThrottle: function (rawOption) { + // When first time user set throttle, auto throttle ends. + if (rawOption.hasOwnProperty('throttle')) { + this._autoThrottle = false; + } + if (this._autoThrottle) { + var globalOption = this.ecModel.option; + this.option.throttle = + (globalOption.animation && globalOption.animationDurationUpdate > 0) + ? 100 : 20; + } + }, + + /** + * @public + */ + getFirstTargetAxisModel: function () { + var firstAxisModel; + eachAxisDim(function (dimNames) { + if (firstAxisModel == null) { + var indices = this.get(dimNames.axisIndex); + if (indices.length) { + firstAxisModel = this.dependentModels[dimNames.axis][indices[0]]; + } + } + }, this); + + return firstAxisModel; + }, + + /** + * @public + * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel + */ + eachTargetAxis: function (callback, context) { + var ecModel = this.ecModel; + eachAxisDim(function (dimNames) { + each$24( + this.get(dimNames.axisIndex), + function (axisIndex) { + callback.call(context, dimNames, axisIndex, this, ecModel); + }, + this + ); + }, this); + }, + + /** + * @param {string} dimName + * @param {number} axisIndex + * @return {module:echarts/component/dataZoom/AxisProxy} If not found, return null/undefined. + */ + getAxisProxy: function (dimName, axisIndex) { + return this._axisProxies[dimName + '_' + axisIndex]; + }, + + /** + * @param {string} dimName + * @param {number} axisIndex + * @return {module:echarts/model/Model} If not found, return null/undefined. + */ + getAxisModel: function (dimName, axisIndex) { + var axisProxy = this.getAxisProxy(dimName, axisIndex); + return axisProxy && axisProxy.getAxisModel(); + }, + + /** + * If not specified, set to undefined. + * + * @public + * @param {Object} opt + * @param {number} [opt.start] + * @param {number} [opt.end] + * @param {number} [opt.startValue] + * @param {number} [opt.endValue] + * @param {boolean} [ignoreUpdateRangeUsg=false] + */ + setRawRange: function (opt, ignoreUpdateRangeUsg) { + var option = this.option; + each$24([['start', 'startValue'], ['end', 'endValue']], function (names) { + // If only one of 'start' and 'startValue' is not null/undefined, the other + // should be cleared, which enable clear the option. + // If both of them are not set, keep option with the original value, which + // enable use only set start but not set end when calling `dispatchAction`. + // The same as 'end' and 'endValue'. + if (opt[names[0]] != null || opt[names[1]] != null) { + option[names[0]] = opt[names[0]]; + option[names[1]] = opt[names[1]]; + } + }, this); + + !ignoreUpdateRangeUsg && updateRangeUse(this, opt); + }, + + /** + * @public + * @return {Array.} [startPercent, endPercent] + */ + getPercentRange: function () { + var axisProxy = this.findRepresentativeAxisProxy(); + if (axisProxy) { + return axisProxy.getDataPercentWindow(); + } + }, + + /** + * @public + * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0); + * + * @param {string} [axisDimName] + * @param {number} [axisIndex] + * @return {Array.} [startValue, endValue] value can only be '-' or finite number. + */ + getValueRange: function (axisDimName, axisIndex) { + if (axisDimName == null && axisIndex == null) { + var axisProxy = this.findRepresentativeAxisProxy(); + if (axisProxy) { + return axisProxy.getDataValueWindow(); + } + } + else { + return this.getAxisProxy(axisDimName, axisIndex).getDataValueWindow(); + } + }, + + /** + * @public + * @param {module:echarts/model/Model} [axisModel] If axisModel given, find axisProxy + * corresponding to the axisModel + * @return {module:echarts/component/dataZoom/AxisProxy} + */ + findRepresentativeAxisProxy: function (axisModel) { + if (axisModel) { + return axisModel.__dzAxisProxy; + } + + // Find the first hosted axisProxy + var axisProxies = this._axisProxies; + for (var key in axisProxies) { + if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) { + return axisProxies[key]; + } + } + + // If no hosted axis find not hosted axisProxy. + // Consider this case: dataZoomModel1 and dataZoomModel2 control the same axis, + // and the option.start or option.end settings are different. The percentRange + // should follow axisProxy. + // (We encounter this problem in toolbox data zoom.) + for (var key in axisProxies) { + if (axisProxies.hasOwnProperty(key) && !axisProxies[key].hostedBy(this)) { + return axisProxies[key]; + } + } + }, + + /** + * @return {Array.} + */ + getRangePropMode: function () { + return this._rangePropMode.slice(); + } + +}); + +function retrieveRaw(option) { + var ret = {}; + each$24( + ['start', 'end', 'startValue', 'endValue', 'throttle'], + function (name) { + option.hasOwnProperty(name) && (ret[name] = option[name]); + } + ); + return ret; +} + +function updateRangeUse(dataZoomModel, rawOption) { + var rangePropMode = dataZoomModel._rangePropMode; + var rangeModeInOption = dataZoomModel.get('rangeMode'); + + each$24([['start', 'startValue'], ['end', 'endValue']], function (names, index) { + var percentSpecified = rawOption[names[0]] != null; + var valueSpecified = rawOption[names[1]] != null; + if (percentSpecified && !valueSpecified) { + rangePropMode[index] = 'percent'; + } + else if (!percentSpecified && valueSpecified) { + rangePropMode[index] = 'value'; + } + else if (rangeModeInOption) { + rangePropMode[index] = rangeModeInOption[index]; + } + else if (percentSpecified) { // percentSpecified && valueSpecified + rangePropMode[index] = 'percent'; + } + // else remain its original setting. + }); +} + +var DataZoomView = Component.extend({ + + type: 'dataZoom', + + render: function (dataZoomModel, ecModel, api, payload) { + this.dataZoomModel = dataZoomModel; + this.ecModel = ecModel; + this.api = api; + }, + + /** + * Find the first target coordinate system. + * + * @protected + * @return {Object} { + * grid: [ + * {model: coord0, axisModels: [axis1, axis3], coordIndex: 1}, + * {model: coord1, axisModels: [axis0, axis2], coordIndex: 0}, + * ... + * ], // cartesians must not be null/undefined. + * polar: [ + * {model: coord0, axisModels: [axis4], coordIndex: 0}, + * ... + * ], // polars must not be null/undefined. + * singleAxis: [ + * {model: coord0, axisModels: [], coordIndex: 0} + * ] + */ + getTargetCoordInfo: function () { + var dataZoomModel = this.dataZoomModel; + var ecModel = this.ecModel; + var coordSysLists = {}; + + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) { + var axisModel = ecModel.getComponent(dimNames.axis, axisIndex); + if (axisModel) { + var coordModel = axisModel.getCoordSysModel(); + coordModel && save( + coordModel, + axisModel, + coordSysLists[coordModel.mainType] || (coordSysLists[coordModel.mainType] = []), + coordModel.componentIndex + ); + } + }, this); + + function save(coordModel, axisModel, store, coordIndex) { + var item; + for (var i = 0; i < store.length; i++) { + if (store[i].model === coordModel) { + item = store[i]; + break; + } + } + if (!item) { + store.push(item = { + model: coordModel, axisModels: [], coordIndex: coordIndex + }); + } + item.axisModels.push(axisModel); + } + + return coordSysLists; + } + +}); + +var SliderZoomModel = DataZoomModel.extend({ + + type: 'dataZoom.slider', + + layoutMode: 'box', + + /** + * @protected + */ + defaultOption: { + show: true, + + // ph => placeholder. Using placehoder here because + // deault value can only be drived in view stage. + right: 'ph', // Default align to grid rect. + top: 'ph', // Default align to grid rect. + width: 'ph', // Default align to grid rect. + height: 'ph', // Default align to grid rect. + left: null, // Default align to grid rect. + bottom: null, // Default align to grid rect. + + backgroundColor: 'rgba(47,69,84,0)', // Background of slider zoom component. + // dataBackgroundColor: '#ddd', // Background coor of data shadow and border of box, + // highest priority, remain for compatibility of + // previous version, but not recommended any more. + dataBackground: { + lineStyle: { + color: '#2f4554', + width: 0.5, + opacity: 0.3 + }, + areaStyle: { + color: 'rgba(47,69,84,0.3)', + opacity: 0.3 + } + }, + borderColor: '#ddd', // border color of the box. For compatibility, + // if dataBackgroundColor is set, borderColor + // is ignored. + + fillerColor: 'rgba(167,183,204,0.4)', // Color of selected area. + // handleColor: 'rgba(89,170,216,0.95)', // Color of handle. + // handleIcon: 'path://M4.9,17.8c0-1.4,4.5-10.5,5.5-12.4c0-0.1,0.6-1.1,0.9-1.1c0.4,0,0.9,1,0.9,1.1c1.1,2.2,5.4,11,5.4,12.4v17.8c0,1.5-0.6,2.1-1.3,2.1H6.1c-0.7,0-1.3-0.6-1.3-2.1V17.8z', + handleIcon: 'M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z', + // Percent of the slider height + handleSize: '100%', + + handleStyle: { + color: '#a7b7cc' + }, + + labelPrecision: null, + labelFormatter: null, + showDetail: true, + showDataShadow: 'auto', // Default auto decision. + realtime: true, + zoomLock: false, // Whether disable zoom. + textStyle: { + color: '#333' + } + } + +}); + +var Rect$2 = Rect; +var linearMap$2 = linearMap; +var asc$2 = asc; +var bind$4 = bind; +var each$26 = each$1; + +// Constants +var DEFAULT_LOCATION_EDGE_GAP = 7; +var DEFAULT_FRAME_BORDER_WIDTH = 1; +var DEFAULT_FILLER_SIZE = 30; +var HORIZONTAL = 'horizontal'; +var VERTICAL = 'vertical'; +var LABEL_GAP = 5; +var SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter']; + +var SliderZoomView = DataZoomView.extend({ + + type: 'dataZoom.slider', + + init: function (ecModel, api) { + + /** + * @private + * @type {Object} + */ + this._displayables = {}; + + /** + * @private + * @type {string} + */ + this._orient; + + /** + * [0, 100] + * @private + */ + this._range; + + /** + * [coord of the first handle, coord of the second handle] + * @private + */ + this._handleEnds; + + /** + * [length, thick] + * @private + * @type {Array.} + */ + this._size; + + /** + * @private + * @type {number} + */ + this._handleWidth; + + /** + * @private + * @type {number} + */ + this._handleHeight; + + /** + * @private + */ + this._location; + + /** + * @private + */ + this._dragging; + + /** + * @private + */ + this._dataShadowInfo; + + this.api = api; + }, + + /** + * @override + */ + render: function (dataZoomModel, ecModel, api, payload) { + SliderZoomView.superApply(this, 'render', arguments); + + createOrUpdate( + this, + '_dispatchZoomAction', + this.dataZoomModel.get('throttle'), + 'fixRate' + ); + + this._orient = dataZoomModel.get('orient'); + + if (this.dataZoomModel.get('show') === false) { + this.group.removeAll(); + return; + } + + // Notice: this._resetInterval() should not be executed when payload.type + // is 'dataZoom', origin this._range should be maintained, otherwise 'pan' + // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction, + if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) { + this._buildView(); + } + + this._updateView(); + }, + + /** + * @override + */ + remove: function () { + SliderZoomView.superApply(this, 'remove', arguments); + clear(this, '_dispatchZoomAction'); + }, + + /** + * @override + */ + dispose: function () { + SliderZoomView.superApply(this, 'dispose', arguments); + clear(this, '_dispatchZoomAction'); + }, + + _buildView: function () { + var thisGroup = this.group; + + thisGroup.removeAll(); + + this._resetLocation(); + this._resetInterval(); + + var barGroup = this._displayables.barGroup = new Group(); + + this._renderBackground(); + + this._renderHandle(); + + this._renderDataShadow(); + + thisGroup.add(barGroup); + + this._positionGroup(); + }, + + /** + * @private + */ + _resetLocation: function () { + var dataZoomModel = this.dataZoomModel; + var api = this.api; + + // If some of x/y/width/height are not specified, + // auto-adapt according to target grid. + var coordRect = this._findCoordRect(); + var ecSize = {width: api.getWidth(), height: api.getHeight()}; + // Default align by coordinate system rect. + var positionInfo = this._orient === HORIZONTAL + ? { + // Why using 'right', because right should be used in vertical, + // and it is better to be consistent for dealing with position param merge. + right: ecSize.width - coordRect.x - coordRect.width, + top: (ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP), + width: coordRect.width, + height: DEFAULT_FILLER_SIZE + } + : { // vertical + right: DEFAULT_LOCATION_EDGE_GAP, + top: coordRect.y, + width: DEFAULT_FILLER_SIZE, + height: coordRect.height + }; + + // Do not write back to option and replace value 'ph', because + // the 'ph' value should be recalculated when resize. + var layoutParams = getLayoutParams(dataZoomModel.option); + + // Replace the placeholder value. + each$1(['right', 'top', 'width', 'height'], function (name) { + if (layoutParams[name] === 'ph') { + layoutParams[name] = positionInfo[name]; + } + }); + + var layoutRect = getLayoutRect( + layoutParams, + ecSize, + dataZoomModel.padding + ); + + this._location = {x: layoutRect.x, y: layoutRect.y}; + this._size = [layoutRect.width, layoutRect.height]; + this._orient === VERTICAL && this._size.reverse(); + }, + + /** + * @private + */ + _positionGroup: function () { + var thisGroup = this.group; + var location = this._location; + var orient = this._orient; + + // Just use the first axis to determine mapping. + var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel(); + var inverse = targetAxisModel && targetAxisModel.get('inverse'); + + var barGroup = this._displayables.barGroup; + var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; + + // Transform barGroup. + barGroup.attr( + (orient === HORIZONTAL && !inverse) + ? {scale: otherAxisInverse ? [1, 1] : [1, -1]} + : (orient === HORIZONTAL && inverse) + ? {scale: otherAxisInverse ? [-1, 1] : [-1, -1]} + : (orient === VERTICAL && !inverse) + ? {scale: otherAxisInverse ? [1, -1] : [1, 1], rotation: Math.PI / 2} + // Dont use Math.PI, considering shadow direction. + : {scale: otherAxisInverse ? [-1, -1] : [-1, 1], rotation: Math.PI / 2} + ); + + // Position barGroup + var rect = thisGroup.getBoundingRect([barGroup]); + thisGroup.attr('position', [location.x - rect.x, location.y - rect.y]); + }, + + /** + * @private + */ + _getViewExtent: function () { + return [0, this._size[0]]; + }, + + _renderBackground: function () { + var dataZoomModel = this.dataZoomModel; + var size = this._size; + var barGroup = this._displayables.barGroup; + + barGroup.add(new Rect$2({ + silent: true, + shape: { + x: 0, y: 0, width: size[0], height: size[1] + }, + style: { + fill: dataZoomModel.get('backgroundColor') + }, + z2: -40 + })); + + // Click panel, over shadow, below handles. + barGroup.add(new Rect$2({ + shape: { + x: 0, y: 0, width: size[0], height: size[1] + }, + style: { + fill: 'transparent' + }, + z2: 0, + onclick: bind(this._onClickPanelClick, this) + })); + }, + + _renderDataShadow: function () { + var info = this._dataShadowInfo = this._prepareDataShadowInfo(); + + if (!info) { + return; + } + + var size = this._size; + var seriesModel = info.series; + var data = seriesModel.getRawData(); + var otherDim = seriesModel.getShadowDim + ? seriesModel.getShadowDim() // @see candlestick + : info.otherDim; + + if (otherDim == null) { + return; + } + + var otherDataExtent = data.getDataExtent(otherDim); + // Nice extent. + var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3; + otherDataExtent = [ + otherDataExtent[0] - otherOffset, + otherDataExtent[1] + otherOffset + ]; + var otherShadowExtent = [0, size[1]]; + + var thisShadowExtent = [0, size[0]]; + + var areaPoints = [[size[0], 0], [0, 0]]; + var linePoints = []; + var step = thisShadowExtent[1] / (data.count() - 1); + var thisCoord = 0; + + // Optimize for large data shadow + var stride = Math.round(data.count() / size[0]); + var lastIsEmpty; + data.each([otherDim], function (value, index) { + if (stride > 0 && (index % stride)) { + thisCoord += step; + return; + } + + // FIXME + // Should consider axis.min/axis.max when drawing dataShadow. + + // FIXME + // 应该使用统一的空判断?还是在list里进行空判断? + var isEmpty = value == null || isNaN(value) || value === ''; + // See #4235. + var otherCoord = isEmpty + ? 0 : linearMap$2(value, otherDataExtent, otherShadowExtent, true); + + // Attempt to draw data shadow precisely when there are empty value. + if (isEmpty && !lastIsEmpty && index) { + areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]); + linePoints.push([linePoints[linePoints.length - 1][0], 0]); + } + else if (!isEmpty && lastIsEmpty) { + areaPoints.push([thisCoord, 0]); + linePoints.push([thisCoord, 0]); + } + + areaPoints.push([thisCoord, otherCoord]); + linePoints.push([thisCoord, otherCoord]); + + thisCoord += step; + lastIsEmpty = isEmpty; + }); + + var dataZoomModel = this.dataZoomModel; + // var dataBackgroundModel = dataZoomModel.getModel('dataBackground'); + this._displayables.barGroup.add(new Polygon({ + shape: {points: areaPoints}, + style: defaults( + {fill: dataZoomModel.get('dataBackgroundColor')}, + dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle() + ), + silent: true, + z2: -20 + })); + this._displayables.barGroup.add(new Polyline({ + shape: {points: linePoints}, + style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(), + silent: true, + z2: -19 + })); + }, + + _prepareDataShadowInfo: function () { + var dataZoomModel = this.dataZoomModel; + var showDataShadow = dataZoomModel.get('showDataShadow'); + + if (showDataShadow === false) { + return; + } + + // Find a representative series. + var result; + var ecModel = this.ecModel; + + dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) { + var seriesModels = dataZoomModel + .getAxisProxy(dimNames.name, axisIndex) + .getTargetSeriesModels(); + + each$1(seriesModels, function (seriesModel) { + if (result) { + return; + } + + if (showDataShadow !== true && indexOf( + SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type') + ) < 0 + ) { + return; + } + + var thisAxis = ecModel.getComponent(dimNames.axis, axisIndex).axis; + var otherDim = getOtherDim(dimNames.name); + var otherAxisInverse; + var coordSys = seriesModel.coordinateSystem; + if (otherDim != null && coordSys.getOtherAxis) { + otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse; + } + + result = { + thisAxis: thisAxis, + series: seriesModel, + thisDim: dimNames.name, + otherDim: otherDim, + otherAxisInverse: otherAxisInverse + }; + + }, this); + + }, this); + + return result; + }, + + _renderHandle: function () { + var displaybles = this._displayables; + var handles = displaybles.handles = []; + var handleLabels = displaybles.handleLabels = []; + var barGroup = this._displayables.barGroup; + var size = this._size; + var dataZoomModel = this.dataZoomModel; + + barGroup.add(displaybles.filler = new Rect$2({ + draggable: true, + cursor: getCursor(this._orient), + drift: bind$4(this._onDragMove, this, 'all'), + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragstart: bind$4(this._showDataInfo, this, true), + ondragend: bind$4(this._onDragEnd, this), + onmouseover: bind$4(this._showDataInfo, this, true), + onmouseout: bind$4(this._showDataInfo, this, false), + style: { + fill: dataZoomModel.get('fillerColor'), + textPosition : 'inside' + } + })); + + // Frame border. + barGroup.add(new Rect$2(subPixelOptimizeRect({ + silent: true, + shape: { + x: 0, + y: 0, + width: size[0], + height: size[1] + }, + style: { + stroke: dataZoomModel.get('dataBackgroundColor') + || dataZoomModel.get('borderColor'), + lineWidth: DEFAULT_FRAME_BORDER_WIDTH, + fill: 'rgba(0,0,0,0)' + } + }))); + + each$26([0, 1], function (handleIndex) { + var path = createIcon( + dataZoomModel.get('handleIcon'), + { + cursor: getCursor(this._orient), + draggable: true, + drift: bind$4(this._onDragMove, this, handleIndex), + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: bind$4(this._onDragEnd, this), + onmouseover: bind$4(this._showDataInfo, this, true), + onmouseout: bind$4(this._showDataInfo, this, false) + }, + {x: -1, y: 0, width: 2, height: 2} + ); + + var bRect = path.getBoundingRect(); + this._handleHeight = parsePercent$1(dataZoomModel.get('handleSize'), this._size[1]); + this._handleWidth = bRect.width / bRect.height * this._handleHeight; + + path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle()); + var handleColor = dataZoomModel.get('handleColor'); + // Compatitable with previous version + if (handleColor != null) { + path.style.fill = handleColor; + } + + barGroup.add(handles[handleIndex] = path); + + var textStyleModel = dataZoomModel.textStyleModel; + + this.group.add( + handleLabels[handleIndex] = new Text({ + silent: true, + invisible: true, + style: { + x: 0, y: 0, text: '', + textVerticalAlign: 'middle', + textAlign: 'center', + textFill: textStyleModel.getTextColor(), + textFont: textStyleModel.getFont() + }, + z2: 10 + })); + + }, this); + }, + + /** + * @private + */ + _resetInterval: function () { + var range = this._range = this.dataZoomModel.getPercentRange(); + var viewExtent = this._getViewExtent(); + + this._handleEnds = [ + linearMap$2(range[0], [0, 100], viewExtent, true), + linearMap$2(range[1], [0, 100], viewExtent, true) + ]; + }, + + /** + * @private + * @param {(number|string)} handleIndex 0 or 1 or 'all' + * @param {number} delta + */ + _updateInterval: function (handleIndex, delta) { + var dataZoomModel = this.dataZoomModel; + var handleEnds = this._handleEnds; + var viewExtend = this._getViewExtent(); + var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + var percentExtent = [0, 100]; + + sliderMove( + delta, + handleEnds, + viewExtend, + dataZoomModel.get('zoomLock') ? 'all' : handleIndex, + minMaxSpan.minSpan != null + ? linearMap$2(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, + minMaxSpan.maxSpan != null + ? linearMap$2(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null + ); + + this._range = asc$2([ + linearMap$2(handleEnds[0], viewExtend, percentExtent, true), + linearMap$2(handleEnds[1], viewExtend, percentExtent, true) + ]); + }, + + /** + * @private + */ + _updateView: function (nonRealtime) { + var displaybles = this._displayables; + var handleEnds = this._handleEnds; + var handleInterval = asc$2(handleEnds.slice()); + var size = this._size; + + each$26([0, 1], function (handleIndex) { + // Handles + var handle = displaybles.handles[handleIndex]; + var handleHeight = this._handleHeight; + handle.attr({ + scale: [handleHeight / 2, handleHeight / 2], + position: [handleEnds[handleIndex], size[1] / 2 - handleHeight / 2] + }); + }, this); + + // Filler + displaybles.filler.setShape({ + x: handleInterval[0], + y: 0, + width: handleInterval[1] - handleInterval[0], + height: size[1] + }); + + this._updateDataInfo(nonRealtime); + }, + + /** + * @private + */ + _updateDataInfo: function (nonRealtime) { + var dataZoomModel = this.dataZoomModel; + var displaybles = this._displayables; + var handleLabels = displaybles.handleLabels; + var orient = this._orient; + var labelTexts = ['', '']; + + // FIXME + // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter) + if (dataZoomModel.get('showDetail')) { + var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); + + if (axisProxy) { + var axis = axisProxy.getAxisModel().axis; + var range = this._range; + + var dataInterval = nonRealtime + // See #4434, data and axis are not processed and reset yet in non-realtime mode. + ? axisProxy.calculateDataWindow({ + start: range[0], end: range[1] + }).valueWindow + : axisProxy.getDataValueWindow(); + + labelTexts = [ + this._formatLabel(dataInterval[0], axis), + this._formatLabel(dataInterval[1], axis) + ]; + } + } + + var orderedHandleEnds = asc$2(this._handleEnds.slice()); + + setLabel.call(this, 0); + setLabel.call(this, 1); + + function setLabel(handleIndex) { + // Label + // Text should not transform by barGroup. + // Ignore handlers transform + var barTransform = getTransform( + displaybles.handles[handleIndex].parent, this.group + ); + var direction = transformDirection( + handleIndex === 0 ? 'right' : 'left', barTransform + ); + var offset = this._handleWidth / 2 + LABEL_GAP; + var textPoint = applyTransform$1( + [ + orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), + this._size[1] / 2 + ], + barTransform + ); + handleLabels[handleIndex].setStyle({ + x: textPoint[0], + y: textPoint[1], + textVerticalAlign: orient === HORIZONTAL ? 'middle' : direction, + textAlign: orient === HORIZONTAL ? direction : 'center', + text: labelTexts[handleIndex] + }); + } + }, + + /** + * @private + */ + _formatLabel: function (value, axis) { + var dataZoomModel = this.dataZoomModel; + var labelFormatter = dataZoomModel.get('labelFormatter'); + + var labelPrecision = dataZoomModel.get('labelPrecision'); + if (labelPrecision == null || labelPrecision === 'auto') { + labelPrecision = axis.getPixelPrecision(); + } + + var valueStr = (value == null || isNaN(value)) + ? '' + // FIXME Glue code + : (axis.type === 'category' || axis.type === 'time') + ? axis.scale.getLabel(Math.round(value)) + // param of toFixed should less then 20. + : value.toFixed(Math.min(labelPrecision, 20)); + + return isFunction(labelFormatter) + ? labelFormatter(value, valueStr) + : isString(labelFormatter) + ? labelFormatter.replace('{value}', valueStr) + : valueStr; + }, + + /** + * @private + * @param {boolean} showOrHide true: show, false: hide + */ + _showDataInfo: function (showOrHide) { + // Always show when drgging. + showOrHide = this._dragging || showOrHide; + + var handleLabels = this._displayables.handleLabels; + handleLabels[0].attr('invisible', !showOrHide); + handleLabels[1].attr('invisible', !showOrHide); + }, + + _onDragMove: function (handleIndex, dx, dy) { + this._dragging = true; + + // Transform dx, dy to bar coordination. + var barTransform = this._displayables.barGroup.getLocalTransform(); + var vertex = applyTransform$1([dx, dy], barTransform, true); + + this._updateInterval(handleIndex, vertex[0]); + + var realtime = this.dataZoomModel.get('realtime'); + + this._updateView(!realtime); + + if (realtime) { + realtime && this._dispatchZoomAction(); + } + }, + + _onDragEnd: function () { + this._dragging = false; + this._showDataInfo(false); + this._dispatchZoomAction(); + }, + + _onClickPanelClick: function (e) { + var size = this._size; + var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY); + + if (localPoint[0] < 0 || localPoint[0] > size[0] + || localPoint[1] < 0 || localPoint[1] > size[1] + ) { + return; + } + + var handleEnds = this._handleEnds; + var center = (handleEnds[0] + handleEnds[1]) / 2; + + this._updateInterval('all', localPoint[0] - center); + this._updateView(); + this._dispatchZoomAction(); + }, + + /** + * This action will be throttled. + * @private + */ + _dispatchZoomAction: function () { + var range = this._range; + + this.api.dispatchAction({ + type: 'dataZoom', + from: this.uid, + dataZoomId: this.dataZoomModel.id, + start: range[0], + end: range[1] + }); + }, + + /** + * @private + */ + _findCoordRect: function () { + // Find the grid coresponding to the first axis referred by dataZoom. + var rect; + each$26(this.getTargetCoordInfo(), function (coordInfoList) { + if (!rect && coordInfoList.length) { + var coordSys = coordInfoList[0].model.coordinateSystem; + rect = coordSys.getRect && coordSys.getRect(); + } + }); + if (!rect) { + var width = this.api.getWidth(); + var height = this.api.getHeight(); + rect = { + x: width * 0.2, + y: height * 0.2, + width: width * 0.6, + height: height * 0.6 + }; + } + + return rect; + } + +}); + +function getOtherDim(thisDim) { + // FIXME + // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好 + var map$$1 = {x: 'y', y: 'x', radius: 'angle', angle: 'radius'}; + return map$$1[thisDim]; +} + +function getCursor(orient) { + return orient === 'vertical' ? 'ns-resize' : 'ew-resize'; +} + +DataZoomModel.extend({ + + type: 'dataZoom.inside', + + /** + * @protected + */ + defaultOption: { + disabled: false, // Whether disable this inside zoom. + zoomLock: false, // Whether disable zoom but only pan. + zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. + moveOnMouseMove: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'. + preventDefaultMouseMove: true + } +}); + +// Only create one roam controller for each coordinate system. +// one roam controller might be refered by two inside data zoom +// components (for example, one for x and one for y). When user +// pan or zoom, only dispatch one action for those data zoom +// components. + +var curry$6 = curry; + +var ATTR$1 = '\0_ec_dataZoom_roams'; + + +/** + * @public + * @param {module:echarts/ExtensionAPI} api + * @param {Object} dataZoomInfo + * @param {string} dataZoomInfo.coordId + * @param {Function} dataZoomInfo.containsPoint + * @param {Array.} dataZoomInfo.allCoordIds + * @param {string} dataZoomInfo.dataZoomId + * @param {number} dataZoomInfo.throttleRate + * @param {Function} dataZoomInfo.panGetRange + * @param {Function} dataZoomInfo.zoomGetRange + * @param {boolean} [dataZoomInfo.zoomLock] + * @param {boolean} [dataZoomInfo.disabled] + */ +function register$2(api, dataZoomInfo) { + var store = giveStore(api); + var theDataZoomId = dataZoomInfo.dataZoomId; + var theCoordId = dataZoomInfo.coordId; + + // Do clean when a dataZoom changes its target coordnate system. + // Avoid memory leak, dispose all not-used-registered. + each$1(store, function (record, coordId) { + var dataZoomInfos = record.dataZoomInfos; + if (dataZoomInfos[theDataZoomId] + && indexOf(dataZoomInfo.allCoordIds, theCoordId) < 0 + ) { + delete dataZoomInfos[theDataZoomId]; + record.count--; + } + }); + + cleanStore(store); + + var record = store[theCoordId]; + // Create if needed. + if (!record) { + record = store[theCoordId] = { + coordId: theCoordId, + dataZoomInfos: {}, + count: 0 + }; + record.controller = createController(api, record); + record.dispatchAction = curry(dispatchAction$1, api); + } + + // Update reference of dataZoom. + !(record.dataZoomInfos[theDataZoomId]) && record.count++; + record.dataZoomInfos[theDataZoomId] = dataZoomInfo; + + var controllerParams = mergeControllerParams(record.dataZoomInfos); + record.controller.enable(controllerParams.controlType, controllerParams.opt); + + // Consider resize, area should be always updated. + record.controller.setPointerChecker(dataZoomInfo.containsPoint); + + // Update throttle. + createOrUpdate( + record, + 'dispatchAction', + dataZoomInfo.throttleRate, + 'fixRate' + ); +} + +/** + * @public + * @param {module:echarts/ExtensionAPI} api + * @param {string} dataZoomId + */ +function unregister$1(api, dataZoomId) { + var store = giveStore(api); + + each$1(store, function (record) { + record.controller.dispose(); + var dataZoomInfos = record.dataZoomInfos; + if (dataZoomInfos[dataZoomId]) { + delete dataZoomInfos[dataZoomId]; + record.count--; + } + }); + + cleanStore(store); +} + +/** + * @public + */ +function shouldRecordRange(payload, dataZoomId) { + if (payload && payload.type === 'dataZoom' && payload.batch) { + for (var i = 0, len = payload.batch.length; i < len; i++) { + if (payload.batch[i].dataZoomId === dataZoomId) { + return false; + } + } + } + return true; +} + +/** + * @public + */ +function generateCoordId(coordModel) { + return coordModel.type + '\0_' + coordModel.id; +} + +/** + * Key: coordId, value: {dataZoomInfos: [], count, controller} + * @type {Array.} + */ +function giveStore(api) { + // Mount store on zrender instance, so that we do not + // need to worry about dispose. + var zr = api.getZr(); + return zr[ATTR$1] || (zr[ATTR$1] = {}); +} + +function createController(api, newRecord) { + var controller = new RoamController(api.getZr()); + controller.on('pan', curry$6(onPan, newRecord)); + controller.on('zoom', curry$6(onZoom, newRecord)); + + return controller; +} + +function cleanStore(store) { + each$1(store, function (record, coordId) { + if (!record.count) { + record.controller.dispose(); + delete store[coordId]; + } + }); +} + +function onPan(record, dx, dy, oldX, oldY, newX, newY) { + wrapAndDispatch(record, function (info) { + return info.panGetRange(record.controller, dx, dy, oldX, oldY, newX, newY); + }); +} + +function onZoom(record, scale, mouseX, mouseY) { + wrapAndDispatch(record, function (info) { + return info.zoomGetRange(record.controller, scale, mouseX, mouseY); + }); +} + +function wrapAndDispatch(record, getRange) { + var batch = []; + + each$1(record.dataZoomInfos, function (info) { + var range = getRange(info); + !info.disabled && range && batch.push({ + dataZoomId: info.dataZoomId, + start: range[0], + end: range[1] + }); + }); + + record.dispatchAction(batch); +} + +/** + * This action will be throttled. + */ +function dispatchAction$1(api, batch) { + api.dispatchAction({ + type: 'dataZoom', + batch: batch + }); +} + +/** + * Merge roamController settings when multiple dataZooms share one roamController. + */ +function mergeControllerParams(dataZoomInfos) { + var controlType; + var opt = {}; + var typePriority = { + 'true': 2, + 'move': 1, + 'false': 0, + 'undefined': -1 + }; + each$1(dataZoomInfos, function (dataZoomInfo) { + var oneType = dataZoomInfo.disabled ? false : dataZoomInfo.zoomLock ? 'move' : true; + typePriority[oneType] > typePriority[controlType] && (controlType = oneType); + // Do not support that different 'shift'/'ctrl'/'alt' setting used in one coord sys. + extend(opt, dataZoomInfo.roamControllerOpt); + }); + + return { + controlType: controlType, + opt: opt + }; +} + +var bind$5 = bind; + +var InsideZoomView = DataZoomView.extend({ + + type: 'dataZoom.inside', + + /** + * @override + */ + init: function (ecModel, api) { + /** + * 'throttle' is used in this.dispatchAction, so we save range + * to avoid missing some 'pan' info. + * @private + * @type {Array.} + */ + this._range; + }, + + /** + * @override + */ + render: function (dataZoomModel, ecModel, api, payload) { + InsideZoomView.superApply(this, 'render', arguments); + + // Notice: origin this._range should be maintained, and should not be re-fetched + // from dataZoomModel when payload.type is 'dataZoom', otherwise 'pan' or 'zoom' + // info will be missed because of 'throttle' of this.dispatchAction. + if (shouldRecordRange(payload, dataZoomModel.id)) { + this._range = dataZoomModel.getPercentRange(); + } + + // Reset controllers. + each$1(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) { + + var allCoordIds = map(coordInfoList, function (coordInfo) { + return generateCoordId(coordInfo.model); + }); + + each$1(coordInfoList, function (coordInfo) { + var coordModel = coordInfo.model; + var dataZoomOption = dataZoomModel.option; + + register$2( + api, + { + coordId: generateCoordId(coordModel), + allCoordIds: allCoordIds, + containsPoint: function (e, x, y) { + return coordModel.coordinateSystem.containPoint([x, y]); + }, + dataZoomId: dataZoomModel.id, + throttleRate: dataZoomModel.get('throttle', true), + panGetRange: bind$5(this._onPan, this, coordInfo, coordSysName), + zoomGetRange: bind$5(this._onZoom, this, coordInfo, coordSysName), + zoomLock: dataZoomOption.zoomLock, + disabled: dataZoomOption.disabled, + roamControllerOpt: { + zoomOnMouseWheel: dataZoomOption.zoomOnMouseWheel, + moveOnMouseMove: dataZoomOption.moveOnMouseMove, + preventDefaultMouseMove: dataZoomOption.preventDefaultMouseMove + } + } + ); + }, this); + + }, this); + }, + + /** + * @override + */ + dispose: function () { + unregister$1(this.api, this.dataZoomModel.id); + InsideZoomView.superApply(this, 'dispose', arguments); + this._range = null; + }, + + /** + * @private + */ + _onPan: function (coordInfo, coordSysName, controller, dx, dy, oldX, oldY, newX, newY) { + var range = this._range.slice(); + + // Calculate transform by the first axis. + var axisModel = coordInfo.axisModels[0]; + if (!axisModel) { + return; + } + + var directionInfo = getDirectionInfo[coordSysName]( + [oldX, oldY], [newX, newY], axisModel, controller, coordInfo + ); + + var percentDelta = directionInfo.signal + * (range[1] - range[0]) + * directionInfo.pixel / directionInfo.pixelLength; + + sliderMove(percentDelta, range, [0, 100], 'all'); + + return (this._range = range); + }, + + /** + * @private + */ + _onZoom: function (coordInfo, coordSysName, controller, scale, mouseX, mouseY) { + var range = this._range.slice(); + + // Calculate transform by the first axis. + var axisModel = coordInfo.axisModels[0]; + if (!axisModel) { + return; + } + + var directionInfo = getDirectionInfo[coordSysName]( + null, [mouseX, mouseY], axisModel, controller, coordInfo + ); + var percentPoint = ( + directionInfo.signal > 0 + ? (directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel) + : (directionInfo.pixel - directionInfo.pixelStart) + ) / directionInfo.pixelLength * (range[1] - range[0]) + range[0]; + + scale = Math.max(1 / scale, 0); + range[0] = (range[0] - percentPoint) * scale + percentPoint; + range[1] = (range[1] - percentPoint) * scale + percentPoint; + + // Restrict range. + var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + + sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan); + + return (this._range = range); + } + +}); + +var getDirectionInfo = { + + grid: function (oldPoint, newPoint, axisModel, controller, coordInfo) { + var axis = axisModel.axis; + var ret = {}; + var rect = coordInfo.model.coordinateSystem.getRect(); + oldPoint = oldPoint || [0, 0]; + + if (axis.dim === 'x') { + ret.pixel = newPoint[0] - oldPoint[0]; + ret.pixelLength = rect.width; + ret.pixelStart = rect.x; + ret.signal = axis.inverse ? 1 : -1; + } + else { // axis.dim === 'y' + ret.pixel = newPoint[1] - oldPoint[1]; + ret.pixelLength = rect.height; + ret.pixelStart = rect.y; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + }, + + polar: function (oldPoint, newPoint, axisModel, controller, coordInfo) { + var axis = axisModel.axis; + var ret = {}; + var polar = coordInfo.model.coordinateSystem; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var angleExtent = polar.getAngleAxis().getExtent(); + + oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0]; + newPoint = polar.pointToCoord(newPoint); + + if (axisModel.mainType === 'radiusAxis') { + ret.pixel = newPoint[0] - oldPoint[0]; + // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]); + // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]); + ret.pixelLength = radiusExtent[1] - radiusExtent[0]; + ret.pixelStart = radiusExtent[0]; + ret.signal = axis.inverse ? 1 : -1; + } + else { // 'angleAxis' + ret.pixel = newPoint[1] - oldPoint[1]; + // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]); + // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]); + ret.pixelLength = angleExtent[1] - angleExtent[0]; + ret.pixelStart = angleExtent[0]; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + }, + + singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) { + var axis = axisModel.axis; + var rect = coordInfo.model.coordinateSystem.getRect(); + var ret = {}; + + oldPoint = oldPoint || [0, 0]; + + if (axis.orient === 'horizontal') { + ret.pixel = newPoint[0] - oldPoint[0]; + ret.pixelLength = rect.width; + ret.pixelStart = rect.x; + ret.signal = axis.inverse ? 1 : -1; + } + else { // 'vertical' + ret.pixel = newPoint[1] - oldPoint[1]; + ret.pixelLength = rect.height; + ret.pixelStart = rect.y; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + } +}; + +registerProcessor(function (ecModel, api) { + + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + // We calculate window and reset axis here but not in model + // init stage and not after action dispatch handler, because + // reset should be called after seriesData.restoreData. + dataZoomModel.eachTargetAxis(resetSingleAxis); + + // Caution: data zoom filtering is order sensitive when using + // percent range and no min/max/scale set on axis. + // For example, we have dataZoom definition: + // [ + // {xAxisIndex: 0, start: 30, end: 70}, + // {yAxisIndex: 0, start: 20, end: 80} + // ] + // In this case, [20, 80] of y-dataZoom should be based on data + // that have filtered by x-dataZoom using range of [30, 70], + // but should not be based on full raw data. Thus sliding + // x-dataZoom will change both ranges of xAxis and yAxis, + // while sliding y-dataZoom will only change the range of yAxis. + // So we should filter x-axis after reset x-axis immediately, + // and then reset y-axis and filter y-axis. + dataZoomModel.eachTargetAxis(filterSingleAxis); + }); + + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + // Fullfill all of the range props so that user + // is able to get them from chart.getOption(). + var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); + var percentRange = axisProxy.getDataPercentWindow(); + var valueRange = axisProxy.getDataValueWindow(); + + dataZoomModel.setRawRange({ + start: percentRange[0], + end: percentRange[1], + startValue: valueRange[0], + endValue: valueRange[1] + }, true); + }); +}); + +function resetSingleAxis(dimNames, axisIndex, dataZoomModel) { + dataZoomModel.getAxisProxy(dimNames.name, axisIndex).reset(dataZoomModel); +} + +function filterSingleAxis(dimNames, axisIndex, dataZoomModel) { + dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel); +} + +registerAction('dataZoom', function (payload, ecModel) { + + var linkedNodesFinder = createLinkedNodesFinder( + bind(ecModel.eachComponent, ecModel, 'dataZoom'), + eachAxisDim$1, + function (model, dimNames) { + return model.get(dimNames.axisIndex); + } + ); + + var effectedModels = []; + + ecModel.eachComponent( + {mainType: 'dataZoom', query: payload}, + function (model, index) { + effectedModels.push.apply( + effectedModels, linkedNodesFinder(model).nodes + ); + } + ); + + each$1(effectedModels, function (dataZoomModel, index) { + dataZoomModel.setRawRange({ + start: payload.start, + end: payload.end, + startValue: payload.startValue, + endValue: payload.endValue + }); + }); + +}); + +/** + * DataZoom component entry + */ + +var each$27 = each$1; + +var preprocessor$2 = function (option) { + var visualMap = option && option.visualMap; + + if (!isArray(visualMap)) { + visualMap = visualMap ? [visualMap] : []; + } + + each$27(visualMap, function (opt) { + if (!opt) { + return; + } + + // rename splitList to pieces + if (has$1(opt, 'splitList') && !has$1(opt, 'pieces')) { + opt.pieces = opt.splitList; + delete opt.splitList; + } + + var pieces = opt.pieces; + if (pieces && isArray(pieces)) { + each$27(pieces, function (piece) { + if (isObject(piece)) { + if (has$1(piece, 'start') && !has$1(piece, 'min')) { + piece.min = piece.start; + } + if (has$1(piece, 'end') && !has$1(piece, 'max')) { + piece.max = piece.end; + } + } + }); + } + }); +}; + +function has$1(obj, name) { + return obj && obj.hasOwnProperty && obj.hasOwnProperty(name); +} + +ComponentModel.registerSubTypeDefaulter('visualMap', function (option) { + // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used. + return ( + !option.categories + && ( + !( + option.pieces + ? option.pieces.length > 0 + : option.splitNumber > 0 + ) + || option.calculable + ) + ) + ? 'continuous' : 'piecewise'; +}); + +registerVisual(PRIORITY.VISUAL.COMPONENT, function (ecModel) { + ecModel.eachComponent('visualMap', function (visualMapModel) { + processSingleVisualMap(visualMapModel, ecModel); + }); + + prepareVisualMeta(ecModel); +}); + +function processSingleVisualMap(visualMapModel, ecModel) { + visualMapModel.eachTargetSeries(function (seriesModel) { + var data = seriesModel.getData(); + + applyVisual( + visualMapModel.stateList, + visualMapModel.targetVisuals, + data, + visualMapModel.getValueState, + visualMapModel, + visualMapModel.getDataDimension(data) + ); + }); +} + +// Only support color. +function prepareVisualMeta(ecModel) { + ecModel.eachSeries(function (seriesModel) { + var data = seriesModel.getData(); + var visualMetaList = []; + + ecModel.eachComponent('visualMap', function (visualMapModel) { + if (visualMapModel.isTargetSeries(seriesModel)) { + var visualMeta = visualMapModel.getVisualMeta( + bind(getColorVisual, null, seriesModel, visualMapModel) + ) || {stops: [], outerColors: []}; + visualMeta.dimension = visualMapModel.getDataDimension(data); + visualMetaList.push(visualMeta); + } + }); + + // console.log(JSON.stringify(visualMetaList.map(a => a.stops))); + seriesModel.getData().setVisual('visualMeta', visualMetaList); + }); +} + +// FIXME +// performance and export for heatmap? +// value can be Infinity or -Infinity +function getColorVisual(seriesModel, visualMapModel, value, valueState) { + var mappings = visualMapModel.targetVisuals[valueState]; + var visualTypes = VisualMapping.prepareVisualTypes(mappings); + var resultVisual = { + color: seriesModel.getData().getVisual('color') // default color. + }; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + var mapping = mappings[ + type === 'opacity' ? '__alphaForOpacity' : type + ]; + mapping && mapping.applyVisual(value, getVisual, setVisual); + } + + return resultVisual.color; + + function getVisual(key) { + return resultVisual[key]; + } + + function setVisual(key, value) { + resultVisual[key] = value; + } +} + +/** + * @file Visual mapping. + */ + +var visualDefault = { + + /** + * @public + */ + get: function (visualType, key, isCategory) { + var value = clone( + (defaultOption$3[visualType] || {})[key] + ); + + return isCategory + ? (isArray(value) ? value[value.length - 1] : value) + : value; + } + +}; + +var defaultOption$3 = { + + color: { + active: ['#006edd', '#e0ffff'], + inactive: ['rgba(0,0,0,0)'] + }, + + colorHue: { + active: [0, 360], + inactive: [0, 0] + }, + + colorSaturation: { + active: [0.3, 1], + inactive: [0, 0] + }, + + colorLightness: { + active: [0.9, 0.5], + inactive: [0, 0] + }, + + colorAlpha: { + active: [0.3, 1], + inactive: [0, 0] + }, + + opacity: { + active: [0.3, 1], + inactive: [0, 0] + }, + + symbol: { + active: ['circle', 'roundRect', 'diamond'], + inactive: ['none'] + }, + + symbolSize: { + active: [10, 50], + inactive: [0, 0] + } +}; + +var mapVisual$2 = VisualMapping.mapVisual; +var eachVisual = VisualMapping.eachVisual; +var isArray$3 = isArray; +var each$28 = each$1; +var asc$3 = asc; +var linearMap$3 = linearMap; +var noop$2 = noop; + +var DEFAULT_COLOR = ['#f6efa6', '#d88273', '#bf444c']; + +var VisualMapModel = extendComponentModel({ + + type: 'visualMap', + + dependencies: ['series'], + + /** + * @readOnly + * @type {Array.} + */ + stateList: ['inRange', 'outOfRange'], + + /** + * @readOnly + * @type {Array.} + */ + replacableOptionKeys: [ + 'inRange', 'outOfRange', 'target', 'controller', 'color' + ], + + /** + * [lowerBound, upperBound] + * + * @readOnly + * @type {Array.} + */ + dataBound: [-Infinity, Infinity], + + /** + * @readOnly + * @type {string|Object} + */ + layoutMode: {type: 'box', ignoreSize: true}, + + /** + * @protected + */ + defaultOption: { + show: true, + + zlevel: 0, + z: 4, + + seriesIndex: 'all', // 'all' or null/undefined: all series. + // A number or an array of number: the specified series. + + // set min: 0, max: 200, only for campatible with ec2. + // In fact min max should not have default value. + min: 0, // min value, must specified if pieces is not specified. + max: 200, // max value, must specified if pieces is not specified. + + dimension: null, + inRange: null, // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha', + // 'symbol', 'symbolSize' + outOfRange: null, // 'color', 'colorHue', 'colorSaturation', + // 'colorLightness', 'colorAlpha', + // 'symbol', 'symbolSize' + + left: 0, // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px) + right: null, // The same as left. + top: null, // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px) + bottom: 0, // The same as top. + + itemWidth: null, + itemHeight: null, + inverse: false, + orient: 'vertical', // 'horizontal' ¦ 'vertical' + + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', // 值域边框颜色 + contentColor: '#5793f3', + inactiveColor: '#aaa', + borderWidth: 0, // 值域边框线宽,单位px,默认为0(无边框) + padding: 5, // 值域内边距,单位px,默认各方向内边距为5, + // 接受数组分别设定上右下左边距,同css + textGap: 10, // + precision: 0, // 小数精度,默认为0,无小数点 + color: null, //颜色(deprecated,兼容ec2,顺序同pieces,不同于inRange/outOfRange) + + formatter: null, + text: null, // 文本,如['高', '低'],兼容ec2,text[0]对应高值,text[1]对应低值 + textStyle: { + color: '#333' // 值域文字颜色 + } + }, + + /** + * @protected + */ + init: function (option, parentModel, ecModel) { + + /** + * @private + * @type {Array.} + */ + this._dataExtent; + + /** + * @readOnly + */ + this.targetVisuals = {}; + + /** + * @readOnly + */ + this.controllerVisuals = {}; + + /** + * @readOnly + */ + this.textStyleModel; + + /** + * [width, height] + * @readOnly + * @type {Array.} + */ + this.itemSize; + + this.mergeDefaultAndTheme(option, ecModel); + }, + + /** + * @protected + */ + optionUpdated: function (newOption, isInit) { + var thisOption = this.option; + + // FIXME + // necessary? + // Disable realtime view update if canvas is not supported. + if (!env$1.canvasSupported) { + thisOption.realtime = false; + } + + !isInit && replaceVisualOption( + thisOption, newOption, this.replacableOptionKeys + ); + + this.textStyleModel = this.getModel('textStyle'); + + this.resetItemSize(); + + this.completeVisualOption(); + }, + + /** + * @protected + */ + resetVisual: function (supplementVisualOption) { + var stateList = this.stateList; + supplementVisualOption = bind(supplementVisualOption, this); + + this.controllerVisuals = createVisualMappings( + this.option.controller, stateList, supplementVisualOption + ); + this.targetVisuals = createVisualMappings( + this.option.target, stateList, supplementVisualOption + ); + }, + + /** + * @protected + * @return {Array.} An array of series indices. + */ + getTargetSeriesIndices: function () { + var optionSeriesIndex = this.option.seriesIndex; + var seriesIndices = []; + + if (optionSeriesIndex == null || optionSeriesIndex === 'all') { + this.ecModel.eachSeries(function (seriesModel, index) { + seriesIndices.push(index); + }); + } + else { + seriesIndices = normalizeToArray(optionSeriesIndex); + } + + return seriesIndices; + }, + + /** + * @public + */ + eachTargetSeries: function (callback, context) { + each$1(this.getTargetSeriesIndices(), function (seriesIndex) { + callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex)); + }, this); + }, + + /** + * @pubilc + */ + isTargetSeries: function (seriesModel) { + var is = false; + this.eachTargetSeries(function (model) { + model === seriesModel && (is = true); + }); + return is; + }, + + /** + * @example + * this.formatValueText(someVal); // format single numeric value to text. + * this.formatValueText(someVal, true); // format single category value to text. + * this.formatValueText([min, max]); // format numeric min-max to text. + * this.formatValueText([this.dataBound[0], max]); // using data lower bound. + * this.formatValueText([min, this.dataBound[1]]); // using data upper bound. + * + * @param {number|Array.} value Real value, or this.dataBound[0 or 1]. + * @param {boolean} [isCategory=false] Only available when value is number. + * @param {Array.} edgeSymbols Open-close symbol when value is interval. + * @return {string} + * @protected + */ + formatValueText: function(value, isCategory, edgeSymbols) { + var option = this.option; + var precision = option.precision; + var dataBound = this.dataBound; + var formatter = option.formatter; + var isMinMax; + var textValue; + edgeSymbols = edgeSymbols || ['<', '>']; + + if (isArray(value)) { + value = value.slice(); + isMinMax = true; + } + + textValue = isCategory + ? value + : (isMinMax + ? [toFixed(value[0]), toFixed(value[1])] + : toFixed(value) + ); + + if (isString(formatter)) { + return formatter + .replace('{value}', isMinMax ? textValue[0] : textValue) + .replace('{value2}', isMinMax ? textValue[1] : textValue); + } + else if (isFunction(formatter)) { + return isMinMax + ? formatter(value[0], value[1]) + : formatter(value); + } + + if (isMinMax) { + if (value[0] === dataBound[0]) { + return edgeSymbols[0] + ' ' + textValue[1]; + } + else if (value[1] === dataBound[1]) { + return edgeSymbols[1] + ' ' + textValue[0]; + } + else { + return textValue[0] + ' - ' + textValue[1]; + } + } + else { // Format single value (includes category case). + return textValue; + } + + function toFixed(val) { + return val === dataBound[0] + ? 'min' + : val === dataBound[1] + ? 'max' + : (+val).toFixed(Math.min(precision, 20)); + } + }, + + /** + * @protected + */ + resetExtent: function () { + var thisOption = this.option; + + // Can not calculate data extent by data here. + // Because series and data may be modified in processing stage. + // So we do not support the feature "auto min/max". + + var extent = asc$3([thisOption.min, thisOption.max]); + + this._dataExtent = extent; + }, + + /** + * @public + * @param {module:echarts/data/List} list + * @return {string} Concrete dimention. If return null/undefined, + * no dimension used. + */ + getDataDimension: function (list) { + var optDim = this.option.dimension; + return optDim != null + ? optDim : list.dimensions.length - 1; + }, + + /** + * @public + * @override + */ + getExtent: function () { + return this._dataExtent.slice(); + }, + + /** + * @protected + */ + completeVisualOption: function () { + var thisOption = this.option; + var base = {inRange: thisOption.inRange, outOfRange: thisOption.outOfRange}; + + var target = thisOption.target || (thisOption.target = {}); + var controller = thisOption.controller || (thisOption.controller = {}); + + merge(target, base); // Do not override + merge(controller, base); // Do not override + + var isCategory = this.isCategory(); + + completeSingle.call(this, target); + completeSingle.call(this, controller); + completeInactive.call(this, target, 'inRange', 'outOfRange'); + // completeInactive.call(this, target, 'outOfRange', 'inRange'); + completeController.call(this, controller); + + function completeSingle(base) { + // Compatible with ec2 dataRange.color. + // The mapping order of dataRange.color is: [high value, ..., low value] + // whereas inRange.color and outOfRange.color is [low value, ..., high value] + // Notice: ec2 has no inverse. + if (isArray$3(thisOption.color) + // If there has been inRange: {symbol: ...}, adding color is a mistake. + // So adding color only when no inRange defined. + && !base.inRange + ) { + base.inRange = {color: thisOption.color.slice().reverse()}; + } + + // Compatible with previous logic, always give a defautl color, otherwise + // simple config with no inRange and outOfRange will not work. + // Originally we use visualMap.color as the default color, but setOption at + // the second time the default color will be erased. So we change to use + // constant DEFAULT_COLOR. + // If user do not want the defualt color, set inRange: {color: null}. + base.inRange = base.inRange || {color: DEFAULT_COLOR}; + + // If using shortcut like: {inRange: 'symbol'}, complete default value. + each$28(this.stateList, function (state) { + var visualType = base[state]; + + if (isString(visualType)) { + var defa = visualDefault.get(visualType, 'active', isCategory); + if (defa) { + base[state] = {}; + base[state][visualType] = defa; + } + else { + // Mark as not specified. + delete base[state]; + } + } + }, this); + } + + function completeInactive(base, stateExist, stateAbsent) { + var optExist = base[stateExist]; + var optAbsent = base[stateAbsent]; + + if (optExist && !optAbsent) { + optAbsent = base[stateAbsent] = {}; + each$28(optExist, function (visualData, visualType) { + if (!VisualMapping.isValidType(visualType)) { + return; + } + + var defa = visualDefault.get(visualType, 'inactive', isCategory); + + if (defa != null) { + optAbsent[visualType] = defa; + + // Compatibable with ec2: + // Only inactive color to rgba(0,0,0,0) can not + // make label transparent, so use opacity also. + if (visualType === 'color' + && !optAbsent.hasOwnProperty('opacity') + && !optAbsent.hasOwnProperty('colorAlpha') + ) { + optAbsent.opacity = [0, 0]; + } + } + }); + } + } + + function completeController(controller) { + var symbolExists = (controller.inRange || {}).symbol + || (controller.outOfRange || {}).symbol; + var symbolSizeExists = (controller.inRange || {}).symbolSize + || (controller.outOfRange || {}).symbolSize; + var inactiveColor = this.get('inactiveColor'); + + each$28(this.stateList, function (state) { + + var itemSize = this.itemSize; + var visuals = controller[state]; + + // Set inactive color for controller if no other color + // attr (like colorAlpha) specified. + if (!visuals) { + visuals = controller[state] = { + color: isCategory ? inactiveColor : [inactiveColor] + }; + } + + // Consistent symbol and symbolSize if not specified. + if (visuals.symbol == null) { + visuals.symbol = symbolExists + && clone(symbolExists) + || (isCategory ? 'roundRect' : ['roundRect']); + } + if (visuals.symbolSize == null) { + visuals.symbolSize = symbolSizeExists + && clone(symbolSizeExists) + || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]); + } + + // Filter square and none. + visuals.symbol = mapVisual$2(visuals.symbol, function (symbol) { + return (symbol === 'none' || symbol === 'square') ? 'roundRect' : symbol; + }); + + // Normalize symbolSize + var symbolSize = visuals.symbolSize; + + if (symbolSize != null) { + var max = -Infinity; + // symbolSize can be object when categories defined. + eachVisual(symbolSize, function (value) { + value > max && (max = value); + }); + visuals.symbolSize = mapVisual$2(symbolSize, function (value) { + return linearMap$3(value, [0, max], [0, itemSize[0]], true); + }); + } + + }, this); + } + }, + + /** + * @protected + */ + resetItemSize: function () { + this.itemSize = [ + parseFloat(this.get('itemWidth')), + parseFloat(this.get('itemHeight')) + ]; + }, + + /** + * @public + */ + isCategory: function () { + return !!this.option.categories; + }, + + /** + * @public + * @abstract + */ + setSelected: noop$2, + + /** + * @public + * @abstract + * @param {*|module:echarts/data/List} valueOrData + * @param {number} dataIndex + * @return {string} state See this.stateList + */ + getValueState: noop$2, + + /** + * FIXME + * Do not publish to thirt-part-dev temporarily + * util the interface is stable. (Should it return + * a function but not visual meta?) + * + * @pubilc + * @abstract + * @param {Function} getColorVisual + * params: value, valueState + * return: color + * @return {Object} visualMeta + * should includes {stops, outerColors} + * outerColor means [colorBeyondMinValue, colorBeyondMaxValue] + */ + getVisualMeta: noop$2 + +}); + +// Constant +var DEFAULT_BAR_BOUND = [20, 140]; + +var ContinuousModel = VisualMapModel.extend({ + + type: 'visualMap.continuous', + + /** + * @protected + */ + defaultOption: { + align: 'auto', // 'auto', 'left', 'right', 'top', 'bottom' + calculable: false, // This prop effect default component type determine, + // See echarts/component/visualMap/typeDefaulter. + range: null, // selected range. In default case `range` is [min, max] + // and can auto change along with modification of min max, + // util use specifid a range. + realtime: true, // Whether realtime update. + itemHeight: null, // The length of the range control edge. + itemWidth: null, // The length of the other side. + hoverLink: true, // Enable hover highlight. + hoverLinkDataSize: null,// The size of hovered data. + hoverLinkOnHandle: null // Whether trigger hoverLink when hover handle. + // If not specified, follow the value of `realtime`. + }, + + /** + * @override + */ + optionUpdated: function (newOption, isInit) { + ContinuousModel.superApply(this, 'optionUpdated', arguments); + + this.resetExtent(); + + this.resetVisual(function (mappingOption) { + mappingOption.mappingMethod = 'linear'; + mappingOption.dataExtent = this.getExtent(); + }); + + this._resetRange(); + }, + + /** + * @protected + * @override + */ + resetItemSize: function () { + ContinuousModel.superApply(this, 'resetItemSize', arguments); + + var itemSize = this.itemSize; + + this._orient === 'horizontal' && itemSize.reverse(); + + (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]); + (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]); + }, + + /** + * @private + */ + _resetRange: function () { + var dataExtent = this.getExtent(); + var range = this.option.range; + + if (!range || range.auto) { + // `range` should always be array (so we dont use other + // value like 'auto') for user-friend. (consider getOption). + dataExtent.auto = 1; + this.option.range = dataExtent; + } + else if (isArray(range)) { + if (range[0] > range[1]) { + range.reverse(); + } + range[0] = Math.max(range[0], dataExtent[0]); + range[1] = Math.min(range[1], dataExtent[1]); + } + }, + + /** + * @protected + * @override + */ + completeVisualOption: function () { + VisualMapModel.prototype.completeVisualOption.apply(this, arguments); + + each$1(this.stateList, function (state) { + var symbolSize = this.option.controller[state].symbolSize; + if (symbolSize && symbolSize[0] !== symbolSize[1]) { + symbolSize[0] = 0; // For good looking. + } + }, this); + }, + + /** + * @override + */ + setSelected: function (selected) { + this.option.range = selected.slice(); + this._resetRange(); + }, + + /** + * @public + */ + getSelected: function () { + var dataExtent = this.getExtent(); + + var dataInterval = asc( + (this.get('range') || []).slice() + ); + + // Clamp + dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]); + dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]); + dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]); + dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]); + + return dataInterval; + }, + + /** + * @override + */ + getValueState: function (value) { + var range = this.option.range; + var dataExtent = this.getExtent(); + + // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'. + // range[1] is processed likewise. + return ( + (range[0] <= dataExtent[0] || range[0] <= value) + && (range[1] >= dataExtent[1] || value <= range[1]) + ) ? 'inRange' : 'outOfRange'; + }, + + /** + * @params {Array.} range target value: range[0] <= value && value <= range[1] + * @return {Array.} [{seriesId, dataIndices: >}, ...] + */ + findTargetDataIndices: function (range) { + var result = []; + + this.eachTargetSeries(function (seriesModel) { + var dataIndices = []; + var data = seriesModel.getData(); + + data.each(this.getDataDimension(data), function (value, dataIndex) { + range[0] <= value && value <= range[1] && dataIndices.push(dataIndex); + }, true, this); + + result.push({seriesId: seriesModel.id, dataIndex: dataIndices}); + }, this); + + return result; + }, + + /** + * @implement + */ + getVisualMeta: function (getColorVisual) { + var oVals = getColorStopValues(this, 'outOfRange', this.getExtent()); + var iVals = getColorStopValues(this, 'inRange', this.option.range.slice()); + var stops = []; + + function setStop(value, valueState) { + stops.push({ + value: value, + color: getColorVisual(value, valueState) + }); + } + + // Format to: outOfRange -- inRange -- outOfRange. + var iIdx = 0; + var oIdx = 0; + var iLen = iVals.length; + var oLen = oVals.length; + + for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) { + // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored. + if (oVals[oIdx] < iVals[iIdx]) { + setStop(oVals[oIdx], 'outOfRange'); + } + } + for (var first = 1; iIdx < iLen; iIdx++, first = 0) { + // If range is full, value beyond min, max will be clamped. + // make a singularity + first && stops.length && setStop(iVals[iIdx], 'outOfRange'); + setStop(iVals[iIdx], 'inRange'); + } + for (var first = 1; oIdx < oLen; oIdx++) { + if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) { + // make a singularity + if (first) { + stops.length && setStop(stops[stops.length - 1].value, 'outOfRange'); + first = 0; + } + setStop(oVals[oIdx], 'outOfRange'); + } + } + + var stopsLen = stops.length; + + return { + stops: stops, + outerColors: [ + stopsLen ? stops[0].color : 'transparent', + stopsLen ? stops[stopsLen - 1].color : 'transparent' + ] + }; + } + +}); + +function getColorStopValues(visualMapModel, valueState, dataExtent) { + if (dataExtent[0] === dataExtent[1]) { + return dataExtent.slice(); + } + + // When using colorHue mapping, it is not linear color any more. + // Moreover, canvas gradient seems not to be accurate linear. + // FIXME + // Should be arbitrary value 100? or based on pixel size? + var count = 200; + var step = (dataExtent[1] - dataExtent[0]) / count; + + var value = dataExtent[0]; + var stopValues = []; + for (var i = 0; i <= count && value < dataExtent[1]; i++) { + stopValues.push(value); + value += step; + } + stopValues.push(dataExtent[1]); + + return stopValues; +} + +var VisualMapView = extendComponentView({ + + type: 'visualMap', + + /** + * @readOnly + * @type {Object} + */ + autoPositionValues: {left: 1, right: 1, top: 1, bottom: 1}, + + init: function (ecModel, api) { + /** + * @readOnly + * @type {module:echarts/model/Global} + */ + this.ecModel = ecModel; + + /** + * @readOnly + * @type {module:echarts/ExtensionAPI} + */ + this.api = api; + + /** + * @readOnly + * @type {module:echarts/component/visualMap/visualMapModel} + */ + this.visualMapModel; + }, + + /** + * @protected + */ + render: function (visualMapModel, ecModel, api, payload) { + this.visualMapModel = visualMapModel; + + if (visualMapModel.get('show') === false) { + this.group.removeAll(); + return; + } + + this.doRender.apply(this, arguments); + }, + + /** + * @protected + */ + renderBackground: function (group) { + var visualMapModel = this.visualMapModel; + var padding = normalizeCssArray$1(visualMapModel.get('padding') || 0); + var rect = group.getBoundingRect(); + + group.add(new Rect({ + z2: -1, // Lay background rect on the lowest layer. + silent: true, + shape: { + x: rect.x - padding[3], + y: rect.y - padding[0], + width: rect.width + padding[3] + padding[1], + height: rect.height + padding[0] + padding[2] + }, + style: { + fill: visualMapModel.get('backgroundColor'), + stroke: visualMapModel.get('borderColor'), + lineWidth: visualMapModel.get('borderWidth') + } + })); + }, + + /** + * @protected + * @param {number} targetValue can be Infinity or -Infinity + * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize' + * @param {Object} [opts] + * @param {string=} [opts.forceState] Specify state, instead of using getValueState method. + * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget. + * @return {*} Visual value. + */ + getControllerVisual: function (targetValue, visualCluster, opts) { + opts = opts || {}; + + var forceState = opts.forceState; + var visualMapModel = this.visualMapModel; + var visualObj = {}; + + // Default values. + if (visualCluster === 'symbol') { + visualObj.symbol = visualMapModel.get('itemSymbol'); + } + if (visualCluster === 'color') { + var defaultColor = visualMapModel.get('contentColor'); + visualObj.color = defaultColor; + } + + function getter(key) { + return visualObj[key]; + } + + function setter(key, value) { + visualObj[key] = value; + } + + var mappings = visualMapModel.controllerVisuals[ + forceState || visualMapModel.getValueState(targetValue) + ]; + var visualTypes = VisualMapping.prepareVisualTypes(mappings); + + each$1(visualTypes, function (type) { + var visualMapping = mappings[type]; + if (opts.convertOpacityToAlpha && type === 'opacity') { + type = 'colorAlpha'; + visualMapping = mappings.__alphaForOpacity; + } + if (VisualMapping.dependsOn(type, visualCluster)) { + visualMapping && visualMapping.applyVisual( + targetValue, getter, setter + ); + } + }); + + return visualObj[visualCluster]; + }, + + /** + * @protected + */ + positionGroup: function (group) { + var model = this.visualMapModel; + var api = this.api; + + positionElement( + group, + model.getBoxLayoutParams(), + {width: api.getWidth(), height: api.getHeight()} + ); + }, + + /** + * @protected + * @abstract + */ + doRender: noop + +}); + +/** + * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\ + * @param {module:echarts/ExtensionAPI} api + * @param {Array.} itemSize always [short, long] + * @return {string} 'left' or 'right' or 'top' or 'bottom' + */ +function getItemAlign(visualMapModel, api, itemSize) { + var modelOption = visualMapModel.option; + var itemAlign = modelOption.align; + + if (itemAlign != null && itemAlign !== 'auto') { + return itemAlign; + } + + // Auto decision align. + var ecSize = {width: api.getWidth(), height: api.getHeight()}; + var realIndex = modelOption.orient === 'horizontal' ? 1 : 0; + + var paramsSet = [ + ['left', 'right', 'width'], + ['top', 'bottom', 'height'] + ]; + var reals = paramsSet[realIndex]; + var fakeValue = [0, null, 10]; + + var layoutInput = {}; + for (var i = 0; i < 3; i++) { + layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i]; + layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]]; + } + + var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex]; + var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding); + + return reals[ + (rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5 + < ecSize[rParam[1]] * 0.5 ? 0 : 1 + ]; +} + +/** + * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and + * dataIndexInside means filtered index. + */ +function convertDataIndex(batch) { + each$1(batch || [], function (batchItem) { + if (batch.dataIndex != null) { + batch.dataIndexInside = batch.dataIndex; + batch.dataIndex = null; + } + }); + return batch; +} + +var linearMap$4 = linearMap; +var each$29 = each$1; +var mathMin$7 = Math.min; +var mathMax$7 = Math.max; + +// Arbitrary value +var HOVER_LINK_SIZE = 12; +var HOVER_LINK_OUT = 6; + +// Notice: +// Any "interval" should be by the order of [low, high]. +// "handle0" (handleIndex === 0) maps to +// low data value: this._dataInterval[0] and has low coord. +// "handle1" (handleIndex === 1) maps to +// high data value: this._dataInterval[1] and has high coord. +// The logic of transform is implemented in this._createBarGroup. + +var ContinuousView = VisualMapView.extend({ + + type: 'visualMap.continuous', + + /** + * @override + */ + init: function () { + + ContinuousView.superApply(this, 'init', arguments); + + /** + * @private + */ + this._shapes = {}; + + /** + * @private + */ + this._dataInterval = []; + + /** + * @private + */ + this._handleEnds = []; + + /** + * @private + */ + this._orient; + + /** + * @private + */ + this._useHandle; + + /** + * @private + */ + this._hoverLinkDataIndices = []; + + /** + * @private + */ + this._dragging; + + /** + * @private + */ + this._hovering; + }, + + /** + * @protected + * @override + */ + doRender: function (visualMapModel, ecModel, api, payload) { + if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) { + this._buildView(); + } + }, + + /** + * @private + */ + _buildView: function () { + this.group.removeAll(); + + var visualMapModel = this.visualMapModel; + var thisGroup = this.group; + + this._orient = visualMapModel.get('orient'); + this._useHandle = visualMapModel.get('calculable'); + + this._resetInterval(); + + this._renderBar(thisGroup); + + var dataRangeText = visualMapModel.get('text'); + this._renderEndsText(thisGroup, dataRangeText, 0); + this._renderEndsText(thisGroup, dataRangeText, 1); + + // Do this for background size calculation. + this._updateView(true); + + // After updating view, inner shapes is built completely, + // and then background can be rendered. + this.renderBackground(thisGroup); + + // Real update view + this._updateView(); + + this._enableHoverLinkToSeries(); + this._enableHoverLinkFromSeries(); + + this.positionGroup(thisGroup); + }, + + /** + * @private + */ + _renderEndsText: function (group, dataRangeText, endsIndex) { + if (!dataRangeText) { + return; + } + + // Compatible with ec2, text[0] map to high value, text[1] map low value. + var text = dataRangeText[1 - endsIndex]; + text = text != null ? text + '' : ''; + + var visualMapModel = this.visualMapModel; + var textGap = visualMapModel.get('textGap'); + var itemSize = visualMapModel.itemSize; + + var barGroup = this._shapes.barGroup; + var position = this._applyTransform( + [ + itemSize[0] / 2, + endsIndex === 0 ? -textGap : itemSize[1] + textGap + ], + barGroup + ); + var align = this._applyTransform( + endsIndex === 0 ? 'bottom' : 'top', + barGroup + ); + var orient = this._orient; + var textStyleModel = this.visualMapModel.textStyleModel; + + this.group.add(new Text({ + style: { + x: position[0], + y: position[1], + textVerticalAlign: orient === 'horizontal' ? 'middle' : align, + textAlign: orient === 'horizontal' ? align : 'center', + text: text, + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + })); + }, + + /** + * @private + */ + _renderBar: function (targetGroup) { + var visualMapModel = this.visualMapModel; + var shapes = this._shapes; + var itemSize = visualMapModel.itemSize; + var orient = this._orient; + var useHandle = this._useHandle; + var itemAlign = getItemAlign(visualMapModel, this.api, itemSize); + var barGroup = shapes.barGroup = this._createBarGroup(itemAlign); + + // Bar + barGroup.add(shapes.outOfRange = createPolygon()); + barGroup.add(shapes.inRange = createPolygon( + null, + useHandle ? getCursor$1(this._orient) : null, + bind(this._dragHandle, this, 'all', false), + bind(this._dragHandle, this, 'all', true) + )); + + var textRect = visualMapModel.textStyleModel.getTextRect('国'); + var textSize = mathMax$7(textRect.width, textRect.height); + + // Handle + if (useHandle) { + shapes.handleThumbs = []; + shapes.handleLabels = []; + shapes.handleLabelPoints = []; + + this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign); + this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign); + } + + this._createIndicator(barGroup, itemSize, textSize, orient); + + targetGroup.add(barGroup); + }, + + /** + * @private + */ + _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) { + var onDrift = bind(this._dragHandle, this, handleIndex, false); + var onDragEnd = bind(this._dragHandle, this, handleIndex, true); + var handleThumb = createPolygon( + createHandlePoints(handleIndex, textSize), + getCursor$1(this._orient), + onDrift, + onDragEnd + ); + handleThumb.position[0] = itemSize[0]; + barGroup.add(handleThumb); + + // Text is always horizontal layout but should not be effected by + // transform (orient/inverse). So label is built separately but not + // use zrender/graphic/helper/RectText, and is located based on view + // group (according to handleLabelPoint) but not barGroup. + var textStyleModel = this.visualMapModel.textStyleModel; + var handleLabel = new Text({ + draggable: true, + drift: onDrift, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: onDragEnd, + style: { + x: 0, y: 0, text: '', + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + }); + this.group.add(handleLabel); + + var handleLabelPoint = [ + orient === 'horizontal' + ? textSize / 2 + : textSize * 1.5, + orient === 'horizontal' + ? (handleIndex === 0 ? -(textSize * 1.5) : (textSize * 1.5)) + : (handleIndex === 0 ? -textSize / 2 : textSize / 2) + ]; + + var shapes = this._shapes; + shapes.handleThumbs[handleIndex] = handleThumb; + shapes.handleLabelPoints[handleIndex] = handleLabelPoint; + shapes.handleLabels[handleIndex] = handleLabel; + }, + + /** + * @private + */ + _createIndicator: function (barGroup, itemSize, textSize, orient) { + var indicator = createPolygon([[0, 0]], 'move'); + indicator.position[0] = itemSize[0]; + indicator.attr({invisible: true, silent: true}); + barGroup.add(indicator); + + var textStyleModel = this.visualMapModel.textStyleModel; + var indicatorLabel = new Text({ + silent: true, + invisible: true, + style: { + x: 0, y: 0, text: '', + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + }); + this.group.add(indicatorLabel); + + var indicatorLabelPoint = [ + orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3, + 0 + ]; + + var shapes = this._shapes; + shapes.indicator = indicator; + shapes.indicatorLabel = indicatorLabel; + shapes.indicatorLabelPoint = indicatorLabelPoint; + }, + + /** + * @private + */ + _dragHandle: function (handleIndex, isEnd, dx, dy) { + if (!this._useHandle) { + return; + } + + this._dragging = !isEnd; + + if (!isEnd) { + // Transform dx, dy to bar coordination. + var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true); + this._updateInterval(handleIndex, vertex[1]); + + // Considering realtime, update view should be executed + // before dispatch action. + this._updateView(); + } + + // dragEnd do not dispatch action when realtime. + if (isEnd === !this.visualMapModel.get('realtime')) { // jshint ignore:line + this.api.dispatchAction({ + type: 'selectDataRange', + from: this.uid, + visualMapId: this.visualMapModel.id, + selected: this._dataInterval.slice() + }); + } + + if (isEnd) { + !this._hovering && this._clearHoverLinkToSeries(); + } + else if (useHoverLinkOnHandle(this.visualMapModel)) { + this._doHoverLinkToSeries(this._handleEnds[handleIndex], false); + } + }, + + /** + * @private + */ + _resetInterval: function () { + var visualMapModel = this.visualMapModel; + + var dataInterval = this._dataInterval = visualMapModel.getSelected(); + var dataExtent = visualMapModel.getExtent(); + var sizeExtent = [0, visualMapModel.itemSize[1]]; + + this._handleEnds = [ + linearMap$4(dataInterval[0], dataExtent, sizeExtent, true), + linearMap$4(dataInterval[1], dataExtent, sizeExtent, true) + ]; + }, + + /** + * @private + * @param {(number|string)} handleIndex 0 or 1 or 'all' + * @param {number} dx + * @param {number} dy + */ + _updateInterval: function (handleIndex, delta) { + delta = delta || 0; + var visualMapModel = this.visualMapModel; + var handleEnds = this._handleEnds; + var sizeExtent = [0, visualMapModel.itemSize[1]]; + + sliderMove( + delta, + handleEnds, + sizeExtent, + handleIndex, + // cross is forbiden + 0 + ); + + var dataExtent = visualMapModel.getExtent(); + // Update data interval. + this._dataInterval = [ + linearMap$4(handleEnds[0], sizeExtent, dataExtent, true), + linearMap$4(handleEnds[1], sizeExtent, dataExtent, true) + ]; + }, + + /** + * @private + */ + _updateView: function (forSketch) { + var visualMapModel = this.visualMapModel; + var dataExtent = visualMapModel.getExtent(); + var shapes = this._shapes; + + var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]]; + var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds; + + var visualInRange = this._createBarVisual( + this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange' + ); + var visualOutOfRange = this._createBarVisual( + dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange' + ); + + shapes.inRange + .setStyle({ + fill: visualInRange.barColor, + opacity: visualInRange.opacity + }) + .setShape('points', visualInRange.barPoints); + shapes.outOfRange + .setStyle({ + fill: visualOutOfRange.barColor, + opacity: visualOutOfRange.opacity + }) + .setShape('points', visualOutOfRange.barPoints); + + this._updateHandle(inRangeHandleEnds, visualInRange); + }, + + /** + * @private + */ + _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) { + var opts = { + forceState: forceState, + convertOpacityToAlpha: true + }; + var colorStops = this._makeColorGradient(dataInterval, opts); + + var symbolSizes = [ + this.getControllerVisual(dataInterval[0], 'symbolSize', opts), + this.getControllerVisual(dataInterval[1], 'symbolSize', opts) + ]; + var barPoints = this._createBarPoints(handleEnds, symbolSizes); + + return { + barColor: new LinearGradient(0, 0, 0, 1, colorStops), + barPoints: barPoints, + handlesColor: [ + colorStops[0].color, + colorStops[colorStops.length - 1].color + ] + }; + }, + + /** + * @private + */ + _makeColorGradient: function (dataInterval, opts) { + // Considering colorHue, which is not linear, so we have to sample + // to calculate gradient color stops, but not only caculate head + // and tail. + var sampleNumber = 100; // Arbitrary value. + var colorStops = []; + var step = (dataInterval[1] - dataInterval[0]) / sampleNumber; + + colorStops.push({ + color: this.getControllerVisual(dataInterval[0], 'color', opts), + offset: 0 + }); + + for (var i = 1; i < sampleNumber; i++) { + var currValue = dataInterval[0] + step * i; + if (currValue > dataInterval[1]) { + break; + } + colorStops.push({ + color: this.getControllerVisual(currValue, 'color', opts), + offset: i / sampleNumber + }); + } + + colorStops.push({ + color: this.getControllerVisual(dataInterval[1], 'color', opts), + offset: 1 + }); + + return colorStops; + }, + + /** + * @private + */ + _createBarPoints: function (handleEnds, symbolSizes) { + var itemSize = this.visualMapModel.itemSize; + + return [ + [itemSize[0] - symbolSizes[0], handleEnds[0]], + [itemSize[0], handleEnds[0]], + [itemSize[0], handleEnds[1]], + [itemSize[0] - symbolSizes[1], handleEnds[1]] + ]; + }, + + /** + * @private + */ + _createBarGroup: function (itemAlign) { + var orient = this._orient; + var inverse = this.visualMapModel.get('inverse'); + + return new Group( + (orient === 'horizontal' && !inverse) + ? {scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1], rotation: Math.PI / 2} + : (orient === 'horizontal' && inverse) + ? {scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1], rotation: -Math.PI / 2} + : (orient === 'vertical' && !inverse) + ? {scale: itemAlign === 'left' ? [1, -1] : [-1, -1]} + : {scale: itemAlign === 'left' ? [1, 1] : [-1, 1]} + ); + }, + + /** + * @private + */ + _updateHandle: function (handleEnds, visualInRange) { + if (!this._useHandle) { + return; + } + + var shapes = this._shapes; + var visualMapModel = this.visualMapModel; + var handleThumbs = shapes.handleThumbs; + var handleLabels = shapes.handleLabels; + + each$29([0, 1], function (handleIndex) { + var handleThumb = handleThumbs[handleIndex]; + handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]); + handleThumb.position[1] = handleEnds[handleIndex]; + + // Update handle label position. + var textPoint = applyTransform$1( + shapes.handleLabelPoints[handleIndex], + getTransform(handleThumb, this.group) + ); + handleLabels[handleIndex].setStyle({ + x: textPoint[0], + y: textPoint[1], + text: visualMapModel.formatValueText(this._dataInterval[handleIndex]), + textVerticalAlign: 'middle', + textAlign: this._applyTransform( + this._orient === 'horizontal' + ? (handleIndex === 0 ? 'bottom' : 'top') + : 'left', + shapes.barGroup + ) + }); + }, this); + }, + + /** + * @private + * @param {number} cursorValue + * @param {number} textValue + * @param {string} [rangeSymbol] + * @param {number} [halfHoverLinkSize] + */ + _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) { + var visualMapModel = this.visualMapModel; + var dataExtent = visualMapModel.getExtent(); + var itemSize = visualMapModel.itemSize; + var sizeExtent = [0, itemSize[1]]; + var pos = linearMap$4(cursorValue, dataExtent, sizeExtent, true); + + var shapes = this._shapes; + var indicator = shapes.indicator; + if (!indicator) { + return; + } + + indicator.position[1] = pos; + indicator.attr('invisible', false); + indicator.setShape('points', createIndicatorPoints( + !!rangeSymbol, halfHoverLinkSize, pos, itemSize[1] + )); + + var opts = {convertOpacityToAlpha: true}; + var color = this.getControllerVisual(cursorValue, 'color', opts); + indicator.setStyle('fill', color); + + // Update handle label position. + var textPoint = applyTransform$1( + shapes.indicatorLabelPoint, + getTransform(indicator, this.group) + ); + + var indicatorLabel = shapes.indicatorLabel; + indicatorLabel.attr('invisible', false); + var align = this._applyTransform('left', shapes.barGroup); + var orient = this._orient; + indicatorLabel.setStyle({ + text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue), + textVerticalAlign: orient === 'horizontal' ? align : 'middle', + textAlign: orient === 'horizontal' ? 'center' : align, + x: textPoint[0], + y: textPoint[1] + }); + }, + + /** + * @private + */ + _enableHoverLinkToSeries: function () { + var self = this; + this._shapes.barGroup + + .on('mousemove', function (e) { + self._hovering = true; + + if (!self._dragging) { + var itemSize = self.visualMapModel.itemSize; + var pos = self._applyTransform( + [e.offsetX, e.offsetY], self._shapes.barGroup, true, true + ); + // For hover link show when hover handle, which might be + // below or upper than sizeExtent. + pos[1] = mathMin$7(mathMax$7(0, pos[1]), itemSize[1]); + self._doHoverLinkToSeries( + pos[1], + 0 <= pos[0] && pos[0] <= itemSize[0] + ); + } + }) + + .on('mouseout', function () { + // When mouse is out of handle, hoverLink still need + // to be displayed when realtime is set as false. + self._hovering = false; + !self._dragging && self._clearHoverLinkToSeries(); + }); + }, + + /** + * @private + */ + _enableHoverLinkFromSeries: function () { + var zr = this.api.getZr(); + + if (this.visualMapModel.option.hoverLink) { + zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this); + zr.on('mouseout', this._hideIndicator, this); + } + else { + this._clearHoverLinkFromSeries(); + } + }, + + /** + * @private + */ + _doHoverLinkToSeries: function (cursorPos, hoverOnBar) { + var visualMapModel = this.visualMapModel; + var itemSize = visualMapModel.itemSize; + + if (!visualMapModel.option.hoverLink) { + return; + } + + var sizeExtent = [0, itemSize[1]]; + var dataExtent = visualMapModel.getExtent(); + + // For hover link show when hover handle, which might be below or upper than sizeExtent. + cursorPos = mathMin$7(mathMax$7(sizeExtent[0], cursorPos), sizeExtent[1]); + + var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent); + var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize]; + var cursorValue = linearMap$4(cursorPos, sizeExtent, dataExtent, true); + var valueRange = [ + linearMap$4(hoverRange[0], sizeExtent, dataExtent, true), + linearMap$4(hoverRange[1], sizeExtent, dataExtent, true) + ]; + // Consider data range is out of visualMap range, see test/visualMap-continuous.html, + // where china and india has very large population. + hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity); + hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity); + + // Do not show indicator when mouse is over handle, + // otherwise labels overlap, especially when dragging. + if (hoverOnBar) { + if (valueRange[0] === -Infinity) { + this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize); + } + else if (valueRange[1] === Infinity) { + this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize); + } + else { + this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize); + } + } + + // When realtime is set as false, handles, which are in barGroup, + // also trigger hoverLink, which help user to realize where they + // focus on when dragging. (see test/heatmap-large.html) + // When realtime is set as true, highlight will not show when hover + // handle, because the label on handle, which displays a exact value + // but not range, might mislead users. + var oldBatch = this._hoverLinkDataIndices; + var newBatch = []; + if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) { + newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange); + } + + var resultBatches = compressBatches(oldBatch, newBatch); + + this._dispatchHighDown('downplay', convertDataIndex(resultBatches[0])); + this._dispatchHighDown('highlight', convertDataIndex(resultBatches[1])); + }, + + /** + * @private + */ + _hoverLinkFromSeriesMouseOver: function (e) { + var el = e.target; + var visualMapModel = this.visualMapModel; + + if (!el || el.dataIndex == null) { + return; + } + + var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex); + + if (!visualMapModel.isTargetSeries(dataModel)) { + return; + } + + var data = dataModel.getData(el.dataType); + var dim = data.getDimension(visualMapModel.getDataDimension(data)); + var value = data.get(dim, el.dataIndex, true); + + if (!isNaN(value)) { + this._showIndicator(value, value); + } + }, + + /** + * @private + */ + _hideIndicator: function () { + var shapes = this._shapes; + shapes.indicator && shapes.indicator.attr('invisible', true); + shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true); + }, + + /** + * @private + */ + _clearHoverLinkToSeries: function () { + this._hideIndicator(); + + var indices = this._hoverLinkDataIndices; + this._dispatchHighDown('downplay', convertDataIndex(indices)); + + indices.length = 0; + }, + + /** + * @private + */ + _clearHoverLinkFromSeries: function () { + this._hideIndicator(); + + var zr = this.api.getZr(); + zr.off('mouseover', this._hoverLinkFromSeriesMouseOver); + zr.off('mouseout', this._hideIndicator); + }, + + /** + * @private + */ + _applyTransform: function (vertex, element, inverse, global) { + var transform = getTransform(element, global ? null : this.group); + + return graphic[ + isArray(vertex) ? 'applyTransform' : 'transformDirection' + ](vertex, transform, inverse); + }, + + /** + * @private + */ + _dispatchHighDown: function (type, batch) { + batch && batch.length && this.api.dispatchAction({ + type: type, + batch: batch + }); + }, + + /** + * @override + */ + dispose: function () { + this._clearHoverLinkFromSeries(); + this._clearHoverLinkToSeries(); + }, + + /** + * @override + */ + remove: function () { + this._clearHoverLinkFromSeries(); + this._clearHoverLinkToSeries(); + } + +}); + +function createPolygon(points, cursor, onDrift, onDragEnd) { + return new Polygon({ + shape: {points: points}, + draggable: !!onDrift, + cursor: cursor, + drift: onDrift, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: onDragEnd + }); +} + +function createHandlePoints(handleIndex, textSize) { + return handleIndex === 0 + ? [[0, 0], [textSize, 0], [textSize, -textSize]] + : [[0, 0], [textSize, 0], [textSize, textSize]]; +} + +function createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) { + return isRange + ? [ // indicate range + [0, -mathMin$7(halfHoverLinkSize, mathMax$7(pos, 0))], + [HOVER_LINK_OUT, 0], + [0, mathMin$7(halfHoverLinkSize, mathMax$7(extentMax - pos, 0))] + ] + : [ // indicate single value + [0, 0], [5, -5], [5, 5] + ]; +} + +function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) { + var halfHoverLinkSize = HOVER_LINK_SIZE / 2; + var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize'); + if (hoverLinkDataSize) { + halfHoverLinkSize = linearMap$4(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2; + } + return halfHoverLinkSize; +} + +function useHoverLinkOnHandle(visualMapModel) { + var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle'); + return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle); +} + +function getCursor$1(orient) { + return orient === 'vertical' ? 'ns-resize' : 'ew-resize'; +} + +var actionInfo$2 = { + type: 'selectDataRange', + event: 'dataRangeSelected', + // FIXME use updateView appears wrong + update: 'update' +}; + +registerAction(actionInfo$2, function (payload, ecModel) { + + ecModel.eachComponent({mainType: 'visualMap', query: payload}, function (model) { + model.setSelected(payload.selected); + }); + +}); + +/** + * DataZoom component entry + */ + +registerPreprocessor(preprocessor$2); + +var PiecewiseModel = VisualMapModel.extend({ + + type: 'visualMap.piecewise', + + /** + * Order Rule: + * + * option.categories / option.pieces / option.text / option.selected: + * If !option.inverse, + * Order when vertical: ['top', ..., 'bottom']. + * Order when horizontal: ['left', ..., 'right']. + * If option.inverse, the meaning of + * the order should be reversed. + * + * this._pieceList: + * The order is always [low, ..., high]. + * + * Mapping from location to low-high: + * If !option.inverse + * When vertical, top is high. + * When horizontal, right is high. + * If option.inverse, reverse. + */ + + /** + * @protected + */ + defaultOption: { + selected: null, // Object. If not specified, means selected. + // When pieces and splitNumber: {'0': true, '5': true} + // When categories: {'cate1': false, 'cate3': true} + // When selected === false, means all unselected. + + minOpen: false, // Whether include values that smaller than `min`. + maxOpen: false, // Whether include values that bigger than `max`. + + align: 'auto', // 'auto', 'left', 'right' + itemWidth: 20, // When put the controller vertically, it is the length of + // horizontal side of each item. Otherwise, vertical side. + itemHeight: 14, // When put the controller vertically, it is the length of + // vertical side of each item. Otherwise, horizontal side. + itemSymbol: 'roundRect', + pieceList: null, // Each item is Object, with some of those attrs: + // {min, max, lt, gt, lte, gte, value, + // color, colorSaturation, colorAlpha, opacity, + // symbol, symbolSize}, which customize the range or visual + // coding of the certain piece. Besides, see "Order Rule". + categories: null, // category names, like: ['some1', 'some2', 'some3']. + // Attr min/max are ignored when categories set. See "Order Rule" + splitNumber: 5, // If set to 5, auto split five pieces equally. + // If set to 0 and component type not set, component type will be + // determined as "continuous". (It is less reasonable but for ec2 + // compatibility, see echarts/component/visualMap/typeDefaulter) + selectedMode: 'multiple', // Can be 'multiple' or 'single'. + itemGap: 10, // The gap between two items, in px. + hoverLink: true, // Enable hover highlight. + + showLabel: null // By default, when text is used, label will hide (the logic + // is remained for compatibility reason) + }, + + /** + * @override + */ + optionUpdated: function (newOption, isInit) { + PiecewiseModel.superApply(this, 'optionUpdated', arguments); + + /** + * The order is always [low, ..., high]. + * [{text: string, interval: Array.}, ...] + * @private + * @type {Array.} + */ + this._pieceList = []; + + this.resetExtent(); + + /** + * 'pieces', 'categories', 'splitNumber' + * @type {string} + */ + var mode = this._mode = this._determineMode(); + + resetMethods[this._mode].call(this); + + this._resetSelected(newOption, isInit); + + var categories = this.option.categories; + + this.resetVisual(function (mappingOption, state) { + if (mode === 'categories') { + mappingOption.mappingMethod = 'category'; + mappingOption.categories = clone(categories); + } + else { + mappingOption.dataExtent = this.getExtent(); + mappingOption.mappingMethod = 'piecewise'; + mappingOption.pieceList = map(this._pieceList, function (piece) { + var piece = clone(piece); + if (state !== 'inRange') { + // FIXME + // outOfRange do not support special visual in pieces. + piece.visual = null; + } + return piece; + }); + } + }); + }, + + /** + * @protected + * @override + */ + completeVisualOption: function () { + // Consider this case: + // visualMap: { + // pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}] + // } + // where no inRange/outOfRange set but only pieces. So we should make + // default inRange/outOfRange for this case, otherwise visuals that only + // appear in `pieces` will not be taken into account in visual encoding. + + var option = this.option; + var visualTypesInPieces = {}; + var visualTypes = VisualMapping.listVisualTypes(); + var isCategory = this.isCategory(); + + each$1(option.pieces, function (piece) { + each$1(visualTypes, function (visualType) { + if (piece.hasOwnProperty(visualType)) { + visualTypesInPieces[visualType] = 1; + } + }); + }); + + each$1(visualTypesInPieces, function (v, visualType) { + var exists = 0; + each$1(this.stateList, function (state) { + exists |= has(option, state, visualType) + || has(option.target, state, visualType); + }, this); + + !exists && each$1(this.stateList, function (state) { + (option[state] || (option[state] = {}))[visualType] = visualDefault.get( + visualType, state === 'inRange' ? 'active' : 'inactive', isCategory + ); + }); + }, this); + + function has(obj, state, visualType) { + return obj && obj[state] && ( + isObject(obj[state]) + ? obj[state].hasOwnProperty(visualType) + : obj[state] === visualType // e.g., inRange: 'symbol' + ); + } + + VisualMapModel.prototype.completeVisualOption.apply(this, arguments); + }, + + _resetSelected: function (newOption, isInit) { + var thisOption = this.option; + var pieceList = this._pieceList; + + // Selected do not merge but all override. + var selected = (isInit ? thisOption : newOption).selected || {}; + thisOption.selected = selected; + + // Consider 'not specified' means true. + each$1(pieceList, function (piece, index) { + var key = this.getSelectedMapKey(piece); + if (!selected.hasOwnProperty(key)) { + selected[key] = true; + } + }, this); + + if (thisOption.selectedMode === 'single') { + // Ensure there is only one selected. + var hasSel = false; + + each$1(pieceList, function (piece, index) { + var key = this.getSelectedMapKey(piece); + if (selected[key]) { + hasSel + ? (selected[key] = false) + : (hasSel = true); + } + }, this); + } + // thisOption.selectedMode === 'multiple', default: all selected. + }, + + /** + * @public + */ + getSelectedMapKey: function (piece) { + return this._mode === 'categories' + ? piece.value + '' : piece.index + ''; + }, + + /** + * @public + */ + getPieceList: function () { + return this._pieceList; + }, + + /** + * @private + * @return {string} + */ + _determineMode: function () { + var option = this.option; + + return option.pieces && option.pieces.length > 0 + ? 'pieces' + : this.option.categories + ? 'categories' + : 'splitNumber'; + }, + + /** + * @public + * @override + */ + setSelected: function (selected) { + this.option.selected = clone(selected); + }, + + /** + * @public + * @override + */ + getValueState: function (value) { + var index = VisualMapping.findPieceIndex(value, this._pieceList); + + return index != null + ? (this.option.selected[this.getSelectedMapKey(this._pieceList[index])] + ? 'inRange' : 'outOfRange' + ) + : 'outOfRange'; + }, + + /** + * @public + * @params {number} pieceIndex piece index in visualMapModel.getPieceList() + * @return {Array.} [{seriesId, dataIndices: >}, ...] + */ + findTargetDataIndices: function (pieceIndex) { + var result = []; + + this.eachTargetSeries(function (seriesModel) { + var dataIndices = []; + var data = seriesModel.getData(); + + data.each(this.getDataDimension(data), function (value, dataIndex) { + // Should always base on model pieceList, because it is order sensitive. + var pIdx = VisualMapping.findPieceIndex(value, this._pieceList); + pIdx === pieceIndex && dataIndices.push(dataIndex); + }, true, this); + + result.push({seriesId: seriesModel.id, dataIndex: dataIndices}); + }, this); + + return result; + }, + + /** + * @private + * @param {Object} piece piece.value or piece.interval is required. + * @return {number} Can be Infinity or -Infinity + */ + getRepresentValue: function (piece) { + var representValue; + if (this.isCategory()) { + representValue = piece.value; + } + else { + if (piece.value != null) { + representValue = piece.value; + } + else { + var pieceInterval = piece.interval || []; + representValue = (pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity) + ? 0 + : (pieceInterval[0] + pieceInterval[1]) / 2; + } + } + return representValue; + }, + + getVisualMeta: function (getColorVisual) { + // Do not support category. (category axis is ordinal, numerical) + if (this.isCategory()) { + return; + } + + var stops = []; + var outerColors = []; + var visualMapModel = this; + + function setStop(interval, valueState) { + var representValue = visualMapModel.getRepresentValue({interval: interval}); + if (!valueState) { + valueState = visualMapModel.getValueState(representValue); + } + var color = getColorVisual(representValue, valueState); + if (interval[0] === -Infinity) { + outerColors[0] = color; + } + else if (interval[1] === Infinity) { + outerColors[1] = color; + } + else { + stops.push( + {value: interval[0], color: color}, + {value: interval[1], color: color} + ); + } + } + + // Suplement + var pieceList = this._pieceList.slice(); + if (!pieceList.length) { + pieceList.push({interval: [-Infinity, Infinity]}); + } + else { + var edge = pieceList[0].interval[0]; + edge !== -Infinity && pieceList.unshift({interval: [-Infinity, edge]}); + edge = pieceList[pieceList.length - 1].interval[1]; + edge !== Infinity && pieceList.push({interval: [edge, Infinity]}); + } + + var curr = -Infinity; + each$1(pieceList, function (piece) { + var interval = piece.interval; + if (interval) { + // Fulfill gap. + interval[0] > curr && setStop([curr, interval[0]], 'outOfRange'); + setStop(interval.slice()); + curr = interval[1]; + } + }, this); + + return {stops: stops, outerColors: outerColors}; + } + +}); + +/** + * Key is this._mode + * @type {Object} + * @this {module:echarts/component/viusalMap/PiecewiseMode} + */ +var resetMethods = { + + splitNumber: function () { + var thisOption = this.option; + var pieceList = this._pieceList; + var precision = Math.min(thisOption.precision, 20); + var dataExtent = this.getExtent(); + var splitNumber = thisOption.splitNumber; + splitNumber = Math.max(parseInt(splitNumber, 10), 1); + thisOption.splitNumber = splitNumber; + + var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; + // Precision auto-adaption + while (+splitStep.toFixed(precision) !== splitStep && precision < 5) { + precision++; + } + thisOption.precision = precision; + splitStep = +splitStep.toFixed(precision); + + var index = 0; + + if (thisOption.minOpen) { + pieceList.push({ + index: index++, + interval: [-Infinity, dataExtent[0]], + close: [0, 0] + }); + } + + for ( + var curr = dataExtent[0], len = index + splitNumber; + index < len; + curr += splitStep + ) { + var max = index === splitNumber - 1 ? dataExtent[1] : (curr + splitStep); + + pieceList.push({ + index: index++, + interval: [curr, max], + close: [1, 1] + }); + } + + if (thisOption.maxOpen) { + pieceList.push({ + index: index++, + interval: [dataExtent[1], Infinity], + close: [0, 0] + }); + } + + reformIntervals(pieceList); + + each$1(pieceList, function (piece) { + piece.text = this.formatValueText(piece.interval); + }, this); + }, + + categories: function () { + var thisOption = this.option; + each$1(thisOption.categories, function (cate) { + // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。 + // 是否改一致。 + this._pieceList.push({ + text: this.formatValueText(cate, true), + value: cate + }); + }, this); + + // See "Order Rule". + normalizeReverse(thisOption, this._pieceList); + }, + + pieces: function () { + var thisOption = this.option; + var pieceList = this._pieceList; + + each$1(thisOption.pieces, function (pieceListItem, index) { + + if (!isObject(pieceListItem)) { + pieceListItem = {value: pieceListItem}; + } + + var item = {text: '', index: index}; + + if (pieceListItem.label != null) { + item.text = pieceListItem.label; + } + + if (pieceListItem.hasOwnProperty('value')) { + var value = item.value = pieceListItem.value; + item.interval = [value, value]; + item.close = [1, 1]; + } + else { + // `min` `max` is legacy option. + // `lt` `gt` `lte` `gte` is recommanded. + var interval = item.interval = []; + var close = item.close = [0, 0]; + + var closeList = [1, 0, 1]; + var infinityList = [-Infinity, Infinity]; + + var useMinMax = []; + for (var lg = 0; lg < 2; lg++) { + var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg]; + for (var i = 0; i < 3 && interval[lg] == null; i++) { + interval[lg] = pieceListItem[names[i]]; + close[lg] = closeList[i]; + useMinMax[lg] = i === 2; + } + interval[lg] == null && (interval[lg] = infinityList[lg]); + } + useMinMax[0] && interval[1] === Infinity && (close[0] = 0); + useMinMax[1] && interval[0] === -Infinity && (close[1] = 0); + + if (__DEV__) { + if (interval[0] > interval[1]) { + console.warn( + 'Piece ' + index + 'is illegal: ' + interval + + ' lower bound should not greater then uppper bound.' + ); + } + } + + if (interval[0] === interval[1] && close[0] && close[1]) { + // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}], + // we use value to lift the priority when min === max + item.value = interval[0]; + } + } + + item.visual = VisualMapping.retrieveVisuals(pieceListItem); + + pieceList.push(item); + + }, this); + + // See "Order Rule". + normalizeReverse(thisOption, pieceList); + // Only pieces + reformIntervals(pieceList); + + each$1(pieceList, function (piece) { + var close = piece.close; + var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]]; + piece.text = piece.text || this.formatValueText( + piece.value != null ? piece.value : piece.interval, + false, + edgeSymbols + ); + }, this); + } +}; + +function normalizeReverse(thisOption, pieceList) { + var inverse = thisOption.inverse; + if (thisOption.orient === 'vertical' ? !inverse : inverse) { + pieceList.reverse(); + } +} + +var PiecewiseVisualMapView = VisualMapView.extend({ + + type: 'visualMap.piecewise', + + /** + * @protected + * @override + */ + doRender: function () { + var thisGroup = this.group; + + thisGroup.removeAll(); + + var visualMapModel = this.visualMapModel; + var textGap = visualMapModel.get('textGap'); + var textStyleModel = visualMapModel.textStyleModel; + var textFont = textStyleModel.getFont(); + var textFill = textStyleModel.getTextColor(); + var itemAlign = this._getItemAlign(); + var itemSize = visualMapModel.itemSize; + var viewData = this._getViewData(); + var endsText = viewData.endsText; + var showLabel = retrieve(visualMapModel.get('showLabel', true), !endsText); + + endsText && this._renderEndsText( + thisGroup, endsText[0], itemSize, showLabel, itemAlign + ); + + each$1(viewData.viewPieceList, renderItem, this); + + endsText && this._renderEndsText( + thisGroup, endsText[1], itemSize, showLabel, itemAlign + ); + + box( + visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap') + ); + + this.renderBackground(thisGroup); + + this.positionGroup(thisGroup); + + function renderItem(item) { + var piece = item.piece; + + var itemGroup = new Group(); + itemGroup.onclick = bind(this._onItemClick, this, piece); + + this._enableHoverLink(itemGroup, item.indexInModelPieceList); + + var representValue = visualMapModel.getRepresentValue(piece); + + this._createItemSymbol( + itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]] + ); + + if (showLabel) { + var visualState = this.visualMapModel.getValueState(representValue); + + itemGroup.add(new Text({ + style: { + x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap, + y: itemSize[1] / 2, + text: piece.text, + textVerticalAlign: 'middle', + textAlign: itemAlign, + textFont: textFont, + textFill: textFill, + opacity: visualState === 'outOfRange' ? 0.5 : 1 + } + })); + } + + thisGroup.add(itemGroup); + } + }, + + /** + * @private + */ + _enableHoverLink: function (itemGroup, pieceIndex) { + itemGroup + .on('mouseover', bind(onHoverLink, this, 'highlight')) + .on('mouseout', bind(onHoverLink, this, 'downplay')); + + function onHoverLink(method) { + var visualMapModel = this.visualMapModel; + + visualMapModel.option.hoverLink && this.api.dispatchAction({ + type: method, + batch: convertDataIndex( + visualMapModel.findTargetDataIndices(pieceIndex) + ) + }); + } + }, + + /** + * @private + */ + _getItemAlign: function () { + var visualMapModel = this.visualMapModel; + var modelOption = visualMapModel.option; + + if (modelOption.orient === 'vertical') { + return getItemAlign( + visualMapModel, this.api, visualMapModel.itemSize + ); + } + else { // horizontal, most case left unless specifying right. + var align = modelOption.align; + if (!align || align === 'auto') { + align = 'left'; + } + return align; + } + }, + + /** + * @private + */ + _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) { + if (!text) { + return; + } + + var itemGroup = new Group(); + var textStyleModel = this.visualMapModel.textStyleModel; + + itemGroup.add(new Text({ + style: { + x: showLabel ? (itemAlign === 'right' ? itemSize[0] : 0) : itemSize[0] / 2, + y: itemSize[1] / 2, + textVerticalAlign: 'middle', + textAlign: showLabel ? itemAlign : 'center', + text: text, + textFont: textStyleModel.getFont(), + textFill: textStyleModel.getTextColor() + } + })); + + group.add(itemGroup); + }, + + /** + * @private + * @return {Object} {peiceList, endsText} The order is the same as screen pixel order. + */ + _getViewData: function () { + var visualMapModel = this.visualMapModel; + + var viewPieceList = map(visualMapModel.getPieceList(), function (piece, index) { + return {piece: piece, indexInModelPieceList: index}; + }); + var endsText = visualMapModel.get('text'); + + // Consider orient and inverse. + var orient = visualMapModel.get('orient'); + var inverse = visualMapModel.get('inverse'); + + // Order of model pieceList is always [low, ..., high] + if (orient === 'horizontal' ? inverse : !inverse) { + viewPieceList.reverse(); + } + // Origin order of endsText is [high, low] + else if (endsText) { + endsText = endsText.slice().reverse(); + } + + return {viewPieceList: viewPieceList, endsText: endsText}; + }, + + /** + * @private + */ + _createItemSymbol: function (group, representValue, shapeParam) { + group.add(createSymbol( + this.getControllerVisual(representValue, 'symbol'), + shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], + this.getControllerVisual(representValue, 'color') + )); + }, + + /** + * @private + */ + _onItemClick: function (piece) { + var visualMapModel = this.visualMapModel; + var option = visualMapModel.option; + var selected = clone(option.selected); + var newKey = visualMapModel.getSelectedMapKey(piece); + + if (option.selectedMode === 'single') { + selected[newKey] = true; + each$1(selected, function (o, key) { + selected[key] = key === newKey; + }); + } + else { + selected[newKey] = !selected[newKey]; + } + + this.api.dispatchAction({ + type: 'selectDataRange', + from: this.uid, + visualMapId: this.visualMapModel.id, + selected: selected + }); + } +}); + +/** + * DataZoom component entry + */ + +registerPreprocessor(preprocessor$2); + +/** + * visualMap component entry + */ + +var addCommas$1 = addCommas; +var encodeHTML$1 = encodeHTML; + +function fillLabel(opt) { + defaultEmphasis(opt.label, ['show']); +} +var MarkerModel = extendComponentModel({ + + type: 'marker', + + dependencies: ['series', 'grid', 'polar', 'geo'], + + /** + * @overrite + */ + init: function (option, parentModel, ecModel, extraOpt) { + + if (__DEV__) { + if (this.type === 'marker') { + throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.'); + } + } + this.mergeDefaultAndTheme(option, ecModel); + this.mergeOption(option, ecModel, extraOpt.createdBySelf, true); + }, + + /** + * @return {boolean} + */ + isAnimationEnabled: function () { + if (env$1.node) { + return false; + } + + var hostSeries = this.__hostSeries; + return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled(); + }, + + mergeOption: function (newOpt, ecModel, createdBySelf, isInit) { + var MarkerModel = this.constructor; + var modelPropName = this.mainType + 'Model'; + if (!createdBySelf) { + ecModel.eachSeries(function (seriesModel) { + + var markerOpt = seriesModel.get(this.mainType); + + var markerModel = seriesModel[modelPropName]; + if (!markerOpt || !markerOpt.data) { + seriesModel[modelPropName] = null; + return; + } + if (!markerModel) { + if (isInit) { + // Default label emphasis `position` and `show` + fillLabel(markerOpt); + } + each$1(markerOpt.data, function (item) { + // FIXME Overwrite fillLabel method ? + if (item instanceof Array) { + fillLabel(item[0]); + fillLabel(item[1]); + } + else { + fillLabel(item); + } + }); + + markerModel = new MarkerModel( + markerOpt, this, ecModel + ); + + extend(markerModel, { + mainType: this.mainType, + // Use the same series index and name + seriesIndex: seriesModel.seriesIndex, + name: seriesModel.name, + createdBySelf: true + }); + + markerModel.__hostSeries = seriesModel; + } + else { + markerModel.mergeOption(markerOpt, ecModel, true); + } + seriesModel[modelPropName] = markerModel; + }, this); + } + }, + + formatTooltip: function (dataIndex) { + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var formattedValue = isArray(value) + ? map(value, addCommas$1).join(', ') : addCommas$1(value); + var name = data.getName(dataIndex); + var html = encodeHTML$1(this.name); + if (value != null || name) { + html += '
'; + } + if (name) { + html += encodeHTML$1(name); + if (value != null) { + html += ' : '; + } + } + if (value != null) { + html += encodeHTML$1(formattedValue); + } + return html; + }, + + getData: function () { + return this._data; + }, + + setData: function (data) { + this._data = data; + } +}); + +mixin(MarkerModel, dataFormatMixin); + +MarkerModel.extend({ + + type: 'markPoint', + + defaultOption: { + zlevel: 0, + z: 5, + symbol: 'pin', + symbolSize: 50, + //symbolRotate: 0, + //symbolOffset: [0, 0] + tooltip: { + trigger: 'item' + }, + label: { + normal: { + show: true, + position: 'inside' + }, + emphasis: { + show: true + } + }, + itemStyle: { + normal: { + borderWidth: 2 + } + } + } +}); + +var indexOf$3 = indexOf; + +function hasXOrY(item) { + return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y))); +} + +function hasXAndY(item) { + return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y)); +} + +function getPrecision$1(data, valueAxisDim, dataIndex) { + var precision = -1; + do { + precision = Math.max( + getPrecision(data.get( + valueAxisDim, dataIndex + )), + precision + ); + data = data.stackedOn; + } while (data); + + return precision; +} + +function markerTypeCalculatorWithExtent( + mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex +) { + var coordArr = []; + var value = numCalculate(data, targetDataDim, mlType); + + var dataIndex = data.indicesOfNearest(targetDataDim, value, true)[0]; + coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex, true); + coordArr[targetCoordIndex] = data.get(targetDataDim, dataIndex, true); + + var precision = getPrecision$1(data, targetDataDim, dataIndex); + precision = Math.min(precision, 20); + if (precision >= 0) { + coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision); + } + + return coordArr; +} + +var curry$7 = curry; +// TODO Specified percent +var markerTypeCalculator = { + /** + * @method + * @param {module:echarts/data/List} data + * @param {string} baseAxisDim + * @param {string} valueAxisDim + */ + min: curry$7(markerTypeCalculatorWithExtent, 'min'), + /** + * @method + * @param {module:echarts/data/List} data + * @param {string} baseAxisDim + * @param {string} valueAxisDim + */ + max: curry$7(markerTypeCalculatorWithExtent, 'max'), + + /** + * @method + * @param {module:echarts/data/List} data + * @param {string} baseAxisDim + * @param {string} valueAxisDim + */ + average: curry$7(markerTypeCalculatorWithExtent, 'average') +}; + +/** + * Transform markPoint data item to format used in List by do the following + * 1. Calculate statistic like `max`, `min`, `average` + * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/coord/*} [coordSys] + * @param {Object} item + * @return {Object} + */ +function dataTransform(seriesModel, item) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + + // 1. If not specify the position with pixel directly + // 2. If `coord` is not a data array. Which uses `xAxis`, + // `yAxis` to specify the coord on each dimension + + // parseFloat first because item.x and item.y can be percent string like '20%' + if (item && !hasXAndY(item) && !isArray(item.coord) && coordSys) { + var dims = coordSys.dimensions; + var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel); + + // Clone the option + // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value + item = clone(item); + + if (item.type + && markerTypeCalculator[item.type] + && axisInfo.baseAxis && axisInfo.valueAxis + ) { + var otherCoordIndex = indexOf$3(dims, axisInfo.baseAxis.dim); + var targetCoordIndex = indexOf$3(dims, axisInfo.valueAxis.dim); + + item.coord = markerTypeCalculator[item.type]( + data, axisInfo.baseDataDim, axisInfo.valueDataDim, + otherCoordIndex, targetCoordIndex + ); + // Force to use the value of calculated value. + item.value = item.coord[targetCoordIndex]; + } + else { + // FIXME Only has one of xAxis and yAxis. + var coord = [ + item.xAxis != null ? item.xAxis : item.radiusAxis, + item.yAxis != null ? item.yAxis : item.angleAxis + ]; + // Each coord support max, min, average + for (var i = 0; i < 2; i++) { + if (markerTypeCalculator[coord[i]]) { + var dataDim = seriesModel.coordDimToDataDim(dims[i])[0]; + coord[i] = numCalculate(data, dataDim, coord[i]); + } + } + item.coord = coord; + } + } + return item; +} + +function getAxisInfo$1(item, data, coordSys, seriesModel) { + var ret = {}; + + if (item.valueIndex != null || item.valueDim != null) { + ret.valueDataDim = item.valueIndex != null + ? data.getDimension(item.valueIndex) : item.valueDim; + ret.valueAxis = coordSys.getAxis(seriesModel.dataDimToCoordDim(ret.valueDataDim)); + ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis); + ret.baseDataDim = seriesModel.coordDimToDataDim(ret.baseAxis.dim)[0]; + } + else { + ret.baseAxis = seriesModel.getBaseAxis(); + ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis); + ret.baseDataDim = seriesModel.coordDimToDataDim(ret.baseAxis.dim)[0]; + ret.valueDataDim = seriesModel.coordDimToDataDim(ret.valueAxis.dim)[0]; + } + + return ret; +} + +/** + * Filter data which is out of coordinateSystem range + * [dataFilter description] + * @param {module:echarts/coord/*} [coordSys] + * @param {Object} item + * @return {boolean} + */ +function dataFilter$1(coordSys, item) { + // Alwalys return true if there is no coordSys + return (coordSys && coordSys.containData && item.coord && !hasXOrY(item)) + ? coordSys.containData(item.coord) : true; +} + +function dimValueGetter(item, dimName, dataIndex, dimIndex) { + // x, y, radius, angle + if (dimIndex < 2) { + return item.coord && item.coord[dimIndex]; + } + return item.value; +} + +function numCalculate(data, valueDataDim, type) { + if (type === 'average') { + var sum = 0; + var count = 0; + data.each(valueDataDim, function (val, idx) { + if (!isNaN(val)) { + sum += val; + count++; + } + }, true); + return sum / count; + } + else { + return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0]; + } +} + +var MarkerView = extendComponentView({ + + type: 'marker', + + init: function () { + /** + * Markline grouped by series + * @private + * @type {module:zrender/core/util.HashMap} + */ + this.markerGroupMap = createHashMap(); + }, + + render: function (markerModel, ecModel, api) { + var markerGroupMap = this.markerGroupMap; + markerGroupMap.each(function (item) { + item.__keep = false; + }); + + var markerModelKey = this.type + 'Model'; + ecModel.eachSeries(function (seriesModel) { + var markerModel = seriesModel[markerModelKey]; + markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api); + }, this); + + markerGroupMap.each(function (item) { + !item.__keep && this.group.remove(item.group); + }, this); + }, + + renderSeries: function () {} +}); + +function updateMarkerLayout(mpData, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + mpData.each(function (idx) { + var itemModel = mpData.getItemModel(idx); + var point; + var xPx = parsePercent$1(itemModel.get('x'), api.getWidth()); + var yPx = parsePercent$1(itemModel.get('y'), api.getHeight()); + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } + // Chart like bar may have there own marker positioning logic + else if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition( + mpData.getValues(mpData.dimensions, idx) + ); + } + else if (coordSys) { + var x = mpData.get(coordSys.dimensions[0], idx); + var y = mpData.get(coordSys.dimensions[1], idx); + point = coordSys.dataToPoint([x, y]); + + } + + // Use x, y if has any + if (!isNaN(xPx)) { + point[0] = xPx; + } + if (!isNaN(yPx)) { + point[1] = yPx; + } + + mpData.setItemLayout(idx, point); + }); +} + +MarkerView.extend({ + + type: 'markPoint', + + updateLayout: function (markPointModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var mpModel = seriesModel.markPointModel; + if (mpModel) { + updateMarkerLayout(mpModel.getData(), seriesModel, api); + this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel); + } + }, this); + }, + + renderSeries: function (seriesModel, mpModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + + var symbolDrawMap = this.markerGroupMap; + var symbolDraw = symbolDrawMap.get(seriesId) + || symbolDrawMap.set(seriesId, new SymbolDraw()); + + var mpData = createList$1(coordSys, seriesModel, mpModel); + + // FIXME + mpModel.setData(mpData); + + updateMarkerLayout(mpModel.getData(), seriesModel, api); + + mpData.each(function (idx) { + var itemModel = mpData.getItemModel(idx); + var symbolSize = itemModel.getShallow('symbolSize'); + if (typeof symbolSize === 'function') { + // FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据? + symbolSize = symbolSize( + mpModel.getRawValue(idx), mpModel.getDataParams(idx) + ); + } + mpData.setItemVisual(idx, { + symbolSize: symbolSize, + color: itemModel.get('itemStyle.normal.color') + || seriesData.getVisual('color'), + symbol: itemModel.getShallow('symbol') + }); + }); + + // TODO Text are wrong + symbolDraw.updateData(mpData); + this.group.add(symbolDraw.group); + + // Set host model for tooltip + // FIXME + mpData.eachItemGraphicEl(function (el) { + el.traverse(function (child) { + child.dataModel = mpModel; + }); + }); + + symbolDraw.__keep = true; + + symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent'); + } +}); + +/** + * @inner + * @param {module:echarts/coord/*} [coordSys] + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Model} mpModel + */ +function createList$1(coordSys, seriesModel, mpModel) { + var coordDimsInfos; + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo( + seriesModel.coordDimToDataDim(coordDim)[0] + ) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys + info.name = coordDim; + return info; + }); + } + else { + coordDimsInfos =[{ + name: 'value', + type: 'float' + }]; + } + + var mpData = new List(coordDimsInfos, mpModel); + var dataOpt = map(mpModel.get('data'), curry( + dataTransform, seriesModel + )); + if (coordSys) { + dataOpt = filter( + dataOpt, curry(dataFilter$1, coordSys) + ); + } + + mpData.initData(dataOpt, null, + coordSys ? dimValueGetter : function (item) { + return item.value; + } + ); + + return mpData; +} + +// HINT Markpoint can't be used too much +registerPreprocessor(function (opt) { + // Make sure markPoint component is enabled + opt.markPoint = opt.markPoint || {}; +}); + +MarkerModel.extend({ + + type: 'markLine', + + defaultOption: { + zlevel: 0, + z: 5, + + symbol: ['circle', 'arrow'], + symbolSize: [8, 16], + + //symbolRotate: 0, + + precision: 2, + tooltip: { + trigger: 'item' + }, + label: { + normal: { + show: true, + position: 'end' + }, + emphasis: { + show: true + } + }, + lineStyle: { + normal: { + type: 'dashed' + }, + emphasis: { + width: 3 + } + }, + animationEasing: 'linear' + } +}); + +var markLineTransform = function (seriesModel, coordSys, mlModel, item) { + var data = seriesModel.getData(); + // Special type markLine like 'min', 'max', 'average' + var mlType = item.type; + + if (!isArray(item) + && ( + mlType === 'min' || mlType === 'max' || mlType === 'average' + // In case + // data: [{ + // yAxis: 10 + // }] + || (item.xAxis != null || item.yAxis != null) + ) + ) { + var valueAxis; + var valueDataDim; + var value; + + if (item.yAxis != null || item.xAxis != null) { + valueDataDim = item.yAxis != null ? 'y' : 'x'; + valueAxis = coordSys.getAxis(valueDataDim); + + value = retrieve(item.yAxis, item.xAxis); + } + else { + var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel); + valueDataDim = axisInfo.valueDataDim; + valueAxis = axisInfo.valueAxis; + value = numCalculate(data, valueDataDim, mlType); + } + var valueIndex = valueDataDim === 'x' ? 0 : 1; + var baseIndex = 1 - valueIndex; + + var mlFrom = clone(item); + var mlTo = {}; + + mlFrom.type = null; + + mlFrom.coord = []; + mlTo.coord = []; + mlFrom.coord[baseIndex] = -Infinity; + mlTo.coord[baseIndex] = Infinity; + + var precision = mlModel.get('precision'); + if (precision >= 0 && typeof value === 'number') { + value = +value.toFixed(Math.min(precision, 20)); + } + + mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value; + + item = [mlFrom, mlTo, { // Extra option for tooltip and label + type: mlType, + valueIndex: item.valueIndex, + // Force to use the value of calculated value. + value: value + }]; + } + + item = [ + dataTransform(seriesModel, item[0]), + dataTransform(seriesModel, item[1]), + extend({}, item[2]) + ]; + + // Avoid line data type is extended by from(to) data type + item[2].type = item[2].type || ''; + + // Merge from option and to option into line option + merge(item[2], item[0]); + merge(item[2], item[1]); + + return item; +}; + +function isInifinity(val) { + return !isNaN(val) && !isFinite(val); +} + +// If a markLine has one dim +function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) { + var otherDimIndex = 1 - dimIndex; + var dimName = coordSys.dimensions[dimIndex]; + return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]) + && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]); +} + +function markLineFilter(coordSys, item) { + if (coordSys.type === 'cartesian2d') { + var fromCoord = item[0].coord; + var toCoord = item[1].coord; + // In case + // { + // markLine: { + // data: [{ yAxis: 2 }] + // } + // } + if ( + fromCoord && toCoord && + (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) + || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys)) + ) { + return true; + } + } + return dataFilter$1(coordSys, item[0]) + && dataFilter$1(coordSys, item[1]); +} + +function updateSingleMarkerEndLayout( + data, idx, isFrom, seriesModel, api +) { + var coordSys = seriesModel.coordinateSystem; + var itemModel = data.getItemModel(idx); + + var point; + var xPx = parsePercent$1(itemModel.get('x'), api.getWidth()); + var yPx = parsePercent$1(itemModel.get('y'), api.getHeight()); + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } + else { + // Chart like bar may have there own marker positioning logic + if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition( + data.getValues(data.dimensions, idx) + ); + } + else { + var dims = coordSys.dimensions; + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + point = coordSys.dataToPoint([x, y]); + } + // Expand line to the edge of grid if value on one axis is Inifnity + // In case + // markLine: { + // data: [{ + // yAxis: 2 + // // or + // type: 'average' + // }] + // } + if (coordSys.type === 'cartesian2d') { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + var dims = coordSys.dimensions; + if (isInifinity(data.get(dims[0], idx))) { + point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]); + } + else if (isInifinity(data.get(dims[1], idx))) { + point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]); + } + } + + // Use x, y if has any + if (!isNaN(xPx)) { + point[0] = xPx; + } + if (!isNaN(yPx)) { + point[1] = yPx; + } + } + + data.setItemLayout(idx, point); +} + +MarkerView.extend({ + + type: 'markLine', + + updateLayout: function (markLineModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var mlModel = seriesModel.markLineModel; + if (mlModel) { + var mlData = mlModel.getData(); + var fromData = mlModel.__from; + var toData = mlModel.__to; + // Update visual and layout of from symbol and to symbol + fromData.each(function (idx) { + updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api); + updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api); + }); + // Update layout of line + mlData.each(function (idx) { + mlData.setItemLayout(idx, [ + fromData.getItemLayout(idx), + toData.getItemLayout(idx) + ]); + }); + + this.markerGroupMap.get(seriesModel.id).updateLayout(); + + } + }, this); + }, + + renderSeries: function (seriesModel, mlModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + + var lineDrawMap = this.markerGroupMap; + var lineDraw = lineDrawMap.get(seriesId) + || lineDrawMap.set(seriesId, new LineDraw()); + this.group.add(lineDraw.group); + + var mlData = createList$2(coordSys, seriesModel, mlModel); + + var fromData = mlData.from; + var toData = mlData.to; + var lineData = mlData.line; + + mlModel.__from = fromData; + mlModel.__to = toData; + // Line data for tooltip and formatter + mlModel.setData(lineData); + + var symbolType = mlModel.get('symbol'); + var symbolSize = mlModel.get('symbolSize'); + if (!isArray(symbolType)) { + symbolType = [symbolType, symbolType]; + } + if (typeof symbolSize === 'number') { + symbolSize = [symbolSize, symbolSize]; + } + + // Update visual and layout of from symbol and to symbol + mlData.from.each(function (idx) { + updateDataVisualAndLayout(fromData, idx, true); + updateDataVisualAndLayout(toData, idx, false); + }); + + // Update visual and layout of line + lineData.each(function (idx) { + var lineColor = lineData.getItemModel(idx).get('lineStyle.normal.color'); + lineData.setItemVisual(idx, { + color: lineColor || fromData.getItemVisual(idx, 'color') + }); + lineData.setItemLayout(idx, [ + fromData.getItemLayout(idx), + toData.getItemLayout(idx) + ]); + + lineData.setItemVisual(idx, { + 'fromSymbolSize': fromData.getItemVisual(idx, 'symbolSize'), + 'fromSymbol': fromData.getItemVisual(idx, 'symbol'), + 'toSymbolSize': toData.getItemVisual(idx, 'symbolSize'), + 'toSymbol': toData.getItemVisual(idx, 'symbol') + }); + }); + + lineDraw.updateData(lineData); + + // Set host model for tooltip + // FIXME + mlData.line.eachItemGraphicEl(function (el, idx) { + el.traverse(function (child) { + child.dataModel = mlModel; + }); + }); + + function updateDataVisualAndLayout(data, idx, isFrom) { + var itemModel = data.getItemModel(idx); + + updateSingleMarkerEndLayout( + data, idx, isFrom, seriesModel, api + ); + + data.setItemVisual(idx, { + symbolSize: itemModel.get('symbolSize') || symbolSize[isFrom ? 0 : 1], + symbol: itemModel.get('symbol', true) || symbolType[isFrom ? 0 : 1], + color: itemModel.get('itemStyle.normal.color') || seriesData.getVisual('color') + }); + } + + lineDraw.__keep = true; + + lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent'); + } +}); + +/** + * @inner + * @param {module:echarts/coord/*} coordSys + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Model} mpModel + */ +function createList$2(coordSys, seriesModel, mlModel) { + + var coordDimsInfos; + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo( + seriesModel.coordDimToDataDim(coordDim)[0] + ) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys + info.name = coordDim; + return info; + }); + } + else { + coordDimsInfos =[{ + name: 'value', + type: 'float' + }]; + } + + var fromData = new List(coordDimsInfos, mlModel); + var toData = new List(coordDimsInfos, mlModel); + // No dimensions + var lineData = new List([], mlModel); + + var optData = map(mlModel.get('data'), curry( + markLineTransform, seriesModel, coordSys, mlModel + )); + if (coordSys) { + optData = filter( + optData, curry(markLineFilter, coordSys) + ); + } + var dimValueGetter$$1 = coordSys ? dimValueGetter : function (item) { + return item.value; + }; + fromData.initData( + map(optData, function (item) { return item[0]; }), + null, dimValueGetter$$1 + ); + toData.initData( + map(optData, function (item) { return item[1]; }), + null, dimValueGetter$$1 + ); + lineData.initData( + map(optData, function (item) { return item[2]; }) + ); + lineData.hasItemOption = true; + + return { + from: fromData, + to: toData, + line: lineData + }; +} + +registerPreprocessor(function (opt) { + // Make sure markLine component is enabled + opt.markLine = opt.markLine || {}; +}); + +MarkerModel.extend({ + + type: 'markArea', + + defaultOption: { + zlevel: 0, + // PENDING + z: 1, + tooltip: { + trigger: 'item' + }, + // markArea should fixed on the coordinate system + animation: false, + label: { + normal: { + show: true, + position: 'top' + }, + emphasis: { + show: true, + position: 'top' + } + }, + itemStyle: { + normal: { + // color and borderColor default to use color from series + // color: 'auto' + // borderColor: 'auto' + borderWidth: 0 + } + } + } +}); + +// TODO Better on polar + +var markAreaTransform = function (seriesModel, coordSys, maModel, item) { + var lt = dataTransform(seriesModel, item[0]); + var rb = dataTransform(seriesModel, item[1]); + var retrieve$$1 = retrieve; + + // FIXME make sure lt is less than rb + var ltCoord = lt.coord; + var rbCoord = rb.coord; + ltCoord[0] = retrieve$$1(ltCoord[0], -Infinity); + ltCoord[1] = retrieve$$1(ltCoord[1], -Infinity); + + rbCoord[0] = retrieve$$1(rbCoord[0], Infinity); + rbCoord[1] = retrieve$$1(rbCoord[1], Infinity); + + // Merge option into one + var result = mergeAll([{}, lt, rb]); + + result.coord = [ + lt.coord, rb.coord + ]; + result.x0 = lt.x; + result.y0 = lt.y; + result.x1 = rb.x; + result.y1 = rb.y; + return result; +}; + +function isInifinity$1(val) { + return !isNaN(val) && !isFinite(val); +} + +// If a markArea has one dim +function ifMarkLineHasOnlyDim$1(dimIndex, fromCoord, toCoord, coordSys) { + var otherDimIndex = 1 - dimIndex; + return isInifinity$1(fromCoord[otherDimIndex]) && isInifinity$1(toCoord[otherDimIndex]); +} + +function markAreaFilter(coordSys, item) { + var fromCoord = item.coord[0]; + var toCoord = item.coord[1]; + if (coordSys.type === 'cartesian2d') { + // In case + // { + // markArea: { + // data: [{ yAxis: 2 }] + // } + // } + if ( + fromCoord && toCoord && + (ifMarkLineHasOnlyDim$1(1, fromCoord, toCoord, coordSys) + || ifMarkLineHasOnlyDim$1(0, fromCoord, toCoord, coordSys)) + ) { + return true; + } + } + return dataFilter$1(coordSys, { + coord: fromCoord, + x: item.x0, + y: item.y0 + }) + || dataFilter$1(coordSys, { + coord: toCoord, + x: item.x1, + y: item.y1 + }); +} + +// dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0'] +function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + var itemModel = data.getItemModel(idx); + + var point; + var xPx = parsePercent$1(itemModel.get(dims[0]), api.getWidth()); + var yPx = parsePercent$1(itemModel.get(dims[1]), api.getHeight()); + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } + else { + // Chart like bar may have there own marker positioning logic + if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition( + data.getValues(dims, idx) + ); + } + else { + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + point = coordSys.dataToPoint([x, y], true); + } + if (coordSys.type === 'cartesian2d') { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + if (isInifinity$1(x)) { + point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]); + } + else if (isInifinity$1(y)) { + point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]); + } + } + + // Use x, y if has any + if (!isNaN(xPx)) { + point[0] = xPx; + } + if (!isNaN(yPx)) { + point[1] = yPx; + } + } + + return point; +} + +var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']]; + +MarkerView.extend({ + + type: 'markArea', + + updateLayout: function (markAreaModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var maModel = seriesModel.markAreaModel; + if (maModel) { + var areaData = maModel.getData(); + areaData.each(function (idx) { + var points = map(dimPermutations, function (dim) { + return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); + }); + // Layout + areaData.setItemLayout(idx, points); + var el = areaData.getItemGraphicEl(idx); + el.setShape('points', points); + }); + } + }, this); + }, + + renderSeries: function (seriesModel, maModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesName = seriesModel.name; + var seriesData = seriesModel.getData(); + + var areaGroupMap = this.markerGroupMap; + var polygonGroup = areaGroupMap.get(seriesName) + || areaGroupMap.set(seriesName, {group: new Group()}); + + this.group.add(polygonGroup.group); + polygonGroup.__keep = true; + + var areaData = createList$3(coordSys, seriesModel, maModel); + + // Line data for tooltip and formatter + maModel.setData(areaData); + + // Update visual and layout of line + areaData.each(function (idx) { + // Layout + areaData.setItemLayout(idx, map(dimPermutations, function (dim) { + return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); + })); + + // Visual + areaData.setItemVisual(idx, { + color: seriesData.getVisual('color') + }); + }); + + + areaData.diff(polygonGroup.__data) + .add(function (idx) { + var polygon = new Polygon({ + shape: { + points: areaData.getItemLayout(idx) + } + }); + areaData.setItemGraphicEl(idx, polygon); + polygonGroup.group.add(polygon); + }) + .update(function (newIdx, oldIdx) { + var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx); + updateProps(polygon, { + shape: { + points: areaData.getItemLayout(newIdx) + } + }, maModel, newIdx); + polygonGroup.group.add(polygon); + areaData.setItemGraphicEl(newIdx, polygon); + }) + .remove(function (idx) { + var polygon = polygonGroup.__data.getItemGraphicEl(idx); + polygonGroup.group.remove(polygon); + }) + .execute(); + + areaData.eachItemGraphicEl(function (polygon, idx) { + var itemModel = areaData.getItemModel(idx); + var labelModel = itemModel.getModel('label.normal'); + var labelHoverModel = itemModel.getModel('label.emphasis'); + var color = areaData.getItemVisual(idx, 'color'); + polygon.useStyle( + defaults( + itemModel.getModel('itemStyle.normal').getItemStyle(), + { + fill: modifyAlpha(color, 0.4), + stroke: color + } + ) + ); + + polygon.hoverStyle = itemModel.getModel('itemStyle.emphasis').getItemStyle(); + + setLabelStyle( + polygon.style, polygon.hoverStyle, labelModel, labelHoverModel, + { + labelFetcher: maModel, + labelDataIndex: idx, + defaultText: areaData.getName(idx) || '', + isRectText: true, + autoColor: color + } + ); + + setHoverStyle(polygon, {}); + + polygon.dataModel = maModel; + }); + + polygonGroup.__data = areaData; + + polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent'); + } +}); + +/** + * @inner + * @param {module:echarts/coord/*} coordSys + * @param {module:echarts/model/Series} seriesModel + * @param {module:echarts/model/Model} mpModel + */ +function createList$3(coordSys, seriesModel, maModel) { + + var coordDimsInfos; + var areaData; + var dims = ['x0', 'y0', 'x1', 'y1']; + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo( + seriesModel.coordDimToDataDim(coordDim)[0] + ) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys + info.name = coordDim; + return info; + }); + areaData = new List(map(dims, function (dim, idx) { + return { + name: dim, + type: coordDimsInfos[idx % 2].type + }; + }), maModel); + } + else { + coordDimsInfos =[{ + name: 'value', + type: 'float' + }]; + areaData = new List(coordDimsInfos, maModel); + } + + var optData = map(maModel.get('data'), curry( + markAreaTransform, seriesModel, coordSys, maModel + )); + if (coordSys) { + optData = filter( + optData, curry(markAreaFilter, coordSys) + ); + } + + var dimValueGetter$$1 = coordSys ? function (item, dimName, dataIndex, dimIndex) { + return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2]; + } : function (item) { + return item.value; + }; + areaData.initData(optData, null, dimValueGetter$$1); + areaData.hasItemOption = true; + return areaData; +} + +registerPreprocessor(function (opt) { + // Make sure markArea component is enabled + opt.markArea = opt.markArea || {}; +}); + +var preprocessor$3 = function (option) { + var timelineOpt = option && option.timeline; + + if (!isArray(timelineOpt)) { + timelineOpt = timelineOpt ? [timelineOpt] : []; + } + + each$1(timelineOpt, function (opt) { + if (!opt) { + return; + } + + compatibleEC2(opt); + }); +}; + +function compatibleEC2(opt) { + var type = opt.type; + + var ec2Types = {'number': 'value', 'time': 'time'}; + + // Compatible with ec2 + if (ec2Types[type]) { + opt.axisType = ec2Types[type]; + delete opt.type; + } + + transferItem(opt); + + if (has$2(opt, 'controlPosition')) { + var controlStyle = opt.controlStyle || (opt.controlStyle = {}); + if (!has$2(controlStyle, 'position')) { + controlStyle.position = opt.controlPosition; + } + if (controlStyle.position === 'none' && !has$2(controlStyle, 'show')) { + controlStyle.show = false; + delete controlStyle.position; + } + delete opt.controlPosition; + } + + each$1(opt.data || [], function (dataItem) { + if (isObject(dataItem) && !isArray(dataItem)) { + if (!has$2(dataItem, 'value') && has$2(dataItem, 'name')) { + // In ec2, using name as value. + dataItem.value = dataItem.name; + } + transferItem(dataItem); + } + }); +} + +function transferItem(opt) { + var itemStyle = opt.itemStyle || (opt.itemStyle = {}); + + var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {}); + + // Transfer label out + var label = opt.label || (opt.label || {}); + var labelNormal = label.normal || (label.normal = {}); + var excludeLabelAttr = {normal: 1, emphasis: 1}; + + each$1(label, function (value, name) { + if (!excludeLabelAttr[name] && !has$2(labelNormal, name)) { + labelNormal[name] = value; + } + }); + + if (itemStyleEmphasis.label && !has$2(label, 'emphasis')) { + label.emphasis = itemStyleEmphasis.label; + delete itemStyleEmphasis.label; + } +} + +function has$2(obj, attr) { + return obj.hasOwnProperty(attr); +} + +ComponentModel.registerSubTypeDefaulter('timeline', function () { + // Only slider now. + return 'slider'; +}); + +registerAction( + + {type: 'timelineChange', event: 'timelineChanged', update: 'prepareAndUpdate'}, + + function (payload, ecModel) { + + var timelineModel = ecModel.getComponent('timeline'); + if (timelineModel && payload.currentIndex != null) { + timelineModel.setCurrentIndex(payload.currentIndex); + + if (!timelineModel.get('loop', true) && timelineModel.isIndexMax()) { + timelineModel.setPlayState(false); + } + } + + // Set normalized currentIndex to payload. + ecModel.resetOption('timeline'); + + return defaults({ + currentIndex: timelineModel.option.currentIndex + }, payload); + } +); + +registerAction( + + {type: 'timelinePlayChange', event: 'timelinePlayChanged', update: 'update'}, + + function (payload, ecModel) { + var timelineModel = ecModel.getComponent('timeline'); + if (timelineModel && payload.playState != null) { + timelineModel.setPlayState(payload.playState); + } + } +); + +var TimelineModel = ComponentModel.extend({ + + type: 'timeline', + + layoutMode: 'box', + + /** + * @protected + */ + defaultOption: { + + zlevel: 0, // 一级层叠 + z: 4, // 二级层叠 + show: true, + + axisType: 'time', // 模式是时间类型,支持 value, category + + realtime: true, + + left: '20%', + top: null, + right: '20%', + bottom: 0, + width: null, + height: 40, + padding: 5, + + controlPosition: 'left', // 'left' 'right' 'top' 'bottom' 'none' + autoPlay: false, + rewind: false, // 反向播放 + loop: true, + playInterval: 2000, // 播放时间间隔,单位ms + + currentIndex: 0, + + itemStyle: { + normal: {}, + emphasis: {} + }, + label: { + normal: { + color: '#000' + }, + emphasis: {} + }, + + data: [] + }, + + /** + * @override + */ + init: function (option, parentModel, ecModel) { + + /** + * @private + * @type {module:echarts/data/List} + */ + this._data; + + /** + * @private + * @type {Array.} + */ + this._names; + + this.mergeDefaultAndTheme(option, ecModel); + this._initData(); + }, + + /** + * @override + */ + mergeOption: function (option) { + TimelineModel.superApply(this, 'mergeOption', arguments); + this._initData(); + }, + + /** + * @param {number} [currentIndex] + */ + setCurrentIndex: function (currentIndex) { + if (currentIndex == null) { + currentIndex = this.option.currentIndex; + } + var count = this._data.count(); + + if (this.option.loop) { + currentIndex = (currentIndex % count + count) % count; + } + else { + currentIndex >= count && (currentIndex = count - 1); + currentIndex < 0 && (currentIndex = 0); + } + + this.option.currentIndex = currentIndex; + }, + + /** + * @return {number} currentIndex + */ + getCurrentIndex: function () { + return this.option.currentIndex; + }, + + /** + * @return {boolean} + */ + isIndexMax: function () { + return this.getCurrentIndex() >= this._data.count() - 1; + }, + + /** + * @param {boolean} state true: play, false: stop + */ + setPlayState: function (state) { + this.option.autoPlay = !!state; + }, + + /** + * @return {boolean} true: play, false: stop + */ + getPlayState: function () { + return !!this.option.autoPlay; + }, + + /** + * @private + */ + _initData: function () { + var thisOption = this.option; + var dataArr = thisOption.data || []; + var axisType = thisOption.axisType; + var names = this._names = []; + + if (axisType === 'category') { + var idxArr = []; + each$1(dataArr, function (item, index) { + var value = getDataItemValue(item); + var newItem; + + if (isObject(item)) { + newItem = clone(item); + newItem.value = index; + } + else { + newItem = index; + } + + idxArr.push(newItem); + + if (!isString(value) && (value == null || isNaN(value))) { + value = ''; + } + + names.push(value + ''); + }); + dataArr = idxArr; + } + + var dimType = ({category: 'ordinal', time: 'time'})[axisType] || 'number'; + + var data = this._data = new List([{name: 'value', type: dimType}], this); + + data.initData(dataArr, names); + }, + + getData: function () { + return this._data; + }, + + /** + * @public + * @return {Array.} categoreis + */ + getCategories: function () { + if (this.get('axisType') === 'category') { + return this._names.slice(); + } + } + +}); + +var SliderTimelineModel = TimelineModel.extend({ + + type: 'timeline.slider', + + /** + * @protected + */ + defaultOption: { + + backgroundColor: 'rgba(0,0,0,0)', // 时间轴背景颜色 + borderColor: '#ccc', // 时间轴边框颜色 + borderWidth: 0, // 时间轴边框线宽,单位px,默认为0(无边框) + + orient: 'horizontal', // 'vertical' + inverse: false, + + tooltip: { // boolean or Object + trigger: 'item' // data item may also have tootip attr. + }, + + symbol: 'emptyCircle', + symbolSize: 10, + + lineStyle: { + show: true, + width: 2, + color: '#304654' + }, + label: { // 文本标签 + position: 'auto', // auto left right top bottom + // When using number, label position is not + // restricted by viewRect. + // positive: right/bottom, negative: left/top + normal: { + show: true, + interval: 'auto', + rotate: 0, + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#304654' + }, + emphasis: { + show: true, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#c23531' + } + }, + itemStyle: { + normal: { + color: '#304654', + borderWidth: 1 + }, + emphasis: { + color: '#c23531' + } + }, + + checkpointStyle: { + symbol: 'circle', + symbolSize: 13, + color: '#c23531', + borderWidth: 5, + borderColor: 'rgba(194,53,49, 0.5)', + animation: true, + animationDuration: 300, + animationEasing: 'quinticInOut' + }, + + controlStyle: { + show: true, + showPlayBtn: true, + showPrevBtn: true, + showNextBtn: true, + itemSize: 22, + itemGap: 12, + position: 'left', // 'left' 'right' 'top' 'bottom' + playIcon: 'path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z', // jshint ignore:line + stopIcon: 'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z', // jshint ignore:line + nextIcon: 'path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z', // jshint ignore:line + prevIcon: 'path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z', // jshint ignore:line + normal: { + color: '#304654', + borderColor: '#304654', + borderWidth: 1 + }, + emphasis: { + color: '#c23531', + borderColor: '#c23531', + borderWidth: 2 + } + }, + data: [] + } + +}); + +mixin(SliderTimelineModel, dataFormatMixin); + +var TimelineView = Component.extend({ + type: 'timeline' +}); + +/** + * Extend axis 2d + * @constructor module:echarts/coord/cartesian/Axis2D + * @extends {module:echarts/coord/cartesian/Axis} + * @param {string} dim + * @param {*} scale + * @param {Array.} coordExtent + * @param {string} axisType + * @param {string} position + */ +var TimelineAxis = function (dim, scale, coordExtent, axisType) { + + Axis.call(this, dim, scale, coordExtent); + + /** + * Axis type + * - 'category' + * - 'value' + * - 'time' + * - 'log' + * @type {string} + */ + this.type = axisType || 'value'; + + /** + * @private + * @type {number} + */ + this._autoLabelInterval; + + /** + * Axis model + * @param {module:echarts/component/TimelineModel} + */ + this.model = null; +}; + +TimelineAxis.prototype = { + + constructor: TimelineAxis, + + /** + * @public + * @return {number} + */ + getLabelInterval: function () { + var timelineModel = this.model; + var labelModel = timelineModel.getModel('label.normal'); + var labelInterval = labelModel.get('interval'); + + if (labelInterval != null && labelInterval != 'auto') { + return labelInterval; + } + + var labelInterval = this._autoLabelInterval; + + if (!labelInterval) { + labelInterval = this._autoLabelInterval = getAxisLabelInterval( + map(this.scale.getTicks(), this.dataToCoord, this), + getFormattedLabels(this, labelModel.get('formatter')), + labelModel.getFont(), + timelineModel.get('orient') === 'horizontal' ? 0 : 90, + labelModel.get('rotate') + ); + } + + return labelInterval; + }, + + /** + * If label is ignored. + * Automatically used when axis is category and label can not be all shown + * @public + * @param {number} idx + * @return {boolean} + */ + isLabelIgnored: function (idx) { + if (this.type === 'category') { + var labelInterval = this.getLabelInterval(); + return ((typeof labelInterval === 'function') + && !labelInterval(idx, this.scale.getLabel(idx))) + || idx % (labelInterval + 1); + } + } + +}; + +inherits(TimelineAxis, Axis); + +var bind$6 = bind; +var each$30 = each$1; + +var PI$4 = Math.PI; + +TimelineView.extend({ + + type: 'timeline.slider', + + init: function (ecModel, api) { + + this.api = api; + + /** + * @private + * @type {module:echarts/component/timeline/TimelineAxis} + */ + this._axis; + + /** + * @private + * @type {module:zrender/core/BoundingRect} + */ + this._viewRect; + + /** + * @type {number} + */ + this._timer; + + /** + * @type {module:zrender/Element} + */ + this._currentPointer; + + /** + * @type {module:zrender/container/Group} + */ + this._mainGroup; + + /** + * @type {module:zrender/container/Group} + */ + this._labelGroup; + }, + + /** + * @override + */ + render: function (timelineModel, ecModel, api, payload) { + this.model = timelineModel; + this.api = api; + this.ecModel = ecModel; + + this.group.removeAll(); + + if (timelineModel.get('show', true)) { + + var layoutInfo = this._layout(timelineModel, api); + var mainGroup = this._createGroup('mainGroup'); + var labelGroup = this._createGroup('labelGroup'); + + /** + * @private + * @type {module:echarts/component/timeline/TimelineAxis} + */ + var axis = this._axis = this._createAxis(layoutInfo, timelineModel); + + timelineModel.formatTooltip = function (dataIndex) { + return encodeHTML(axis.scale.getLabel(dataIndex)); + }; + + each$30( + ['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'], + function (name) { + this['_render' + name](layoutInfo, mainGroup, axis, timelineModel); + }, + this + ); + + this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel); + this._position(layoutInfo, timelineModel); + } + + this._doPlayStop(); + }, + + /** + * @override + */ + remove: function () { + this._clearTimer(); + this.group.removeAll(); + }, + + /** + * @override + */ + dispose: function () { + this._clearTimer(); + }, + + _layout: function (timelineModel, api) { + var labelPosOpt = timelineModel.get('label.normal.position'); + var orient = timelineModel.get('orient'); + var viewRect = getViewRect$4(timelineModel, api); + // Auto label offset. + if (labelPosOpt == null || labelPosOpt === 'auto') { + labelPosOpt = orient === 'horizontal' + ? ((viewRect.y + viewRect.height / 2) < api.getHeight() / 2 ? '-' : '+') + : ((viewRect.x + viewRect.width / 2) < api.getWidth() / 2 ? '+' : '-'); + } + else if (isNaN(labelPosOpt)) { + labelPosOpt = ({ + horizontal: {top: '-', bottom: '+'}, + vertical: {left: '-', right: '+'} + })[orient][labelPosOpt]; + } + + var labelAlignMap = { + horizontal: 'center', + vertical: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'left' : 'right' + }; + + var labelBaselineMap = { + horizontal: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'top' : 'bottom', + vertical: 'middle' + }; + var rotationMap = { + horizontal: 0, + vertical: PI$4 / 2 + }; + + // Position + var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width; + + var controlModel = timelineModel.getModel('controlStyle'); + var showControl = controlModel.get('show'); + var controlSize = showControl ? controlModel.get('itemSize') : 0; + var controlGap = showControl ? controlModel.get('itemGap') : 0; + var sizePlusGap = controlSize + controlGap; + + // Special label rotate. + var labelRotation = timelineModel.get('label.normal.rotate') || 0; + labelRotation = labelRotation * PI$4 / 180; // To radian. + + var playPosition; + var prevBtnPosition; + var nextBtnPosition; + var axisExtent; + var controlPosition = controlModel.get('position', true); + var showControl = controlModel.get('show', true); + var showPlayBtn = showControl && controlModel.get('showPlayBtn', true); + var showPrevBtn = showControl && controlModel.get('showPrevBtn', true); + var showNextBtn = showControl && controlModel.get('showNextBtn', true); + var xLeft = 0; + var xRight = mainLength; + + // position[0] means left, position[1] means middle. + if (controlPosition === 'left' || controlPosition === 'bottom') { + showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap); + showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap); + showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + } + else { // 'top' 'right' + showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap); + showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + } + axisExtent = [xLeft, xRight]; + + if (timelineModel.get('inverse')) { + axisExtent.reverse(); + } + + return { + viewRect: viewRect, + mainLength: mainLength, + orient: orient, + + rotation: rotationMap[orient], + labelRotation: labelRotation, + labelPosOpt: labelPosOpt, + labelAlign: timelineModel.get('label.normal.align') || labelAlignMap[orient], + labelBaseline: timelineModel.get('label.normal.verticalAlign') + || timelineModel.get('label.normal.baseline') + || labelBaselineMap[orient], + + // Based on mainGroup. + playPosition: playPosition, + prevBtnPosition: prevBtnPosition, + nextBtnPosition: nextBtnPosition, + axisExtent: axisExtent, + + controlSize: controlSize, + controlGap: controlGap + }; + }, + + _position: function (layoutInfo, timelineModel) { + // Position is be called finally, because bounding rect is needed for + // adapt content to fill viewRect (auto adapt offset). + + // Timeline may be not all in the viewRect when 'offset' is specified + // as a number, because it is more appropriate that label aligns at + // 'offset' but not the other edge defined by viewRect. + + var mainGroup = this._mainGroup; + var labelGroup = this._labelGroup; + + var viewRect = layoutInfo.viewRect; + if (layoutInfo.orient === 'vertical') { + // transfrom to horizontal, inverse rotate by left-top point. + var m = create$1(); + var rotateOriginX = viewRect.x; + var rotateOriginY = viewRect.y + viewRect.height; + translate(m, m, [-rotateOriginX, -rotateOriginY]); + rotate(m, m, -PI$4 / 2); + translate(m, m, [rotateOriginX, rotateOriginY]); + viewRect = viewRect.clone(); + viewRect.applyTransform(m); + } + + var viewBound = getBound(viewRect); + var mainBound = getBound(mainGroup.getBoundingRect()); + var labelBound = getBound(labelGroup.getBoundingRect()); + + var mainPosition = mainGroup.position; + var labelsPosition = labelGroup.position; + + labelsPosition[0] = mainPosition[0] = viewBound[0][0]; + + var labelPosOpt = layoutInfo.labelPosOpt; + + if (isNaN(labelPosOpt)) { // '+' or '-' + var mainBoundIdx = labelPosOpt === '+' ? 0 : 1; + toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); + toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx); + } + else { + var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1; + toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); + labelsPosition[1] = mainPosition[1] + labelPosOpt; + } + + mainGroup.attr('position', mainPosition); + labelGroup.attr('position', labelsPosition); + mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation; + + setOrigin(mainGroup); + setOrigin(labelGroup); + + function setOrigin(targetGroup) { + var pos = targetGroup.position; + targetGroup.origin = [ + viewBound[0][0] - pos[0], + viewBound[1][0] - pos[1] + ]; + } + + function getBound(rect) { + // [[xmin, xmax], [ymin, ymax]] + return [ + [rect.x, rect.x + rect.width], + [rect.y, rect.y + rect.height] + ]; + } + + function toBound(fromPos, from, to, dimIdx, boundIdx) { + fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx]; + } + }, + + _createAxis: function (layoutInfo, timelineModel) { + var data = timelineModel.getData(); + var axisType = timelineModel.get('axisType'); + + var scale = createScaleByModel(timelineModel, axisType); + var dataExtent = data.getDataExtent('value'); + scale.setExtent(dataExtent[0], dataExtent[1]); + this._customizeScale(scale, data); + scale.niceTicks(); + + var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType); + axis.model = timelineModel; + + return axis; + }, + + _customizeScale: function (scale, data) { + + scale.getTicks = function () { + return data.mapArray(['value'], function (value) { + return value; + }); + }; + + scale.getTicksLabels = function () { + return map(this.getTicks(), scale.getLabel, scale); + }; + }, + + _createGroup: function (name) { + var newGroup = this['_' + name] = new Group(); + this.group.add(newGroup); + return newGroup; + }, + + _renderAxisLine: function (layoutInfo, group, axis, timelineModel) { + var axisExtent = axis.getExtent(); + + if (!timelineModel.get('lineStyle.show')) { + return; + } + + group.add(new Line({ + shape: { + x1: axisExtent[0], y1: 0, + x2: axisExtent[1], y2: 0 + }, + style: extend( + {lineCap: 'round'}, + timelineModel.getModel('lineStyle').getLineStyle() + ), + silent: true, + z2: 1 + })); + }, + + /** + * @private + */ + _renderAxisTick: function (layoutInfo, group, axis, timelineModel) { + var data = timelineModel.getData(); + var ticks = axis.scale.getTicks(); + + each$30(ticks, function (value, dataIndex) { + + var tickCoord = axis.dataToCoord(value); + var itemModel = data.getItemModel(dataIndex); + var itemStyleModel = itemModel.getModel('itemStyle.normal'); + var hoverStyleModel = itemModel.getModel('itemStyle.emphasis'); + var symbolOpt = { + position: [tickCoord, 0], + onclick: bind$6(this._changeTimeline, this, dataIndex) + }; + var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt); + setHoverStyle(el, hoverStyleModel.getItemStyle()); + + if (itemModel.get('tooltip')) { + el.dataIndex = dataIndex; + el.dataModel = timelineModel; + } + else { + el.dataIndex = el.dataModel = null; + } + + }, this); + }, + + /** + * @private + */ + _renderAxisLabel: function (layoutInfo, group, axis, timelineModel) { + var labelModel = timelineModel.getModel('label.normal'); + + if (!labelModel.get('show')) { + return; + } + + var data = timelineModel.getData(); + var ticks = axis.scale.getTicks(); + var labels = getFormattedLabels( + axis, labelModel.get('formatter') + ); + var labelInterval = axis.getLabelInterval(); + + each$30(ticks, function (tick, dataIndex) { + if (axis.isLabelIgnored(dataIndex, labelInterval)) { + return; + } + + var itemModel = data.getItemModel(dataIndex); + var normalLabelModel = itemModel.getModel('label.normal'); + var hoverLabelModel = itemModel.getModel('label.emphasis'); + var tickCoord = axis.dataToCoord(tick); + var textEl = new Text({ + position: [tickCoord, 0], + rotation: layoutInfo.labelRotation - layoutInfo.rotation, + onclick: bind$6(this._changeTimeline, this, dataIndex), + silent: false + }); + setTextStyle(textEl.style, normalLabelModel, { + text: labels[dataIndex], + textAlign: layoutInfo.labelAlign, + textVerticalAlign: layoutInfo.labelBaseline + }); + + group.add(textEl); + setHoverStyle( + textEl, setTextStyle({}, hoverLabelModel) + ); + + }, this); + }, + + /** + * @private + */ + _renderControl: function (layoutInfo, group, axis, timelineModel) { + var controlSize = layoutInfo.controlSize; + var rotation = layoutInfo.rotation; + + var itemStyle = timelineModel.getModel('controlStyle.normal').getItemStyle(); + var hoverStyle = timelineModel.getModel('controlStyle.emphasis').getItemStyle(); + var rect = [0, -controlSize / 2, controlSize, controlSize]; + var playState = timelineModel.getPlayState(); + var inverse = timelineModel.get('inverse', true); + + makeBtn( + layoutInfo.nextBtnPosition, + 'controlStyle.nextIcon', + bind$6(this._changeTimeline, this, inverse ? '-' : '+') + ); + makeBtn( + layoutInfo.prevBtnPosition, + 'controlStyle.prevIcon', + bind$6(this._changeTimeline, this, inverse ? '+' : '-') + ); + makeBtn( + layoutInfo.playPosition, + 'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'), + bind$6(this._handlePlayClick, this, !playState), + true + ); + + function makeBtn(position, iconPath, onclick, willRotate) { + if (!position) { + return; + } + var opt = { + position: position, + origin: [controlSize / 2, 0], + rotation: willRotate ? -rotation : 0, + rectHover: true, + style: itemStyle, + onclick: onclick + }; + var btn = makeIcon(timelineModel, iconPath, rect, opt); + group.add(btn); + setHoverStyle(btn, hoverStyle); + } + }, + + _renderCurrentPointer: function (layoutInfo, group, axis, timelineModel) { + var data = timelineModel.getData(); + var currentIndex = timelineModel.getCurrentIndex(); + var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle'); + var me = this; + + var callback = { + onCreate: function (pointer) { + pointer.draggable = true; + pointer.drift = bind$6(me._handlePointerDrag, me); + pointer.ondragend = bind$6(me._handlePointerDragend, me); + pointerMoveTo(pointer, currentIndex, axis, timelineModel, true); + }, + onUpdate: function (pointer) { + pointerMoveTo(pointer, currentIndex, axis, timelineModel); + } + }; + + // Reuse when exists, for animation and drag. + this._currentPointer = giveSymbol( + pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback + ); + }, + + _handlePlayClick: function (nextState) { + this._clearTimer(); + this.api.dispatchAction({ + type: 'timelinePlayChange', + playState: nextState, + from: this.uid + }); + }, + + _handlePointerDrag: function (dx, dy, e) { + this._clearTimer(); + this._pointerChangeTimeline([e.offsetX, e.offsetY]); + }, + + _handlePointerDragend: function (e) { + this._pointerChangeTimeline([e.offsetX, e.offsetY], true); + }, + + _pointerChangeTimeline: function (mousePos, trigger) { + var toCoord = this._toAxisCoord(mousePos)[0]; + + var axis = this._axis; + var axisExtent = asc(axis.getExtent().slice()); + + toCoord > axisExtent[1] && (toCoord = axisExtent[1]); + toCoord < axisExtent[0] && (toCoord = axisExtent[0]); + + this._currentPointer.position[0] = toCoord; + this._currentPointer.dirty(); + + var targetDataIndex = this._findNearestTick(toCoord); + var timelineModel = this.model; + + if (trigger || ( + targetDataIndex !== timelineModel.getCurrentIndex() + && timelineModel.get('realtime') + )) { + this._changeTimeline(targetDataIndex); + } + }, + + _doPlayStop: function () { + this._clearTimer(); + + if (this.model.getPlayState()) { + this._timer = setTimeout( + bind$6(handleFrame, this), + this.model.get('playInterval') + ); + } + + function handleFrame() { + // Do not cache + var timelineModel = this.model; + this._changeTimeline( + timelineModel.getCurrentIndex() + + (timelineModel.get('rewind', true) ? -1 : 1) + ); + } + }, + + _toAxisCoord: function (vertex) { + var trans = this._mainGroup.getLocalTransform(); + return applyTransform$1(vertex, trans, true); + }, + + _findNearestTick: function (axisCoord) { + var data = this.model.getData(); + var dist = Infinity; + var targetDataIndex; + var axis = this._axis; + + data.each(['value'], function (value, dataIndex) { + var coord = axis.dataToCoord(value); + var d = Math.abs(coord - axisCoord); + if (d < dist) { + dist = d; + targetDataIndex = dataIndex; + } + }); + + return targetDataIndex; + }, + + _clearTimer: function () { + if (this._timer) { + clearTimeout(this._timer); + this._timer = null; + } + }, + + _changeTimeline: function (nextIndex) { + var currentIndex = this.model.getCurrentIndex(); + + if (nextIndex === '+') { + nextIndex = currentIndex + 1; + } + else if (nextIndex === '-') { + nextIndex = currentIndex - 1; + } + + this.api.dispatchAction({ + type: 'timelineChange', + currentIndex: nextIndex, + from: this.uid + }); + } + +}); + +function getViewRect$4(model, api) { + return getLayoutRect( + model.getBoxLayoutParams(), + { + width: api.getWidth(), + height: api.getHeight() + }, + model.get('padding') + ); +} + +function makeIcon(timelineModel, objPath, rect, opts) { + var icon = makePath( + timelineModel.get(objPath).replace(/^path:\/\//, ''), + clone(opts || {}), + new BoundingRect(rect[0], rect[1], rect[2], rect[3]), + 'center' + ); + + return icon; +} + +/** + * Create symbol or update symbol + * opt: basic position and event handlers + */ +function giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) { + var color = itemStyleModel.get('color'); + + if (!symbol) { + var symbolType = hostModel.get('symbol'); + symbol = createSymbol(symbolType, -1, -1, 2, 2, color); + symbol.setStyle('strokeNoScale', true); + group.add(symbol); + callback && callback.onCreate(symbol); + } + else { + symbol.setColor(color); + group.add(symbol); // Group may be new, also need to add. + callback && callback.onUpdate(symbol); + } + + // Style + var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']); + symbol.setStyle(itemStyle); + + // Transform and events. + opt = merge({ + rectHover: true, + z2: 100 + }, opt, true); + + var symbolSize = hostModel.get('symbolSize'); + symbolSize = symbolSize instanceof Array + ? symbolSize.slice() + : [+symbolSize, +symbolSize]; + symbolSize[0] /= 2; + symbolSize[1] /= 2; + opt.scale = symbolSize; + + var symbolOffset = hostModel.get('symbolOffset'); + if (symbolOffset) { + var pos = opt.position = opt.position || [0, 0]; + pos[0] += parsePercent$1(symbolOffset[0], symbolSize[0]); + pos[1] += parsePercent$1(symbolOffset[1], symbolSize[1]); + } + + var symbolRotate = hostModel.get('symbolRotate'); + opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + + symbol.attr(opt); + + // FIXME + // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed, + // getBoundingRect will return wrong result. + // (This is supposed to be resolved in zrender, but it is a little difficult to + // leverage performance and auto updateTransform) + // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol. + symbol.updateTransform(); + + return symbol; +} + +function pointerMoveTo(pointer, dataIndex, axis, timelineModel, noAnimation) { + if (pointer.dragging) { + return; + } + + var pointerModel = timelineModel.getModel('checkpointStyle'); + var toCoord = axis.dataToCoord(timelineModel.getData().get(['value'], dataIndex)); + + if (noAnimation || !pointerModel.get('animation', true)) { + pointer.attr({position: [toCoord, 0]}); + } + else { + pointer.stopAnimation(true); + pointer.animateTo( + {position: [toCoord, 0]}, + pointerModel.get('animationDuration', true), + pointerModel.get('animationEasing', true) + ); + } +} + +/** + * DataZoom component entry + */ + +registerPreprocessor(preprocessor$3); + +var ToolboxModel = extendComponentModel({ + + type: 'toolbox', + + layoutMode: { + type: 'box', + ignoreSize: true + }, + + mergeDefaultAndTheme: function (option) { + ToolboxModel.superApply(this, 'mergeDefaultAndTheme', arguments); + + each$1(this.option.feature, function (featureOpt, featureName) { + var Feature = get$5(featureName); + Feature && merge(featureOpt, Feature.defaultOption); + }); + }, + + defaultOption: { + + show: true, + + z: 6, + + zlevel: 0, + + orient: 'horizontal', + + left: 'right', + + top: 'top', + + // right + // bottom + + backgroundColor: 'transparent', + + borderColor: '#ccc', + + borderRadius: 0, + + borderWidth: 0, + + padding: 5, + + itemSize: 15, + + itemGap: 8, + + showTitle: true, + + iconStyle: { + normal: { + borderColor: '#666', + color: 'none' + }, + emphasis: { + borderColor: '#3E98C5' + } + } + // textStyle: {}, + + // feature + } +}); + +extendComponentView({ + + type: 'toolbox', + + render: function (toolboxModel, ecModel, api, payload) { + var group = this.group; + group.removeAll(); + + if (!toolboxModel.get('show')) { + return; + } + + var itemSize = +toolboxModel.get('itemSize'); + var featureOpts = toolboxModel.get('feature') || {}; + var features = this._features || (this._features = {}); + + var featureNames = []; + each$1(featureOpts, function (opt, name) { + featureNames.push(name); + }); + + (new DataDiffer(this._featureNames || [], featureNames)) + .add(processFeature) + .update(processFeature) + .remove(curry(processFeature, null)) + .execute(); + + // Keep for diff. + this._featureNames = featureNames; + + function processFeature(newIndex, oldIndex) { + var featureName = featureNames[newIndex]; + var oldName = featureNames[oldIndex]; + var featureOpt = featureOpts[featureName]; + var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel); + var feature; + + if (featureName && !oldName) { // Create + if (isUserFeatureName(featureName)) { + feature = { + model: featureModel, + onclick: featureModel.option.onclick, + featureName: featureName + }; + } + else { + var Feature = get$5(featureName); + if (!Feature) { + return; + } + feature = new Feature(featureModel, ecModel, api); + } + features[featureName] = feature; + } + else { + feature = features[oldName]; + // If feature does not exsit. + if (!feature) { + return; + } + feature.model = featureModel; + feature.ecModel = ecModel; + feature.api = api; + } + + if (!featureName && oldName) { + feature.dispose && feature.dispose(ecModel, api); + return; + } + + if (!featureModel.get('show') || feature.unusable) { + feature.remove && feature.remove(ecModel, api); + return; + } + + createIconPaths(featureModel, feature, featureName); + + featureModel.setIconStatus = function (iconName, status) { + var option = this.option; + var iconPaths = this.iconPaths; + option.iconStatus = option.iconStatus || {}; + option.iconStatus[iconName] = status; + // FIXME + iconPaths[iconName] && iconPaths[iconName].trigger(status); + }; + + if (feature.render) { + feature.render(featureModel, ecModel, api, payload); + } + } + + function createIconPaths(featureModel, feature, featureName) { + var iconStyleModel = featureModel.getModel('iconStyle'); + + // If one feature has mutiple icon. they are orginaized as + // { + // icon: { + // foo: '', + // bar: '' + // }, + // title: { + // foo: '', + // bar: '' + // } + // } + var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon'); + var titles = featureModel.get('title') || {}; + if (typeof icons === 'string') { + var icon = icons; + var title = titles; + icons = {}; + titles = {}; + icons[featureName] = icon; + titles[featureName] = title; + } + var iconPaths = featureModel.iconPaths = {}; + each$1(icons, function (iconStr, iconName) { + var path = createIcon( + iconStr, + {}, + { + x: -itemSize / 2, + y: -itemSize / 2, + width: itemSize, + height: itemSize + } + ); + path.setStyle(iconStyleModel.getModel('normal').getItemStyle()); + path.hoverStyle = iconStyleModel.getModel('emphasis').getItemStyle(); + + setHoverStyle(path); + + if (toolboxModel.get('showTitle')) { + path.__title = titles[iconName]; + path.on('mouseover', function () { + // Should not reuse above hoverStyle, which might be modified. + var hoverStyle = iconStyleModel.getModel('emphasis').getItemStyle(); + path.setStyle({ + text: titles[iconName], + textPosition: hoverStyle.textPosition || 'bottom', + textFill: hoverStyle.fill || hoverStyle.stroke || '#000', + textAlign: hoverStyle.textAlign || 'center' + }); + }) + .on('mouseout', function () { + path.setStyle({ + textFill: null + }); + }); + } + path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal'); + + group.add(path); + path.on('click', bind( + feature.onclick, feature, ecModel, api, iconName + )); + + iconPaths[iconName] = path; + }); + } + + layout$2(group, toolboxModel, api); + // Render background after group is layout + // FIXME + group.add(makeBackground(group.getBoundingRect(), toolboxModel)); + + // Adjust icon title positions to avoid them out of screen + group.eachChild(function (icon) { + var titleText = icon.__title; + var hoverStyle = icon.hoverStyle; + // May be background element + if (hoverStyle && titleText) { + var rect = getBoundingRect( + titleText, makeFont(hoverStyle) + ); + var offsetX = icon.position[0] + group.position[0]; + var offsetY = icon.position[1] + group.position[1] + itemSize; + + var needPutOnTop = false; + if (offsetY + rect.height > api.getHeight()) { + hoverStyle.textPosition = 'top'; + needPutOnTop = true; + } + var topOffset = needPutOnTop ? (-5 - rect.height) : (itemSize + 8); + if (offsetX + rect.width / 2 > api.getWidth()) { + hoverStyle.textPosition = ['100%', topOffset]; + hoverStyle.textAlign = 'right'; + } + else if (offsetX - rect.width / 2 < 0) { + hoverStyle.textPosition = [0, topOffset]; + hoverStyle.textAlign = 'left'; + } + } + }); + }, + + updateView: function (toolboxModel, ecModel, api, payload) { + each$1(this._features, function (feature) { + feature.updateView && feature.updateView(feature.model, ecModel, api, payload); + }); + }, + + updateLayout: function (toolboxModel, ecModel, api, payload) { + each$1(this._features, function (feature) { + feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload); + }); + }, + + remove: function (ecModel, api) { + each$1(this._features, function (feature) { + feature.remove && feature.remove(ecModel, api); + }); + this.group.removeAll(); + }, + + dispose: function (ecModel, api) { + each$1(this._features, function (feature) { + feature.dispose && feature.dispose(ecModel, api); + }); + } +}); + +function isUserFeatureName(featureName) { + return featureName.indexOf('my') === 0; +} + +var saveAsImageLang = lang.toolbox.saveAsImage; + +function SaveAsImage(model) { + this.model = model; +} + +SaveAsImage.defaultOption = { + show: true, + icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0', + title: saveAsImageLang.title, + type: 'png', + // Default use option.backgroundColor + // backgroundColor: '#fff', + name: '', + excludeComponents: ['toolbox'], + pixelRatio: 1, + lang: saveAsImageLang.lang.slice() +}; + +SaveAsImage.prototype.unusable = !env$1.canvasSupported; + +var proto$2 = SaveAsImage.prototype; + +proto$2.onclick = function (ecModel, api) { + var model = this.model; + var title = model.get('name') || ecModel.get('title.0.text') || 'echarts'; + var $a = document.createElement('a'); + var type = model.get('type', true) || 'png'; + $a.download = title + '.' + type; + $a.target = '_blank'; + var url = api.getConnectedDataURL({ + type: type, + backgroundColor: model.get('backgroundColor', true) + || ecModel.get('backgroundColor') || '#fff', + excludeComponents: model.get('excludeComponents'), + pixelRatio: model.get('pixelRatio') + }); + $a.href = url; + // Chrome and Firefox + if (typeof MouseEvent === 'function' && !env$1.browser.ie && !env$1.browser.edge) { + var evt = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: false + }); + $a.dispatchEvent(evt); + } + // IE + else { + if (window.navigator.msSaveOrOpenBlob) { + var bstr = atob(url.split(',')[1]); + var n = bstr.length; + var u8arr = new Uint8Array(n); + while(n--) { + u8arr[n] = bstr.charCodeAt(n); + } + var blob = new Blob([u8arr]); + window.navigator.msSaveOrOpenBlob(blob, title + '.' + type); + } + else { + var lang$$1 = model.get('lang'); + var html = '' + + '' + + '' + + ''; + var tab = window.open(); + tab.document.write(html); + } + } +}; + +register$1( + 'saveAsImage', SaveAsImage +); + +var magicTypeLang = lang.toolbox.magicType; + +function MagicType(model) { + this.model = model; +} + +MagicType.defaultOption = { + show: true, + type: [], + // Icon group + icon: { + line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4', + bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7', + stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z', // jshint ignore:line + tiled: 'M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z' + }, + // `line`, `bar`, `stack`, `tiled` + title: clone(magicTypeLang.title), + option: {}, + seriesIndex: {} +}; + +var proto$3 = MagicType.prototype; + +proto$3.getIcons = function () { + var model = this.model; + var availableIcons = model.get('icon'); + var icons = {}; + each$1(model.get('type'), function (type) { + if (availableIcons[type]) { + icons[type] = availableIcons[type]; + } + }); + return icons; +}; + +var seriesOptGenreator = { + 'line': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'bar') { + return merge({ + id: seriesId, + type: 'line', + // Preserve data related option + data: seriesModel.get('data'), + stack: seriesModel.get('stack'), + markPoint: seriesModel.get('markPoint'), + markLine: seriesModel.get('markLine') + }, model.get('option.line') || {}, true); + } + }, + 'bar': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line') { + return merge({ + id: seriesId, + type: 'bar', + // Preserve data related option + data: seriesModel.get('data'), + stack: seriesModel.get('stack'), + markPoint: seriesModel.get('markPoint'), + markLine: seriesModel.get('markLine') + }, model.get('option.bar') || {}, true); + } + }, + 'stack': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line' || seriesType === 'bar') { + return merge({ + id: seriesId, + stack: '__ec_magicType_stack__' + }, model.get('option.stack') || {}, true); + } + }, + 'tiled': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line' || seriesType === 'bar') { + return merge({ + id: seriesId, + stack: '' + }, model.get('option.tiled') || {}, true); + } + } +}; + +var radioTypes = [ + ['line', 'bar'], + ['stack', 'tiled'] +]; + +proto$3.onclick = function (ecModel, api, type) { + var model = this.model; + var seriesIndex = model.get('seriesIndex.' + type); + // Not supported magicType + if (!seriesOptGenreator[type]) { + return; + } + var newOption = { + series: [] + }; + var generateNewSeriesTypes = function (seriesModel) { + var seriesType = seriesModel.subType; + var seriesId = seriesModel.id; + var newSeriesOpt = seriesOptGenreator[type]( + seriesType, seriesId, seriesModel, model + ); + if (newSeriesOpt) { + // PENDING If merge original option? + defaults(newSeriesOpt, seriesModel.option); + newOption.series.push(newSeriesOpt); + } + // Modify boundaryGap + var coordSys = seriesModel.coordinateSystem; + if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) { + var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; + if (categoryAxis) { + var axisDim = categoryAxis.dim; + var axisType = axisDim + 'Axis'; + var axisModel = ecModel.queryComponents({ + mainType: axisType, + index: seriesModel.get(name + 'Index'), + id: seriesModel.get(name + 'Id') + })[0]; + var axisIndex = axisModel.componentIndex; + + newOption[axisType] = newOption[axisType] || []; + for (var i = 0; i <= axisIndex; i++) { + newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {}; + } + newOption[axisType][axisIndex].boundaryGap = type === 'bar' ? true : false; + } + } + }; + + each$1(radioTypes, function (radio) { + if (indexOf(radio, type) >= 0) { + each$1(radio, function (item) { + model.setIconStatus(item, 'normal'); + }); + } + }); + + model.setIconStatus(type, 'emphasis'); + + ecModel.eachComponent( + { + mainType: 'series', + query: seriesIndex == null ? null : { + seriesIndex: seriesIndex + } + }, generateNewSeriesTypes + ); + api.dispatchAction({ + type: 'changeMagicType', + currentType: type, + newOption: newOption + }); +}; + +registerAction({ + type: 'changeMagicType', + event: 'magicTypeChanged', + update: 'prepareAndUpdate' +}, function (payload, ecModel) { + ecModel.mergeOption(payload.newOption); +}); + +register$1('magicType', MagicType); + +var dataViewLang = lang.toolbox.dataView; + +var BLOCK_SPLITER = new Array(60).join('-'); +var ITEM_SPLITER = '\t'; +/** + * Group series into two types + * 1. on category axis, like line, bar + * 2. others, like scatter, pie + * @param {module:echarts/model/Global} ecModel + * @return {Object} + * @inner + */ +function groupSeries(ecModel) { + var seriesGroupByCategoryAxis = {}; + var otherSeries = []; + var meta = []; + ecModel.eachRawSeries(function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) { + var baseAxis = coordSys.getBaseAxis(); + if (baseAxis.type === 'category') { + var key = baseAxis.dim + '_' + baseAxis.index; + if (!seriesGroupByCategoryAxis[key]) { + seriesGroupByCategoryAxis[key] = { + categoryAxis: baseAxis, + valueAxis: coordSys.getOtherAxis(baseAxis), + series: [] + }; + meta.push({ + axisDim: baseAxis.dim, + axisIndex: baseAxis.index + }); + } + seriesGroupByCategoryAxis[key].series.push(seriesModel); + } + else { + otherSeries.push(seriesModel); + } + } + else { + otherSeries.push(seriesModel); + } + }); + + return { + seriesGroupByCategoryAxis: seriesGroupByCategoryAxis, + other: otherSeries, + meta: meta + }; +} + +/** + * Assemble content of series on cateogory axis + * @param {Array.} series + * @return {string} + * @inner + */ +function assembleSeriesWithCategoryAxis(series) { + var tables = []; + each$1(series, function (group, key) { + var categoryAxis = group.categoryAxis; + var valueAxis = group.valueAxis; + var valueAxisDim = valueAxis.dim; + + var headers = [' '].concat(map(group.series, function (series) { + return series.name; + })); + var columns = [categoryAxis.model.getCategories()]; + each$1(group.series, function (series) { + columns.push(series.getRawData().mapArray(valueAxisDim, function (val) { + return val; + })); + }); + // Assemble table content + var lines = [headers.join(ITEM_SPLITER)]; + for (var i = 0; i < columns[0].length; i++) { + var items = []; + for (var j = 0; j < columns.length; j++) { + items.push(columns[j][i]); + } + lines.push(items.join(ITEM_SPLITER)); + } + tables.push(lines.join('\n')); + }); + return tables.join('\n\n' + BLOCK_SPLITER + '\n\n'); +} + +/** + * Assemble content of other series + * @param {Array.} series + * @return {string} + * @inner + */ +function assembleOtherSeries(series) { + return map(series, function (series) { + var data = series.getRawData(); + var lines = [series.name]; + var vals = []; + data.each(data.dimensions, function () { + var argLen = arguments.length; + var dataIndex = arguments[argLen - 1]; + var name = data.getName(dataIndex); + for (var i = 0; i < argLen - 1; i++) { + vals[i] = arguments[i]; + } + lines.push((name ? (name + ITEM_SPLITER) : '') + vals.join(ITEM_SPLITER)); + }); + return lines.join('\n'); + }).join('\n\n' + BLOCK_SPLITER + '\n\n'); +} + +/** + * @param {module:echarts/model/Global} + * @return {Object} + * @inner + */ +function getContentFromModel(ecModel) { + + var result = groupSeries(ecModel); + + return { + value: filter([ + assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), + assembleOtherSeries(result.other) + ], function (str) { + return str.replace(/[\n\t\s]/g, ''); + }).join('\n\n' + BLOCK_SPLITER + '\n\n'), + + meta: result.meta + }; +} + + +function trim(str) { + return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); +} +/** + * If a block is tsv format + */ +function isTSVFormat(block) { + // Simple method to find out if a block is tsv format + var firstLine = block.slice(0, block.indexOf('\n')); + if (firstLine.indexOf(ITEM_SPLITER) >= 0) { + return true; + } +} + +var itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g'); +/** + * @param {string} tsv + * @return {Object} + */ +function parseTSVContents(tsv) { + var tsvLines = tsv.split(/\n+/g); + var headers = trim(tsvLines.shift()).split(itemSplitRegex); + + var categories = []; + var series = map(headers, function (header) { + return { + name: header, + data: [] + }; + }); + for (var i = 0; i < tsvLines.length; i++) { + var items = trim(tsvLines[i]).split(itemSplitRegex); + categories.push(items.shift()); + for (var j = 0; j < items.length; j++) { + series[j] && (series[j].data[i] = items[j]); + } + } + return { + series: series, + categories: categories + }; +} + +/** + * @param {string} str + * @return {Array.} + * @inner + */ +function parseListContents(str) { + var lines = str.split(/\n+/g); + var seriesName = trim(lines.shift()); + + var data = []; + for (var i = 0; i < lines.length; i++) { + var items = trim(lines[i]).split(itemSplitRegex); + var name = ''; + var value; + var hasName = false; + if (isNaN(items[0])) { // First item is name + hasName = true; + name = items[0]; + items = items.slice(1); + data[i] = { + name: name, + value: [] + }; + value = data[i].value; + } + else { + value = data[i] = []; + } + for (var j = 0; j < items.length; j++) { + value.push(+items[j]); + } + if (value.length === 1) { + hasName ? (data[i].value = value[0]) : (data[i] = value[0]); + } + } + + return { + name: seriesName, + data: data + }; +} + +/** + * @param {string} str + * @param {Array.} blockMetaList + * @return {Object} + * @inner + */ +function parseContents(str, blockMetaList) { + var blocks = str.split(new RegExp('\n*' + BLOCK_SPLITER + '\n*', 'g')); + var newOption = { + series: [] + }; + each$1(blocks, function (block, idx) { + if (isTSVFormat(block)) { + var result = parseTSVContents(block); + var blockMeta = blockMetaList[idx]; + var axisKey = blockMeta.axisDim + 'Axis'; + + if (blockMeta) { + newOption[axisKey] = newOption[axisKey] || []; + newOption[axisKey][blockMeta.axisIndex] = { + data: result.categories + }; + newOption.series = newOption.series.concat(result.series); + } + } + else { + var result = parseListContents(block); + newOption.series.push(result); + } + }); + return newOption; +} + +/** + * @alias {module:echarts/component/toolbox/feature/DataView} + * @constructor + * @param {module:echarts/model/Model} model + */ +function DataView(model) { + + this._dom = null; + + this.model = model; +} + +DataView.defaultOption = { + show: true, + readOnly: false, + optionToContent: null, + contentToOption: null, + + icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28', + title: clone(dataViewLang.title), + lang: clone(dataViewLang.lang), + backgroundColor: '#fff', + textColor: '#000', + textareaColor: '#fff', + textareaBorderColor: '#333', + buttonColor: '#c23531', + buttonTextColor: '#fff' +}; + +DataView.prototype.onclick = function (ecModel, api) { + var container = api.getDom(); + var model = this.model; + if (this._dom) { + container.removeChild(this._dom); + } + var root = document.createElement('div'); + root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;'; + root.style.backgroundColor = model.get('backgroundColor') || '#fff'; + + // Create elements + var header = document.createElement('h4'); + var lang$$1 = model.get('lang') || []; + header.innerHTML = lang$$1[0] || model.get('title'); + header.style.cssText = 'margin: 10px 20px;'; + header.style.color = model.get('textColor'); + + var viewMain = document.createElement('div'); + var textarea = document.createElement('textarea'); + viewMain.style.cssText = 'display:block;width:100%;overflow:auto;'; + + var optionToContent = model.get('optionToContent'); + var contentToOption = model.get('contentToOption'); + var result = getContentFromModel(ecModel); + if (typeof optionToContent === 'function') { + var htmlOrDom = optionToContent(api.getOption()); + if (typeof htmlOrDom === 'string') { + viewMain.innerHTML = htmlOrDom; + } + else if (isDom(htmlOrDom)) { + viewMain.appendChild(htmlOrDom); + } + } + else { + // Use default textarea + viewMain.appendChild(textarea); + textarea.readOnly = model.get('readOnly'); + textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;'; + textarea.style.color = model.get('textColor'); + textarea.style.borderColor = model.get('textareaBorderColor'); + textarea.style.backgroundColor = model.get('textareaColor'); + textarea.value = result.value; + } + + var blockMetaList = result.meta; + + var buttonContainer = document.createElement('div'); + buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;'; + + var buttonStyle = 'float:right;margin-right:20px;border:none;' + + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px'; + var closeButton = document.createElement('div'); + var refreshButton = document.createElement('div'); + + buttonStyle += ';background-color:' + model.get('buttonColor'); + buttonStyle += ';color:' + model.get('buttonTextColor'); + + var self = this; + + function close() { + container.removeChild(root); + self._dom = null; + } + addEventListener(closeButton, 'click', close); + + addEventListener(refreshButton, 'click', function () { + var newOption; + try { + if (typeof contentToOption === 'function') { + newOption = contentToOption(viewMain, api.getOption()); + } + else { + newOption = parseContents(textarea.value, blockMetaList); + } + } + catch (e) { + close(); + throw new Error('Data view format error ' + e); + } + if (newOption) { + api.dispatchAction({ + type: 'changeDataView', + newOption: newOption + }); + } + + close(); + }); + + closeButton.innerHTML = lang$$1[1]; + refreshButton.innerHTML = lang$$1[2]; + refreshButton.style.cssText = buttonStyle; + closeButton.style.cssText = buttonStyle; + + !model.get('readOnly') && buttonContainer.appendChild(refreshButton); + buttonContainer.appendChild(closeButton); + + // http://stackoverflow.com/questions/6637341/use-tab-to-indent-in-textarea + addEventListener(textarea, 'keydown', function (e) { + if ((e.keyCode || e.which) === 9) { + // get caret position/selection + var val = this.value; + var start = this.selectionStart; + var end = this.selectionEnd; + + // set textarea value to: text before caret + tab + text after caret + this.value = val.substring(0, start) + ITEM_SPLITER + val.substring(end); + + // put caret at right position again + this.selectionStart = this.selectionEnd = start + 1; + + // prevent the focus lose + stop(e); + } + }); + + root.appendChild(header); + root.appendChild(viewMain); + root.appendChild(buttonContainer); + + viewMain.style.height = (container.clientHeight - 80) + 'px'; + + container.appendChild(root); + this._dom = root; +}; + +DataView.prototype.remove = function (ecModel, api) { + this._dom && api.getDom().removeChild(this._dom); +}; + +DataView.prototype.dispose = function (ecModel, api) { + this.remove(ecModel, api); +}; + +/** + * @inner + */ +function tryMergeDataOption(newData, originalData) { + return map(newData, function (newVal, idx) { + var original = originalData && originalData[idx]; + if (isObject(original) && !isArray(original)) { + if (isObject(newVal) && !isArray(newVal)) { + newVal = newVal.value; + } + // Original data has option + return defaults({ + value: newVal + }, original); + } + else { + return newVal; + } + }); +} + +register$1('dataView', DataView); + +registerAction({ + type: 'changeDataView', + event: 'dataViewChanged', + update: 'prepareAndUpdate' +}, function (payload, ecModel) { + var newSeriesOptList = []; + each$1(payload.newOption.series, function (seriesOpt) { + var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0]; + if (!seriesModel) { + // New created series + // Geuss the series type + newSeriesOptList.push(extend({ + // Default is scatter + type: 'scatter' + }, seriesOpt)); + } + else { + var originalData = seriesModel.get('data'); + newSeriesOptList.push({ + name: seriesOpt.name, + data: tryMergeDataOption(seriesOpt.data, originalData) + }); + } + }); + + ecModel.mergeOption(defaults({ + series: newSeriesOptList + }, payload.newOption)); +}); + +var each$32 = each$1; + +var ATTR$2 = '\0_ec_hist_store'; + +/** + * @param {module:echarts/model/Global} ecModel + * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]} + */ +function push(ecModel, newSnapshot) { + var store = giveStore$1(ecModel); + + // If previous dataZoom can not be found, + // complete an range with current range. + each$32(newSnapshot, function (batchItem, dataZoomId) { + var i = store.length - 1; + for (; i >= 0; i--) { + var snapshot = store[i]; + if (snapshot[dataZoomId]) { + break; + } + } + if (i < 0) { + // No origin range set, create one by current range. + var dataZoomModel = ecModel.queryComponents( + {mainType: 'dataZoom', subType: 'select', id: dataZoomId} + )[0]; + if (dataZoomModel) { + var percentRange = dataZoomModel.getPercentRange(); + store[0][dataZoomId] = { + dataZoomId: dataZoomId, + start: percentRange[0], + end: percentRange[1] + }; + } + } + }); + + store.push(newSnapshot); +} + +/** + * @param {module:echarts/model/Global} ecModel + * @return {Object} snapshot + */ +function pop(ecModel) { + var store = giveStore$1(ecModel); + var head = store[store.length - 1]; + store.length > 1 && store.pop(); + + // Find top for all dataZoom. + var snapshot = {}; + each$32(head, function (batchItem, dataZoomId) { + for (var i = store.length - 1; i >= 0; i--) { + var batchItem = store[i][dataZoomId]; + if (batchItem) { + snapshot[dataZoomId] = batchItem; + break; + } + } + }); + + return snapshot; +} + +/** + * @param {module:echarts/model/Global} ecModel + */ +function clear$1(ecModel) { + ecModel[ATTR$2] = null; +} + +/** + * @param {module:echarts/model/Global} ecModel + * @return {number} records. always >= 1. + */ +function count(ecModel) { + return giveStore$1(ecModel).length; +} + +/** + * [{key: dataZoomId, value: {dataZoomId, range}}, ...] + * History length of each dataZoom may be different. + * this._history[0] is used to store origin range. + * @type {Array.} + */ +function giveStore$1(ecModel) { + var store = ecModel[ATTR$2]; + if (!store) { + store = ecModel[ATTR$2] = [{}]; + } + return store; +} + +DataZoomModel.extend({ + type: 'dataZoom.select' +}); + +DataZoomView.extend({ + type: 'dataZoom.select' +}); + +/** + * DataZoom component entry + */ + +// Use dataZoomSelect +var dataZoomLang = lang.toolbox.dataZoom; +var each$31 = each$1; + +// Spectial component id start with \0ec\0, see echarts/model/Global.js~hasInnerId +var DATA_ZOOM_ID_BASE = '\0_ec_\0toolbox-dataZoom_'; + +function DataZoom(model, ecModel, api) { + + /** + * @private + * @type {module:echarts/component/helper/BrushController} + */ + (this._brushController = new BrushController(api.getZr())) + .on('brush', bind(this._onBrush, this)) + .mount(); + + /** + * @private + * @type {boolean} + */ + this._isZoomActive; +} + +DataZoom.defaultOption = { + show: true, + // Icon group + icon: { + zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1', + back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26' + }, + // `zoom`, `back` + title: clone(dataZoomLang.title) +}; + +var proto$4 = DataZoom.prototype; + +proto$4.render = function (featureModel, ecModel, api, payload) { + this.model = featureModel; + this.ecModel = ecModel; + this.api = api; + + updateZoomBtnStatus(featureModel, ecModel, this, payload, api); + updateBackBtnStatus(featureModel, ecModel); +}; + +proto$4.onclick = function (ecModel, api, type) { + handlers$1[type].call(this); +}; + +proto$4.remove = function (ecModel, api) { + this._brushController.unmount(); +}; + +proto$4.dispose = function (ecModel, api) { + this._brushController.dispose(); +}; + +/** + * @private + */ +var handlers$1 = { + + zoom: function () { + var nextActive = !this._isZoomActive; + + this.api.dispatchAction({ + type: 'takeGlobalCursor', + key: 'dataZoomSelect', + dataZoomSelectActive: nextActive + }); + }, + + back: function () { + this._dispatchZoomAction(pop(this.ecModel)); + } +}; + +/** + * @private + */ +proto$4._onBrush = function (areas, opt) { + if (!opt.isEnd || !areas.length) { + return; + } + var snapshot = {}; + var ecModel = this.ecModel; + + this._brushController.updateCovers([]); // remove cover + + var brushTargetManager = new BrushTargetManager( + retrieveAxisSetting(this.model.option), ecModel, {include: ['grid']} + ); + brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) { + if (coordSys.type !== 'cartesian2d') { + return; + } + + var brushType = area.brushType; + if (brushType === 'rect') { + setBatch('x', coordSys, coordRange[0]); + setBatch('y', coordSys, coordRange[1]); + } + else { + setBatch(({lineX: 'x', lineY: 'y'})[brushType], coordSys, coordRange); + } + }); + + push(ecModel, snapshot); + + this._dispatchZoomAction(snapshot); + + function setBatch(dimName, coordSys, minMax) { + var axis = coordSys.getAxis(dimName); + var axisModel = axis.model; + var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); + + // Restrict range. + var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan(); + if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) { + minMax = sliderMove( + 0, minMax.slice(), axis.scale.getExtent(), 0, + minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan + ); + } + + dataZoomModel && (snapshot[dataZoomModel.id] = { + dataZoomId: dataZoomModel.id, + startValue: minMax[0], + endValue: minMax[1] + }); + } + + function findDataZoom(dimName, axisModel, ecModel) { + var found; + ecModel.eachComponent({mainType: 'dataZoom', subType: 'select'}, function (dzModel) { + var has = dzModel.getAxisModel(dimName, axisModel.componentIndex); + has && (found = dzModel); + }); + return found; + } +}; + +/** + * @private + */ +proto$4._dispatchZoomAction = function (snapshot) { + var batch = []; + + // Convert from hash map to array. + each$31(snapshot, function (batchItem, dataZoomId) { + batch.push(clone(batchItem)); + }); + + batch.length && this.api.dispatchAction({ + type: 'dataZoom', + from: this.uid, + batch: batch + }); +}; + +function retrieveAxisSetting(option) { + var setting = {}; + // Compatible with previous setting: null => all axis, false => no axis. + each$1(['xAxisIndex', 'yAxisIndex'], function (name) { + setting[name] = option[name]; + setting[name] == null && (setting[name] = 'all'); + (setting[name] === false || setting[name] === 'none') && (setting[name] = []); + }); + return setting; +} + +function updateBackBtnStatus(featureModel, ecModel) { + featureModel.setIconStatus( + 'back', + count(ecModel) > 1 ? 'emphasis' : 'normal' + ); +} + +function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) { + var zoomActive = view._isZoomActive; + + if (payload && payload.type === 'takeGlobalCursor') { + zoomActive = payload.key === 'dataZoomSelect' + ? payload.dataZoomSelectActive : false; + } + + view._isZoomActive = zoomActive; + + featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal'); + + var brushTargetManager = new BrushTargetManager( + retrieveAxisSetting(featureModel.option), ecModel, {include: ['grid']} + ); + + view._brushController + .setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) { + return (targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared) + ? 'lineX' + : (!targetInfo.xAxisDeclared && targetInfo.yAxisDeclared) + ? 'lineY' + : 'rect'; + })) + .enableBrush( + zoomActive + ? { + brushType: 'auto', + brushStyle: { + // FIXME user customized? + lineWidth: 0, + fill: 'rgba(0,0,0,0.2)' + } + } + : false + ); +} + + +register$1('dataZoom', DataZoom); + + +// Create special dataZoom option for select +registerPreprocessor(function (option) { + if (!option) { + return; + } + + var dataZoomOpts = option.dataZoom || (option.dataZoom = []); + if (!isArray(dataZoomOpts)) { + option.dataZoom = dataZoomOpts = [dataZoomOpts]; + } + + var toolboxOpt = option.toolbox; + if (toolboxOpt) { + // Assume there is only one toolbox + if (isArray(toolboxOpt)) { + toolboxOpt = toolboxOpt[0]; + } + + if (toolboxOpt && toolboxOpt.feature) { + var dataZoomOpt = toolboxOpt.feature.dataZoom; + addForAxis('xAxis', dataZoomOpt); + addForAxis('yAxis', dataZoomOpt); + } + } + + function addForAxis(axisName, dataZoomOpt) { + if (!dataZoomOpt) { + return; + } + + // Try not to modify model, because it is not merged yet. + var axisIndicesName = axisName + 'Index'; + var givenAxisIndices = dataZoomOpt[axisIndicesName]; + if (givenAxisIndices != null + && givenAxisIndices != 'all' + && !isArray(givenAxisIndices) + ) { + givenAxisIndices = (givenAxisIndices === false || givenAxisIndices === 'none') ? [] : [givenAxisIndices]; + } + + forEachComponent(axisName, function (axisOpt, axisIndex) { + if (givenAxisIndices != null + && givenAxisIndices != 'all' + && indexOf(givenAxisIndices, axisIndex) === -1 + ) { + return; + } + var newOpt = { + type: 'select', + $fromToolbox: true, + // Id for merge mapping. + id: DATA_ZOOM_ID_BASE + axisName + axisIndex + }; + // FIXME + // Only support one axis now. + newOpt[axisIndicesName] = axisIndex; + dataZoomOpts.push(newOpt); + }); + } + + function forEachComponent(mainType, cb) { + var opts = option[mainType]; + if (!isArray(opts)) { + opts = opts ? [opts] : []; + } + each$31(opts, cb); + } +}); + +var restoreLang = lang.toolbox.restore; + +function Restore(model) { + this.model = model; +} + +Restore.defaultOption = { + show: true, + icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5', + title: restoreLang.title +}; + +var proto$5 = Restore.prototype; + +proto$5.onclick = function (ecModel, api, type) { + clear$1(ecModel); + + api.dispatchAction({ + type: 'restore', + from: this.uid + }); +}; + +register$1('restore', Restore); + +registerAction( + {type: 'restore', event: 'restore', update: 'prepareAndUpdate'}, + function (payload, ecModel) { + ecModel.resetOption('recreate'); + } +); + +var urn = 'urn:schemas-microsoft-com:vml'; +var win = typeof window === 'undefined' ? null : window; + +var vmlInited = false; + +var doc = win && win.document; + +var createNode; + +if (doc && !env$1.canvasSupported) { + try { + !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn); + createNode = function (tagName) { + return doc.createElement(''); + }; + } + catch (e) { + createNode = function (tagName) { + return doc.createElement('<' + tagName + ' xmlns="' + urn + '" class="zrvml">'); + }; + } +} + +// From raphael +function initVML() { + if (vmlInited || !doc) { + return; + } + vmlInited = true; + + var styleSheets = doc.styleSheets; + if (styleSheets.length < 31) { + doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)'); + } + else { + // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx + styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)'); + } +} + +// http://www.w3.org/TR/NOTE-VML +// TODO Use proxy like svg instead of overwrite brush methods + +var round$3 = Math.round; +var sqrt = Math.sqrt; +var abs$1 = Math.abs; +var cos = Math.cos; +var sin = Math.sin; +var mathMax$8 = Math.max; + +if (!env$1.canvasSupported) { + + var comma = ','; + var imageTransformPrefix = 'progid:DXImageTransform.Microsoft'; + + var Z = 21600; + var Z2 = Z / 2; + + var ZLEVEL_BASE = 100000; + var Z_BASE$1 = 1000; + + var initRootElStyle = function (el) { + el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;'; + el.coordsize = Z + ',' + Z; + el.coordorigin = '0,0'; + }; + + var encodeHtmlAttribute = function (s) { + return String(s).replace(/&/g, '&').replace(/"/g, '"'); + }; + + var rgb2Str = function (r, g, b) { + return 'rgb(' + [r, g, b].join(',') + ')'; + }; + + var append = function (parent, child) { + if (child && parent && child.parentNode !== parent) { + parent.appendChild(child); + } + }; + + var remove = function (parent, child) { + if (child && parent && child.parentNode === parent) { + parent.removeChild(child); + } + }; + + var getZIndex = function (zlevel, z, z2) { + // z 的取值范围为 [0, 1000] + return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE$1 + z2; + }; + + var parsePercent$3 = function (value, maxValue) { + if (typeof value === 'string') { + if (value.lastIndexOf('%') >= 0) { + return parseFloat(value) / 100 * maxValue; + } + return parseFloat(value); + } + return value; + }; + + /*************************************************** + * PATH + **************************************************/ + + var setColorAndOpacity = function (el, color, opacity) { + var colorArr = parse(color); + opacity = +opacity; + if (isNaN(opacity)) { + opacity = 1; + } + if (colorArr) { + el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]); + el.opacity = opacity * colorArr[3]; + } + }; + + var getColorAndAlpha = function (color) { + var colorArr = parse(color); + return [ + rgb2Str(colorArr[0], colorArr[1], colorArr[2]), + colorArr[3] + ]; + }; + + var updateFillNode = function (el, style, zrEl) { + // TODO pattern + var fill = style.fill; + if (fill != null) { + // Modified from excanvas + if (fill instanceof Gradient) { + var gradientType; + var angle = 0; + var focus = [0, 0]; + // additional offset + var shift = 0; + // scale factor for offset + var expansion = 1; + var rect = zrEl.getBoundingRect(); + var rectWidth = rect.width; + var rectHeight = rect.height; + if (fill.type === 'linear') { + gradientType = 'gradient'; + var transform = zrEl.transform; + var p0 = [fill.x * rectWidth, fill.y * rectHeight]; + var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight]; + if (transform) { + applyTransform(p0, p0, transform); + applyTransform(p1, p1, transform); + } + var dx = p1[0] - p0[0]; + var dy = p1[1] - p0[1]; + angle = Math.atan2(dx, dy) * 180 / Math.PI; + // The angle should be a non-negative number. + if (angle < 0) { + angle += 360; + } + + // Very small angles produce an unexpected result because they are + // converted to a scientific notation string. + if (angle < 1e-6) { + angle = 0; + } + } + else { + gradientType = 'gradientradial'; + var p0 = [fill.x * rectWidth, fill.y * rectHeight]; + var transform = zrEl.transform; + var scale$$1 = zrEl.scale; + var width = rectWidth; + var height = rectHeight; + focus = [ + // Percent in bounding rect + (p0[0] - rect.x) / width, + (p0[1] - rect.y) / height + ]; + if (transform) { + applyTransform(p0, p0, transform); + } + + width /= scale$$1[0] * Z; + height /= scale$$1[1] * Z; + var dimension = mathMax$8(width, height); + shift = 2 * 0 / dimension; + expansion = 2 * fill.r / dimension - shift; + } + + // We need to sort the color stops in ascending order by offset, + // otherwise IE won't interpret it correctly. + var stops = fill.colorStops.slice(); + stops.sort(function(cs1, cs2) { + return cs1.offset - cs2.offset; + }); + + var length$$1 = stops.length; + // Color and alpha list of first and last stop + var colorAndAlphaList = []; + var colors = []; + for (var i = 0; i < length$$1; i++) { + var stop = stops[i]; + var colorAndAlpha = getColorAndAlpha(stop.color); + colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]); + if (i === 0 || i === length$$1 - 1) { + colorAndAlphaList.push(colorAndAlpha); + } + } + + if (length$$1 >= 2) { + var color1 = colorAndAlphaList[0][0]; + var color2 = colorAndAlphaList[1][0]; + var opacity1 = colorAndAlphaList[0][1] * style.opacity; + var opacity2 = colorAndAlphaList[1][1] * style.opacity; + + el.type = gradientType; + el.method = 'none'; + el.focus = '100%'; + el.angle = angle; + el.color = color1; + el.color2 = color2; + el.colors = colors.join(','); + // When colors attribute is used, the meanings of opacity and o:opacity2 + // are reversed. + el.opacity = opacity2; + // FIXME g_o_:opacity ? + el.opacity2 = opacity1; + } + if (gradientType === 'radial') { + el.focusposition = focus.join(','); + } + } + else { + // FIXME Change from Gradient fill to color fill + setColorAndOpacity(el, fill, style.opacity); + } + } + }; + + var updateStrokeNode = function (el, style) { + // if (style.lineJoin != null) { + // el.joinstyle = style.lineJoin; + // } + // if (style.miterLimit != null) { + // el.miterlimit = style.miterLimit * Z; + // } + // if (style.lineCap != null) { + // el.endcap = style.lineCap; + // } + if (style.lineDash != null) { + el.dashstyle = style.lineDash.join(' '); + } + if (style.stroke != null && !(style.stroke instanceof Gradient)) { + setColorAndOpacity(el, style.stroke, style.opacity); + } + }; + + var updateFillAndStroke = function (vmlEl, type, style, zrEl) { + var isFill = type == 'fill'; + var el = vmlEl.getElementsByTagName(type)[0]; + // Stroke must have lineWidth + if (style[type] != null && style[type] !== 'none' && (isFill || (!isFill && style.lineWidth))) { + vmlEl[isFill ? 'filled' : 'stroked'] = 'true'; + // FIXME Remove before updating, or set `colors` will throw error + if (style[type] instanceof Gradient) { + remove(vmlEl, el); + } + if (!el) { + el = createNode(type); + } + + isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style); + append(vmlEl, el); + } + else { + vmlEl[isFill ? 'filled' : 'stroked'] = 'false'; + remove(vmlEl, el); + } + }; + + var points$3 = [[], [], []]; + var pathDataToString = function (path, m) { + var M = CMD.M; + var C = CMD.C; + var L = CMD.L; + var A = CMD.A; + var Q = CMD.Q; + + var str = []; + var nPoint; + var cmdStr; + var cmd; + var i; + var xi; + var yi; + var data = path.data; + var dataLength = path.len(); + for (i = 0; i < dataLength;) { + cmd = data[i++]; + cmdStr = ''; + nPoint = 0; + switch (cmd) { + case M: + cmdStr = ' m '; + nPoint = 1; + xi = data[i++]; + yi = data[i++]; + points$3[0][0] = xi; + points$3[0][1] = yi; + break; + case L: + cmdStr = ' l '; + nPoint = 1; + xi = data[i++]; + yi = data[i++]; + points$3[0][0] = xi; + points$3[0][1] = yi; + break; + case Q: + case C: + cmdStr = ' c '; + nPoint = 3; + var x1 = data[i++]; + var y1 = data[i++]; + var x2 = data[i++]; + var y2 = data[i++]; + var x3; + var y3; + if (cmd === Q) { + // Convert quadratic to cubic using degree elevation + x3 = x2; + y3 = y2; + x2 = (x2 + 2 * x1) / 3; + y2 = (y2 + 2 * y1) / 3; + x1 = (xi + 2 * x1) / 3; + y1 = (yi + 2 * y1) / 3; + } + else { + x3 = data[i++]; + y3 = data[i++]; + } + points$3[0][0] = x1; + points$3[0][1] = y1; + points$3[1][0] = x2; + points$3[1][1] = y2; + points$3[2][0] = x3; + points$3[2][1] = y3; + + xi = x3; + yi = y3; + break; + case A: + var x = 0; + var y = 0; + var sx = 1; + var sy = 1; + var angle = 0; + if (m) { + // Extract SRT from matrix + x = m[4]; + y = m[5]; + sx = sqrt(m[0] * m[0] + m[1] * m[1]); + sy = sqrt(m[2] * m[2] + m[3] * m[3]); + angle = Math.atan2(-m[1] / sy, m[0] / sx); + } + + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++] + angle; + var endAngle = data[i++] + startAngle + angle; + // FIXME + // var psi = data[i++]; + i++; + var clockwise = data[i++]; + + var x0 = cx + cos(startAngle) * rx; + var y0 = cy + sin(startAngle) * ry; + + var x1 = cx + cos(endAngle) * rx; + var y1 = cy + sin(endAngle) * ry; + + var type = clockwise ? ' wa ' : ' at '; + if (Math.abs(x0 - x1) < 1e-4) { + // IE won't render arches drawn counter clockwise if x0 == x1. + if (Math.abs(endAngle - startAngle) > 1e-2) { + // Offset x0 by 1/80 of a pixel. Use something + // that can be represented in binary + if (clockwise) { + x0 += 270 / Z; + } + } + else { + // Avoid case draw full circle + if (Math.abs(y0 - cy) < 1e-4) { + if ((clockwise && x0 < cx) || (!clockwise && x0 > cx)) { + y1 -= 270 / Z; + } + else { + y1 += 270 / Z; + } + } + else if ((clockwise && y0 < cy) || (!clockwise && y0 > cy)) { + x1 += 270 / Z; + } + else { + x1 -= 270 / Z; + } + } + } + str.push( + type, + round$3(((cx - rx) * sx + x) * Z - Z2), comma, + round$3(((cy - ry) * sy + y) * Z - Z2), comma, + round$3(((cx + rx) * sx + x) * Z - Z2), comma, + round$3(((cy + ry) * sy + y) * Z - Z2), comma, + round$3((x0 * sx + x) * Z - Z2), comma, + round$3((y0 * sy + y) * Z - Z2), comma, + round$3((x1 * sx + x) * Z - Z2), comma, + round$3((y1 * sy + y) * Z - Z2) + ); + + xi = x1; + yi = y1; + break; + case CMD.R: + var p0 = points$3[0]; + var p1 = points$3[1]; + // x0, y0 + p0[0] = data[i++]; + p0[1] = data[i++]; + // x1, y1 + p1[0] = p0[0] + data[i++]; + p1[1] = p0[1] + data[i++]; + + if (m) { + applyTransform(p0, p0, m); + applyTransform(p1, p1, m); + } + + p0[0] = round$3(p0[0] * Z - Z2); + p1[0] = round$3(p1[0] * Z - Z2); + p0[1] = round$3(p0[1] * Z - Z2); + p1[1] = round$3(p1[1] * Z - Z2); + str.push( + // x0, y0 + ' m ', p0[0], comma, p0[1], + // x1, y0 + ' l ', p1[0], comma, p0[1], + // x1, y1 + ' l ', p1[0], comma, p1[1], + // x0, y1 + ' l ', p0[0], comma, p1[1] + ); + break; + case CMD.Z: + // FIXME Update xi, yi + str.push(' x '); + } + + if (nPoint > 0) { + str.push(cmdStr); + for (var k = 0; k < nPoint; k++) { + var p = points$3[k]; + + m && applyTransform(p, p, m); + // 不 round 会非常慢 + str.push( + round$3(p[0] * Z - Z2), comma, round$3(p[1] * Z - Z2), + k < nPoint - 1 ? comma : '' + ); + } + } + } + + return str.join(''); + }; + + // Rewrite the original path method + Path.prototype.brushVML = function (vmlRoot) { + var style = this.style; + + var vmlEl = this._vmlEl; + if (!vmlEl) { + vmlEl = createNode('shape'); + initRootElStyle(vmlEl); + + this._vmlEl = vmlEl; + } + + updateFillAndStroke(vmlEl, 'fill', style, this); + updateFillAndStroke(vmlEl, 'stroke', style, this); + + var m = this.transform; + var needTransform = m != null; + var strokeEl = vmlEl.getElementsByTagName('stroke')[0]; + if (strokeEl) { + var lineWidth = style.lineWidth; + // Get the line scale. + // Determinant of this.m_ means how much the area is enlarged by the + // transformation. So its square root can be used as a scale factor + // for width. + if (needTransform && !style.strokeNoScale) { + var det = m[0] * m[3] - m[1] * m[2]; + lineWidth *= sqrt(abs$1(det)); + } + strokeEl.weight = lineWidth + 'px'; + } + + var path = this.path || (this.path = new PathProxy()); + if (this.__dirtyPath) { + path.beginPath(); + this.buildPath(path, this.shape); + path.toStatic(); + this.__dirtyPath = false; + } + + vmlEl.path = pathDataToString(path, this.transform); + + vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); + + // Append to root + append(vmlRoot, vmlEl); + + // Text + if (style.text != null) { + this.drawRectText(vmlRoot, this.getBoundingRect()); + } + else { + this.removeRectText(vmlRoot); + } + }; + + Path.prototype.onRemove = function (vmlRoot) { + remove(vmlRoot, this._vmlEl); + this.removeRectText(vmlRoot); + }; + + Path.prototype.onAdd = function (vmlRoot) { + append(vmlRoot, this._vmlEl); + this.appendRectText(vmlRoot); + }; + + /*************************************************** + * IMAGE + **************************************************/ + var isImage = function (img) { + // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错 + return (typeof img === 'object') && img.tagName && img.tagName.toUpperCase() === 'IMG'; + // return img instanceof Image; + }; + + // Rewrite the original path method + ZImage.prototype.brushVML = function (vmlRoot) { + var style = this.style; + var image = style.image; + + // Image original width, height + var ow; + var oh; + + if (isImage(image)) { + var src = image.src; + if (src === this._imageSrc) { + ow = this._imageWidth; + oh = this._imageHeight; + } + else { + var imageRuntimeStyle = image.runtimeStyle; + var oldRuntimeWidth = imageRuntimeStyle.width; + var oldRuntimeHeight = imageRuntimeStyle.height; + imageRuntimeStyle.width = 'auto'; + imageRuntimeStyle.height = 'auto'; + + // get the original size + ow = image.width; + oh = image.height; + + // and remove overides + imageRuntimeStyle.width = oldRuntimeWidth; + imageRuntimeStyle.height = oldRuntimeHeight; + + // Caching image original width, height and src + this._imageSrc = src; + this._imageWidth = ow; + this._imageHeight = oh; + } + image = src; + } + else { + if (image === this._imageSrc) { + ow = this._imageWidth; + oh = this._imageHeight; + } + } + if (!image) { + return; + } + + var x = style.x || 0; + var y = style.y || 0; + + var dw = style.width; + var dh = style.height; + + var sw = style.sWidth; + var sh = style.sHeight; + var sx = style.sx || 0; + var sy = style.sy || 0; + + var hasCrop = sw && sh; + + var vmlEl = this._vmlEl; + if (!vmlEl) { + // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。 + // vmlEl = vmlCore.createNode('group'); + vmlEl = doc.createElement('div'); + initRootElStyle(vmlEl); + + this._vmlEl = vmlEl; + } + + var vmlElStyle = vmlEl.style; + var hasRotation = false; + var m; + var scaleX = 1; + var scaleY = 1; + if (this.transform) { + m = this.transform; + scaleX = sqrt(m[0] * m[0] + m[1] * m[1]); + scaleY = sqrt(m[2] * m[2] + m[3] * m[3]); + + hasRotation = m[1] || m[2]; + } + if (hasRotation) { + // If filters are necessary (rotation exists), create them + // filters are bog-slow, so only create them if abbsolutely necessary + // The following check doesn't account for skews (which don't exist + // in the canvas spec (yet) anyway. + // From excanvas + var p0 = [x, y]; + var p1 = [x + dw, y]; + var p2 = [x, y + dh]; + var p3 = [x + dw, y + dh]; + applyTransform(p0, p0, m); + applyTransform(p1, p1, m); + applyTransform(p2, p2, m); + applyTransform(p3, p3, m); + + var maxX = mathMax$8(p0[0], p1[0], p2[0], p3[0]); + var maxY = mathMax$8(p0[1], p1[1], p2[1], p3[1]); + + var transformFilter = []; + transformFilter.push('M11=', m[0] / scaleX, comma, + 'M12=', m[2] / scaleY, comma, + 'M21=', m[1] / scaleX, comma, + 'M22=', m[3] / scaleY, comma, + 'Dx=', round$3(x * scaleX + m[4]), comma, + 'Dy=', round$3(y * scaleY + m[5])); + + vmlElStyle.padding = '0 ' + round$3(maxX) + 'px ' + round$3(maxY) + 'px 0'; + // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用 + vmlElStyle.filter = imageTransformPrefix + '.Matrix(' + + transformFilter.join('') + ', SizingMethod=clip)'; + + } + else { + if (m) { + x = x * scaleX + m[4]; + y = y * scaleY + m[5]; + } + vmlElStyle.filter = ''; + vmlElStyle.left = round$3(x) + 'px'; + vmlElStyle.top = round$3(y) + 'px'; + } + + var imageEl = this._imageEl; + var cropEl = this._cropEl; + + if (!imageEl) { + imageEl = doc.createElement('div'); + this._imageEl = imageEl; + } + var imageELStyle = imageEl.style; + if (hasCrop) { + // Needs know image original width and height + if (! (ow && oh)) { + var tmpImage = new Image(); + var self = this; + tmpImage.onload = function () { + tmpImage.onload = null; + ow = tmpImage.width; + oh = tmpImage.height; + // Adjust image width and height to fit the ratio destinationSize / sourceSize + imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px'; + imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px'; + + // Caching image original width, height and src + self._imageWidth = ow; + self._imageHeight = oh; + self._imageSrc = image; + }; + tmpImage.src = image; + } + else { + imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px'; + imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px'; + } + + if (! cropEl) { + cropEl = doc.createElement('div'); + cropEl.style.overflow = 'hidden'; + this._cropEl = cropEl; + } + var cropElStyle = cropEl.style; + cropElStyle.width = round$3((dw + sx * dw / sw) * scaleX); + cropElStyle.height = round$3((dh + sy * dh / sh) * scaleY); + cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx=' + + (-sx * dw / sw * scaleX) + ',Dy=' + (-sy * dh / sh * scaleY) + ')'; + + if (! cropEl.parentNode) { + vmlEl.appendChild(cropEl); + } + if (imageEl.parentNode != cropEl) { + cropEl.appendChild(imageEl); + } + } + else { + imageELStyle.width = round$3(scaleX * dw) + 'px'; + imageELStyle.height = round$3(scaleY * dh) + 'px'; + + vmlEl.appendChild(imageEl); + + if (cropEl && cropEl.parentNode) { + vmlEl.removeChild(cropEl); + this._cropEl = null; + } + } + + var filterStr = ''; + var alpha = style.opacity; + if (alpha < 1) { + filterStr += '.Alpha(opacity=' + round$3(alpha * 100) + ') '; + } + filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)'; + + imageELStyle.filter = filterStr; + + vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); + + // Append to root + append(vmlRoot, vmlEl); + + // Text + if (style.text != null) { + this.drawRectText(vmlRoot, this.getBoundingRect()); + } + }; + + ZImage.prototype.onRemove = function (vmlRoot) { + remove(vmlRoot, this._vmlEl); + + this._vmlEl = null; + this._cropEl = null; + this._imageEl = null; + + this.removeRectText(vmlRoot); + }; + + ZImage.prototype.onAdd = function (vmlRoot) { + append(vmlRoot, this._vmlEl); + this.appendRectText(vmlRoot); + }; + + + /*************************************************** + * TEXT + **************************************************/ + + var DEFAULT_STYLE_NORMAL = 'normal'; + + var fontStyleCache = {}; + var fontStyleCacheCount = 0; + var MAX_FONT_CACHE_SIZE = 100; + var fontEl = document.createElement('div'); + + var getFontStyle = function (fontString) { + var fontStyle = fontStyleCache[fontString]; + if (!fontStyle) { + // Clear cache + if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) { + fontStyleCacheCount = 0; + fontStyleCache = {}; + } + + var style = fontEl.style; + var fontFamily; + try { + style.font = fontString; + fontFamily = style.fontFamily.split(',')[0]; + } + catch (e) { + } + + fontStyle = { + style: style.fontStyle || DEFAULT_STYLE_NORMAL, + variant: style.fontVariant || DEFAULT_STYLE_NORMAL, + weight: style.fontWeight || DEFAULT_STYLE_NORMAL, + size: parseFloat(style.fontSize || 12) | 0, + family: fontFamily || 'Microsoft YaHei' + }; + + fontStyleCache[fontString] = fontStyle; + fontStyleCacheCount++; + } + return fontStyle; + }; + + var textMeasureEl; + // Overwrite measure text method + $inject$2.measureText(function (text, textFont) { + var doc$$1 = doc; + if (!textMeasureEl) { + textMeasureEl = doc$$1.createElement('div'); + textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;' + + 'padding:0;margin:0;border:none;white-space:pre;'; + doc.body.appendChild(textMeasureEl); + } + + try { + textMeasureEl.style.font = textFont; + } catch (ex) { + // Ignore failures to set to invalid font. + } + textMeasureEl.innerHTML = ''; + // Don't use innerHTML or innerText because they allow markup/whitespace. + textMeasureEl.appendChild(doc$$1.createTextNode(text)); + return { + width: textMeasureEl.offsetWidth + }; + }); + + var tmpRect$2 = new BoundingRect(); + + var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) { + + var style = this.style; + + // Optimize, avoid normalize every time. + this.__dirty && normalizeTextStyle(style, true); + + var text = style.text; + // Convert to string + text != null && (text += ''); + if (!text) { + return; + } + + // Convert rich text to plain text. Rich text is not supported in + // IE8-, but tags in rich text template will be removed. + if (style.rich) { + var contentBlock = parseRichText(text, style); + text = []; + for (var i = 0; i < contentBlock.lines.length; i++) { + var tokens = contentBlock.lines[i].tokens; + var textLine = []; + for (var j = 0; j < tokens.length; j++) { + textLine.push(tokens[j].text); + } + text.push(textLine.join('')); + } + text = text.join('\n'); + } + + var x; + var y; + var align = style.textAlign; + var verticalAlign = style.textVerticalAlign; + + var fontStyle = getFontStyle(style.font); + // FIXME encodeHtmlAttribute ? + var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' ' + + fontStyle.size + 'px "' + fontStyle.family + '"'; + + textRect = textRect || getBoundingRect(text, font, align, verticalAlign); + + // Transform rect to view space + var m = this.transform; + // Ignore transform for text in other element + if (m && !fromTextEl) { + tmpRect$2.copy(rect); + tmpRect$2.applyTransform(m); + rect = tmpRect$2; + } + + if (!fromTextEl) { + var textPosition = style.textPosition; + var distance$$1 = style.textDistance; + // Text position represented by coord + if (textPosition instanceof Array) { + x = rect.x + parsePercent$3(textPosition[0], rect.width); + y = rect.y + parsePercent$3(textPosition[1], rect.height); + + align = align || 'left'; + } + else { + var res = adjustTextPositionOnRect( + textPosition, rect, distance$$1 + ); + x = res.x; + y = res.y; + + // Default align and baseline when has textPosition + align = align || res.textAlign; + verticalAlign = verticalAlign || res.textVerticalAlign; + } + } + else { + x = rect.x; + y = rect.y; + } + + x = adjustTextX(x, textRect.width, align); + y = adjustTextY(y, textRect.height, verticalAlign); + + // Force baseline 'middle' + y += textRect.height / 2; + + // var fontSize = fontStyle.size; + // 1.75 is an arbitrary number, as there is no info about the text baseline + // switch (baseline) { + // case 'hanging': + // case 'top': + // y += fontSize / 1.75; + // break; + // case 'middle': + // break; + // default: + // // case null: + // // case 'alphabetic': + // // case 'ideographic': + // // case 'bottom': + // y -= fontSize / 2.25; + // break; + // } + + // switch (align) { + // case 'left': + // break; + // case 'center': + // x -= textRect.width / 2; + // break; + // case 'right': + // x -= textRect.width; + // break; + // case 'end': + // align = elementStyle.direction == 'ltr' ? 'right' : 'left'; + // break; + // case 'start': + // align = elementStyle.direction == 'rtl' ? 'right' : 'left'; + // break; + // default: + // align = 'left'; + // } + + var createNode$$1 = createNode; + + var textVmlEl = this._textVmlEl; + var pathEl; + var textPathEl; + var skewEl; + if (!textVmlEl) { + textVmlEl = createNode$$1('line'); + pathEl = createNode$$1('path'); + textPathEl = createNode$$1('textpath'); + skewEl = createNode$$1('skew'); + + // FIXME Why here is not cammel case + // Align 'center' seems wrong + textPathEl.style['v-text-align'] = 'left'; + + initRootElStyle(textVmlEl); + + pathEl.textpathok = true; + textPathEl.on = true; + + textVmlEl.from = '0 0'; + textVmlEl.to = '1000 0.05'; + + append(textVmlEl, skewEl); + append(textVmlEl, pathEl); + append(textVmlEl, textPathEl); + + this._textVmlEl = textVmlEl; + } + else { + // 这里是在前面 appendChild 保证顺序的前提下 + skewEl = textVmlEl.firstChild; + pathEl = skewEl.nextSibling; + textPathEl = pathEl.nextSibling; + } + + var coords = [x, y]; + var textVmlElStyle = textVmlEl.style; + // Ignore transform for text in other element + if (m && fromTextEl) { + applyTransform(coords, coords, m); + + skewEl.on = true; + + skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma + + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0'; + + // Text position + skewEl.offset = (round$3(coords[0]) || 0) + ',' + (round$3(coords[1]) || 0); + // Left top point as origin + skewEl.origin = '0 0'; + + textVmlElStyle.left = '0px'; + textVmlElStyle.top = '0px'; + } + else { + skewEl.on = false; + textVmlElStyle.left = round$3(x) + 'px'; + textVmlElStyle.top = round$3(y) + 'px'; + } + + textPathEl.string = encodeHtmlAttribute(text); + // TODO + try { + textPathEl.style.font = font; + } + // Error font format + catch (e) {} + + updateFillAndStroke(textVmlEl, 'fill', { + fill: style.textFill, + opacity: style.opacity + }, this); + updateFillAndStroke(textVmlEl, 'stroke', { + stroke: style.textStroke, + opacity: style.opacity, + lineDash: style.lineDash + }, this); + + textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); + + // Attached to root + append(vmlRoot, textVmlEl); + }; + + var removeRectText = function (vmlRoot) { + remove(vmlRoot, this._textVmlEl); + this._textVmlEl = null; + }; + + var appendRectText = function (vmlRoot) { + append(vmlRoot, this._textVmlEl); + }; + + var list = [RectText, Displayable, ZImage, Path, Text]; + + // In case Displayable has been mixed in RectText + for (var i$3 = 0; i$3 < list.length; i$3++) { + var proto$6 = list[i$3].prototype; + proto$6.drawRectText = drawRectText; + proto$6.removeRectText = removeRectText; + proto$6.appendRectText = appendRectText; + } + + Text.prototype.brushVML = function (vmlRoot) { + var style = this.style; + if (style.text != null) { + this.drawRectText(vmlRoot, { + x: style.x || 0, y: style.y || 0, + width: 0, height: 0 + }, this.getBoundingRect(), true); + } + else { + this.removeRectText(vmlRoot); + } + }; + + Text.prototype.onRemove = function (vmlRoot) { + this.removeRectText(vmlRoot); + }; + + Text.prototype.onAdd = function (vmlRoot) { + this.appendRectText(vmlRoot); + }; +} + +/** + * VML Painter. + * + * @module zrender/vml/Painter + */ + +function parseInt10$1(val) { + return parseInt(val, 10); +} + +/** + * @alias module:zrender/vml/Painter + */ +function VMLPainter(root, storage) { + + initVML(); + + this.root = root; + + this.storage = storage; + + var vmlViewport = document.createElement('div'); + + var vmlRoot = document.createElement('div'); + + vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;'; + + vmlRoot.style.cssText = 'position:absolute;left:0;top:0;'; + + root.appendChild(vmlViewport); + + this._vmlRoot = vmlRoot; + this._vmlViewport = vmlViewport; + + this.resize(); + + // Modify storage + var oldDelFromStorage = storage.delFromStorage; + var oldAddToStorage = storage.addToStorage; + storage.delFromStorage = function (el) { + oldDelFromStorage.call(storage, el); + + if (el) { + el.onRemove && el.onRemove(vmlRoot); + } + }; + + storage.addToStorage = function (el) { + // Displayable already has a vml node + el.onAdd && el.onAdd(vmlRoot); + + oldAddToStorage.call(storage, el); + }; + + this._firstPaint = true; +} + +VMLPainter.prototype = { + + constructor: VMLPainter, + + getType: function () { + return 'vml'; + }, + + /** + * @return {HTMLDivElement} + */ + getViewportRoot: function () { + return this._vmlViewport; + }, + + getViewportRootOffset: function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }, + + /** + * 刷新 + */ + refresh: function () { + + var list = this.storage.getDisplayList(true, true); + + this._paintList(list); + }, + + _paintList: function (list) { + var vmlRoot = this._vmlRoot; + for (var i = 0; i < list.length; i++) { + var el = list[i]; + if (el.invisible || el.ignore) { + if (!el.__alreadyNotVisible) { + el.onRemove(vmlRoot); + } + // Set as already invisible + el.__alreadyNotVisible = true; + } + else { + if (el.__alreadyNotVisible) { + el.onAdd(vmlRoot); + } + el.__alreadyNotVisible = false; + if (el.__dirty) { + el.beforeBrush && el.beforeBrush(); + (el.brushVML || el.brush).call(el, vmlRoot); + el.afterBrush && el.afterBrush(); + } + } + el.__dirty = false; + } + + if (this._firstPaint) { + // Detached from document at first time + // to avoid page refreshing too many times + + // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变 + this._vmlViewport.appendChild(vmlRoot); + this._firstPaint = false; + } + }, + + resize: function (width, height) { + var width = width == null ? this._getWidth() : width; + var height = height == null ? this._getHeight() : height; + + if (this._width != width || this._height != height) { + this._width = width; + this._height = height; + + var vmlViewportStyle = this._vmlViewport.style; + vmlViewportStyle.width = width + 'px'; + vmlViewportStyle.height = height + 'px'; + } + }, + + dispose: function () { + this.root.innerHTML = ''; + + this._vmlRoot = + this._vmlViewport = + this.storage = null; + }, + + getWidth: function () { + return this._width; + }, + + getHeight: function () { + return this._height; + }, + + clear: function () { + if (this._vmlViewport) { + this.root.removeChild(this._vmlViewport); + } + }, + + _getWidth: function () { + var root = this.root; + var stl = root.currentStyle; + + return ((root.clientWidth || parseInt10$1(stl.width)) + - parseInt10$1(stl.paddingLeft) + - parseInt10$1(stl.paddingRight)) | 0; + }, + + _getHeight: function () { + var root = this.root; + var stl = root.currentStyle; + + return ((root.clientHeight || parseInt10$1(stl.height)) + - parseInt10$1(stl.paddingTop) + - parseInt10$1(stl.paddingBottom)) | 0; + } +}; + +// Not supported methods +function createMethodNotSupport(method) { + return function () { + zrLog('In IE8.0 VML mode painter not support method "' + method + '"'); + }; +} + +// Unsupported methods +each$1([ + 'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', + 'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage' +], function (name) { + VMLPainter.prototype[name] = createMethodNotSupport(name); +}); + +registerPainter('vml', VMLPainter); + +var svgURI = 'http://www.w3.org/2000/svg'; + +function createElement(name) { + return document.createElementNS(svgURI, name); +} + +// TODO +// 1. shadow +// 2. Image: sx, sy, sw, sh + +var arrayJoin = Array.prototype.join; + +var NONE = 'none'; +var mathRound = Math.round; +var mathSin$3 = Math.sin; +var mathCos$3 = Math.cos; +var PI$5 = Math.PI; +var PI2$6 = Math.PI * 2; +var degree = 180 / PI$5; + +var EPSILON$4 = 1e-4; + +function round4(val) { + return mathRound(val * 1e4) / 1e4; +} + +function isAroundZero$1(val) { + return val < EPSILON$4 && val > -EPSILON$4; +} + +function pathHasFill(style, isText) { + var fill = isText ? style.textFill : style.fill; + return fill != null && fill !== NONE; +} + +function pathHasStroke(style, isText) { + var stroke = isText ? style.textStroke : style.stroke; + return stroke != null && stroke !== NONE; +} + +function setTransform(svgEl, m) { + if (m) { + attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')'); + } +} + +function attr(el, key, val) { + if (!val || val.type !== 'linear' && val.type !== 'radial') { + // Don't set attribute for gradient, since it need new dom nodes + el.setAttribute(key, val); + } +} + +function attrXLink(el, key, val) { + el.setAttributeNS('http://www.w3.org/1999/xlink', key, val); +} + +function bindStyle(svgEl, style, isText) { + if (pathHasFill(style, isText)) { + var fill = isText ? style.textFill : style.fill; + fill = fill === 'transparent' ? NONE : fill; + + /** + * FIXME: + * This is a temporary fix for Chrome's clipping bug + * that happens when a clip-path is referring another one. + * This fix should be used before Chrome's bug is fixed. + * For an element that has clip-path, and fill is none, + * set it to be "rgba(0, 0, 0, 0.002)" will hide the element. + * Otherwise, it will show black fill color. + * 0.002 is used because this won't work for alpha values smaller + * than 0.002. + * + * See + * https://bugs.chromium.org/p/chromium/issues/detail?id=659790 + * for more information. + */ + if (svgEl.getAttribute('clip-path') !== 'none' && fill === NONE) { + fill = 'rgba(0, 0, 0, 0.002)'; + } + + attr(svgEl, 'fill', fill); + attr(svgEl, 'fill-opacity', style.opacity); + } + else { + attr(svgEl, 'fill', NONE); + } + + if (pathHasStroke(style, isText)) { + var stroke = isText ? style.textStroke : style.stroke; + stroke = stroke === 'transparent' ? NONE : stroke; + attr(svgEl, 'stroke', stroke); + var strokeWidth = isText + ? style.textStrokeWidth + : style.lineWidth; + var strokeScale = style.strokeNoScale + ? style.host.getLineScale() + : 1; + attr(svgEl, 'stroke-width', strokeWidth / strokeScale); + attr(svgEl, 'paint-order', 'stroke'); + attr(svgEl, 'stroke-opacity', style.opacity); + var lineDash = style.lineDash; + if (lineDash) { + attr(svgEl, 'stroke-dasharray', style.lineDash.join(',')); + attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0)); + } + else { + attr(svgEl, 'stroke-dasharray', ''); + } + + // PENDING + style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap); + style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin); + style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit); + } + else { + attr(svgEl, 'stroke', NONE); + } +} + +/*************************************************** + * PATH + **************************************************/ +function pathDataToString$1(path) { + var str = []; + var data = path.data; + var dataLength = path.len(); + for (var i = 0; i < dataLength;) { + var cmd = data[i++]; + var cmdStr = ''; + var nData = 0; + switch (cmd) { + case CMD.M: + cmdStr = 'M'; + nData = 2; + break; + case CMD.L: + cmdStr = 'L'; + nData = 2; + break; + case CMD.Q: + cmdStr = 'Q'; + nData = 4; + break; + case CMD.C: + cmdStr = 'C'; + nData = 6; + break; + case CMD.A: + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var theta = data[i++]; + var dTheta = data[i++]; + var psi = data[i++]; + var clockwise = data[i++]; + + var dThetaPositive = Math.abs(dTheta); + var isCircle = isAroundZero$1(dThetaPositive % PI2$6) + && !isAroundZero$1(dThetaPositive); + + var large = false; + if (dThetaPositive >= PI2$6) { + large = true; + } + else if (isAroundZero$1(dThetaPositive)) { + large = false; + } + else { + large = (dTheta > -PI$5 && dTheta < 0 || dTheta > PI$5) + === !!clockwise; + } + + var x0 = round4(cx + rx * mathCos$3(theta)); + var y0 = round4(cy + ry * mathSin$3(theta)); + + // It will not draw if start point and end point are exactly the same + // We need to shift the end point with a small value + // FIXME A better way to draw circle ? + if (isCircle) { + if (clockwise) { + dTheta = PI2$6 - 1e-4; + } + else { + dTheta = -PI2$6 + 1e-4; + } + + large = true; + + if (i === 9) { + // Move to (x0, y0) only when CMD.A comes at the + // first position of a shape. + // For instance, when drawing a ring, CMD.A comes + // after CMD.M, so it's unnecessary to move to + // (x0, y0). + str.push('M', x0, y0); + } + } + + var x = round4(cx + rx * mathCos$3(theta + dTheta)); + var y = round4(cy + ry * mathSin$3(theta + dTheta)); + + // FIXME Ellipse + str.push('A', round4(rx), round4(ry), + mathRound(psi * degree), +large, +clockwise, x, y); + break; + case CMD.Z: + cmdStr = 'Z'; + break; + case CMD.R: + var x = round4(data[i++]); + var y = round4(data[i++]); + var w = round4(data[i++]); + var h = round4(data[i++]); + str.push( + 'M', x, y, + 'L', x + w, y, + 'L', x + w, y + h, + 'L', x, y + h, + 'L', x, y + ); + break; + } + cmdStr && str.push(cmdStr); + for (var j = 0; j < nData; j++) { + // PENDING With scale + str.push(round4(data[i++])); + } + } + return str.join(' '); +} + +var svgPath = {}; +svgPath.brush = function (el) { + var style = el.style; + + var svgEl = el.__svgEl; + if (!svgEl) { + svgEl = createElement('path'); + el.__svgEl = svgEl; + } + + if (!el.path) { + el.createPathProxy(); + } + var path = el.path; + + if (el.__dirtyPath) { + path.beginPath(); + el.buildPath(path, el.shape); + el.__dirtyPath = false; + + attr(svgEl, 'd', pathDataToString$1(path)); + } + + bindStyle(svgEl, style); + setTransform(svgEl, el.transform); + + if (style.text != null) { + svgTextDrawRectText(el, el.getBoundingRect()); + } +}; + +/*************************************************** + * IMAGE + **************************************************/ +var svgImage = {}; +svgImage.brush = function (el) { + var style = el.style; + var image = style.image; + + if (image instanceof HTMLImageElement) { + var src = image.src; + image = src; + } + if (! image) { + return; + } + + var x = style.x || 0; + var y = style.y || 0; + + var dw = style.width; + var dh = style.height; + + var svgEl = el.__svgEl; + if (! svgEl) { + svgEl = createElement('image'); + el.__svgEl = svgEl; + } + + if (image !== el.__imageSrc) { + attrXLink(svgEl, 'href', image); + // Caching image src + el.__imageSrc = image; + } + + attr(svgEl, 'width', dw); + attr(svgEl, 'height', dh); + + attr(svgEl, 'x', x); + attr(svgEl, 'y', y); + + setTransform(svgEl, el.transform); + + if (style.text != null) { + svgTextDrawRectText(el, el.getBoundingRect()); + } +}; + +/*************************************************** + * TEXT + **************************************************/ +var svgText = {}; +var tmpRect$3 = new BoundingRect(); + +var svgTextDrawRectText = function (el, rect, textRect) { + var style = el.style; + + el.__dirty && normalizeTextStyle(style, true); + + var text = style.text; + // Convert to string + text != null && (text += ''); + if (!text) { + return; + } + + var textSvgEl = el.__textSvgEl; + if (! textSvgEl) { + textSvgEl = createElement('text'); + el.__textSvgEl = textSvgEl; + } + + bindStyle(textSvgEl, style, true); + if (el instanceof Text || el.style.transformText) { + // Transform text with element + setTransform(textSvgEl, el.transform); + } + else { + if (el.transform) { + tmpRect$3.copy(rect); + tmpRect$3.applyTransform(el.transform); + rect = tmpRect$3; + } + else { + var pos = el.transformCoordToGlobal(rect.x, rect.y); + rect.x = pos[0]; + rect.y = pos[1]; + } + } + + var x; + var y; + var textPosition = style.textPosition; + var distance = style.textDistance; + var align = style.textAlign || 'left'; + + if (typeof style.fontSize === 'number') { + style.fontSize += 'px'; + } + var font = style.font + || [ + style.fontStyle || '', + style.fontWeight || '', + style.fontSize || '', + style.fontFamily || '' + ].join(' ') + || DEFAULT_FONT; + + var verticalAlign = getVerticalAlignForSvg(style.textVerticalAlign); + + textRect = getBoundingRect(text, font, align, + verticalAlign); + + var lineHeight = textRect.lineHeight; + // Text position represented by coord + if (textPosition instanceof Array) { + x = rect.x + textPosition[0]; + y = rect.y + textPosition[1]; + } + else { + var newPos = adjustTextPositionOnRect( + textPosition, rect, distance + ); + x = newPos.x; + y = newPos.y; + verticalAlign = getVerticalAlignForSvg(newPos.textVerticalAlign); + align = newPos.textAlign; + } + + attr(textSvgEl, 'alignment-baseline', verticalAlign); + + if (font) { + textSvgEl.style.font = font; + } + + var textPadding = style.textPadding; + + // Make baseline top + attr(textSvgEl, 'x', x); + attr(textSvgEl, 'y', y); + + var textLines = text.split('\n'); + var nTextLines = textLines.length; + var textAnchor = align; + // PENDING + if (textAnchor === 'left') { + textAnchor = 'start'; + textPadding && (x += textPadding[3]); + } + else if (textAnchor === 'right') { + textAnchor = 'end'; + textPadding && (x -= textPadding[1]); + } + else if (textAnchor === 'center') { + textAnchor = 'middle'; + textPadding && (x += (textPadding[3] - textPadding[1]) / 2); + } + + var dy = 0; + if (verticalAlign === 'baseline') { + dy = -textRect.height + lineHeight; + textPadding && (dy -= textPadding[2]); + } + else if (verticalAlign === 'middle') { + dy = (-textRect.height + lineHeight) / 2; + textPadding && (y += (textPadding[0] - textPadding[2]) / 2); + } + else { + textPadding && (dy += textPadding[0]); + } + + // Font may affect position of each tspan elements + if (el.__text !== text || el.__textFont !== font) { + var tspanList = el.__tspanList || []; + el.__tspanList = tspanList; + for (var i = 0; i < nTextLines; i++) { + // Using cached tspan elements + var tspan = tspanList[i]; + if (! tspan) { + tspan = tspanList[i] = createElement('tspan'); + textSvgEl.appendChild(tspan); + attr(tspan, 'alignment-baseline', verticalAlign); + attr(tspan, 'text-anchor', textAnchor); + } + else { + tspan.innerHTML = ''; + } + attr(tspan, 'x', x); + attr(tspan, 'y', y + i * lineHeight + dy); + tspan.appendChild(document.createTextNode(textLines[i])); + } + // Remove unsed tspan elements + for (; i < tspanList.length; i++) { + textSvgEl.removeChild(tspanList[i]); + } + tspanList.length = nTextLines; + + el.__text = text; + el.__textFont = font; + } + else if (el.__tspanList.length) { + // Update span x and y + var len = el.__tspanList.length; + for (var i = 0; i < len; ++i) { + var tspan = el.__tspanList[i]; + if (tspan) { + attr(tspan, 'x', x); + attr(tspan, 'y', y + i * lineHeight + dy); + } + } + } +}; + +function getVerticalAlignForSvg(verticalAlign) { + if (verticalAlign === 'middle') { + return 'middle'; + } + else if (verticalAlign === 'bottom') { + return 'baseline'; + } + else { + return 'hanging'; + } +} + +svgText.drawRectText = svgTextDrawRectText; + +svgText.brush = function (el) { + var style = el.style; + if (style.text != null) { + // 强制设置 textPosition + style.textPosition = [0, 0]; + svgTextDrawRectText(el, { + x: style.x || 0, y: style.y || 0, + width: 0, height: 0 + }, el.getBoundingRect()); + } +}; + +// Myers' Diff Algorithm +// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js + +function Diff() {} + +Diff.prototype = { + diff: function (oldArr, newArr, equals) { + if (!equals) { + equals = function (a, b) { + return a === b; + }; + } + this.equals = equals; + + var self = this; + + oldArr = oldArr.slice(); + newArr = newArr.slice(); + // Allow subclasses to massage the input prior to running + var newLen = newArr.length; + var oldLen = oldArr.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ newPos: -1, components: [] }]; + + // Seed editLength = 0, i.e. the content starts with the same values + var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0); + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + var indices = []; + for (var i = 0; i < newArr.length; i++) { + indices.push(i); + } + // Identity per the equality and tokenizer + return [{ + indices: indices, count: newArr.length + }]; + } + + // Main worker method. checks all permutations of a given edit length for acceptance. + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath; + var addPath = bestPath[diagonalPath - 1]; + var removePath = bestPath[diagonalPath + 1]; + var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + if (addPath) { + // No one else is going to attempt to use this value, clear it + bestPath[diagonalPath - 1] = undefined; + } + + var canAdd = addPath && addPath.newPos + 1 < newLen; + var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; + if (!canAdd && !canRemove) { + // If this path is a terminal then prune + bestPath[diagonalPath] = undefined; + continue; + } + + // Select the diagonal that we want to branch from. We select the prior + // path whose position in the new string is the farthest from the origin + // and does not pass the bounds of the diff graph + if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { + basePath = clonePath(removePath); + self.pushComponent(basePath.components, undefined, true); + } + else { + basePath = addPath; // No need to clone, we've pulled it from the list + basePath.newPos++; + self.pushComponent(basePath.components, true, undefined); + } + + oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath); + + // If we have hit the end of both strings, then we are done + if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + return buildValues(self, basePath.components, newArr, oldArr); + } + else { + // Otherwise track this path as a potential candidate and continue. + bestPath[diagonalPath] = basePath; + } + } + + editLength++; + } + + while (editLength <= maxEditLength) { + var ret = execEditLength(); + if (ret) { + return ret; + } + } + }, + + pushComponent: function (components, added, removed) { + var last = components[components.length - 1]; + if (last && last.added === added && last.removed === removed) { + // We need to clone here as the component clone operation is just + // as shallow array clone + components[components.length - 1] = {count: last.count + 1, added: added, removed: removed }; + } + else { + components.push({count: 1, added: added, removed: removed }); + } + }, + extractCommon: function (basePath, newArr, oldArr, diagonalPath) { + var newLen = newArr.length; + var oldLen = oldArr.length; + var newPos = basePath.newPos; + var oldPos = newPos - diagonalPath; + var commonCount = 0; + + while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + + if (commonCount) { + basePath.components.push({count: commonCount}); + } + + basePath.newPos = newPos; + return oldPos; + }, + tokenize: function (value) { + return value.slice(); + }, + join: function (value) { + return value.slice(); + } +}; + +function buildValues(diff, components, newArr, oldArr) { + var componentPos = 0; + var componentLen = components.length; + var newPos = 0; + var oldPos = 0; + + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + if (!component.removed) { + var indices = []; + for (var i = newPos; i < newPos + component.count; i++) { + indices.push(i); + } + component.indices = indices; + newPos += component.count; + // Common case + if (!component.added) { + oldPos += component.count; + } + } + else { + var indices = []; + for (var i = oldPos; i < oldPos + component.count; i++) { + indices.push(i); + } + component.indices = indices; + oldPos += component.count; + } + } + + return components; +} + +function clonePath(path) { + return { newPos: path.newPos, components: path.components.slice(0) }; +} + +var arrayDiff = new Diff(); + +var arrayDiff$1 = function (oldArr, newArr, callback) { + return arrayDiff.diff(oldArr, newArr, callback); +}; + +/** + * @file Manages elements that can be defined in in SVG, + * e.g., gradients, clip path, etc. + * @author Zhang Wenli + */ + +var MARK_UNUSED = '0'; +var MARK_USED = '1'; + +/** + * Manages elements that can be defined in in SVG, + * e.g., gradients, clip path, etc. + * + * @class + * @param {SVGElement} svgRoot root of SVG document + * @param {string|string[]} tagNames possible tag names + * @param {string} markLabel label name to make if the element + * is used + */ +function Definable( + svgRoot, + tagNames, + markLabel +) { + + this._svgRoot = svgRoot; + this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames; + this._markLabel = markLabel; + + this.nextId = 0; +} + + +Definable.prototype.createElement = createElement; + + +/** + * Get the tag for svgRoot; optionally creates one if not exists. + * + * @param {boolean} isForceCreating if need to create when not exists + * @return {SVGDefsElement} SVG element, null if it doesn't + * exist and isForceCreating is false + */ +Definable.prototype.getDefs = function (isForceCreating) { + var svgRoot = this._svgRoot; + var defs = this._svgRoot.getElementsByTagName('defs'); + if (defs.length === 0) { + // Not exist + if (isForceCreating) { + defs = svgRoot.insertBefore( + this.createElement('defs'), // Create new tag + svgRoot.firstChild // Insert in the front of svg + ); + if (!defs.contains) { + // IE doesn't support contains method + defs.contains = function (el) { + var children = defs.children; + if (!children) { + return false; + } + for (var i = children.length - 1; i >= 0; --i) { + if (children[i] === el) { + return true; + } + } + return false; + }; + } + return defs; + } + else { + return null; + } + } + else { + return defs[0]; + } +}; + + +/** + * Update DOM element if necessary. + * + * @param {Object|string} element style element. e.g., for gradient, + * it may be '#ccc' or {type: 'linear', ...} + * @param {Function|undefined} onUpdate update callback + */ +Definable.prototype.update = function (element, onUpdate) { + if (!element) { + return; + } + + var defs = this.getDefs(false); + if (element._dom && defs.contains(element._dom)) { + // Update DOM + if (typeof onUpdate === 'function') { + onUpdate(); + } + } + else { + // No previous dom, create new + var dom = this.add(element); + if (dom) { + element._dom = dom; + } + } +}; + + +/** + * Add gradient dom to defs + * + * @param {SVGElement} dom DOM to be added to + */ +Definable.prototype.addDom = function (dom) { + var defs = this.getDefs(true); + defs.appendChild(dom); +}; + + +/** + * Remove DOM of a given element. + * + * @param {SVGElement} element element to remove dom + */ +Definable.prototype.removeDom = function (element) { + var defs = this.getDefs(false); + defs.removeChild(element._dom); +}; + + +/** + * Get DOMs of this element. + * + * @return {HTMLDomElement} doms of this defineable elements in + */ +Definable.prototype.getDoms = function () { + var defs = this.getDefs(false); + if (!defs) { + // No dom when defs is not defined + return []; + } + + var doms = []; + each$1(this._tagNames, function (tagName) { + var tags = defs.getElementsByTagName(tagName); + // Note that tags is HTMLCollection, which is array-like + // rather than real array. + // So `doms.concat(tags)` add tags as one object. + doms = doms.concat([].slice.call(tags)); + }); + + return doms; +}; + + +/** + * Mark DOMs to be unused before painting, and clear unused ones at the end + * of the painting. + */ +Definable.prototype.markAllUnused = function () { + var doms = this.getDoms(); + var that = this; + each$1(doms, function (dom) { + dom[that._markLabel] = MARK_UNUSED; + }); +}; + + +/** + * Mark a single DOM to be used. + * + * @param {SVGElement} dom DOM to mark + */ +Definable.prototype.markUsed = function (dom) { + if (dom) { + dom[this._markLabel] = MARK_USED; + } +}; + + +/** + * Remove unused DOMs defined in + */ +Definable.prototype.removeUnused = function () { + var defs = this.getDefs(false); + if (!defs) { + // Nothing to remove + return; + } + + var doms = this.getDoms(); + var that = this; + each$1(doms, function (dom) { + if (dom[that._markLabel] !== MARK_USED) { + // Remove gradient + defs.removeChild(dom); + } + }); +}; + + +/** + * Get SVG proxy. + * + * @param {Displayable} displayable displayable element + * @return {Path|Image|Text} svg proxy of given element + */ +Definable.prototype.getSvgProxy = function (displayable) { + if (displayable instanceof Path) { + return svgPath; + } + else if (displayable instanceof ZImage) { + return svgImage; + } + else if (displayable instanceof Text) { + return svgText; + } + else { + return svgPath; + } +}; + + +/** + * Get text SVG element. + * + * @param {Displayable} displayable displayable element + * @return {SVGElement} SVG element of text + */ +Definable.prototype.getTextSvgElement = function (displayable) { + return displayable.__textSvgEl; +}; + + +/** + * Get SVG element. + * + * @param {Displayable} displayable displayable element + * @return {SVGElement} SVG element + */ +Definable.prototype.getSvgElement = function (displayable) { + return displayable.__svgEl; +}; + +/** + * @file Manages SVG gradient elements. + * @author Zhang Wenli + */ + +/** + * Manages SVG gradient elements. + * + * @class + * @extends Definable + * @param {SVGElement} svgRoot root of SVG document + */ +function GradientManager(svgRoot) { + Definable.call( + this, + svgRoot, + ['linearGradient', 'radialGradient'], + '__gradient_in_use__' + ); +} + + +inherits(GradientManager, Definable); + + +/** + * Create new gradient DOM for fill or stroke if not exist, + * but will not update gradient if exists. + * + * @param {SvgElement} svgElement SVG element to paint + * @param {Displayable} displayable zrender displayable element + */ +GradientManager.prototype.addWithoutUpdate = function ( + svgElement, + displayable +) { + if (displayable && displayable.style) { + var that = this; + each$1(['fill', 'stroke'], function (fillOrStroke) { + if (displayable.style[fillOrStroke] + && (displayable.style[fillOrStroke].type === 'linear' + || displayable.style[fillOrStroke].type === 'radial') + ) { + var gradient = displayable.style[fillOrStroke]; + var defs = that.getDefs(true); + + // Create dom in if not exists + var dom; + if (gradient._dom) { + // Gradient exists + dom = gradient._dom; + if (!defs.contains(gradient._dom)) { + // _dom is no longer in defs, recreate + that.addDom(dom); + } + } + else { + // New dom + dom = that.add(gradient); + } + + that.markUsed(displayable); + + var id = dom.getAttribute('id'); + svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')'); + } + }); + } +}; + + +/** + * Add a new gradient tag in + * + * @param {Gradient} gradient zr gradient instance + * @return {SVGLinearGradientElement | SVGRadialGradientElement} + * created DOM + */ +GradientManager.prototype.add = function (gradient) { + var dom; + if (gradient.type === 'linear') { + dom = this.createElement('linearGradient'); + } + else if (gradient.type === 'radial') { + dom = this.createElement('radialGradient'); + } + else { + zrLog('Illegal gradient type.'); + return null; + } + + // Set dom id with gradient id, since each gradient instance + // will have no more than one dom element. + // id may exists before for those dirty elements, in which case + // id should remain the same, and other attributes should be + // updated. + gradient.id = gradient.id || this.nextId++; + dom.setAttribute('id', 'zr-gradient-' + gradient.id); + + this.updateDom(gradient, dom); + this.addDom(dom); + + return dom; +}; + + +/** + * Update gradient. + * + * @param {Gradient} gradient zr gradient instance + */ +GradientManager.prototype.update = function (gradient) { + var that = this; + Definable.prototype.update.call(this, gradient, function () { + var type = gradient.type; + var tagName = gradient._dom.tagName; + if (type === 'linear' && tagName === 'linearGradient' + || type === 'radial' && tagName === 'radialGradient' + ) { + // Gradient type is not changed, update gradient + that.updateDom(gradient, gradient._dom); + } + else { + // Remove and re-create if type is changed + that.removeDom(gradient); + that.add(gradient); + } + }); +}; + + +/** + * Update gradient dom + * + * @param {Gradient} gradient zr gradient instance + * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom + * DOM to update + */ +GradientManager.prototype.updateDom = function (gradient, dom) { + if (gradient.type === 'linear') { + dom.setAttribute('x1', gradient.x); + dom.setAttribute('y1', gradient.y); + dom.setAttribute('x2', gradient.x2); + dom.setAttribute('y2', gradient.y2); + } + else if (gradient.type === 'radial') { + dom.setAttribute('cx', gradient.x); + dom.setAttribute('cy', gradient.y); + dom.setAttribute('r', gradient.r); + } + else { + zrLog('Illegal gradient type.'); + return; + } + + if (gradient.global) { + // x1, x2, y1, y2 in range of 0 to canvas width or height + dom.setAttribute('gradientUnits', 'userSpaceOnUse'); + } + else { + // x1, x2, y1, y2 in range of 0 to 1 + dom.setAttribute('gradientUnits', 'objectBoundingBox'); + } + + // Remove color stops if exists + dom.innerHTML = ''; + + // Add color stops + var colors = gradient.colorStops; + for (var i = 0, len = colors.length; i < len; ++i) { + var stop = this.createElement('stop'); + stop.setAttribute('offset', colors[i].offset * 100 + '%'); + stop.setAttribute('stop-color', colors[i].color); + dom.appendChild(stop); + } + + // Store dom element in gradient, to avoid creating multiple + // dom instances for the same gradient element + gradient._dom = dom; +}; + +/** + * Mark a single gradient to be used + * + * @param {Displayable} displayable displayable element + */ +GradientManager.prototype.markUsed = function (displayable) { + if (displayable.style) { + var gradient = displayable.style.fill; + if (gradient && gradient._dom) { + Definable.prototype.markUsed.call(this, gradient._dom); + } + + gradient = displayable.style.stroke; + if (gradient && gradient._dom) { + Definable.prototype.markUsed.call(this, gradient._dom); + } + } +}; + +/** + * @file Manages SVG clipPath elements. + * @author Zhang Wenli + */ + +/** + * Manages SVG clipPath elements. + * + * @class + * @extends Definable + * @param {SVGElement} svgRoot root of SVG document + */ +function ClippathManager(svgRoot) { + Definable.call(this, svgRoot, 'clipPath', '__clippath_in_use__'); +} + + +inherits(ClippathManager, Definable); + + +/** + * Update clipPath. + * + * @param {Displayable} displayable displayable element + * @param {SVGElement} svgElement SVG element of displayable + */ +ClippathManager.prototype.update = function (displayable, svgElement) { + this.updateDom(svgElement, displayable.__clipPaths, false); + + var textEl = this.getTextSvgElement(displayable); + if (textEl) { + // Make another clipPath for text, since it's transform + // matrix is not the same with svgElement + this.updateDom(textEl, displayable.__clipPaths, true); + } + + this.markUsed(displayable); +}; + + +/** + * Create an SVGElement of displayable and create a of its + * clipPath + * + * @param {Displayable} parentEl parent element + * @param {ClipPath[]} clipPaths clipPaths of parent element + * @param {boolean} isText if parent element is Text + */ +ClippathManager.prototype.updateDom = function ( + parentEl, + clipPaths, + isText +) { + if (clipPaths && clipPaths.length > 0) { + // Has clipPath, create with the first clipPath + var defs = this.getDefs(true); + var clipPath = clipPaths[0]; + var clipPathEl; + var id; + + var dom = isText ? '_textDom' : '_dom'; + + if (clipPath[dom]) { + // Use a dom that is already in + id = clipPath[dom].getAttribute('id'); + clipPathEl = clipPath[dom]; + + // Use a dom that is already in + if (!defs.contains(clipPathEl)) { + // This happens when set old clipPath that has + // been previously removed + defs.appendChild(clipPathEl); + } + } + else { + // New + id = 'zr-clip-' + this.nextId; + ++this.nextId; + clipPathEl = this.createElement('clipPath'); + clipPathEl.setAttribute('id', id); + defs.appendChild(clipPathEl); + + clipPath[dom] = clipPathEl; + } + + // Build path and add to + var svgProxy = this.getSvgProxy(clipPath); + if (clipPath.transform + && clipPath.parent.invTransform + && !isText + ) { + /** + * If a clipPath has a parent with transform, the transform + * of parent should not be considered when setting transform + * of clipPath. So we need to transform back from parent's + * transform, which is done by multiplying parent's inverse + * transform. + */ + // Store old transform + var transform = Array.prototype.slice.call( + clipPath.transform + ); + + // Transform back from parent, and brush path + mul$1( + clipPath.transform, + clipPath.parent.invTransform, + clipPath.transform + ); + svgProxy.brush(clipPath); + + // Set back transform of clipPath + clipPath.transform = transform; + } + else { + svgProxy.brush(clipPath); + } + + var pathEl = this.getSvgElement(clipPath); + clipPathEl.appendChild(pathEl); + + parentEl.setAttribute('clip-path', 'url(#' + id + ')'); + + if (clipPaths.length > 1) { + // Make the other clipPaths recursively + this.updateDom(clipPathEl, clipPaths.slice(1), isText); + } + } + else { + // No clipPath + if (parentEl) { + parentEl.setAttribute('clip-path', 'none'); + } + } +}; + +/** + * Mark a single clipPath to be used + * + * @param {Displayable} displayable displayable element + */ +ClippathManager.prototype.markUsed = function (displayable) { + var that = this; + if (displayable.__clipPaths && displayable.__clipPaths.length > 0) { + each$1(displayable.__clipPaths, function (clipPath) { + if (clipPath._dom) { + Definable.prototype.markUsed.call(that, clipPath._dom); + } + if (clipPath._textDom) { + Definable.prototype.markUsed.call(that, clipPath._textDom); + } + }); + } +}; + +/** + * SVG Painter + * @module zrender/svg/Painter + */ + +function parseInt10$2(val) { + return parseInt(val, 10); +} + +function getSvgProxy(el) { + if (el instanceof Path) { + return svgPath; + } + else if (el instanceof ZImage) { + return svgImage; + } + else if (el instanceof Text) { + return svgText; + } + else { + return svgPath; + } +} + +function checkParentAvailable(parent, child) { + return child && parent && child.parentNode !== parent; +} + +function insertAfter(parent, child, prevSibling) { + if (checkParentAvailable(parent, child) && prevSibling) { + var nextSibling = prevSibling.nextSibling; + nextSibling ? parent.insertBefore(child, nextSibling) + : parent.appendChild(child); + } +} + +function prepend(parent, child) { + if (checkParentAvailable(parent, child)) { + var firstChild = parent.firstChild; + firstChild ? parent.insertBefore(child, firstChild) + : parent.appendChild(child); + } +} + +function remove$1(parent, child) { + if (child && parent && child.parentNode === parent) { + parent.removeChild(child); + } +} + +function getTextSvgElement(displayable) { + return displayable.__textSvgEl; +} + +function getSvgElement(displayable) { + return displayable.__svgEl; +} + +/** + * @alias module:zrender/svg/Painter + */ +var SVGPainter = function (root, storage) { + + this.root = root; + + this.storage = storage; + + var svgRoot = createElement('svg'); + svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); + svgRoot.setAttribute('version', '1.1'); + svgRoot.setAttribute('baseProfile', 'full'); + svgRoot.style['user-select'] = 'none'; + + this.gradientManager = new GradientManager(svgRoot); + this.clipPathManager = new ClippathManager(svgRoot); + + var viewport = document.createElement('div'); + viewport.style.cssText = 'overflow: hidden;'; + + this._svgRoot = svgRoot; + this._viewport = viewport; + + root.appendChild(viewport); + viewport.appendChild(svgRoot); + + this.resize(); + + this._visibleList = []; +}; + +SVGPainter.prototype = { + + constructor: SVGPainter, + + getType: function () { + return 'svg'; + }, + + getViewportRoot: function () { + return this._viewport; + }, + + getViewportRootOffset: function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }, + + refresh: function () { + + var list = this.storage.getDisplayList(true); + + this._paintList(list); + }, + + _paintList: function (list) { + this.gradientManager.markAllUnused(); + this.clipPathManager.markAllUnused(); + + var svgRoot = this._svgRoot; + var visibleList = this._visibleList; + var listLen = list.length; + + var newVisibleList = []; + var i; + for (i = 0; i < listLen; i++) { + var displayable = list[i]; + var svgProxy = getSvgProxy(displayable); + if (!displayable.invisible) { + if (displayable.__dirty) { + svgProxy && svgProxy.brush(displayable); + var el = getSvgElement(displayable) + || getTextSvgElement(displayable); + + // Update clipPath + this.clipPathManager.update(displayable, el); + + // Update gradient + if (displayable.style) { + this.gradientManager + .update(displayable.style.fill); + this.gradientManager + .update(displayable.style.stroke); + } + + displayable.__dirty = false; + } + newVisibleList.push(displayable); + } + } + + var diff = arrayDiff$1(visibleList, newVisibleList); + var prevSvgElement; + + // First do remove, in case element moved to the head and do remove + // after add + for (i = 0; i < diff.length; i++) { + var item = diff[i]; + if (item.removed) { + for (var k = 0; k < item.count; k++) { + var displayable = visibleList[item.indices[k]]; + var svgElement = getSvgElement(displayable); + var textSvgElement = getTextSvgElement(displayable); + remove$1(svgRoot, svgElement); + remove$1(svgRoot, textSvgElement); + } + } + } + for (i = 0; i < diff.length; i++) { + var item = diff[i]; + if (item.added) { + for (var k = 0; k < item.count; k++) { + var displayable = newVisibleList[item.indices[k]]; + var svgElement = getSvgElement(displayable); + var textSvgElement = getTextSvgElement(displayable); + prevSvgElement + ? insertAfter(svgRoot, svgElement, prevSvgElement) + : prepend(svgRoot, svgElement); + if (svgElement) { + insertAfter(svgRoot, textSvgElement, svgElement); + } + else if (prevSvgElement) { + insertAfter( + svgRoot, textSvgElement, prevSvgElement + ); + } + else { + prepend(svgRoot, textSvgElement); + } + // Insert text + insertAfter(svgRoot, textSvgElement, svgElement); + prevSvgElement = textSvgElement || svgElement + || prevSvgElement; + + this.gradientManager + .addWithoutUpdate(svgElement, displayable); + this.clipPathManager.markUsed(displayable); + } + } + else if (!item.removed) { + for (var k = 0; k < item.count; k++) { + var displayable = newVisibleList[item.indices[k]]; + prevSvgElement + = svgElement + = getTextSvgElement(displayable) + || getSvgElement(displayable) + || prevSvgElement; + + this.gradientManager.markUsed(displayable); + this.gradientManager + .addWithoutUpdate(svgElement, displayable); + + this.clipPathManager.markUsed(displayable); + } + } + } + + this.gradientManager.removeUnused(); + this.clipPathManager.removeUnused(); + + this._visibleList = newVisibleList; + }, + + _getDefs: function (isForceCreating) { + var svgRoot = this._svgRoot; + var defs = this._svgRoot.getElementsByTagName('defs'); + if (defs.length === 0) { + // Not exist + if (isForceCreating) { + var defs = svgRoot.insertBefore( + createElement('defs'), // Create new tag + svgRoot.firstChild // Insert in the front of svg + ); + if (!defs.contains) { + // IE doesn't support contains method + defs.contains = function (el) { + var children = defs.children; + if (!children) { + return false; + } + for (var i = children.length - 1; i >= 0; --i) { + if (children[i] === el) { + return true; + } + } + return false; + }; + } + return defs; + } + else { + return null; + } + } + else { + return defs[0]; + } + }, + + resize: function () { + var width = this._getWidth(); + var height = this._getHeight(); + + if (this._width !== width && this._height !== height) { + this._width = width; + this._height = height; + + var viewportStyle = this._viewport.style; + viewportStyle.width = width + 'px'; + viewportStyle.height = height + 'px'; + + var svgRoot = this._svgRoot; + // Set width by 'svgRoot.width = width' is invalid + svgRoot.setAttribute('width', width); + svgRoot.setAttribute('height', height); + } + }, + + getWidth: function () { + return this._getWidth(); + }, + + getHeight: function () { + return this._getHeight(); + }, + + _getWidth: function () { + var root = this.root; + var stl = document.defaultView.getComputedStyle(root); + + return ((root.clientWidth || parseInt10$2(stl.width)) + - parseInt10$2(stl.paddingLeft) + - parseInt10$2(stl.paddingRight)) | 0; + }, + + _getHeight: function () { + var root = this.root; + var stl = document.defaultView.getComputedStyle(root); + + return ((root.clientHeight || parseInt10$2(stl.height)) + - parseInt10$2(stl.paddingTop) + - parseInt10$2(stl.paddingBottom)) | 0; + }, + + dispose: function () { + this.root.innerHTML = ''; + + this._svgRoot + = this._viewport + = this.storage + = null; + }, + + clear: function () { + if (this._viewport) { + this.root.removeChild(this._viewport); + } + }, + + pathToSvg: function () { + this.refresh(); + var html = this._svgRoot.outerHTML; + return 'data:img/svg+xml;utf-8,' + unescape(html); + } +}; + +// Not supported methods +function createMethodNotSupport$1(method) { + return function () { + zrLog('In SVG mode painter not support method "' + method + '"'); + }; +} + +// Unsuppoted methods +each$1([ + 'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', + 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', + 'toDataURL', 'pathToImage' +], function (name) { + SVGPainter.prototype[name] = createMethodNotSupport$1(name); +}); + +registerPainter('svg', SVGPainter); + +// Import all charts and components + +exports.dataTool = index; +exports.version = version; +exports.dependencies = dependencies; +exports.PRIORITY = PRIORITY; +exports.init = init; +exports.connect = connect; +exports.disConnect = disConnect; +exports.disconnect = disconnect; +exports.dispose = dispose; +exports.getInstanceByDom = getInstanceByDom; +exports.getInstanceById = getInstanceById; +exports.registerTheme = registerTheme; +exports.registerPreprocessor = registerPreprocessor; +exports.registerProcessor = registerProcessor; +exports.registerPostUpdate = registerPostUpdate; +exports.registerAction = registerAction; +exports.registerCoordinateSystem = registerCoordinateSystem; +exports.getCoordinateSystemDimensions = getCoordinateSystemDimensions; +exports.registerLayout = registerLayout; +exports.registerVisual = registerVisual; +exports.registerLoading = registerLoading; +exports.extendComponentModel = extendComponentModel; +exports.extendComponentView = extendComponentView; +exports.extendSeriesModel = extendSeriesModel; +exports.extendChartView = extendChartView; +exports.setCanvasCreator = setCanvasCreator; +exports.$inject = $inject; +exports.zrender = zrender; +exports.graphic = graphic; +exports.number = number; +exports.format = format; +exports.throttle = throttle; +exports.helper = helper; +exports.matrix = matrix; +exports.vector = vector; +exports.color = color; +exports.util = ecUtil; +exports.List = List; +exports.Model = Model; +exports.Axis = Axis; +exports.env = env$1; + +}))); +//# sourceMappingURL=echarts.js.map diff --git a/519ScientificVisualization/Project/project/index.html b/519ScientificVisualization/Project/project/index.html new file mode 100644 index 0000000..98c4a59 --- /dev/null +++ b/519ScientificVisualization/Project/project/index.html @@ -0,0 +1,464 @@ + + + + + Analysis of Player Transfer + + + +
+ + + \ No newline at end of file diff --git a/519ScientificVisualization/Slide/Lecture 1 - Introduction.pdf b/519ScientificVisualization/Slide/Lecture 1 - Introduction.pdf new file mode 100644 index 0000000..28f0834 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 1 - Introduction.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 10 - Vector Field Visualization III.pdf b/519ScientificVisualization/Slide/Lecture 10 - Vector Field Visualization III.pdf new file mode 100644 index 0000000..789f01e Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 10 - Vector Field Visualization III.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 11 - Tensor Visualization.pdf b/519ScientificVisualization/Slide/Lecture 11 - Tensor Visualization.pdf new file mode 100644 index 0000000..46a4895 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 11 - Tensor Visualization.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 12 - Volume Visualization.pdf b/519ScientificVisualization/Slide/Lecture 12 - Volume Visualization.pdf new file mode 100644 index 0000000..8162827 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 12 - Volume Visualization.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 13 - Time Series.pdf b/519ScientificVisualization/Slide/Lecture 13 - Time Series.pdf new file mode 100644 index 0000000..8dab555 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 13 - Time Series.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 14 - Information Visualization.pdf b/519ScientificVisualization/Slide/Lecture 14 - Information Visualization.pdf new file mode 100644 index 0000000..d8912a0 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 14 - Information Visualization.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 15 - Tabular Data.pdf b/519ScientificVisualization/Slide/Lecture 15 - Tabular Data.pdf new file mode 100644 index 0000000..ee5b2f7 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 15 - Tabular Data.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 16 - Network Visualization 1.pdf b/519ScientificVisualization/Slide/Lecture 16 - Network Visualization 1.pdf new file mode 100644 index 0000000..3426225 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 16 - Network Visualization 1.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 17 - Network Visualization 2.pdf b/519ScientificVisualization/Slide/Lecture 17 - Network Visualization 2.pdf new file mode 100644 index 0000000..1f2a19b Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 17 - Network Visualization 2.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 2 - Representation and Interpolation.pdf b/519ScientificVisualization/Slide/Lecture 2 - Representation and Interpolation.pdf new file mode 100644 index 0000000..7729c60 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 2 - Representation and Interpolation.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 4 - Color.pdf b/519ScientificVisualization/Slide/Lecture 4 - Color.pdf new file mode 100644 index 0000000..8740543 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 4 - Color.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 5 - Isosurfaces.pdf b/519ScientificVisualization/Slide/Lecture 5 - Isosurfaces.pdf new file mode 100644 index 0000000..571dc8a Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 5 - Isosurfaces.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 6 - Vector Field Visualization I.pdf b/519ScientificVisualization/Slide/Lecture 6 - Vector Field Visualization I.pdf new file mode 100644 index 0000000..45edfc2 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 6 - Vector Field Visualization I.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 7 - Vector Field Visualization II.pdf b/519ScientificVisualization/Slide/Lecture 7 - Vector Field Visualization II.pdf new file mode 100644 index 0000000..af09500 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 7 - Vector Field Visualization II.pdf differ diff --git a/519ScientificVisualization/Slide/Lecture 9 - Vector Field Simplification.pdf b/519ScientificVisualization/Slide/Lecture 9 - Vector Field Simplification.pdf new file mode 100644 index 0000000..0db07b0 Binary files /dev/null and b/519ScientificVisualization/Slide/Lecture 9 - Vector Field Simplification.pdf differ diff --git a/519ScientificVisualization/Slide/MeshProcessing.pdf b/519ScientificVisualization/Slide/MeshProcessing.pdf new file mode 100644 index 0000000..84e009d Binary files /dev/null and b/519ScientificVisualization/Slide/MeshProcessing.pdf differ diff --git a/519ScientificVisualization/Slide/de424d702e72bcb25fdf33847230fed5_r.jpg b/519ScientificVisualization/Slide/de424d702e72bcb25fdf33847230fed5_r.jpg new file mode 100644 index 0000000..f8942cd Binary files /dev/null and b/519ScientificVisualization/Slide/de424d702e72bcb25fdf33847230fed5_r.jpg differ diff --git a/519ScientificVisualization/Worksheet/519-Worksheet-6-2017.pdf b/519ScientificVisualization/Worksheet/519-Worksheet-6-2017.pdf new file mode 100644 index 0000000..5a93a04 Binary files /dev/null and b/519ScientificVisualization/Worksheet/519-Worksheet-6-2017.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-0-Solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-0-Solution.pdf new file mode 100644 index 0000000..1bee3cb Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-0-Solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-0.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-0.pdf new file mode 100644 index 0000000..789dc63 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-0.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-10-Solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-10-Solution.pdf new file mode 100644 index 0000000..08aa84c Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-10-Solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-10.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-10.pdf new file mode 100644 index 0000000..100d62a Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-10.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-11-Solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-11-Solution.pdf new file mode 100644 index 0000000..cb8edeb Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-11-Solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-11.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-11.pdf new file mode 100644 index 0000000..95ca6b9 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-11.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-13-solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-13-solution.pdf new file mode 100644 index 0000000..5a9a18c Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-13-solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-13.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-13.pdf new file mode 100644 index 0000000..e54bba2 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-13.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-6-solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-6-solution.pdf new file mode 100644 index 0000000..a14b744 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-6-solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-7-soln.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-7-soln.pdf new file mode 100644 index 0000000..951edfb Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-7-soln.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-Time Series-Solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-Time Series-Solution.pdf new file mode 100644 index 0000000..e35ce78 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-Time Series-Solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-Time Series.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-Time Series.pdf new file mode 100644 index 0000000..5bd39d9 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-Time Series.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet-Volume-2017.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet-Volume-2017.pdf new file mode 100644 index 0000000..02b196c Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet-Volume-2017.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet1-Solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet1-Solution.pdf new file mode 100644 index 0000000..24f1949 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet1-Solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet1.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet1.pdf new file mode 100644 index 0000000..b5127e7 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet1.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet2-solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet2-solution.pdf new file mode 100644 index 0000000..24827ba Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet2-solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet2.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet2.pdf new file mode 100644 index 0000000..90287a8 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet2.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet3-solution.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet3-solution.pdf new file mode 100644 index 0000000..fcee338 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet3-solution.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet3.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet3.pdf new file mode 100644 index 0000000..8606a6c Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet3.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet4 -soln.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet4 -soln.pdf new file mode 100644 index 0000000..5836c51 Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet4 -soln.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet4.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet4.pdf new file mode 100644 index 0000000..cda1a4a Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet4.pdf differ diff --git a/519ScientificVisualization/Worksheet/CS 519-Worksheet7.pdf b/519ScientificVisualization/Worksheet/CS 519-Worksheet7.pdf new file mode 100644 index 0000000..f247e2d Binary files /dev/null and b/519ScientificVisualization/Worksheet/CS 519-Worksheet7.pdf differ diff --git a/519ScientificVisualization/Worksheet/Volume-solution-page2.pdf b/519ScientificVisualization/Worksheet/Volume-solution-page2.pdf new file mode 100644 index 0000000..062fc59 Binary files /dev/null and b/519ScientificVisualization/Worksheet/Volume-solution-page2.pdf differ diff --git a/519ScientificVisualization/Worksheet/Volume-solution.pdf b/519ScientificVisualization/Worksheet/Volume-solution.pdf new file mode 100644 index 0000000..a7948a3 Binary files /dev/null and b/519ScientificVisualization/Worksheet/Volume-solution.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-A-Hints-from-Probability-and-Statistics_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-A-Hints-from-Probability-and-Statistics_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..e754036 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-A-Hints-from-Probability-and-Statistics_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-B-Linear-Algebra-Basics_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-B-Linear-Algebra-Basics_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..c8f0ab9 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-B-Linear-Algebra-Basics_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-C-Cost-Function-Optimization_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-C-Cost-Function-Optimization_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..723ece5 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-C-Cost-Function-Optimization_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-D-Basic-Definitions-from-Linear-Systems-Theory_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-D-Basic-Definitions-from-Linear-Systems-Theory_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..14069ca Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Appendix-D-Basic-Definitions-from-Linear-Systems-Theory_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-1-Introduction_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-1-Introduction_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..b959fcb Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-1-Introduction_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-10-Supervised-Learning-The-Epilogue_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-10-Supervised-Learning-The-Epilogue_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..8590dab Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-10-Supervised-Learning-The-Epilogue_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-11-Clustering-Basic-Concepts_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-11-Clustering-Basic-Concepts_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..fd6bac9 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-11-Clustering-Basic-Concepts_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-12-Clustering-Algorithms-I-Sequential-Algorithms_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-12-Clustering-Algorithms-I-Sequential-Algorithms_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..8057b11 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-12-Clustering-Algorithms-I-Sequential-Algorithms_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-13-Clustering-Algorithms-II-Hierarchical-Algorithms_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-13-Clustering-Algorithms-II-Hierarchical-Algorithms_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..0bf3f36 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-13-Clustering-Algorithms-II-Hierarchical-Algorithms_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-14-Clustering-Algorithms-III-Schemes-Based-on-Function-Optimization_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-14-Clustering-Algorithms-III-Schemes-Based-on-Function-Optimization_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..3dc22a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-14-Clustering-Algorithms-III-Schemes-Based-on-Function-Optimization_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-15-Clustering-Algorithms-IV_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-15-Clustering-Algorithms-IV_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..6d0e6c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-15-Clustering-Algorithms-IV_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-16-Cluster-Validity_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-16-Cluster-Validity_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..ef613d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-16-Cluster-Validity_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-2-Classifiers-Based-on-Bayes-Decision-Theory_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-2-Classifiers-Based-on-Bayes-Decision-Theory_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..daa2306 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-2-Classifiers-Based-on-Bayes-Decision-Theory_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-3-Linear-Classifiers_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-3-Linear-Classifiers_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..90df54e Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-3-Linear-Classifiers_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-4-Nonlinear-Classifiers_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-4-Nonlinear-Classifiers_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..fa44501 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-4-Nonlinear-Classifiers_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-5-Feature-Selection_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-5-Feature-Selection_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..b2edf1e Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-5-Feature-Selection_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-6-Feature-Generation-I-Data-Transformation-and-Dimensionality-Reduction_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-6-Feature-Generation-I-Data-Transformation-and-Dimensionality-Reduction_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..c9c60ea Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-6-Feature-Generation-I-Data-Transformation-and-Dimensionality-Reduction_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-8-Template-Matching_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-8-Template-Matching_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..9b5ecc3 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-8-Template-Matching_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-9-Context-Dependent-Classification_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-9-Context-Dependent-Classification_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..bc4d199 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Chapter-9-Context-Dependent-Classification_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Copyright_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Copyright_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..1ef1e53 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Copyright_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Index_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Index_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..d82a930 Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Index_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Preface_2009_Pattern-Recognition-Fourth-Edition-.pdf b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Preface_2009_Pattern-Recognition-Fourth-Edition-.pdf new file mode 100755 index 0000000..64e69ec Binary files /dev/null and b/598MachLrngforSignalProcessng/Pattern Recognition (Fourth Edition).010/Preface_2009_Pattern-Recognition-Fourth-Edition-.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/1609.04802.pdf b/598MachLrngforSignalProcessng/Project/1609.04802.pdf new file mode 100644 index 0000000..c2f7617 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/1609.04802.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/598_poster.pdf b/598MachLrngforSignalProcessng/Project/598_poster.pdf new file mode 100644 index 0000000..e65397d Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/598_poster.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/README.md b/598MachLrngforSignalProcessng/Project/CS598Project/README.md new file mode 100644 index 0000000..7dc2521 --- /dev/null +++ b/598MachLrngforSignalProcessng/Project/CS598Project/README.md @@ -0,0 +1,4 @@ +# CS598Project +Gan: +https://github.com/buriburisuri/SRGAN +https://github.com/zsdonghao/SRGAN diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/demo/g_train_260.npz b/598MachLrngforSignalProcessng/Project/CS598Project/demo/g_train_260.npz new file mode 100644 index 0000000..f7dbb44 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/CS598Project/demo/g_train_260.npz differ diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/lect3.pdf b/598MachLrngforSignalProcessng/Project/CS598Project/lect3.pdf new file mode 100644 index 0000000..7c37964 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/CS598Project/lect3.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/src/main.py b/598MachLrngforSignalProcessng/Project/CS598Project/src/main.py new file mode 100644 index 0000000..572f93e --- /dev/null +++ b/598MachLrngforSignalProcessng/Project/CS598Project/src/main.py @@ -0,0 +1,222 @@ + +# coding: utf-8 + +import numpy as np +import scipy +import tensorflow as tf +import tensorlayer as tl +import matplotlib.pyplot as plt +from models import * + + +# ### set up configuration +# optimizer +BATCH_SIZE = 9 +dim = 3 +LEARNING_RATE = 1e-4 +BETA1 = 0.9 + +## GAN model +N_EPOCH = 2000 +LR_DECAY = 0.1 +DECAY_FREQ = int(N_EPOCH/2) + + +# ### read and load image function +def read_images(file_name, file_path): + return scipy.misc.imread(file_path + file_name, mode='RGB') + + +def load_images(img_list, file_path): + imgs = [] + n_threads = 32 + for idx in range(0, len(img_list), n_threads): + cur_imgs_list = img_list[idx : idx + n_threads] + cur_imgs = tl.prepro.threading_data(cur_imgs_list, fn = read_images, file_path = file_path) + # print(cur_imgs.shape) + imgs.extend(cur_imgs) + #print('read %d from %s' % (len(imgs), file_path)) + return imgs + +def crop_scale_images(x, is_random=True): + x = tl.prepro.crop(x, wrg=224, hrg=224, is_random=is_random) + x = x / (255. / 2.) + x = x - 1. + return x + +def downsample_scale_images(x): + x = tl.prepro.imresize(x, size=[56, 56], interp='bicubic', mode=None) + x = x / (255. / 2.) + x = x - 1. + return x + + +# ### define training function + +def train(start_epoch = 0): + train_hr_filepath = 'DIV2K_train_HR/' + train_lr_filepath = 'DIV2K_train_LR_bicubic/X4/' + valid_hr_filepath = 'DIV2K_valid_HR/' + valid_lr_filepath = 'DIV2K_valid_LR_bicubic/X4/' + + # get images sorted by name + train_hr_img_list = sorted(tl.files.load_file_list(path=train_hr_filepath, regx='.*.png', printable=False)) + + # load the whole training hr images + #train_hr_imgs = load_images(train_hr_img_list, train_hr_filepath) + + #================== define graph model ====================# + train_lr_image = tf.placeholder('float32', [BATCH_SIZE, 56, 56, 3], name='train_lr_images') + train_hr_image = tf.placeholder('float32', [BATCH_SIZE, 224, 224, 3], name='train_hr_images') + + # call generator train + g_out = generator(train_lr_image, is_train=True, reuse=False) + # call descriminator + logits_real, network_d = discriminator(train_hr_image, is_train=True, reuse=False) + logits_fake, _ = discriminator(g_out.outputs, is_train=True, reuse=True) + + + # resize image to 224 to fit the pre-trained vgg19 model that used for evaluate the loss, with scale[-1, 1] + hr_imgs_vgg_loss = tf.image.resize_images(train_hr_image, size=[224, 224]) + lr_imgs_vgg_loss = tf.image.resize_images(g_out.outputs, size=[224, 224]) + + # scale the images that passed into the vgg19 net, with adjust the scale to [0, 1] + net_vgg, vgg_feature_maps_real = Vgg19_model((hr_imgs_vgg_loss+1)/2, reuse=False) + _, vgg_feature_maps_fake = Vgg19_model((lr_imgs_vgg_loss+1)/2, reuse=True) + + # call generator test + images_out = generator(train_lr_image, is_train=False, reuse=True) + + #=============== define loss and optim ===================# + + d_loss_real = tl.cost.sigmoid_cross_entropy(logits_real, tf.ones_like(logits_real), name='d_real') + d_loss_fake = tl.cost.sigmoid_cross_entropy(logits_fake, tf.zeros_like(logits_fake), name='d_fake') + d_loss = d_loss_real + d_loss_fake + + + g_gan_loss = 1e-3 * tl.cost.sigmoid_cross_entropy(logits_fake, tf.ones_like(logits_fake), name='adversrial_loss') + g_vgg_loss = 2e-6 * tl.cost.mean_squared_error(vgg_feature_maps_fake.outputs, vgg_feature_maps_real.outputs, is_mean=True) + g_mse_loss = tl.cost.mean_squared_error(g_out.outputs , train_hr_image, is_mean=True) + + g_loss = g_mse_loss + g_vgg_loss + g_gan_loss + + # get varibales from models + g_vars = tl.layers.get_variables_with_name('generator', True, True) + d_vars = tl.layers.get_variables_with_name('discriminator', True, True) + + + with tf.variable_scope('learning_rate'): + lr_var = tf.Variable(LEARNING_RATE, trainable=False) + + # AdamOptimizer for two models + d_optim = tf.train.AdamOptimizer(lr_var, beta1=BETA1).minimize(d_loss, var_list=d_vars) + g_optim = tf.train.AdamOptimizer(lr_var, beta1=BETA1).minimize(g_loss, var_list=g_vars) + + + + + #=================================== train an GAN model =======================================# + save_dir_g = '/home/tdong/Desktop/learn/project/samples/g_train' + models_dir_g = '/home/tdong/Desktop/learn/project/saved_models/G' + models_dir_d = '/home/tdong/Desktop/learn/project/saved_models/D' + + configuration = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False) + configuration.gpu_options.allocator_type = 'BFC' + configuration.gpu_options.allow_growth=True + + sess = tf.Session(config=configuration) + tl.layers.initialize_global_variables(sess) + + # load pre-trained vgg19 network + + vgg19_npy_path = "vgg19.npy" + npz = np.load(vgg19_npy_path, encoding='latin1').item() + + params = [] + for val in sorted( npz.items() ): + W = np.asarray(val[1][0]) + b = np.asarray(val[1][1]) + print(" Loading %s: %s, %s" % (val[0], W.shape, b.shape)) + params.extend([W, b]) + tl.files.assign_params(sess, params, net_vgg) + + + # load the pre-trained initialized generator + if start_epoch == 0: + tl.files.load_and_assign_npz(sess=sess, name=models_dir_g+'/g_init_90_init.npz', network=g_out) + + else: + tl.files.load_and_assign_npz(sess=sess, name=models_dir_g+'/g_train_%d.npz'%start_epoch, network=g_out) + + if start_epoch != 0: + tl.files.load_and_assign_npz(sess=sess, name=models_dir_d+'/d_train_%d.npz'%start_epoch, network=network_d) + + + #===================== train Generator ================= + + + n_train = len(train_hr_img_list) + for i in range(start_epoch, N_EPOCH+1): + # update learning rate + if i == 0: + sess.run(tf.assign(lr_var, LEARNING_RATE)) + elif i % DECAY_FREQ == 0: + sess.run(tf.assign(lr_var, LEARNING_RATE * (LR_DECAY ** (i / DECAY_FREQ)))) + + epoch_time_start = time.time() + total_loss_g = 0 + total_loss_d = 0 + n_itr = 0 + + random.shuffle(train_hr_img_list) + for idx in range(0, n_train, BATCH_SIZE): + # for each batch + batch_time_start = time.time() + sample_imgs = load_images(train_hr_img_list[idx:idx+BATCH_SIZE], train_hr_filepath) + if(len(sample_imgs) != BATCH_SIZE): + continue + #print('cur batch size: ', len(sample_imgs)) + sample_imgs_hr = tl.prepro.threading_data(sample_imgs, fn=crop_scale_images, is_random=True) + sample_imgs_lr = tl.prepro.threading_data(sample_imgs_hr, fn=downsample_scale_images) + + # update discriminator (Min) + cur_loss_d, _ = sess.run([d_loss, d_optim], {train_lr_image: sample_imgs_lr, train_hr_image: sample_imgs_hr}) + + # update generator (Max) + cur_loss_g, _ = sess.run([g_loss, g_optim], {train_lr_image: sample_imgs_lr, train_hr_image: sample_imgs_hr}) + + print("Epoch [%2d/%2d] itr:%4d time: %4.4fs, batch_d_loss: %.8f " % (i, N_EPOCH, n_itr, time.time() - batch_time_start, cur_loss_d)) + print("Epoch [%2d/%2d] itr:%4d time: %4.4fs, batch_g_loss: %.8f " % (i, N_EPOCH, n_itr, time.time() - batch_time_start, cur_loss_g)) + total_loss_d += cur_loss_d + total_loss_g += cur_loss_g + n_itr+=1 + + print("[***] Epoch: [%2d/%2d] time: %4.4fs, epoch_d_loss: %.8f" % (i, N_EPOCH, time.time() - epoch_time_start, total_loss_d/n_itr)) + print("[***] Epoch: [%2d/%2d] time: %4.4fs, epoch_g_loss: %.8f" % (i, N_EPOCH, time.time() - epoch_time_start, total_loss_g/n_itr)) + + #break + + ## trainning error + if i % 10 == 0 and i != start_epoch: + generated_images = sess.run(images_out.outputs, {train_lr_image: sample_imgs_lr}) + print("[*] save images") + tl.vis.save_images(generated_images, [dim, dim], save_dir_g+'/train_%d.png' % i) + + ## save model + if i % 10 == 0 and i != start_epoch: + tl.files.save_npz(g_out.all_params, name=models_dir_g+'/g_train_%d.npz'%i, sess=sess) + tl.files.save_npz(network_d.all_params, name=models_dir_d+'/d_train_%d.npz'%i, sess=sess) + + +# ### Main + +if __name__ == '__main__': + device_name = "gpu" + if device_name == "gpu": + device_name = "/gpu:0" + else: + device_name = "/cpu:0" + + with tf.device(device_name): + train(260) + diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/src/models.py b/598MachLrngforSignalProcessng/Project/CS598Project/src/models.py new file mode 100644 index 0000000..0f3d4a4 --- /dev/null +++ b/598MachLrngforSignalProcessng/Project/CS598Project/src/models.py @@ -0,0 +1,201 @@ + +# coding: utf-8 + +import tensorflow as tf +import tensorlayer as tl +from tensorlayer.layers import * + + +# ### define generative network + +def generator(images, is_train, reuse): + w_init = tf.random_normal_initializer(stddev=0.02) + b_init = None + + # for batch normolization + gamma_init = tf.random_normal_initializer(1., 0.02) + beta_init = tf.random_normal_initializer(0.05) + + + with tf.variable_scope("generator", reuse=reuse) as scope: + # reuse the variables + tl.layers.set_name_reuse(reuse) + + + network = InputLayer(images, name='images_in_g') + network = Conv2d(network, 64, (3, 3), (1, 1), act=tf.nn.relu, padding='SAME', W_init=w_init, name='k9n64s1_c_0') + skip_hold_network = network + + # B residual blocks + for i in range(16): + skip_hold_block_network = network + network = Conv2d(network, 64, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, b_init=b_init, use_cudnn_on_gpu=True, name='k3n64s1_block_c1_%s' % (i+1)) + network = BatchNormLayer(network, act=tf.nn.relu, is_train=is_train, gamma_init=gamma_init, name='k3n64s1_block_b1_%s' % (i+1)) + network = Conv2d(network, 64, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, b_init=b_init, use_cudnn_on_gpu=True, name='k3n64s1_block_c2_%s' % (i+1)) + network = BatchNormLayer(network, is_train=is_train, gamma_init=gamma_init, beta_init=beta_init, name='k3n64s1_block_b2_%s' % (i+1)) + network = ElementwiseLayer([network, skip_hold_block_network], tf.add, name='b_residual_block_%s' % (i+1)) + + # skip connection + network = Conv2d(network, 64, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, b_init=b_init, use_cudnn_on_gpu=True, name='k3n64s1_after_c') + network = BatchNormLayer(network, is_train=is_train, gamma_init=gamma_init, beta_init=beta_init, name='k3n64s1_after_b') + network= ElementwiseLayer([network, skip_hold_network], tf.add, name='add_skip') + + # 2 sub-pixel layers + network = Conv2d(network, 256, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, b_init=b_init, use_cudnn_on_gpu=True, name='k3n256s1_1') + network= SubpixelConv2d(network, scale=2, n_out_channel=None, act=tf.nn.relu, name='subpixels_1') + + network = Conv2d(network, 256, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, b_init=b_init, use_cudnn_on_gpu=True, name='k3n256s1_2') + network = SubpixelConv2d(network, scale=2, n_out_channel=None, act=tf.nn.relu, name='subpixels_2') + + network = Conv2d(network, 3, (1, 1), (1, 1), act=tf.nn.tanh, padding='SAME', W_init=w_init, b_init=b_init, use_cudnn_on_gpu=True, name='out') + return network + + + + +# ### define discriminator network + +def discriminator(images, is_train, reuse): + w_init = tf.random_normal_initializer(stddev=0.02) + b_init = None + + # for batch normolization + gamma_init = tf.random_normal_initializer(1., 0.02) + beta_init = tf.random_normal_initializer(0.05) + with tf.variable_scope("discriminator", reuse=reuse): + # reuse the variables + tl.layers.set_name_reuse(reuse) + + network = InputLayer(images, name='images_in_d') + network = Conv2d(network, 64, (3, 3), (1, 1), act=tf.nn.leaky_relu, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_0') + + network = Conv2d(network, 64, (3, 3), (2, 2), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_1') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b1') + + # start 6 blocks + network = Conv2d(network, 128, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_2') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b2') + + network = Conv2d(network, 128, (3, 3), (2, 2), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_3') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b3') + + network = Conv2d(network, 256, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_4') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b4') + + network = Conv2d(network, 256, (3, 3), (2, 2), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_5') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b5') + + network = Conv2d(network, 512, (3, 3), (1, 1), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_6') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b6') + + network = Conv2d(network, 512, (3, 3), (2, 2), act=None, padding='SAME', W_init=w_init, use_cudnn_on_gpu=True, name='c_7') + network = BatchNormLayer(network, act=tf.nn.leaky_relu, is_train=is_train, gamma_init=gamma_init, name='b7') + #end 6 blocks + + network = FlattenLayer(network, name='flatten') + network = DenseLayer(network, n_units=1024, act=tf.nn.leaky_relu, name='fc2014') + network = DenseLayer(network, n_units=1, name='out') + + + logits = network.outputs + network.outputs = tf.nn.sigmoid(network.outputs) + + return logits, network + + +# cite this +def Vgg19_model(rgb, reuse): + """ + Build the VGG 19 Model + + Parameters + ----------- + rgb : rgb image placeholder [batch, height, width, 3] values scaled [0, 1] + """ + VGG_MEAN = [103.939, 116.779, 123.68] + with tf.variable_scope("VGG19", reuse=reuse) as vs: + start_time = time.time() + print("build model started") + rgb_scaled = rgb * 255.0 + # Convert RGB to BGR + if tf.__version__ <= '0.11': + red, green, blue = tf.split(3, 3, rgb_scaled) + else: # TF 1.0 + # print(rgb_scaled) + red, green, blue = tf.split(rgb_scaled, 3, 3) + assert red.get_shape().as_list()[1:] == [224, 224, 1] + assert green.get_shape().as_list()[1:] == [224, 224, 1] + assert blue.get_shape().as_list()[1:] == [224, 224, 1] + if tf.__version__ <= '0.11': + bgr = tf.concat(3, [ + blue - VGG_MEAN[0], + green - VGG_MEAN[1], + red - VGG_MEAN[2], + ]) + else: + bgr = tf.concat([ + blue - VGG_MEAN[0], + green - VGG_MEAN[1], + red - VGG_MEAN[2], + ], axis=3) + assert bgr.get_shape().as_list()[1:] == [224, 224, 3] + + """ input layer """ + net_in = InputLayer(bgr, name='input') + """ conv1 """ + network = Conv2d(net_in, n_filter=64, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv1_1') + network = Conv2d(network, n_filter=64, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv1_2') + network = MaxPool2d(network, filter_size=(2, 2), strides=(2, 2), + padding='SAME', name='pool1') + """ conv2 """ + network = Conv2d(network, n_filter=128, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv2_1') + network = Conv2d(network, n_filter=128, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv2_2') + network = MaxPool2d(network, filter_size=(2, 2), strides=(2, 2), + padding='SAME', name='pool2') + """ conv3 """ + network = Conv2d(network, n_filter=256, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv3_1') + network = Conv2d(network, n_filter=256, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv3_2') + network = Conv2d(network, n_filter=256, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv3_3') + network = Conv2d(network, n_filter=256, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv3_4') + network = MaxPool2d(network, filter_size=(2, 2), strides=(2, 2), + padding='SAME', name='pool3') + """ conv4 """ + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv4_1') + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv4_2') + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv4_3') + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv4_4') + network = MaxPool2d(network, filter_size=(2, 2), strides=(2, 2), + padding='SAME', name='pool4') # (batch_size, 14, 14, 512) + conv = network + """ conv5 """ + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv5_1') + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv5_2') + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv5_3') + network = Conv2d(network, n_filter=512, filter_size=(3, 3), + strides=(1, 1), act=tf.nn.relu,padding='SAME', name='conv5_4') + network = MaxPool2d(network, filter_size=(2, 2), strides=(2, 2), + padding='SAME', name='pool5') # (batch_size, 7, 7, 512) + """ fc 6~8 """ + network = FlattenLayer(network, name='flatten') + network = DenseLayer(network, n_units=4096, act=tf.nn.relu, name='fc6') + network = DenseLayer(network, n_units=4096, act=tf.nn.relu, name='fc7') + network = DenseLayer(network, n_units=1000, act=tf.identity, name='fc8') + print("build model finished: %fs" % (time.time() - start_time)) + return network, conv + + diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/src/pre_train_main.py b/598MachLrngforSignalProcessng/Project/CS598Project/src/pre_train_main.py new file mode 100644 index 0000000..d028ee7 --- /dev/null +++ b/598MachLrngforSignalProcessng/Project/CS598Project/src/pre_train_main.py @@ -0,0 +1,172 @@ + +# coding: utf-8 + +import numpy as np +import scipy +import tensorflow as tf +import tensorlayer as tl +import matplotlib.pyplot as plt +from models import * + + +# ### set up configuration +# optimizer +BATCH_SIZE = 16 +dim = 4 +LEARNING_RATE = 1e-4 +BETA1 = 0.9 + +## initialize G +N_EPOCH_INIT = 100 + + +# ### read and load image function +def read_images(file_name, file_path): + return scipy.misc.imread(file_path + file_name, mode='RGB') + + +def load_images(img_list, file_path): + imgs = [] + n_threads = 32 + for idx in range(0, len(img_list), n_threads): + cur_imgs_list = img_list[idx : idx + n_threads] + cur_imgs = tl.prepro.threading_data(cur_imgs_list, fn = read_images, file_path = file_path) + # print(cur_imgs.shape) + imgs.extend(cur_imgs) + #print('read %d from %s' % (len(imgs), file_path)) + return imgs + +def crop_scale_images(x, is_random=True): + x = tl.prepro.crop(x, wrg=96, hrg=96, is_random=is_random) + x = x / (255. / 2.) + x = x - 1. + return x + +def downsample_scale_images(x): + x = tl.prepro.imresize(x, size=[24, 24], interp='bicubic', mode=None) + x = x / (255. / 2.) + x = x - 1. + return x + + +# ### define training function + +def train(): + train_hr_filepath = 'DIV2K_train_HR/' + train_lr_filepath = 'DIV2K_train_LR_bicubic/X4/' + valid_hr_filepath = 'DIV2K_valid_HR/' + valid_lr_filepath = 'DIV2K_valid_LR_bicubic/X4/' + + # get images sorted by name + train_hr_img_list = sorted(tl.files.load_file_list(path=train_hr_filepath, regx='.*.png', printable=False)) + + # load the whole training hr images + #train_hr_imgs = load_images(train_hr_img_list, train_hr_filepath) + + #print(train_hr_imgs[0].shape) + + #%matplotlib qt + #plt.imshow(train_hr_imgs[0]) + #plt.show() + + #================== define model ====================# + train_lr_image = tf.placeholder('float32', [BATCH_SIZE, 24, 24, 3], name='train_lr_images') + train_hr_image = tf.placeholder('float32', [BATCH_SIZE, 96, 96, 3], name='train_hr_images') + + # call generator train + g_out = generator(train_lr_image, is_train=True, reuse=False) + + # get varibales from models + g_vars = tl.layers.get_variables_with_name('generator', True, True) + + # define loss function + mse_loss = tl.cost.mean_squared_error(g_out.outputs , train_hr_image, is_mean=True) # is_mean=False to reduce mean + + + with tf.variable_scope('learning_rate'): + lr_var = tf.Variable(LEARNING_RATE, trainable=False) + + # pretrain to avoid local optima + g_optim_init = tf.train.AdamOptimizer(lr_var, beta1=BETA1).minimize(mse_loss, var_list=g_vars) + + + # call generator test + images_out = generator(train_lr_image, is_train=False, reuse=True) + + #================== train an initial generative model ====================# + configuration = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False) + configuration.gpu_options.allocator_type = 'BFC' + configuration.gpu_options.allow_growth=True + + + sess = tf.Session(config=configuration) + + #sess = tf.Session(config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=False)) + + tl.layers.initialize_global_variables(sess) + + + # quick check + sample_imgs = load_images(train_hr_img_list[0: BATCH_SIZE], train_hr_filepath) + sample_imgs_hr = tl.prepro.threading_data(sample_imgs, fn=crop_scale_images, is_random=False) + print('sample HR sub-image:',sample_imgs_hr.shape, sample_imgs_hr.min(), sample_imgs_hr.max()) + sample_imgs_lr = tl.prepro.threading_data(sample_imgs_hr, fn=downsample_scale_images) + print('sample LR sub-image:', sample_imgs_lr.shape, sample_imgs_lr.min(), sample_imgs_lr.max()) + + + #save_dir_ginit = '/home/tdong/Desktop/learn/project/samples/g_init' + #models_dir = '/home/tdong/Desktop/learn/project/saved_models' + + save_dir_ginit = '/home/tdong/Desktop/learn/project/samples/other' + models_dir = '/home/tdong/Desktop/learn/project/samples/other' + + tl.vis.save_images(sample_imgs_lr, [dim, dim], save_dir_ginit + '/train_samples_hr.png') + tl.vis.save_images(sample_imgs_hr, [dim, dim], save_dir_ginit + '/train_samples_lr.png') + + + #===================== train init Generator ================= + + sess.run(tf.assign(lr_var, LEARNING_RATE)) + n_train = len(train_hr_img_list) + for i in range(N_EPOCH_INIT): + epoch_time_start = time.time() + total_mse_loss = 0 + n_itr = 0 + + random.shuffle(train_hr_img_list) + for idx in range(0, n_train, BATCH_SIZE): + # for each batch + batch_time_start = time.time() + sample_imgs = load_images(train_hr_img_list[idx:idx+BATCH_SIZE], train_hr_filepath) + sample_imgs_hr = tl.prepro.threading_data(sample_imgs, fn=crop_scale_images, is_random=True) + sample_imgs_lr = tl.prepro.threading_data(sample_imgs_hr, fn=downsample_scale_images) + cur_mse_loss, _ = sess.run([mse_loss, g_optim_init], {train_lr_image: sample_imgs_lr, train_hr_image: sample_imgs_hr}) + print("Epoch [%2d/%2d] %4d time: %4.4fs, mse: %.8f " % (i, N_EPOCH_INIT, n_itr, time.time() - batch_time_start, cur_mse_loss)) + total_mse_loss += cur_mse_loss + n_itr+=1 + print("[*] Epoch: [%2d/%2d] time: %4.4fs, mse: %.8f" % (i, N_EPOCH_INIT, time.time() - epoch_time_start, total_mse_loss/n_itr)) + + + ## trainning error + if i % 10 == 0: + generated_images = sess.run(images_out.outputs, {train_lr_image: sample_imgs_lr}) + print("[*] save images") + tl.vis.save_images(generated_images, [dim, dim], save_dir_ginit+'/train_%d.png' % i) + + ## save model + if i % 10 == 0: + tl.files.save_npz(g_out.all_params, name=models_dir+'/g_init_%d_init.npz'%i, sess=sess) + + +# ### Main + +if __name__ == '__main__': + device_name = "gpu" + if device_name == "gpu": + device_name = "/gpu:0" + else: + device_name = "/cpu:0" + + with tf.device(device_name): + train() + diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/src/script.py b/598MachLrngforSignalProcessng/Project/CS598Project/src/script.py new file mode 100644 index 0000000..0bdfe9a --- /dev/null +++ b/598MachLrngforSignalProcessng/Project/CS598Project/src/script.py @@ -0,0 +1,60 @@ +import numpy as np +import scipy +import tensorflow as tf +import tensorlayer as tl +import matplotlib.pyplot as plt +from models import * + + + +# ### read and load image function +def read_images(file_name, file_path): + return scipy.misc.imread(file_path + file_name, mode='RGB') + + +def load_images(img_list, file_path): + imgs = [] + n_threads = 32 + for idx in range(0, len(img_list), n_threads): + cur_imgs_list = img_list[idx : idx + n_threads] + cur_imgs = tl.prepro.threading_data(cur_imgs_list, fn = read_images, file_path = file_path) + # print(cur_imgs.shape) + imgs.extend(cur_imgs) + #print('read %d from %s' % (len(imgs), file_path)) + return imgs + +def crop_scale_images(x, is_random=True): + x = tl.prepro.crop(x, wrg=384, hrg=384, is_random=is_random) + x = x / (255. / 2.) + x = x - 1. + return x + +def downsample_scale_images(x): + x = tl.prepro.imresize(x, size=[96, 96], interp='bicubic', mode=None) + x = x / (255. / 2.) + x = x - 1. + return x + + + +BATCH_SIZE=16 +train_hr_filepath = 'DIV2K_train_HR/' + + +train_hr_image = tf.placeholder('float32', [BATCH_SIZE, 384, 384, 3], name='train_hr_images') +hr_imgs_vgg_loss = tf.image.resize_images(train_hr_image, size=[224, 224]) + + + + + +train_hr_img_list = sorted(tl.files.load_file_list(path=train_hr_filepath, regx='.*.png', printable=False)) +sample_imgs = load_images(train_hr_img_list[0: BATCH_SIZE], train_hr_filepath) +sample_imgs_hr = tl.prepro.threading_data(sample_imgs, fn=crop_scale_images, is_random=False) +print('sample HR sub-image:',sample_imgs_hr.shape, sample_imgs_hr.min(), sample_imgs_hr.max()) + + +sess = tf.Session() +tl.layers.initialize_global_variables(sess) +resized_imgae = sess.run(hr_imgs_vgg_loss, {train_hr_image: sample_imgs_hr}) +print(resized_imgae.min(), resized_imgae.max()) \ No newline at end of file diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/src/test.py b/598MachLrngforSignalProcessng/Project/CS598Project/src/test.py new file mode 100644 index 0000000..c9fc90a --- /dev/null +++ b/598MachLrngforSignalProcessng/Project/CS598Project/src/test.py @@ -0,0 +1,94 @@ +import numpy as np +import scipy +import tensorflow as tf +import tensorlayer as tl +import matplotlib.pyplot as plt +from models import * + +pic_size = 128 +BATCH_SIZE = 9 +dim = 3 + +# ### read and load image function +def read_images(file_name, file_path): + return scipy.misc.imread(file_path + file_name, mode='RGB') + + +def load_images(img_list, file_path): + imgs = [] + n_threads = 32 + for idx in range(0, len(img_list), n_threads): + cur_imgs_list = img_list[idx : idx + n_threads] + cur_imgs = tl.prepro.threading_data(cur_imgs_list, fn = read_images, file_path = file_path) + # print(cur_imgs.shape) + imgs.extend(cur_imgs) + #print('read %d from %s' % (len(imgs), file_path)) + return imgs + +def crop_scale_images(x, is_random=True, size=pic_size): + x = tl.prepro.crop(x, wrg=size, hrg=size, is_random=is_random) + x = x / (255. / 2.) + x = x - 1. + return x + + + + + +def test(model): + # load test image file names + valid_lr_filepath = 'DIV2K_valid_LR_bicubic/X4/' + valid_hr_filepath = 'DIV2K_valid_HR/' + + #valid_lr_filepath = '/home/tdong/Downloads/load/' + + test_save_dir = '/home/tdong/Desktop/learn/project/samples/test' + + test_lr_img_list = sorted(tl.files.load_file_list(path=valid_lr_filepath, regx='.*.png', printable=False)) + test_hr_img_list = sorted(tl.files.load_file_list(path=valid_hr_filepath, regx='.*.png', printable=False)) + + #============================ define generator graph ============================ + test_lr_image = tf.placeholder('float32', [BATCH_SIZE, pic_size, pic_size, 3], name='test_lr_images') + images_out = generator(test_lr_image, is_train=False, reuse=False) + + #============================ feed test imgaes and test =========================== + sess = tf.Session() + tl.layers.initialize_global_variables(sess) + + tl.files.load_and_assign_npz(sess=sess, name=model, network=images_out) + + + #random.shuffle(test_lr_img_list) + sample_test_imgs = load_images(test_lr_img_list[0:BATCH_SIZE], valid_lr_filepath) + sample_test_imgs = tl.prepro.threading_data(sample_test_imgs, fn=crop_scale_images, is_random=False) + + sample_test_imgs_gt = load_images(test_hr_img_list[0:BATCH_SIZE], valid_hr_filepath) + sample_test_imgs_gt = tl.prepro.threading_data(sample_test_imgs_gt, fn=crop_scale_images, is_random=False, size=4*pic_size) + + print('==========================================') + print('==========================================') + print('==========================================') + print('==========================================') + print(sample_test_imgs.shape) + generated_images = sess.run(images_out.outputs, {test_lr_image: sample_test_imgs}) + print("[*] save images") + + tl.vis.save_images(generated_images, [dim, dim], test_save_dir+'/generated_%d.png' % 0) + tl.vis.save_images(sample_test_imgs, [dim, dim], test_save_dir+'/input_%d.png' % 0) + tl.vis.save_images(sample_test_imgs_gt, [dim, dim], test_save_dir+'/real_%d.png' % 0) + #tl.vis.save_images(generated_images, [dim, dim], test_save_dir+'/test_lr_wecat.png') + #tl.vis.save_images(sample_test_imgs, [dim, dim], test_save_dir+'/lr_wecat.png') + + + +if __name__ == '__main__': + device_name = "gpu" + if device_name == "gpu": + device_name = "/gpu:0" + else: + device_name = "/cpu:0" + + + model = '/home/tdong/Desktop/learn/project/saved_models/G/g_train_200.npz' + with tf.device(device_name): + test(model) diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/super_resolution.pdf b/598MachLrngforSignalProcessng/Project/CS598Project/super_resolution.pdf new file mode 100644 index 0000000..1e3a140 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/CS598Project/super_resolution.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/CS598Project/super_resolution_GAN.pdf b/598MachLrngforSignalProcessng/Project/CS598Project/super_resolution_GAN.pdf new file mode 100644 index 0000000..c2f7617 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/CS598Project/super_resolution_GAN.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/cs231n_2017_lecture9.pdf b/598MachLrngforSignalProcessng/Project/cs231n_2017_lecture9.pdf new file mode 100644 index 0000000..422f7b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/cs231n_2017_lecture9.pdf differ diff --git a/598MachLrngforSignalProcessng/Project/images/GAN300-1.png b/598MachLrngforSignalProcessng/Project/images/GAN300-1.png new file mode 100644 index 0000000..5296094 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/GAN300-1.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/GAN300-2.png b/598MachLrngforSignalProcessng/Project/images/GAN300-2.png new file mode 100644 index 0000000..a69a76b Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/GAN300-2.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/GAN630-1.png b/598MachLrngforSignalProcessng/Project/images/GAN630-1.png new file mode 100644 index 0000000..97b8674 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/GAN630-1.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/GAN630-2.png b/598MachLrngforSignalProcessng/Project/images/GAN630-2.png new file mode 100644 index 0000000..130c0d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/GAN630-2.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/GT1.png b/598MachLrngforSignalProcessng/Project/images/GT1.png new file mode 100644 index 0000000..4f77c81 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/GT1.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/GT2.png b/598MachLrngforSignalProcessng/Project/images/GT2.png new file mode 100644 index 0000000..382e441 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/GT2.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/IN1.png b/598MachLrngforSignalProcessng/Project/images/IN1.png new file mode 100644 index 0000000..5295d9c Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/IN1.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/IN2.png b/598MachLrngforSignalProcessng/Project/images/IN2.png new file mode 100644 index 0000000..18f1f79 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/IN2.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/MSE1.png b/598MachLrngforSignalProcessng/Project/images/MSE1.png new file mode 100644 index 0000000..d01de3c Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/MSE1.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/MSE2.png b/598MachLrngforSignalProcessng/Project/images/MSE2.png new file mode 100644 index 0000000..34dea7f Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/MSE2.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/gan_300.png b/598MachLrngforSignalProcessng/Project/images/gan_300.png new file mode 100644 index 0000000..647e120 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/gan_300.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/gan_630.png b/598MachLrngforSignalProcessng/Project/images/gan_630.png new file mode 100644 index 0000000..8a3b950 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/gan_630.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/input_300.png b/598MachLrngforSignalProcessng/Project/images/input_300.png new file mode 100644 index 0000000..99b5d44 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/input_300.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/mse_300.png b/598MachLrngforSignalProcessng/Project/images/mse_300.png new file mode 100644 index 0000000..8a28e24 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/mse_300.png differ diff --git a/598MachLrngforSignalProcessng/Project/images/real_300.png b/598MachLrngforSignalProcessng/Project/images/real_300.png new file mode 100644 index 0000000..ddbd356 Binary files /dev/null and b/598MachLrngforSignalProcessng/Project/images/real_300.png differ diff --git a/598MachLrngforSignalProcessng/Slide/Hasegawa-Johnson Guest Lecture (Speech).pdf b/598MachLrngforSignalProcessng/Slide/Hasegawa-Johnson Guest Lecture (Speech).pdf new file mode 100644 index 0000000..6974728 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Hasegawa-Johnson Guest Lecture (Speech).pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 1 - Intro, Linear Algebra.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 1 - Intro, Linear Algebra.pdf new file mode 100644 index 0000000..f61b75d Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 1 - Intro, Linear Algebra.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 10 - Nonlinear classifiers.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 10 - Nonlinear classifiers.pdf new file mode 100644 index 0000000..0db862f Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 10 - Nonlinear classifiers.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 11 - Classification bits and pieces.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 11 - Classification bits and pieces.pdf new file mode 100644 index 0000000..40af5eb Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 11 - Classification bits and pieces.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 12 - K-means, GMMs, EM.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 12 - K-means, GMMs, EM.pdf new file mode 100644 index 0000000..452a702 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 12 - K-means, GMMs, EM.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 13 - Time series, HMMs, DTW.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 13 - Time series, HMMs, DTW.pdf new file mode 100644 index 0000000..df77c06 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 13 - Time series, HMMs, DTW.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 14 - Missing data and tracking.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 14 - Missing data and tracking.pdf new file mode 100644 index 0000000..1101e37 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 14 - Missing data and tracking.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 15 - Arrays and source separation.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 15 - Arrays and source separation.pdf new file mode 100644 index 0000000..3127d81 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 15 - Arrays and source separation.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 16 - Underconstrained signal separation.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 16 - Underconstrained signal separation.pdf new file mode 100644 index 0000000..7f0e9e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 16 - Underconstrained signal separation.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 17 - Matrix Factorizations and beyond.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 17 - Matrix Factorizations and beyond.pdf new file mode 100644 index 0000000..6268513 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 17 - Matrix Factorizations and beyond.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 18 - Compressive Sensing.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 18 - Compressive Sensing.pdf new file mode 100644 index 0000000..1c39914 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 18 - Compressive Sensing.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 19 - Deep learning.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 19 - Deep learning.pdf new file mode 100644 index 0000000..553fd93 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 19 - Deep learning.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 2 - Probability, Statistics, PE.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 2 - Probability, Statistics, PE.pdf new file mode 100644 index 0000000..6347f35 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 2 - Probability, Statistics, PE.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 20:21 -Latent Variable Models.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 20:21 -Latent Variable Models.pdf new file mode 100644 index 0000000..206deeb Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 20:21 -Latent Variable Models.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 22 - Machine Listening and MIR.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 22 - Machine Listening and MIR.pdf new file mode 100644 index 0000000..6558088 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 22 - Machine Listening and MIR.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 23 - Implicit Generative Models.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 23 - Implicit Generative Models.pdf new file mode 100644 index 0000000..a8075e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 23 - Implicit Generative Models.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 3 - Time Series.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 3 - Time Series.pdf new file mode 100644 index 0000000..e758db3 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 3 - Time Series.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 4 - Perception and Fixed Features.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 4 - Perception and Fixed Features.pdf new file mode 100644 index 0000000..61b88e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 4 - Perception and Fixed Features.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 5 - PCA.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 5 - PCA.pdf new file mode 100644 index 0000000..67266de Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 5 - PCA.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 6 - ICA-NMF.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 6 - ICA-NMF.pdf new file mode 100644 index 0000000..3d35c68 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 6 - ICA-NMF.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 7 - Non-linear Dim Red.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 7 - Non-linear Dim Red.pdf new file mode 100644 index 0000000..c538aa7 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 7 - Non-linear Dim Red.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 8 - Detection and matched filters.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 8 - Detection and matched filters.pdf new file mode 100644 index 0000000..6e3b637 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 8 - Detection and matched filters.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Lecture 9 - Decision theory and simple classifiers.pdf b/598MachLrngforSignalProcessng/Slide/Lecture 9 - Decision theory and simple classifiers.pdf new file mode 100644 index 0000000..294ae62 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Lecture 9 - Decision theory and simple classifiers.pdf differ diff --git a/598MachLrngforSignalProcessng/Slide/Schwing Guest Lecture (GANs:Vision).pdf b/598MachLrngforSignalProcessng/Slide/Schwing Guest Lecture (GANs:Vision).pdf new file mode 100644 index 0000000..8a50644 Binary files /dev/null and b/598MachLrngforSignalProcessng/Slide/Schwing Guest Lecture (GANs:Vision).pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework1/Problem set 1-2017.pdf b/598MachLrngforSignalProcessng/homework/homework1/Problem set 1-2017.pdf new file mode 100644 index 0000000..416487b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework1/Problem set 1-2017.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework1/Problem set 1-solutions.pdf b/598MachLrngforSignalProcessng/homework/homework1/Problem set 1-solutions.pdf new file mode 100644 index 0000000..cfbea6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework1/Problem set 1-solutions.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/haow4.pdf b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/haow4.pdf new file mode 100644 index 0000000..4e97503 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/haow4.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/hw1.py b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/hw1.py new file mode 100644 index 0000000..a1caf2e --- /dev/null +++ b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/hw1.py @@ -0,0 +1,74 @@ +import matplotlib.pyplot as plt +import librosa +import numpy as np +import librosa.display +import numpy as np +import math +import matplotlib.pyplot as plt + +#compute the dot product of fourier matrix and hanning matrix +def f_dot_h(N): + f = np.exp(-2j * np.pi / N) + col = np.vander([f], N, True) + F = np.vander(col.flatten(), N, True) / np.sqrt(N) + hann = np.hanning(N) + H = np.diag(hann) + FH = np.dot(F,H) + return FH + +#get matrix A, k is the number of Fourier and hanning matrix (rounded up) +def matrix_A(FH,num_sample): + k = int(math.ceil((num_sample-1024+512.0)/512.0)) + W = np.zeros((1024*k, 512+512*k)) + idx = 0 + for i in range(k): + for j in range(1024): + W[i*1024+j, idx:idx+1024] = FH[j] + idx += 512 + Z = np.ones(num_sample) + Z = np.diag(Z) + padding = np.zeros((512+512*k-num_sample,num_sample)) + Z = np.concatenate((Z, padding), axis=0) + A = np.dot(W,Z) + result = A.real + return result + + +def main(): + y, sr = librosa.load('myvoics.wav') + y = y[:15000] + plt.figure(figsize=(12, 8)) + num_sample = len(y) + FH = f_dot_h(1024) + A = matrix_A(FH,num_sample) + D_vec = np.dot(A,y) + + #reshape the vector to matrix + k = int(math.ceil((num_sample-1024+512.0)/512.0)) + D_short = D_vec.reshape(k, 1024) + D_short = np.transpose(D_short) + + #use librosa library to convert the amplitude to DB + D = librosa.amplitude_to_db(D_short, ref=np.max) + + #use the lower half of the matrix + D = D[:512, :] + + f = plt.figure() + #scale the x-axis from index to time + plt.subplot(2, 1, 1) + librosa.display.specshow(D, x_axis='time', y_axis='linear') + plt.colorbar() + plt.title('Linear-frequency power spectrogram') + + plt.subplot(2, 1, 2) + librosa.display.specshow(D, x_axis='time',y_axis='log') + plt.colorbar() + plt.title('Log-frequency power spectrogram') + + plt.tight_layout() + plt.show() + f.savefig("plot1.pdf") + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/lyr.pdf b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/lyr.pdf new file mode 100644 index 0000000..5dd89c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/lyr.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/p3.ipynb b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/p3.ipynb new file mode 100644 index 0000000..c6b53c5 --- /dev/null +++ b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/p3.ipynb @@ -0,0 +1,269 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import math\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def h(n):\n", + " return 0.5*(1-math.cos(2*math.pi*n/1023.0))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "row = np.zeros((1,1024))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0. 0. 0. ..., 0. 0. 0.]]\n" + ] + } + ], + "source": [ + "print(row)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for i in range(1024):\n", + " row[0,i] = h(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]]\n", + "1024\n" + ] + } + ], + "source": [ + "print(row)\n", + "print(len(row[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(row[0])\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]\n", + " [ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]\n", + " [ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]\n", + " ..., \n", + " [ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]\n", + " [ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]\n", + " [ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 3.77227207e-05\n", + " 9.43076912e-06 0.00000000e+00]]\n" + ] + } + ], + "source": [ + "block = np.tile(row[0], (1024, 1))\n", + "print(block)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]\n", + " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]\n", + " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]\n", + " ..., \n", + " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]\n", + " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]\n", + " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]]\n" + ] + } + ], + "source": [ + "img = np.zeros((1024*3, 512+512*3))\n", + "#print(img)\n", + "img[0, 0:0+1024] = row[0]\n", + "print(img)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "idx = 0\n", + "for i in range(3):\n", + " for j in range(1024):\n", + " img[i*1024+j, idx:idx+1024] = row[0]\n", + " idx += 512" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(img)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.00000000e+00 9.43076912e-06 3.77227207e-05 ..., 0.00000000e+00\n", + " 0.00000000e+00 0.00000000e+00]\n" + ] + } + ], + "source": [ + "a = np.zeros(2000)\n", + "a[0:1024] = row[0]\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/plot.png b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/plot.png new file mode 100644 index 0000000..fbfaf91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/plot.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/plot3.pdf b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/plot3.pdf new file mode 100644 index 0000000..b186053 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework1/cs598ps_ps1/plot3.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework2/Problem set 2-2017.pdf b/598MachLrngforSignalProcessng/homework/homework2/Problem set 2-2017.pdf new file mode 100644 index 0000000..9bd599b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework2/Problem set 2-2017.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework2/ProblemSet2.pdf b/598MachLrngforSignalProcessng/homework/homework2/ProblemSet2.pdf new file mode 100644 index 0000000..2715139 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework2/ProblemSet2.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/.ipynb_checkpoints/homework2-checkpoint.ipynb b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/.ipynb_checkpoints/homework2-checkpoint.ipynb new file mode 100644 index 0000000..aee258d --- /dev/null +++ b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/.ipynb_checkpoints/homework2-checkpoint.ipynb @@ -0,0 +1,605 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import scipy\n", + "import matplotlib\n", + "from scipy.io import wavfile\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.offsetbox import AnnotationBbox, OffsetImage\n", + "\n", + "from scipy import signal\n", + "from sklearn import manifold\n", + "from sklearn.decomposition import PCA\n", + "from sklearn.decomposition import FastICA\n", + "from sklearn.decomposition import NMF\n", + "\n", + "# PCA credit to http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html\n", + "# ICA credit to http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.FastICA.html\n", + "# NMF credit to http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 1" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQPu/tXhElklAMEgAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rate, data = wavfile.read('vl1.wav')\n", + "spec, freqs, t, im = plt.specgram(data, NFFT=1024, Fs=1.0, noverlap=768,window=np.hamming(1024))\n", + "# plt.imshow(np.sqrt(np.abs(spec)),aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvW3Mbcl1JvSs2vuc9+N+dbfd7jhtaxKNPAhn0GQkywIG\nkCFAomGEM38sI4GMZMl/IjEIELH5g/hhyQgp4ld+GIGwBCG0BKNYEWLkWMkMgzIxzpCZwc4k7onj\n2E5/d9/P9z3n7L1r8aOq9q5dp/ZnrXPv7nv3I7X6vec979pVq9Zae9WqtVYRM2PFihUrVjy9UE96\nACtWrFix4rRYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2K\nFStWPOVYDf2KFStWPOVYDf2KFStWPOXIn/QAAGCrzvlC3XrSw1ixYsWK9xXuV2+/zcwvDn1vEYb+\nQt3Cv3Tnbz7pYaxYsWLF+wp/593/7gdjvjcqdENEf0pE/4SI/oCIvm0/e4GIvkFE37P/f977/peI\n6FUi+iMi+vl5U1ixYsWKFRKYEqP/15n5Z5n5E/bfXwTwTWb+GIBv2n+DiD4O4LMAfgbALwD4VSLK\nBMe8YsWKFSsmIOUw9tMAvmZ//hqAX/Q+/3Vm3jPz9wG8CuCTCc9ZsWLFihUJGGvoGcBvEdHvE9EX\n7GcvMfNr9ufXAbxkf34ZwA+9v/2R/WzFihUrVjwBjD2M/VeY+cdE9CEA3yCif+r/kpmZiCY1trcv\njC8AwLm6OeVPV6xYsWLFBIzy6Jn5x/b/bwL42zChmDeI6MMAYP//pv36jwF81Pvzj9jPQppfZeZP\nMPMntnQ+fwYrVqxYsaIXg4aeiG4Q0S33M4B/G8D/B+DrAD5nv/Y5AL9hf/46gM8S0RkR/TSAjwH4\nlvTAV6xYsWLFOIwJ3bwE4G8Tkfv+rzHz/0lE/w+AV4jo8wB+AOAzAMDM3yGiVwB8F0AJ4JeYuTrJ\n6FesWLFixSAGDT0z/wmAvxL5/B0AP9fxN18G8OXk0a1YsWLFimSsvW5WrFix4inHauhXrFix4inH\nauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhX\nrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhToMj8J0nvWYE07541\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "spectrum = np.sqrt(np.abs(spec))\n", + "matrix = spectrum - spectrum.mean(axis=1).reshape(-1, 1)\n", + "matrix_data = matrix.T\n", + "u,s,v = np.linalg.svd(matrix_data)\n", + "W = (v.T)[:,0:3]\n", + "S = np.identity(3)\n", + "np.fill_diagonal(S, [s[0],s[1],s[2]])\n", + "H = np.dot(u[:,0:3],S)\n", + "X_pca = np.dot(W,H.T)\n", + "\n", + "plt.plot(-W[:,0],[x for x in range(513)])\n", + "plt.plot(-W[:,1],[x for x in range(513)])\n", + "plt.plot(W[:,2],[x for x in range(513)])\n", + "plt.title('Columns of W')\n", + "plt.show()\n", + "\n", + "plt.plot(H)\n", + "plt.title('Rows of H')\n", + "plt.show()\n", + "\n", + "plt.imshow(X_pca,aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using sklearn PCA func to make sure resultsare correct" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pca = PCA()\n", + "X_transformed = pca.fit_transform(matrix_data)\n", + "k=0\n", + "\n", + "for eigenvector in pca.components_: \n", + " plt.plot(eigenvector,[x for x in range(513)])\n", + " k = k+1\n", + " if k >= 3:\n", + " break\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# ICA" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvW3Mbcl1JvSs2vuc9+N+dbfd7jhtaxKNPAhn0GQkywIG\nkCFAomGEM38sI4GMZMl/IjEIELH5g/hhyQgp4ld+GIGwBCG0BKNYEWLkWMkMgzIxzpCZwc4k7onj\n2E5/d9/P9z3n7L1r8aOq9q5dp/ZnrXPv7nv3I7X6vec979pVq9Zae9WqtVYRM2PFihUrVjy9UE96\nACtWrFix4rRYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2K\nFStWPOVYDf2KFStWPOVYDf2KFStWPOXIn/QAAGCrzvlC3XrSw1ixYsWK9xXuV2+/zcwvDn1vEYb+\nQt3Cv3Tnbz7pYaxYsWLF+wp/593/7gdjvjcqdENEf0pE/4SI/oCIvm0/e4GIvkFE37P/f977/peI\n6FUi+iMi+vl5U1ixYsWKFRKYEqP/15n5Z5n5E/bfXwTwTWb+GIBv2n+DiD4O4LMAfgbALwD4VSLK\nBMe8YsWKFSsmIOUw9tMAvmZ//hqAX/Q+/3Vm3jPz9wG8CuCTCc9ZsWLFihUJGGvoGcBvEdHvE9EX\n7GcvMfNr9ufXAbxkf34ZwA+9v/2R/WzFihUrVjwBjD2M/VeY+cdE9CEA3yCif+r/kpmZiCY1trcv\njC8AwLm6OeVPV6xYsWLFBIzy6Jn5x/b/bwL42zChmDeI6MMAYP//pv36jwF81Pvzj9jPQppfZeZP\nMPMntnQ+fwYrVqxYsaIXg4aeiG4Q0S33M4B/G8D/B+DrAD5nv/Y5AL9hf/46gM8S0RkR/TSAjwH4\nlvTAV6xYsWLFOIwJ3bwE4G8Tkfv+rzHz/0lE/w+AV4jo8wB+AOAzAMDM3yGiVwB8F0AJ4JeYuTrJ\n6FesWLFixSAGDT0z/wmAvxL5/B0AP9fxN18G8OXk0a1YsWLFimSsvW5WrFix4inHauhXrFix4inH\nauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhX\nrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhToMj8J0nvWYE07541\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ica = FastICA(n_components=3)\n", + "S_ = ica.fit_transform(W) # Reconstruct signals\n", + "A_ = ica.mixing_ # Get estimated mixing matrix\n", + "\n", + "W_pca_followedby_ica = np.linalg.pinv(np.dot(ica.components_,W.T))\n", + "H_ica = np.dot(H,ica.components_)\n", + "X_ica = np.dot(W,H.T)\n", + "\n", + "plt.plot(W_pca_followedby_ica[:,0],[x for x in range(513)])\n", + "plt.plot(W_pca_followedby_ica[:,1],[x for x in range(513)])\n", + "plt.plot(W_pca_followedby_ica[:,2],[x for x in range(513)])\n", + "plt.title('Columns of W')\n", + "plt.show()\n", + "\n", + "plt.plot(H_ica)\n", + "plt.title('Rows of H')\n", + "plt.show()\n", + "\n", + "plt.imshow(X_ica,aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NMF" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\niuIEVBYfka0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvWusJdl1HvatXed17+2+3dPz4nBmZMoKbYF0YCsRKCAS\nDElEQsYxTMU/CDpIwCAEmB8E5ABBItII4l8EGAQw8if6QSRBCDgOPZCskHCgCCRjwZGgh0VHsMVX\nOOJzXt3T09237/OcU7VXfuxH7apT71rVt/p2fUCj7z23zqpde6+1au2114OYGRMmTJgw4epCXfYA\nJkyYMGHCsJgU/YQJEyZccUyKfsKECROuOCZFP2HChAlXHJOinzBhwoQrjknRT5gwYcIVx6ToJ0yY\nMOGKY1L0EyZMmHDFMSn6CRMmTLjimF32AABgQUte4eCyhzFhwoQJjxWOcf8uMz9bd90oFP0KB/g5\n+uBlD2PChAkTHit8lX/jh02ua+S6IaIfENG/JqI/JaI/sZ/dIqKvENF37f9PBdd/hoheJaLvENGH\nuj3ChAkTJkyQQBsf/S8x819j5p+1v38awNeY+b0AvmZ/BxG9D8DHALwfwIcB/DoRRYJjnjBhwoQJ\nLdDnMPYjAL5gf/4CgF8JPv8iM6+Z+fsAXgXwgR73mTBhwoQJPdBU0TOArxLR14nok/az55n5Tfvz\nWwCetz+/CODHwXdfs59NmDBhwoRLQNPD2F9g5teJ6DkAXyGib4d/ZGYmolaF7e0L45MAsMJ+m69O\nmDBhwoQWaGTRM/Pr9v87AH4LxhVzm4heAAD7/x17+esAXg6+/pL9LE/z88z8s8z8s3Msuz/BhAkT\nJkyoRK2iJ6IDIrrufgbw7wH4MwBfBvBxe9nHAXzJ/vxlAB8joiUR/SSA9wL4Y+mBT5gwYcKEZmji\nunkewG8Rkbv+HzHz/0VE/wLAK0T0CQA/BPBRAGDmbxDRKwC+CSAG8ClmTgYZ/YQJEyZMqAWNoWfs\nId3iKWFqwoQJE9rhq/wbXw9C3ksx1bqZMGHChCuOSdFPmDBhwhXHpOgnTJgw4YpjUvQTJkyYcMUx\nKfoJEyZMuOKYFP2ECRMmXHFMin7ChAkTrjgmRT9hwoQJVxyTop8wYcKEK45J0U+YMGHCFcek6CdM\nmDDhimNS9BMmTJhwxTEp+gkTJky44pgU/YQJEyZccUyKfsKECROuOCZFP2HChAlXHJOinzBhwoQr\njknRT5gwYcIVx6ToJ0yYMOGKo0lz8AlFMM3SU/TtvRvSG0Ef38HxpD2vNCTn70laC2m5fUwwWfRd\n8YQwyISRY+LDdgjn6wmau0nRdwURQMLT5+jlrY4JE/KQ5pUnhfdCub3qzxpgct30ACkCa6fsdfqH\nLpYCqZQe65QJr6LVsfOStHN3FZ91IBTyCiDLe13pjRyicvuYYLwW/djftqSMgERR5nfzM2X/NSJH\nXuAySrADLf+9EYOiyPxTVDxvl40xjKEKIa/05Jcd3uvLf2OeO2G5lR/fMPcdr0U/9rcra4Ap+7v/\nuf3YWTNIabDmLK2O9B6L+QOyzzumMY9pLEVgOV55onhPWG7FMdAYxqnoHwO3BUURaGanLzHMw9qN\nt6WwEFkLV5lrkySlld9KN6FnaY52/kgBUQQiAhINTtwf9O61l/UMY+ZBIsN7eV4B0HoOQ95LUiVY\nyssN6NVec4loJbcODeRX7HkHkttxKnrmcW//YAUh0eWWlb+wwaIxg5PEEZazrMYK1kZBAbvPOqbn\nHNNYQjCDBXkPbF+2UvRGLLuN5RZovv5j5ZMA41T00owywFuSogg0nwFa71pCIfM0sXCcVTWfgZME\nhARA1N2qH7GgATA+0iKrquvuZSiMdVdElPIKcdYq7cB7sOclIe8ZUt14ecyolFvzg9lxtgmIGCuf\nBBinogfsZCf1110SKDLKiplB2IKZAO/rzJ1xO6apYAaaz4zyIwIDhlYEa3m0pyc6f8LbcYoiYD43\nrpvNBpwAFBUMt8lzDjA+Q1NVW3utaA1gaCzmwJbAcQxoVc8rQPEY7EuXoijDe+ZPHehZmqKyKzh/\nVXILAKyDCCTzwaNzR7lotAH03nijbkYOzi+67skEuqFSkVI+I8DOHPYjJkfrcUBbfquaH/e3J2AO\nq+TWWfXcV5ZHiPFa9I8BmBnQOmWenv4+ThJzXbBlLmW6RymU0vdi7V9sO3MXbp0nlIKZs+vifM6t\nCemUh7VOFV8dvcf4pbAjt6UXjvTsqAPGqehtnCtrKdeD/FaSFgvQ/p7Z9q3XZgsNpH5TB7+drggh\nJAVaLIC9FbDZmi2cO5y1B0cpnO++hp4iOV0p7bqZzUB7KzNON3daA3EM5x/2z9nUTQUtKoxpAtEI\n3YekoA72wdut4ZckMfPnjASHjCunmF8oikB7e8BiDmxmwGZj6XSjJy67lqbI+raRW6D47KhE3qT4\nj6IIzLK8DIxV0evEPKwUpK1DZujTM9Bm463vwsOw4PpK6AT67AxYrwEdROD0oMcseCgmHEmhN1vQ\n0bGlXTF3jaMe5K3/zBqMDTpBcv+BCK9wkkAfHwNRJMN7rMGx8HpIvTSYwefn4KZya79TT1dIMTOD\n421/OgVo7KMnooiI/l8i+qf291tE9BUi+q79/6ng2s8Q0atE9B0i+lDrUQ1RR0YYNJ8Z62Ax94dZ\n7p/PtvP/apSkjYumxcLQzWeNhv/s9XX0ROdPOJKCFJl5C+cu/6zuvpeWoThi/nOW6XyW8ksRrzje\nq5lDw8c53qvi5Vr+k64BJcgDUeTlFnXP6u79qHjQH8bKu4narMjfBfCt4PdPA/gaM78XwNfs7yCi\n9wH4GID3A/gwgF8noggtQYoAFY03XCtJgK3ZNvuYZpe8wjr3r4l/XgPbrfXTB7SALC2gOSNIMakw\n45lY5iQ7d/l5G+jerTBmZe94xfFLEa805Be2vOx4r5KXG9AzL50BQqQlEMgtgucrfVagGQ9KPu8A\neq8RJxPRSwD+AwD/U/DxRwB8wf78BQC/Enz+RWZeM/P3AbwK4AOtRuUyJ9VIlbyzqA72QatlapkW\nWEQubK1S6ZIyNPb2oJbLlNZ8ZqzfHYujAT07FqnnlQTNZ2be9vZSy8qNt4sFOQB8vPUYDQ1SoIN9\nwyuLRWb+ii3UOt5b2LVYGN4r4eUm/EdR5C3l0c1didzmLftW8weIGgRO5qXR1Ef/PwD4rwFcDz57\nnpnftD+/BeB5+/OLAP4wuO41+1lj0HwGdXgIihT47Bz6/ML4rsZy8s1s/XwuWiEXJVMUOVIZ3qbB\n9lCNi9LaW/pKKYpk50/aot/G0Lgwv4S+0i4+4SFABFotoa4dQB89hL5Yy/mJJcAafHrmecV8VJDw\n46+v472NsegDep5mWRRUCU2azaBu3jCXjE12A7kF4HeTQO5ZzQeZ71XTlTmToCiCunYAWizAF2vo\nszMzXoG5q1X0RPQ3Adxh5q8T0S8WXcPMTDtH1rV0PwngkwCwwn6W3mYDff+++dmFHPaFcNKKT6U2\nv+we6rRiFKvswjT0PI2mtABwvB33/HFBGN+YSj7Yw3Y+P5ebP0nkSyD4zzvwHmAMC6vM+9LT6zX4\n7jvm0hHOnajcSo8tSaCPHtphsKhx0cSi/3kAf4uI/gaAFYBDIvqHAG4T0QvM/CYRvQDgjr3+dQAv\nB99/yX6WATN/HsDnAeCQbu3MaOozGxejOISp1Jwgk1m3o7RqwwPJu1vSNHQgk50XXgvU+10l50/c\n36pMES3Az93OvI2gOJaZwxHyny2BkKbx9+A9oKAEAlJ66S+N6Y1ZdivlNsSjzIjN3HaYuat1LjHz\nZ5j5JWZ+D8wh6//NzP8xgC8D+Li97OMAvmR//jKAjxHRkoh+EsB7Afxxq1G52thSDyt9kk02amR/\nL/X3Od9mqa+vxk+6WoL296D2VqmvtI/fVXL+hEHzmZm3cO7mZZFLlxDlAYz3fAiwPvoDf8bRmPdK\nfOpqWcB7QTTU7jlRxRnRmHnPye3Bwa7cdjyTMHQFffQD8V2fOPrPAXiFiD4B4IcAPgoAzPwNInoF\nwDcBxAA+xdwy66SoZkcfNK2Z0pgeG5+6+9lFPyDwlYb3ttdVjY83G5/4Uug7LBhDJb0RuZR3kCTg\nc+Ojz8xdUex60zhmYYw6jp41+OwsE7VkPq441ymZR06SlPeq6OVplq2LtOxKwsvtWXO5td+rpivE\nf8yD7SJbKXpm/l0Av2t/fgfAB0uu+yyAz/Yc2/iRTxvP/K3b4jNzuaBdEbBmkNaAUv1rBD2pqFC0\nja/1f2YQc4b3Kuk+KsU3FKrk9rIx0NyNMzOWGaVNAMYCG2sskhnrIm0Ak53YI+LG/13Sry5NDzCW\nY9GBYv6+VwXSO0rLe70zWQFDB8k4eU8abeQWuDI8OE5FP2ZGcXB9J0nwMDaKwEhAYY3sotC2JvQk\nMcB65A9j3c87970igiZ+RmR5z9DueRhrffAh73l66S/N6I1ddqvkNkSLw+fHAeNU9GO3CmB9uIrk\nLHrW4G3cn5a7Zoj5k2J6tucQ7udC19cIhEtYOY/Wog+yYK+6RS8qt48RxqnopQvwD1D2luYzqOXS\n+DW32yA2lwoUV82BbFDrhpPEVHHUDCAqUIQNfKVDNDAgJRbXS7M5aLU0vwRzlxkuIV2zOoHzSS4j\nrJjoaEnyH5HhvSQBYgpyEip4Dyh+FpcZO5uZSo7OrdGZ3kDNM4RotpLbkAeBCnkTWt8BG4+MU9EP\nAekJdNaUO8QCevmbfVZiWIMDKLewLiljVMqiR5IARLsHgF0Sp1xG4xXZZjdBo94FDaNkTKRXUl+P\n/irwX4ncFqLN8468I95I46AGwoi3lLUYeyRDF0jmSYwdQ4yxaVeythgbr132+l4B42GcFv0AUTek\nSPaFy9o2zBgg6qZ3TfCB5k+oEQdrBrax+6V87loI2BDrKwlSBGapHRHL8R5gY+dZzuc/wItCjP/a\nyC3QeL1E1nfAaMNxKnphX5Wv4kgst72yda1NGnoi4qPHfG5oZQ6LujRnHuCMg5QpVSCgrFw9egDp\n3OWftUUKelqLXXB9pfz+LkIGACA1NlOF0SQ4BZ2ROvGeKb2BKMoUNKulV0NT8q3r11di/gK55Tiu\nnruGsiamXyYffQ8QmVA+5Yo2CdHV7NutVfroGx4oMjMo9JPuWLeXV/SLVFpbxURnCDCiHb+Ij94p\nKwCibdiEmCXDf7Z1XW9ovcMrlT71MlgfPYiyrqAx+ejd+ioCb3qubyC3Hj3XeRD9Iowrr+gpiqCe\neRp8sAe6dwR9/76IsHGSAOuGAtbA1cLbuDgdewTbZ7W/D7zrWdA2Bu7cNW0PewgbJ4npTYqaZ22k\n5MmUxX3qEOr4FMnde+DtpvPYPFkhVwHN5lDPPgPeW4LeuY/k/lH/6CWXyl+njO21teTiOJO8Zp69\nhztNOsLoxnXg6aegTs6Q3H0HvF53JtdKboH63WQUQT19C7y/At0/gn5w1F+/DBBU8BicYgmhKr27\nK+z23hV+6keqpP3fZR9EOTCn//oibNVWeV3DOR1ppcQMXITMAKjkvZYBCDu0xsR/UgieSaSImNsh\nMO++PEaCK2/Rc5IgefuuyfzbbMS2ztlyp8Ya8pZQPq62STZhWCqWKrbjTegJQ5+dgV5/C9oVwJLw\n0UcKgMqW2e1i6DJDHx2Dzs6ht7FYc+XSYnJt6cRbJHfeBhHZQ0ABt1dBmeJS3rPXV65ZwHvOFZSx\n6kOaTc5NJP3Mwusbym3h3Pn7NsuM5SRBcu8+6P4DufUdQLbHq+gFK8K5Q6tHVpGwy9g1F6S0j8M6\nMD1FY7FGEqwZeTuqz7P6PruSlf+k+Q8Q5z8OnlUsw7Pw+21dkbI750HWt/Rmut0uRnJ9n7ioG5g3\nr5T1nQqBVNy2sUhpMTcKOo69NWRqZ0S7vucay4DmM0NvG/swS4qAysibR2VVIRU2CZCLfAD83BHx\n7nCbPKe/VNg1J5htO0QzCVrMgSSyLQDJ7wJbR2mR8vXYsSX4KzwvAxl+bkDP/E34pSaxvmVyCwS7\n6MjeL2j6U7OLEdMvA0bdjMQBl8MQfkFp/7wyDcxhmyATkQmLzPntMz7AqsYFgfuGosjQst8tPQOo\n8L8O0sBASlEpysyd+4yC57U/2P+b+uoFFenIG48YXjHRHiHv7fBdA1kKG3pTAS8bMrR7jlSyLoPN\nncT6FsgtFTVkaTF/ZmxCRpBq0GinA8Zp0RdZJj3piW752IZobWNfuiBsEt66DIIbn3WPeF+p/3NL\nelXf6QrJF6VmG8NMmdoqnPu/aWjqEDFtojsEcf4zuRu8jdMzIvt5lxBL00LQ/O/dQWW8XBdiKS27\n+Xv2osM+78WUyc7KrblVTdRR2fiE1ncUjUcmpOBEm+Jj7ue8X72lX9P794LY6H7ZtoLKj1nWymBt\nXA5KZeaut39ZEmMNiLbgzbZ5NzKg0sjgOAY423HJ0wuua0Sv6NoRgRMN2O5wZd20duaxYZhvb159\nEn30Y2YWAGZ8Wjc7EGvCAPYw1iUQ9S6pMOK6Ps5qIT2uQ+fHCrqAV8pQxy8uEKBoFzmml68E2sjt\nFcJ4Ff3Iq8H5VGpmY50mKD88rUtDh82um89B9gS/8+EaMEAJBNmXhimBYA5jCWm4XGa4DcPb0uuF\nlc8Apa0l4UsgAEEaf4eD+6AEAqnUbVgbCABU0hSXXan1bSO3bXhQJL9kKoEwPtiYcu+j75PhyQxO\nNAhbv53s33xE2HUjCNbsM2MzhbQusczDDkY8fwCKea+t28Z+h7cxKHAD9S70Jf2ClJy/NnIrfe86\nPJGum7EjiowFrnW9VVXXwMLV45nPjVW1jatbnDWxMEa8IyJli7gB5lDWN1ixVrSzphsWNRtokHIK\na4gEtya7P6ARv3jeQ93OtBk9+aY3gvPXRm4fNQ8+ceGVE8aHgXz+O6FtY0m5f5KgVPb/CVcOo13Z\noeJJReDibyPlY49RFztc9ywuHjqMYbZx0Vk6zWLLRedPvNm4jf+OolS55BV8W4U/wDnCmF86FNlY\nevfcRbyS+UJ1DkeG94KY/C70xiy7VXJbmYPwiJ7nyYqjd5Ds2ykJ61NHmxC3uvDKrQvVTHarWHb1\nHUrNn7SPPklA261NGw/8wn18pAOcI5h4agliQ/jot5naNEBH3qsLrwxdaQ3pAdFoZbdSbjMXtgyv\nlMQAczdORW/TssG2fO/YGKY2lTp9I6fCUu3r8yUQXFp7oruXQHDzl2jr7us5f8J+yiFKIEj7wclm\nnorU9xnAR0/LpcnjsCUQwvIbQM5IaFECwffxBUBIPD1fBqGGHkWRLO95wgJz6OR2uTQvtMISCAZt\nSiCIKeZA77n6XFJ8M0pFrxamhjfmM/DxKfj0FPr8vPtDS78kmKE3W1BRRmLHuHfebMxLLbRuiw4E\nGzzL2OePkwT6/GLXmhpL1A0R1OE10I1D0N170Gdncg1DJMAMfXKa5TugI+9p8HpdXN++Az1aLqGe\nfRpQCvzwGHxyCr1e91tLqbyQtnLr7l1LV6j8QRRBPXUT2FsBZ+fQxydGTgQqYo5S0evNFnznba/4\nRmdREUGtlqC9lU9Fp4J0aodsH86CcagItFymsdEu/AvY3UoTUvolz6Q3W/Bbd9JCZBLzV3G/1uTm\nM6i9FUDKlD12SjQf7tbgWQcBM/TDE+DhiUgTE3GoCOrwmimZEViled5rxC+kQHt7oNnMREBtbdZo\nAS/v0Cugqc8vwG/elpNdQPSsqZXcNpQ3qQgtjrdI7t4zLyBBax4YqaKHreUxWjiXEq13fJudWgk6\nPymQ1uHo6XcFk5ilIa5kk8RYkMDu3HW16oc4RxhrYTPW4It1Ma/krkt/LpkfV44irAHTl56UgZGh\nK0CrjdyaD5vdW/JZm2Q6d8A4FT3sxEsU8R8SzGltmp2/dVCyzAh7qPaq0f4oand3BGtb/kCp7NyN\nKROVtVw48xDrUKVoW96fmUE53qukW0dPmvcGcL2Wyq2/5hJ4kTk1doSfebzxY48DiIyyKiwh3LBd\nXo4euaQJYLwWZU+QoiB2OyzjPCJ2HNNYilAZLpnjvbpQXBtaGfJeId2G9MQhHt5bIbf+mktY/wGT\ns0bOzSOGorSOtxOQPnHvlNLbiaPvILyicDHWYvTSmuDh3Pm/ZX6/Ai+7AZ6hlFcyFzXgl3xOQ196\nY0dTuQWyPPi4Pq/FaF03olunIbbOrn8qUF8jpMH9TXxvw/oljQosjXf+XBy9+VmX17ppeu9BXCPj\nnT8AmXotALrzi6114ys6SuRwPAa1bgA0OwuTvn8VnrhaN1LhVI8AjUvFVhNJaT0hJXt9VFGVUhjp\nGcOlw81LWaOWTiRZlN7YIVbiuek1l4zJdTMiFLU0u/IYuy98jAjaL8qRfAJ5TwqPwdzVWvREtALw\nzwEs7fW/wcx/n4huAfjHAN4D4AcAPsrM9+13PgPgEwASAL/KzL/TalQqMunnUkkqA8TR02IB2luB\ntEl2ysbjZhe+URz9Ym5ouq1lWRw9gNr69tbfLzp/VfdrS24njt7S7xpHP8AhFkUuE1Qg9Eac/xTo\nYB9k4+hRFUdv/mA/KImjXy1NVvZmC2y3ZtrL4uhDekU0rb9bNMFMan3bym2rOHoZPqEoEo+hB5q5\nbtYAfpmZT4hoDuD3iOi3AfxtAF9j5s8R0acBfBrArxHR+wB8DMD7AbwbwFeJ6C8xt5iJshKpY4GL\nwXU1M+I4dbmUbQfr4t6TxAttox6gTULcpCDtSnP9Tu3Phf1J29YakT5HkOwZKw3WJg8h7C9cync1\n/OJ4b4Md3jP/teS/oWRXKo6+jdy2qu8jg0vrGcvGmXpif53bfwzgIwB+0X7+BQC/C+DX7OdfZOY1\ngO8T0asAPgDgDxqPauSHiQAyhzoSh6eusFSmEUcPeuKHOoJzaBqPbI3roWruLilZqnAsvWjJx4Hz\nZiPTWxgwL137wrjqvNdKbqXvXYcBD2MbvXqJKCKiPwVwB8BXmPmPADzPzG/aS94C8Lz9+UUAPw6+\n/pr9LE/zk0T0J0T0J1usOz9AIzwGPrQnDlc0R+CJx+Mqa1f8rKhR1I11u/w1IroJ4LeI6K/k/s7k\nW7U0AzN/HsDnAeCQbmW/O2CnFTGEFTbhKv1hd9vapAIjkYnrjSKA8lvngjoaTehJQ9DPTC6WGcjO\nXX65L6lypTiGOCOazayrBcXdyBzPNPFvu/Uo4r0QTSo5AvKyKzl/pXLLWWUfzt+j5K0xdJhi5gcA\n/hmADwO4TUQvAID9/4697HUALwdfe8l+drXgsjvDjMK6JJMKkFX2maSVkEbbhClJC2WoF0c+G/Oy\nE8My4xu5hafUDq9QPsu4Ke/55KvsOnTl5VGji9w+Kh4c8D5Nom6eBbBl5gdEtAfg3wXw3wH4MoCP\nA/ic/f9L9itfBvCPiOgfwBzGvhfAH7cZlGM83ghVXpQu5E8EtbcCXbtmrKqLtanAqF1Bp+A+2tZZ\nrzi9pygyURSrFXizBa3X6cm7O2xzYKqPpiBlo0aELAPH9EKWBi0WUNevAURm7pzP1BY6M/cyTG+e\ntUHUg/D6UhSZue4bPTLA7pSiCOrGIXjreEXv8p73PVPlHNJsDtrfAy2XKe+5WjAFvOzplfCz2Rko\nOd4D5Na3TG4B86zh+UQQhVPJg5KRMk5uB6h108R18wKALxBRBLMDeIWZ/ykR/QGAV4joEwB+COCj\nAMDM3yCiVwB8E0AM4FOtIm5gJtY0ApA5abfxYv1phWQTU/UPmjNMspP0xDr3/+44WLMpOTuL02YI\nJSFzu3QroimkIB194iIeSKXKROud+2QiXx71oZhUFcEBDtjYNrsxvGIVsstszfFefUKQNk1C4oD3\n7HpU0itZF9ZsGuaMFKVymzeo3PV10VeuEJnI4DTSRi+yaBJ1868A/EzB5+8A+GDJdz4L4LOdR+XK\n7EphiDC57RbYzAzz19UEr7u/rT/trbNcjezRhLgJgRMNspaUnztdIDBtysRKj3HkGcq83hgltd3W\nxLyj1sjgODa2kAvvLcjhyNB8lEaGNL2Gcmtum/us6nmlDJEBrHlgrCUQMHJBY1PSNU22CEqeVllR\nVQuYJMZPWmRJZWiMNLa7JXy8dl252MvEWOfaxb6HBoH/U8nLsgpJYlxMEvTGHkffRW4fIYYaw2gV\n/WiFzCHsBJXP6GwbD86u2fimvkBaQ3rieQiCB0UmaaVBLPNlRtKMnP8Kea9LLHhY1KwJ79XRq/pe\nH0hFv7SRW+DRuwyfqKJmwPjDK12Da2azHcxks+YtmiYlCxQwn4NU4ptlF9JqEuImfQAoHA1AyoYH\nKpXOXf5Zm4byDQWh9nBDwbedBOAjmzMH9RZ14b2kTGPwKMryXh09oJLmaGW3jdw+ah4cMKx8tI7c\nUTfdcKFZyv1vw9zsmCn3fyMoZZS9q5NtCFzNEDcbXZCZu/xzjeE5xzCGMthwSMeHtah6WTtDo6BY\nGiny/xphzHNWJbdW1jLP2jTEklT130eAUVr0NJuD5jOhkCUCzebgeCv3ViYFunEI3LoBxAnUyVma\nVm0LTbllp/yWuOCwhWZzqKdugq/tQ6034NNzc1hpt9Xk/InA7iFtUYibnT99fi7yzD65SaJQFRHU\nwR7wzC3z89kF+OIi7SPb4jkdPZrNLa/I7WDUYg5mBq970pQuMAezvnjXM1AXG/CZ5RV3qJoJEczx\nnguJDOZQLeZQz9wCr5ZQF2vw2YVp4WnpufUA8y4vF9Cj+QwURdBnZ0IPS3IF5urkNpg7cnVxQh4s\neN40vBK9x0d2t6Ev1uJtVEep6AGkDCaBIbbgSQJsY1CcgN2hjo2e2Rl7k4OeJAFtYyBOzCK7A6OW\nSt7dz4QryrzYxA+ININicwDoqy/qIKQvvXGD8MAGUU09xjlaOF5xIYLaHS4GkTdFfJEDMwPxLu95\nej4uX+/SK4Jm+AxbCUi7TMrk1smagw5dOjVnFnV/awNJvRdglIreWN+R3Em7dNlP1saSSjTYVhJs\nHF5ZFOIWb6GPT0DrjVF8uZC5tmGHnD9k6gvhAl/6/ALqwZH51ZXaBaoPxyrWL1OIS2qMYfJWT1rS\n4+MkAd7ggpJpAAAgAElEQVR5YNY5DBHsEA7J2xj64TFoNsvyXhN6BTSNrAnnDUjNXwu5NZc3CK8U\n1C+VndZ6YpwOtTH7+UJ4Xx6VNm5o5NsMnjdDJ/D1tz2zGPUZR5EPtAiXyAejnj+gvCG9AL3wjOhK\nooHcelyRORilRT9YLK4kXIq4rR+dT1ppVZPe+f2s66c2lrkBxhATXArtns9lYZqxdk6YGgCjnj8X\nRx+49Wp3f1XwvBy4Z8oSsBrsskY9d0VyW4DW7RSFwj+Hqkc/Tm3qok2kTrKHOBVXJkIGUeQtAxO5\nkBaY2rHEy8ZAKS1yVSyrogEa0BO3SCUtG0XZuYtM9MNOtJIvdtbA6hK2vETnT5r/SAGzmZ23IPIm\nxyu0UxyvZNeZ472QXnrLFvSG4D2p9S2S24LnKIy8eQQQ1XsBxmnRA3aCRxqLC6RZddYar7UMquAO\nTzU3s9L89yp2CIjkkkw8TSHkDpLdDobzlv0llkAAjNCJkB4irT3RuwfYRT7mzAclPMpsWuuxDD0A\nI+a9ZnI7yL2bYoBY+lEqelOvXIElItLIWCKi80YKtLcHunHdRCpcXIDs4Z0LSXMMRBHSQ8aS5BWK\nItD+Pmh/ZQ5kLy6sIOvqCoJlFQmdxSJ1iCVdvXK1NBUEiYDzc9DGHgC6rkmKGj2npyfZ3xWA6w8g\nEnUzRPVKRYb31htjiTs3jmst6K7zvOes0oJQ3CiCOtgHlgvPe17pBxFkzNyYHkVK9gBaiv+q5DZX\nvZLZFVasqRYrqV9srXyWCgQIME5FP5uZBWE26dl9LSLh3QEpAu3vQR/ug2INIgJbxWAWXYPCMDfN\nIGXPHYqUfRSB9lfQ1w9MHDKRydpjNmF0/jTehK65ZhNV9NTeClpzGgXRY/7cNlbEuCECLebgw4NU\nSOgCpJNsOB9pMBMISflzWnrGZaHljC9SJnsS6J9/IV0yGgCiCPrGAeh8DlLKlBdmbco8h9t+5jRz\nlgN+CYc3nwH7e9DXVqCzmQkVT7Sn5w0WuzZN6NFibiJbkqR/PLgvGd1/fb3c3jgAbZOs3MZxJteB\ntDsHoWxTofwgnNtVwNCgKAKtllAA9AaiZ1TjVPSLBfDu50ARIbp/Av3gCPr0rDPTDBHexscnUFqD\ntQav15lm15yzwHfCpvILlyTghycmWSqOoV1lQjf2lqVizfw9D5opRPeOoY8e9ps/0VBNBp9fgN55\nYH7dbE3Sinuppzdt5sJxh9jCB4DqxiH0MzcQvXYb+vgEvO7Y7pK17Ucg6MpIEqg798FxYngvX1oY\n2C3WVaIleRuDHx5DnV+At1vDe85IKeDlurhyWi7BLz8P0kB0/6GR3fOL7gpfMDx1R24d7wHNn7Uo\nN0FofDSfAc89A+wtMDs6BT84gj45FUm2G6WiT05OQa/+ANCMuK9VwAzIn20YBnGWRt84etewmLWv\nl90njl6fnoH+/IdAkiDW3N+qko6L3sag8wtAUTp3ukCgm8bRVyiyTtAJkttvA2/fhbYvoc5g63oS\n9NGzZvDFun3cexnvrTdpTfqe9PTxMfCdM8N7UvkrgmvbSm7z9y6LoxfiP31+Dvrha6neEzzbGaWi\n9+FjUgLMWtZPahNqqEgZF4239sCHjWW22e4q9jy9JgsvPX8AJLs4cZIYKw+onrum93LrK6hQOUlA\nLGiFS1r0OjElBvIvx068p8Hn52BbxK1vNUdOElspQPjwWWJ928qt/U49XSH9Eu5qhQ/wx6noHaQe\ndoBKhBRFaZPhJJFrDq61r+bo6YVjb1hNr6yuzhhAisw2FcjOXV5O2ipH4WcdbTx40BwcQJZXHBzP\nNOGXKt4L4Xi5ht5gvCdAr5XcAs14UEq/+LmVn7txxtE/DlCUxh83aTJcExtLTnhdDH1Ir2vT7BEK\nGoBs3gDlni//rE1jii8jDO4SkTb0LuG9pvziKom6stFl9BzNJvSU4O7FQWp928htyIMjr05Zh3Fa\n9D6casQWlWMW1mAd2ba0DGgTARLCW6pV1oETXGYTDaDgD9RMPLeLRmlmPYjFgA8BGz4LAKzTmkZU\nVP8caLAjkg3/NCRLxtKNmOyLiBQwNxEyJhLG+ZmzvGcqLja4d8h7Whvea0JP0h1VBbHwSiu385kJ\nSa2T20vY0YmHgluMUtGTy5yUKlM8wOTRcgk6vGa2uufnJgyyIJYZQOqzrIqj31uZkNLtdieO3scw\ne39iwzh6qdK40lmnsxnowIRX4uLCxINrnW2iAaTPWeP+ElXKQOpKQ9JfPw/QuIIUga4dmHDKi7VZ\n5yAcML11EAYJoDTufX/PRGptNsBapXH0222WXj6OvmBdvOwKlmWWBC2XZu4K5DZf+bMwjr4gvFcy\njl40/yXAKBW9O9CRObEPLWG5CeTzc/uDUNTN+cVu5EOP6pWiJXZZm1hwocNJ3mzBp6fpz0H1xU7V\nK/1uR8jCdC9siTl0UV+C1i9rBj88ybbFA7pH3Zydm5h5ieqVmr3fWxwCc9hUbs0l9bIrql8EQzXz\neLJ89NJ+Nta7CtUfZHGBgq5gUhsPXtsc/KpA556xaL4cGgi3dH2VYaJGhMDmwHQn7hsp37UqyqV1\nlvcCeuktG4YbYoC5g/D6FsntziUdnkFAvzxxzcElH5h9xqoUQdfM23RE4kykQrdQQRdWFaZi9wvZ\nHMBBL7Qr8nkDQGbuOj3nUBhk/gSt+jLeazuHbHeRLjEpLAPQYXc13oMhNJNbf23D54Wgfhkg58Lh\nibDod6ruiRGmNFJh96bt7ukqN1I61l5WjOTzCleHJOXmLTd3fe4hXcFSiha17Lnagm7x5+0jtFz1\nxpD3Cuk2pDeMrAmub5XchvdrSk5qbavmvydGa9GLYwhLo2SbOwqM2bIqQ58xj/V5L2NH0nIumDmN\nPhkrJNe3idxeBj8NlMUPjFXRu0JQEokDmbekYPPovRXoYB+sNcjVuuGggbJHZA98Kg5QSRl6q5XZ\nRrtaN67IV2Gtm4qtpZu/7UbmcV1tfKnpWyxA16+Zn4O5gytgF2ZpmpAl88WyqBvbvFxyfU0hLepf\nZ8RXr5RTHBRFUIfXwdutqfzpotP8Ibydj4xbojxCS107AM3n4O02bdCeoecQ7fJfUcQXKUgWcUt3\n5P3DKwvlFkgrgGaqpzbgwUyl057jU5Gc3sthnIreFYISeliKbNgSIKP82PQ9JStgYbd4oMTfV+PX\n1OcXpkFzkpT7Dlv4ScXDSWemqqbeoHftHN5sgOMT83P+TII1dgSmyWHsYg5sICMkLFdIC7D8p2bA\nZiNSoIqTBPrhMfIp88VdzeojtPj0zFRxdLzXkx5IVkmZaqJzICbwpsf6lsktkH1et/QN5Y2IgHmU\nnnd0hbDeC3H1ffS25CytlibtXirypm3Pzrb3LaLVNjNWCrZ8Kq2Wsr7mot6kHXyxNJ+ZsS3mYj5O\nOb+r5b/l0nc1EkXY61W4K1YlvUfIf359Z7P+6ztEL+D53OTBzIT0yxPVYUoIFEXAc09D39hHdPsB\n+HYsYtXzNi6PvTU/BB/WRcgEcdvWssgkAV1yNIq6fg380vOgTQz12ltIjo973Z914KYBynctQP19\nVAT11E0kzz2F6MEJ8OZt6AuhsrEC2cU0nwHvehb6YIXozbtI7r4jY9XbAnj+9x5zyHGcqXFTS68B\nTTEQpet7dAq88Vav9W0lt02GN5tDPfs09OE+1O174Lv3eumXJyoz1lkTIgk6YYSHIGg+M29wIFPL\nejcbEaj0p5svpXVunG+0lBasH7s641K6BAJHxb01u4CiyFjfMErGZ/3mn7VhES0TRQE5S0gw+oFc\nnRThvTOtlpksbMcrAMrnECg+z1ksfOhnI3rmgnJ6krzn+u1GBHay3Ieck9uce65S1swF5e4qRWDq\nP7Y0YorxRLQSNJMb9VfyMP5gfv0tqLciJOu16RgkBHNwkirmIkshO5jq56EoQiZTrw5NskUFoI+O\nob67TcsLS1hzViiIyPuFOyVM6QT67jtQD4+hNxvorg1C8vcr81G3hN5soV57E6QUEldDXgBEVrnk\nUDnmKj9zFLUf26NImArWl4XW18kthcmJHd9MHG/Bb96BuhMhOb/op19YA0ydx1KFcSp6yDILb7ZA\nlMjUznHQnPaHlUiYSjQQx6NMmHIJTpzb3vehR1vXq7N/wpRTUC7xRwKSvRD8+AQPeNnxSj4IoGzM\nZfPC2o+rccJUDT1pZNa3L+rk1t+0RcLUZgtWcRr91BXsmpjIu8XGqeilt3+swbGWEzQy9dRpb2UE\nbbNJi4/5LW/kLzeRCBUuCBtVQKslaBt7IU5dGqnllinyVUYPHS20CnAcizGhmbs980sQieKKv2WL\nlFVHeWTGJxkpo8hs4yW20AM0gaG9lQkJdFmeQREuh4yhUOFqUculqei4jdOM5QwvA46fa/nPya5w\nUTO/vn34r0RuAeycUQBRcx5kbSJ1eh/okJzLOodapxIRvUxE/4yIvklE3yCiv2s/v0VEXyGi79r/\nnwq+8xkiepWIvkNEHxIdcVvYCRttE4ki6NCaKDkguwyIOv3LabV9zkufl6aQttSEnnvUiVJ4PNZ3\n7GNsYtHHAP5LZv6XRHQdwNeJ6CsA/lMAX2PmzxHRpwF8GsCvEdH7AHwMwPsBvBvAV4noLzG3MI2K\nDkV6QHwRfPyyaYdX6G5Jb+6/UzFAYwGds0z9kqJx9IHwesBZosjNXZFF3lAJSa+xnOumolhbZ5oa\nfLFunnNhx1FKy+1Im+SDNKEnySuerMAcOrmldfpzX9eN5PoO6LqpXRFmfpOZ/6X9+RjAtwC8COAj\nAL5gL/sCgF+xP38EwBeZec3M3wfwKoAPSA+8FdgKwxCWi9bFlhXnt4LNwFwhaFcErDndtYgI8ADr\nK717kfZdV7kRhiglcZklJqTXlzm7axahOZB+EUIrHz0RvQfAzwD4IwDPM/Ob9k9vAXje/vwigD8M\nvvaa/awVxEO0JBnV+fqWS0PX+tXNn7I++sY+9dnMhLkFNcFDWjvWWk0lRPEOU4KM7BJgzC+046PP\n3HOAxh2NxhjZORdsKC8G66PHNk4P8AFbBz44G8r76EvPhxYm5DBXjz7vo2/q8x9td7PQR58kaRXL\nnfMIwD/vo+TBAX30jRU9EV0D8JsA/gtmfhjGVDMzE7XLeyaiTwL4JACssL/zd2nXg6y1ZxsLu/j5\nslTqgu+VIkls4kpQc6OIVkMJGvVuIEy1D+auU7mHgSB6eCoNZ1yE7hb/pw6uQxcsEPKe/W5rl8ZA\nrhsRHnByu43tcwZ1qbo8a3idaLTXJUXdENEcRsn/b8z8T+zHt4noBWZ+k4heAHDHfv46gJeDr79k\nP8uAmT8P4PMAcEi3sk82RNKFZAKCK3q1mIMSDdbaF53jBAW9J1WtVYX53CQRJcrUbLHWWd7SqGrj\nFtIbrVUFmJIKsxmgyLQPhN3BZCJGGjyng/SODcJRN9IgZXgvtvNCLh68qO9pwHtA4TzSbGbo+Q8a\n0AOK12Uo3pOo5V8lt0zdZA2wyXUyyv4yo24IwP8M4FvM/A+CP30ZwMftzx8H8KXg848R0ZKIfhLA\newH8catR5bPv+mIIjad1GpLFpsdmUfRCI8uQtff1s+sVC2Ss+sKuQY8wllkUbk7sQayzIls/p8PY\nn3cIJPZsKOwKlYvQatrhzOxKdWrlFtBzNJvQGzXK5LY06OFq8FYTi/7nAfwnAP41Ef2p/ezvAfgc\ngFeI6BMAfgjgowDAzN8golcAfBMmYudTrSJuQgi+KUXBNulivZaLktlsU6VX1Tu1IT0AgIpktpXM\nooWWOElM1Ajg567rvA2FNJ7/Um5fDdbg9Vomuc5F3TjfvAA9IJLjPUnUya35ofB71XSFmWQAvVer\n6Jn594DScvgfLPnOZwF8tse4IFJ/ekhEUVqN0G5zAeO2Ka2XUQGKrPvGKnm3ZTb1sAtqjdQSFJw/\n4Wp6pMiXjSak7q7SmiqXoCzEO0JJI4rM3AGA5ZcdXgEaub5Mmd2U9wB0p+erj45UdivltkTWHjEP\nDlHYbJyZsRaj9pM6a8qFV9ZZ9DXgRHtf9c7BUEeLQWz+pC16zaYmOMZr0QNIC2qNySp1cAexAuUy\nmBm0TXmvLz1gxLJbJbfmh90zn0e5/u5FQwxJq36Uit51vQFgtqhCDRtEUVl7voMF7irzuVC5TBmA\nlkOLIqiDPYCUzPwNYdEXfDYanUBkQg73VtAnp8a1MUZlD3il5PmFggNEf02Dl1XAe4ZsN3qjl926\nqqQD9WxtBNtpDvMZ+GJtaujEWxHeG6WiV9evI/7pn0CyP8PyrRPQ7bvQD466M8wQQsq6vLuPswra\n3D/YNhda887KaEBLXTtA8tN/AfH+HMvb45s/1pypLdIpHHVAUBRBves5XLznaaz+/A702+9An5/3\nG4/wzsBldZbyiv+swT01g7UtHFZHrwbq5g1sf/ol6LnC8vUj0J13kBw97N2VTAxt5BZoNn9CUV9q\nbwX9Uy9je2uFxd0zRLfvIbn/ACxQsXOUil4fH2P2rR9gJmmRSisNUsavDmRCKosFpcH9LT0XZujp\neAWfi0SqoKdPThF9+4eIpOav6TO0IRcpAMq4rFRJ7sEluU04SaDfuoPl0UMkUha98HPQfGZiwhG4\nbvK8AjS05k2vgcIQ15YKTD84wvzP7EvD8t5olDxQLbeFXd0azJ/QYaw+v0D05z/G8kfGok+cRS+A\nUSp61qa3o+kGI8AkQ8TRr5ag/T1zELYO6oxnEljqmym78am9FbC3Ms2eN5ucDzvr6qijJz9/sq4b\ntZiDrh0YobNzR3q332btvPnxycfR8zYGb0/EGqyLghTo+jVQHPtorUxtdQfHexXNrSmKoPb3TWy5\n5T1fIiBDL+RloHRdWEOfncnxnn1ekfVtLLdAoewCpfIrpuzXa/DJaePde1OMUtEDEKvMB0BcCQAA\ntltgM/MZrZmGIbl45tr7symhTOu1UexNs2Prsh1HGRtoD543W5MwFdRV7/Sc4XViA+x2oP5Isdka\nJeUOUYv4Lv3F/l9sFPBmA2Kd5T0g47PP0Kyht1tOoCckabWR2/y9q/JWRDJ3dTrnl1UC4ZGCXTf0\nkQobM/RmCypSxp3icNluc7f9adnviaahS0fdxFvoc/dLyfNe8uGn6SFwiQdzVdAJ9NmZTbALlHHH\nGPBC3utDT9pTI8V/0nIrDXbVK+X13jgVPUYWhVEAms+glktj/Wy35nARALgoWqbGMrU9Y2mxMIIb\nuwbGhrmz9FooQylGlY66mc3TombB3GXWu8LdUIgBzmBGCyLDe0kCxBTUpunCe2lRM1drqRG9Mpq+\n8Yjgegie1bSS25AHgeEVv7CchRitoh91US4gbUkGNMuwaxDLDNvibHTWhrBFD9ZGyJQSaSUIYLzx\n7gOBc7wCNHQT7hCSbyU4SFEzqfWtk1uHEe0uJTBiswWP/wT3tApHn53ZB7Y5OMb8jGN1HV4GLnuH\n87jrgiYY8BnHadGTsp3ahQ45Boq6UQf75mDR1R1xtUI0I60LHlmLqUHUzXJprPoL0wFnJ/IhY31U\n0zP11EdaAmE2Ax0cmLA+5x/WuxmJlxZ146ocskDvU6IB+E9BHV63dVvCvqe5yJEGUTIu6oaWC/B6\nkw0l3aFX38uXosgk6kmGVErVfqmQWwpLFgNoHHXj1ldifCqyvZ6fFB+9P4wVesMNEJXBm026/Ntt\ns7rWVdvdi7XxF+ZaunVu5zbi8w2OY+DszFj1bu6qDgIvIeqGpaKWOKcoJMAafHZuisO58xz3eUve\nY20DAVwvhLreCnX0ksSm7wtCan2t3LLNGWgst/a7ZTTFShVI670A41T0jwN0anFXtv9reKDI1qrI\n+10zNLJf6DP6dpD20TuaLpSv6lmbPqf0fIzcbeP96UX1WvxFDZ6BLc8Rldd/aUNvKEitr4tUqpPb\nIe5dB2aUlo/siXEq+iGsIGmwziRb9A2vRJL4SoT9Q+bGPX+mBELqbuh6gJ3Bk3QYy5xa8gKH9mZH\nxTK8V/a9vpBa3zK5tX/bvf5Rh1gOI7fjPIwdIsxoAJpURFPg0OpKH8JOEEEh7xVf2I5uHe8NGAL4\nqNB47toRlacpiHEq+sfEMttJOQdE3sijDy2VwJPwjAOiqJtZyYXt6Naty2Mim1UYSm7HjHEq+scJ\nk/XdDdO8TbhM5PnvssNHB8Y4ffRDhKRJg5RpqsxsG1y7KoLtO/yAKG2Y7WtduEOigtDBJvQk52+A\nevRkO0xl5i4/3Mv0uw8QsimZqex4JVuBsYT3gMp7U6RM16Ui3utAb9SyWyq3XFCiuIHsio5tOL03\nTkUPyPbrHCTOWoHmM78FdKyQYZzw3nXt3KLIlJ5VynSaStzXS1oTPmolKNnH0gmbhTuE3gnLa/qc\nvjmGsIBICd0A1TUzvMKUbSdYdN+yeSSj5Gk+M+vANgdEp+0sgUARNqEnDan1rZLbXCG2zPPWvdyG\n4j9BjFbRi/qpB4mz1sA2ho+5Lot7D75TSTJJgC1ZK60kNfsy07KlktcsrTQNPZt23ynyZij/qlj8\ntvz42PNezzR+WzGRgVydm+45HOLKXjKOvkRuzW26hUY/Dv790Sr6x8+iTwBEGYs+0w6wxiqotuiD\n3YEh/niHE5ZZ9MhVjLzs55TcRgs/Ay0WaR3/wKIHCnaTQGOLnuAOK1XGojd0L8mil0KF3FbuYJpY\n9CNX9qNU9DSb+w46ImnP0pUwSZnGGU/dAMUJcHZu6qtzWtObtFl4Akzd6zB1PJ82PpublPZr+1AX\nG/D5uWk8YgswOVpp3XHXzxOFljZZf7++EGz8AAi5MQhqbwV6+inz6/kF+OLCPOtmYxLHXOaii+uu\nqWRpyj2w6JmEWszBiUbvVH5bTkGybyrN5sAzTwW8EmRUJ4nPudntabA7hzSfQd28Ad5bpvTcd6zl\nCwDQ2ixDmMVcwH8URaBIyfEeBNe3TG6BtHKnuzRs5FIxf+n69lf0Xm43EO/KNUpFbxriSqUVFzS0\n6AudQB+fQG220G1SqcvSxuMt9IMj0Nk5dF1ae4PtM+cTQfpC0lph0/2K7t4zvwdz56so5u/bxO0l\nCTZ1y6VomZeV3M6E4y1w+249r9jPwrHs0NrG0PcfgI5n0EETmM704i04kbXqxda3rdzaz9Ofi/7O\nYuPzcjvA7mCc+yxnQY41CYFMj01EkflfKROupcypOSny//LfK4WnoSzNkmsbbo1Jkez8CW/JyW6j\n/XP3IqbkxycZ/jmEOyOKCnllh++a3NvR8Pyc0tzh5Tp6lv9FIbW+XeX2EWKoe4/SogdgF3Z8/U49\n2cXC9J5MEuDiwhykArZ+S9oMgiJku2UVWXakQMulacax3RpfaZKYAnpJYiICHFy97yrfoRMMFnIX\nSCvR+czMnaNd1Hw7U9e8gWUvHQpJyp6PCNACRH30FEVm/jZbQ9/VbgmscXLFU/P8knfzKQLtrUDz\necp7roZTeKFmQ7MBvUFebELrWyu37jriLA+WnRdJuob9C+0JCa80cdZKUE/J++gxnwGLORArIDH+\nS2gOlLTtDsUMYsoyTMH4MJsBy4WhkximYmbjBg0XXjsFVH4ARIFFNkpEETCfmzEmGuSKmyVFz1mv\nIM2ht3D8sSJgiAYaUljMrYs88QeoBAAUnOcA9nybypWzOxgPeY916r6x50OI3LlJjv8K6Enzntj6\nNpFbC1bI8mDDMOm+kNR7IUap6L3PSyJ22/noJePAdQJ99BA4OTW/1xVHqvMxxzH0/fvAw4ciharY\nHcipSOasw4XMCTG5Pj0zdc8BkaJmvr+rWOErBm9jmW20q0gotRYwz6vfvL1b3rnM6q24J8dbJO/c\nty+2BrzXgB5FkfjziqxvW7kF6u8nqV9c2LGkrrIYpaJ/LGCbewCwoZRBaFvbEEHnN4wigPRutmPb\nzNiRgxR5H2lm7rpmxg7gKhh9YTmlbBRMjlfMD9lr6+bRZiozEr8DyNBzqAutBIZx20jSbCO3wGMv\naw6jVPQuzMh0phcKr9Qst2AuRPBgH6xtpxobilbUqaZphylarcDbrfG9JsluhykgsLiq6SGKAB3L\nPLNr+CwVvbhYgK5fMz+7DlOATWTRfptcFUKaHZ78+pr5k5g758MVCBX2NBXUjUPDK+tNyif57maZ\nSJJifqEogrp2AJrPwdtt2u0rQ88hCiJMSugpkuW9EAK6oFBugdR9qHl3d1MV3iupX1xOAxLxJNtR\nKnq3VSNF5oBEwnUDiG7t9fkFyDZo7t0cnDX0qYnpDTNFO7tvbLYjAJlnzhyM9oe+WEO53IBw7rwS\nCTNl68c+xPpCyl0Qbu3Fkq809NHD4szOlrzCSQJ9cmos+qbNwavoaU6DB6StYYG1qJVbwLBf0yx0\nSf0Syq0wxnnaRMoXWjLujJFvo8eGINtRav4Gi6YQwhAhfRQJh21KF4cbqCZ9X3o++9S9KCVuOXZX\nmhSiaBC9N0qL3m3/yNXgEKAnu3U2TYZdmBZttpmuNcXb53rXDZZLUBybg0p7oGqsjuyC19Fz1SHF\nEk3I+NKlsvXUYm4yFEmZ7bO1sPJo3BzcXSu5vi7GX4AWALGDSUNTGddXHDd08wF1zcGxmBs+dqGu\nO/SixvQQRWZsgpBxjTSRW4fmzcElXTcURWa30Y/SDsap6BcLqGdumcO6kzPw8TH0et15IsWjbgBg\nuwXWypcp8Eo1t31umunGSQLabnwJhTD9OkPL/FBJi2YzqKdvAbMIfHwCPjntNX/SUTec6EzqeRj/\nXRsFUQIRN19KDHTtAHR4HXT3HvTZWa8SBj48UJL/1mtboGsbhFJmX8Q7/FKUyerKbATlOxrTKwAt\n5lDPPWMue3gMfXKavjx6QGx928it+SH9bt05Uc/xURRBPXUTWC7Ap2dGbs8vRAysUSp69fQt3Pt3\nXsT6JuHG97bY///eBr/xFni97k9cxGdtquDx6XnwWdbXl77lGzAKa/DGHoQp8mFfmaJouftU0VPP\nPFGWFSEAACAASURBVI37P/8SLm4Sbn5vi73vvg28eRv64qL1ozqIKivWhoHdr0U7jxaVOtMDQBYZ\nH81niN/7Eu7+1X0890cHUD94A8mDB93pkkoT56Tmz/GetTpDXmnPextzfRveK6FJLzyHt3/hXYhX\nwK3vrLF89Q6St+6At5uuT2sJK5gy1j3mL5Rbe+DKSVI/d/a7lWNzB7g9xqcOr+H4Z1/C8YszHP4o\nxsF370G99ib06WkneiFqFT0R/S8A/iaAO8z8V+xntwD8YwDvAfADAB9l5vv2b58B8AmYI41fZebf\naTuo5K07eOor50Z4zy+QnF+Y+h4d4cPFEogeDlGkLN0yt0P4Qf19KVLemsoIWssDtuT227j51Qsg\nisBn50gu1r3mTxqsGWqRzl2pcAGND2P9AaDEjmOzQfRn38ML39+HfnCEpE/0FwfPJei+8bwShEP6\nW3aol5LnvR00VHz6x2/gmd82ionPzpGcn4sWdJOYPy+34OK5a3NPt74uDLrH+PTRQ1z7vVdxbTYD\n1mvo84s036Qnmjgh/1cAH8599mkAX2Pm9wL4mv0dRPQ+AB8D8H77nV8n8snYjcFJYrYtD47stlkg\nzFIaikx2ZxT5WhmFdT4a1u2hSAHzuT2EydFyqdHhwWAFvXD++Py8//xl4osFBM1Z4LbSoX/Wls+Z\ngXDhNb5YQz88NsXN+mydhwokcLzi+AU5Bd2iPgwR7fDeDi83pZck4OOTlPekzomk1ret3ALN1lBg\nfJwkxmVz9FDM5eVQu3LM/M8B3Mt9/BEAX7A/fwHArwSff5GZ18z8fQCvAviAyEj7YoiIkYIDxFLU\nHSa6AzAdWH896IlDutCcHX/jJtcVGCwiqM36jgC9KpaGvGeIdaens25MEUiu7xDrKjQ+ZhaRiTy6\nju55Zn7T/vwWgOftzy8C+HFw3Wv2sx0Q0SeJ6E+I6E+22PW9c1hjWzBa4YlAeLAmOH+yFR1HHi7H\n2TjrCc3Amj3vSbmqnpjQSsD4+aX1HgQOY5mZifLNPht97/MAPg8Ah3Qr831XlIu3MiFVviCRlNAS\nQS2XhZmx0NoUhgrgD+GA4uchBbW/D1qarkFYb9KIh3zYl2s6UhnyZQ6HeCPLLFIhjLRYmPBKIDt3\nmczY8DCwWYil5Pr6w12h+ZO0bl02K2+3aZJdYSYrdvmlIBySDvZ9ZiwqM2Mb0HOyK8x75l4917dM\nbgFfAdRDczMeDPVLXzi5ldB7OXRV9LeJ6AVmfpOIXgBwx37+OoCXg+tesp+1gjtck8qMTcMD2Wnd\nfmCGXq9BVrE3bv5QFfngDq2SJGW+Do0f/DUDhJRKhbjxZpMtLJUvzoWk2XPuDlBsfcUyY/3Q5EpI\nuGxWb/nls2MzF1fzHicJ+PzCRHyFvGe/25qeOxgfoDBX7/XtKrf2u2U0vX7pW17Yyq1oqLBFV1/G\nlwF83P78cQBfCj7/GBEtiegnAbwXwB+3ps55we+JAUqnui0WQkHLjzncRTTx0TvBdd/N02mj/KRd\nDtJ+cDt3GfdIl+cMxie+xZeKkik6ZO4LlyRVpOSL5rEC7NciyXy3lJdrCQ7g7pJa3yZyC7TjQadf\nJNZ3IFdhk/DK/x3ALwJ4hoheA/D3AXwOwCtE9AkAPwTwUQBg5m8Q0SsAvgkgBvAp5o6vYMnGIzZT\n1MQI9ycJwHfk8RafdpEP3Zp5+843AFjH2e3gJVfV85m2kg0RbAVBV4ExtYos2jynzSg0iXHjqzbo\nwvmMQhEiGrnMa/ahfT5MtWgeq8aX4b107kp52XypfJ6lm2dIrm8TubX3bPas8vpFvPUpGih6Zv47\nJX/6YMn1nwXw2T6DEg/nC8PQJBSBbUlmQgMNPa8EbbMChyzzVNxbmdoqrHUa01zUfKOJPzAUSimL\n1CkCCfdIWCqW2QvcjmJpqOxdXaShCkL1gqskqtTO2U0vspHy3aBck4yMsg/vX2VouLXN8x6wE6O/\no4Cq1kWy5IMriaJ1v6YcbeW2IQ+K6hf3khyJj35YsIav7yLlIyUCS23t2TSPNr4+Lt7m5q6vo8eb\njfePZmKPuyQRsa02Ke0nFYqU4SRJM2PDuWs7b/4y012JiMRqhLjsUAFC8jsMZpsaz9XzZ6+tGx+7\nekMijTjkZdeQEljbtnJrv/NIMdCOfZyK3vkzWaIevW2VZhsCi0wdkSnMtWeKI3EcG2vDM1DeCqrx\n9xGZnrHzmckUdfVLAlpZa6qOnt3qSiWaKTJz6NPF+5GjKDJF3BT5Q0AAu4qmqg64v4bS/gWCFr3b\ncfQnZPlPWUNDQoCVKUTGcWxqtzh6RfVawjkEdu9NCrS3Zyx5y3vmMu5MT9oq9Razs5q77ihbyC3Q\nVHbtjmg2AyuBLNYnyqKXRhSZPpFC6cSe5mwGRMovCgFmKxjUbq/r72ovMsw8X4AoNltoZrhuU25L\n7lBLz18oKGiLORDLHDiZLOCZUXq+b6cGU4Xbqwp2fOQiZXq7luQOdUmReVYVmVBIKcKzmdW5Oo0i\nCVw47t47LoiC8Zn1WICwAesIYM66hPy1uhE9ALK7yHB9+8LJraJKuU3dYPXuG5rNzHpEUb/1HTDP\n58orelKmNClWSxMjfH7RXxEAxgq1210XAVFkBQGoV8qsi6tXZi6p2WIWQWr7F0WmtOs2Bp2egeN+\ndJkZFMQv5yON2h5G0WIO2t8z7pazs6ECF7qBFGixAJYLYL2WeREBQBwbi94p+TLeAyr5xSU4EVLe\nA4ot+qb0KIKs28atLwA6vwD3KUmRJMB2k0bfuCzZAvdX08b0tFwY/bLdABdrmfUVxigVvUu6EEEU\ngQ+vIbmxh1mcgE5O+zFKQBeRSi0DotQKZ8oyTt2hjrPoZzMQYrCOdqy0rKXb8KBSStBWKyRPXwdd\nxKCTE6Ow+tAja+UCxnq0n7tiXGnP0sB6rDhMpP19JM8cIiICHR+LFNHKHEr2pfPUIfT+AtF6I/ci\nCix6RIZfiqxSM4hyfvEWfcB7AFJ6iHaVYA09c62URZ+ur3oQgY5P+lXCdBa9CwKw4ye4l1vNDibP\nh1a/6OsrRNsYdHreS78YF5r8i2KUir4QHS0EdfMG3vjQczh6X4wXfvcAN7+2RnL3bj9GZAbb6nKA\nFZbZLLWCgDQmuWibm38W1khO0lKk5KIgXJSGtfh3QtzK6BV93tXCIsL2fS/he//hEvMjhff8HxHo\nz77bS9j0ZguKH6YtI+dZNqx81hzUaomjn3sRb/x14OY3r+GF306gf/xGz0JkxgonAIl7qXXlv2ee\nxo/+xjM4/YkEL39lHwf/zzmSB0fdxwYYfnnHlJ/K8Ip7QcZb+EJdRfMXPItPvnJwZ1lBhJCj5+69\n42IoNF4EeA+mSc3RB17EG78E3Pj2dbz7/0ygf/hat/V1h9jnF8agcL71MrkFip83HN/hId765edw\n9JcZL/z+NRz+7hrJvQedxucbLs0ZvBZsBYqRKvpM2Vn/YceH3Wyxf1sj3p9hdW9jtldSlm5QXTJk\nlkqUhWjly6VyzopqSU8Ss6M1Dn60h/kJQ51eQEuYpLZGO4Dy7MQGSSucJFjei3HwoyX2307AF+vm\nrq0yuBdr5rNu88zrDQ7e0gAiLO+dZTNPe4CiKHV1VR3GFg6q4ADVfMHQiGp20xXr4l03QuBEY3Vv\ni4MfrrB/R1vXSPf1TeUsCO+tilqq+hwAthvsv62R7EVYvXNh3MN9+C+vR4Tke5SK3m0ne8XMWuiT\nUzz1L97CjW+soO7ez1jOnaFMrRG6ds34mDcbU6cFSNvihYo7E02yG25HUQR14xC0t2fqjbjuQTr1\n11MUbqGD+u0Fb/xC11dXhmEG/fgtvPQ7CbDegN+8029rSQS1t4I6vG46iF1cANsYbENMKUL5cxY8\nB29jrL71Ol66cxPqwbGxliWEw7rOepM5PsatP7yNW4s5cOcdJOfdm784UBQhetdzpruUrYvkMqth\nXTkeYaP5AgVEsznUzRumztJ6k/qvQ3pqUU4v77pxO4ytjLLiJMHy22/gpbdvQh2dILl3vzs9onK5\ntWdt3o0YROJUha/q03Pc+PqbOPzWCnj7PvTZWW/+e2JcN6zZJJcIxIFzkoCPT6G2MfjsvPVBXyF0\nAn16btrhFRyEdak3ok9OQecXKO1O3yLGnJME5MPc+sdx88Ua6ugEiGNodwDYmZh1ex0FW+VQeZgf\ndr5TTs/UCVIPIvD5uUzSFLOY5c1xDDo6AS3m0OtN/90GLL+8cy/lFaA778Vb6IcP0x7DuTVoWxrA\nKylldxx9X7qswadnUJHA+jIXy627T4cyCK73A21jk4/QQ79wkpiAhwFq3YxS0VMU2ZhyoXjS7Qas\n7Rtcwu2gIqjDa6DD60Bs3QXWEuIkyYSB+Ro2YQxykUV/eAg62DNW88U6teTDqBQgm+hRIsTeqpKK\no08SI2TbuL8iJQLt7UHdvGFiy88uzA6GOc0fALLPWTJvDpxo4PzcFOeSUPQuexIASzTm2m7A241Y\ntyCazaGefxbYbM2OyCpoFxcO7LpzyviFFgtET900USOO96wLJ6Tnadasi5ddwWZBnCRmfS/6KdId\nuT0/903MeRv7AAig4lnNH7N0Y7MjNX2Ze7iV3NwJNhxxGKWi5yTx9SMY6GcZsDaLiID5+0In0A9P\nQBem4XajCoI1Frh++BB0drZT6Kutz9p/hxk0mweFqvpYGtpYLPmEpk7EGHx+Du2s+N4WPZukISK5\nhhLM6eFmz8Mw1mZ3kHG99R1evIW+czflFXOj4rWps+g3G+gHR76ERG96TnYd7/WNcHMuJGf09THU\nyuQW6GzRe/0isLZeFkjJ7YgsRqno/Wm4e0P23v5xmoEpMXHOR394DUi0sao2W2+9+2w7B6cgKyxw\ndf2aydjbGivN+egpH1PfxKJ3L8lkI8YsbDMJJXZEtFyabveAeda1tXQ31j+sZrkU9QrlYn33HCqp\n3gMMLHoJevb8QWqHSlEE9cwta9HX7f5c0hSKLfrZHHTjELRagi/WoPXaWPOWHvI7hPzuNE8virK8\n1/thydx7G/d3p5XILYDinXhTi57Zl5DoAz93OhZV8sBIFb2Z9KCQVl8BcQdUUpln2vrU1+tyn7pD\nXQo/rEV/fAI6O5fx0btkEKn5c5mWRCJFzXi9hr77jjmMzVv0bax5+3dOTKicWO6Fp+lKcfTxC9tD\ndaVEykcAll/efqc57wHlFni8hX5wlPXR96GXJGmROfeS7nmm463uvuvbRW7dGCrpmvVtdG0FvCx4\nQ02uFMIoe+v5eNLZDBJ1vH1EgnTKJJFZ4KAWdWWT4Sb0Sv/Wbh7IpmSL1UF3OwupOVQlY+rcHJzF\nXCPeop/PzXr2LIng+gHL9lANxtRzfYnMM5Kj2YMe2ebbzjoVQ+hm6Yu83PZsDu77Pfcel/LeDFHD\nFGO16LXNlnwEMeK94Ba4qRVUBetXL1SmXZSr4Nz59ZBEPvXc3Kjg5g2fQ2u5l5BdB5Ly+Q8BDppI\ntyxTsEuKTSZs1Yu8zdxKzxtriNqkbeV27HqoAUap6P3b1QmvREgas5xFRWTrb+ybwybn/3e9NjMu\niKiBn1mZao6LOSi2vkjndyXjZ/XPEcbjl9DzVmjYMajP4ypKd0UCoNkMdLBvftlszWFqAWrnrfBL\nAmscWLdSPCN2fgAYy+/gwPDKJuwvHIZa2oSgGn7xlURnM0vPrkW+9/FOFdWSdSFlrOVtz8ShHE3/\nEuqzvk3k1iHzvA1cVlL6xTdEEdw9Y6SK3pfZBWw8Pff2C4tt+yzMFisCazKHYK7mSJLsVP3LdNsp\ni+JwB9CAeWbmimqYwfcraueIzp8klK2tYl9GrmJituGMZfK6WjfucskXOWCbcUQQ6fVal3nZEqbk\nhllfShIbmcapgqAKfilCFJnm4MxAlJ4pZOa7rBNTHi7ZMQnKFQtBYn1r5dYhU0+qabXY/gaVd2n6\nMiAyh7LjVPSAYRhEQJSLJOhBT7K7GW82hqaNN/ZjLEpDr9sGsvYx/pxoE3lT8FYvPJgtoQfYNHmh\n+fMHsQKTyNvYVCEEsnPXoQRCOD4IHXZ6eD9pz2cOSmVIvHBZs4kpt/Xow4iY/HX2B/v/7hyyTiPS\nMrwHNOO/Itga/L5mkcAz+/XtmUjEm00aSloht0BD2c0Msv+zuud0LQql7LPxKnp3EMsMSjS467bN\nKUzJxtEunOoCOwq5q6Lywha4SDp3DiLla6D3nj83Dkmff5KY5BKgOFw0c3GD+4Y+XKnyuEoZV5qz\nTvtInDj/mWzgxrwClM+JMzJo1z3XuWuaq89uo0h6v3zZVoTtCye35+fmV7GoG8H1dbX3bYirlLt0\nnFE3kQKtVqCDPdBykTZX7kRM/BjR0jW+SKqLlGmKkFHyETxtI27c/O2v+s/fACBle3cGc0dB5NIY\nQLMZaG+VRt70gaSS9zTdi62EV9rOZVkUlENDehRFoNXS8N5qmTbi7olKOWtFSNU/62WBlJHXvRWw\nXKZRcwIYpUWv3v0u3P7gC1jfINz6ToyDb9+F+vEb0BcdC0JllKiAxafsAdbeCtBsGobYZA6yGXfk\nLCRbFqEq4YIi0xrOd9HZbI3lQZRNmMrvHEroqXc9hzu//CLWNwlPfbfn/BFlFV1fvyGRKQF8cACw\nTg+f89ZLTWJOhp4LRxOoQw8AarnE+mf+Iu78W0u8+/duInr19c6lZ0GBMSBUw4SiCHT9WsorNt7a\nJepRzjqvOlCk2Rzq2kH2MDZJMryXp+dp5teFCPSel/DGLz+DZAk8/Y0t9r99G8mbt7un9bsOU8q9\nwHqcN+Xl1h1mIyu3QIG1X2bhh2W2k6TX+qpbN3Hvl34SJy8r3PhegsNvPUD04zeRHB/35plRKvrT\nn34WH/7U7+HvPfN1/Nt/8Ak89ZvP4eZD2/CiwwO7FHRT2pVEEoj0eg0+Pk77WfrDE/N3tjHEHBdE\nlOReNqxtWYCjh1CLOTixHafms1S4bFna1O9ZrvzO/vJz+Ouf+iP8t8//Pj7w+/85nv6tfvMHwG9P\nCZFtb9hR2NiUBOD7980zLhZZBW/nsNSVUwSlbH2VWCRBjK4d4EcfWuD3/6P/Hr+4+q/wFy6eBx0d\no3NDCaeoEg2K0LsxCmtGcudtH6duSgPblHlSNhiAm53NsIY+OTWVQ+1a5NeFA582VOS/VxQEcP+v\n3sJ/86v/EB/av4N/8yufwk/8k3fh4OgYyTbuxjPuHlEU1PHp6sa1cnty6utB6fUaNJv7v7NN9PI1\n+PMKvmhn4XsCJL34T7/7Waz+szfxB+//En7hX/1t3PnN5/H819bAyWl/379Y/ZceOKRb/HP0Qf97\n9PQtJD/1IngeYXbnIXD3PnTXzkHWggRgLUeBU2wVIbpxaEIEmTOldjPtyQD/WcaHmrfoZzNTKna1\nMgWSghIIO20FG5RAiJ56CvrfeAl6rjB7+7jf/NnxpbVQer4kiaD2901RM8BU/FtvTEJROL4Gz+no\n0WJhrE53uNbXYp7NoN7zMrYv3MTie7eh37lnC1Z1oKsi8/K2LzgJ/qPZDNEL7/Jliv285UsWNNgB\n0nwBdeumiboJS2R3oUeE6LlnEf/UCwCA+VtH4Lv3TGnwri9JyfV1cnvtwPCblVsAmQzt/PNWHmoT\nQS2XAADtatF3teivXwd+6mXE1xaYv3MKvH0P+ui4ssnPV/k3vs7MP1tHe5QWPZ9fYPa6TfE+PYOW\nqkoIyBzUsU7r5rjKgT4JQ+8o5kbRCq5XbGITOWxs705Dk6LiS/nhnZ8jeu1tRIDY/IlF3bgwwDD2\nuzCOuaE1n19PgfVlzcD9IywuNtD3H1gB7kiXc/wgZVi5FP7QsAh5L5jL2t1RktgdR5IaGHl6Aaoa\nmvDJKeY/umsMlrNz09Gpz2ms44u6ZiiNaAXzlZdb5h25zVrzLfM5ugzvYo3orXewiCIzd2dnYnpv\nnIo+SYyv0LkqpEsXCICZ024yYb2WMoVVE+JmtsaJEZDQuiiNRqmgx2ysM2Cc8xda7+6FqXPzhHIr\ndJeekCJIb2x2aLPtIE0g+sKHRIYWbr6+urmwIJqkILokjs1LPPPSraFXti5JYnjP7/7GxXulcpsv\nsVDmn6+/Qb/xbbem4FociyZNjVLRI0nSBtTO7dF3uysZZ82c1hZ37pWq8q51ysrH0XMqIH1CNu0h\nnftZLDxSKHrEhLjZg+Fg7nbb97WwovxhnUx4Jcexr+QowTREJFMJEzD8YuvQ9y21m8bRaxl6iU4r\nYMaxIO8JJGC1lVv7efj9YrLmwLpv0Tpn4FKUyGYWY6yKHkh928Hpd1eIhWalBE343XLh374Ea0Ez\n2bIFoWVak91JtoDWYg4kCtgAIBs7rBmkcrTMD5VKze0KpEoLu629CKLInJsoMowNk6RD+VIPDbNi\nBwlftK4RqWQzUdgwPMQxsKXAKkWGV4CA98xAdubRNbbHYp4aB+RevDCtHYt4uYSe+Z5JvBqkkGAf\n5OV2swlaB1K2T7VT/FT/vKLrq7UvuS2ZvzJaRS9eGEk6djZJvBWUOTCty4wtAuushVHXnrBFNIp0\nGrpIpqN1VYFp57C503MCw+VLSEGwTDEAo6icFV72sq9z29hrmG2oYeiySS8op1cFSXkTqCDqEcpt\n6Jevc5ECNcaGYMLeALw8XkUvWRhJKfnJm8+NFaRnxiqwC7xTmyayerHqOVws7nJpBE5r09YstOoD\nyypjVVVBqqKjdYlIuR8oUoCNVAg783DR7uWyLEKlgnODHk89UIIOLe2OCPANM0rrIlXsjEKLnjZb\nw3tAMS/n6VVgjGcbAMzOebkwLiYgnRPSO/aLed4GO2hp/cL2pXPlXTeuwJeroNcnScL5bSV9uKRM\nFby9lbGsAJDtGeurRlo4l4RnmIJkI1PD22bErTfe4vVdg7xFHnlXTqU7yPWeBGSKmoWNEPqCbL3y\nlVH0DKRtHpMErupi5jnNByVuL0o78yiZhCkAngdpve6VBOPGmPm573lTFAF7q7Te+9YkNBnFFYRD\nIvJuxFJ+cW6g1TIdJ+vUT09hqDDV0qPI1LlJ6+/35BnJ9bVyi9XSlwWhmHzOQaiqze5G1b8syTZZ\ncT/3eN60V7aWa9xiMUpF731eUm82FbyVpTCbgZcLQNvsTp4B7CpOwi+OSexkZKr+FQnbYg5eLgyz\nxYZZiLWxsBwjae0rY9Yqe0CsTLE0KFLg5dwIsdZgnRjLPozbzjxnybzlIVDd0NzHZrM2CGVtDMmw\nPEXgleMVm5GtObPbIiDlF6d7Cixxs7taGN5jtpE3iTUOOFD+NvPW0jNuqALLPqy+KMh3Yvk+sxl4\nbwnEiZFbQzyVWwsKdjSNdzJSz+vCP6+6Rc+JBrFOK+DpfhYpRaYsLhLb+b33ADX4+ARkQ6B0UBO8\ntOpkVThkkkA/PAZdXJis0Tgu9NN7WnYMZfScwqPFIqDRY/6IzNZekXUtdSYFMEOfX0C988AM1VZg\nBJBJmGr0nOkAffkIE9LXN9bfZiZHC2NJxj2DAeY24UzLHO7yNgbevmeiWjbb9OVYELhQV4GR4xh8\n/wiYzzK85+kZIll64Wd5es4yns8BAd4DYAyCZZj02DUru4HchtcW5b8UHcY6/bLtGY5rd1JhRvyV\njqOHdWVAm7du3xoSYu30Qrga3val5EbWtR69ZxYguxvoUo9ekaFlD9l6z593e8nMI0WRf1aza9mt\nR9/Ev5wZnyszIASa20gUV2yto3LxxdoEfbjOr5665uzcWHdD9tpg5wcUz+N8ZngZSK14Rw9oxX9E\nhvdIURCo0NNdZflPJLqlTm4d2ljyTi768p+rOksERLFt/DLy6pVE9GEi+g4RvUpEn275XdDMLEjf\n3omkrLW3XKQ9aAXg+mx6ReAW2f9PhRUpS8foGNlVdbRMXcrcVfRcoS+p3pNRZCwqr/gEBE4Fc2cG\nvRMm2bRqJM1mJk3eKZi+sH5Xms/7KxdSlv+WxsqVMjgo4BmVHpbv8F04jrLxOX7zNAJ6QDHNMnpR\nZPzgjvcEQLOZOdOZ91/fjNwCtndsuZLOVAU1BHb/7kI2JWRtZl66vtm9EL8MouiJKALwPwL49wG8\nD8DfIaL3NSYQRYA9ICJbE7zzA5MC7a3AN66ZAyypmGvbDYZChWyZJa8cdpiljB4FCxue5IeCVtTI\nOA87fyQxf4A5Pzg8AK4fmBdIX1CuTHEoZE3mKkNLgVZL8OGBqT0kpVzmc/Bq0b9MsSLQwb4Z33Ih\nyH+BQZH/LP95S3heLinDXfUM5Oqpr5ZpjaQ+sIfFfHhgWgD2pRfKbW6XQPmXWxMeJAU62DPjW/XT\nLxQpk1+yWqZlioUwlOvmAwBeZebvAQARfRHARwB8s8mXabGAvnEAAFCJNn7ITXFf0VpakQLvrxAf\nrjA/WcqUs3Un7fOZr0oIILsVBIyvMyJwrO3hVflhLFyIGwDWtmkDZcPnELlyscH3iiIf5jPo6weA\nApTNfOzsWycCzeeID1dQ5yYqoFcsvY2iwNxWDPz/2zufEKuqOI5/vve+N2+cGUNNEUkpBQkiwlxU\nC3FXmRsLWrgJF4WbjFq0MISwZUFtAyNBImpTkQshNIR2mdX4LzOThBJzqBBt0zjzfi3OeTPP57w3\nM+/N894z/D5weeeee+fN99zv3DPn/M6958Qu9FQZGgN+MKdBZ2WCwRoT9wxSGb8VYuo9PtmiTLBk\nkPryEbLrN6bXZe3iO5Xn1IcGqQ9VqdyoLUwLLXbxw9/KJIp/B41ZWtsOaM8UgsiCv8QHARqx6saD\nAGTZ7QO70YvbBmOnHlEMvefJZWEK5WxiEo2P9xZXh2l/Y/m69rfdfQvtB7JnuX6N+mVypEblZm16\nJttu9OU5tnSIeq1Kbga3xtGtCbqeNbWJfoVu7gN+b9r/I+bNjTyjvqTK5PAAVgst0l7+U1olwyoL\n/DxzlmOVHPIstJjz2N1v6ga3Lg7RCTXizJW4MpSyqdbHHV3L2Vr1eY4tqTI5XJu6fj2R59QbjWMk\nPgAABFlJREFU13AhWhmZ4vVqXLt8eoGK2RZzmQGr5AvrrzJsoMrEcLX38I2EVXOsujALcADhqZtK\nHJPImrr4jV5gc2u8ERZsXZNhKqnp8Y0pD1q+r9mXWVq6qlSoD1WpDw3EFbry3lq58R6wSgaVBbiG\nrfdt7C2HXq/uLG+zjjZYJaM+EL6zF5Tnsd4LT+CFumBhQqV9maZY0vPANjN7Ke6/ADxuZnuaztkN\n7I67DwJ/A38tuJi7x0rS1g9ehjKQun7wMtxN7jezVbOd1K/QzRVgXdP+2pg3hZkdAA409iWdnMu8\nymUldf3gZSgDqesHL0MZ6Vfo5jtgo6T1kgaAncDhPv0ux3EcpwN9adGb2YSkPcBXhHfaD5rZuX78\nLsdxHKczfXthysyOAEfm8SMHZj+l1KSuH7wMZSB1/eBlKB2lWDPWcRzH6R99ezPWcRzHKQeFV/S9\nTJVQJJIuSzojaVTSyZi3QtJRSRfj5/KidTYj6aCkMUlnm/Laapb0RvTlgqSni1E9TRv9+yVdiT6M\nStredKxU+gEkrZN0XNJPks5JejXmJ+FDB/3J+CBpUNIJSadiGd6K+Ul40BUWV1kpYiMM1F4CNgAD\nwCngoSI1zUP7ZWBlS947wN6Y3gu8XbTOFn1bgc3A2dk0E6auOAXUgPXRp7yE+vcDr89wbun0R11r\ngM0xvRT4JWpNwocO+pPxgfDy60hMV4FvgSdS8aCbregW/dRUCWY2DjSmSkiVHcChmD4EPFugljsw\ns2+Af1qy22neAXxqZv+Z2W/ArwS/CqON/naUTj+AmV01sx9i+iZwnvDWeBI+dNDfjlLpB7DAv3G3\nGjcjEQ+6oeiKvrepEorFgGOSvo9v+QKsNrOrMf0nsLoYafOineaUvHlF0ukY2ml0t0uvX9IDwKOE\nFmVyPrToh4R8kJRLGgXGgKNmlqQHc6Xoij5ltpjZJsIMnS9L2tp80EKfL6lHmlLUDLxPCP1tAq4C\n7xYrZ25IGgE+A14zsxvNx1LwYQb9SflgZpPx/l0LPCbp4ZbjpfdgPhRd0c86VUJZMbMr8XMM+ILQ\nlbsmaQ1A/BwrTuGcaac5CW/M7Fq8aevAB0x3qUurX1KVUEl+bGafx+xkfJhJf4o+AJjZdeA4sI2E\nPJgvRVf0SU6VIGlY0tJGGngKOEvQviuetgv4shiF86Kd5sPATkk1SeuBjcCJAvR1pHFjRp4j+AAl\n1S9JwIfAeTN7r+lQEj6005+SD5JWSVoW00uAJ4GfScSDrih6NBjYThi5vwTsK1rPHDVvIIzCnwLO\nNXQD9wJfAxeBY8CKorW26P6E0K2+RYgzvthJM7Av+nIBeKak+j8CzgCnCTfkmrLqj5q2EEICp4HR\nuG1PxYcO+pPxAXgE+DFqPQu8GfOT8KCbzd+MdRzHWeQUHbpxHMdx+oxX9I7jOIscr+gdx3EWOV7R\nO47jLHK8onccx1nkeEXvOI6zyPGK3nEcZ5HjFb3jOM4i53/rTC1wFpcoEgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = NMF(n_components=3, init='random', random_state=0)\n", + "H_nmf = model.fit_transform(spectrum.T)\n", + "W_nmf = model.components_\n", + "X_nmf = np.dot(W_nmf.T,H_nmf.T)\n", + "\n", + "plt.plot(W_nmf[0,:],[x for x in range(513)])\n", + "plt.plot(W_nmf[1,:],[x for x in range(513)])\n", + "plt.plot(W_nmf[2,:],[x for x in range(513)])\n", + "plt.title('Columns of W')\n", + "plt.show()\n", + "\n", + "plt.plot(H_nmf)\n", + "plt.title('Rows of H')\n", + "plt.show()\n", + "\n", + "plt.imshow(X_nmf,aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Q: What observations can you make? How do the results differ? Which ones make the most sense?\n", + "\n", + "A: As we can see above, PCA captures important components. ICA and NMF are better to distinguish three instruments according to columns of W and rows of H. Since we do ICA after PCA, it is reasonable that we would get better result of ICA than PCA. As for NMF, it directly decompose the input and get better result than PCA in this problem." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# Problem 2" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "data_pro2 = scipy.io.loadmat('digits.mat')\n", + "data_d = data_pro2['d']\n", + "data_reshape = np.reshape(data_d[:,0],(28,28),'F')\n", + "plt.imshow(data_reshape)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pca_prob2 = PCA()\n", + "pro2_X_transformed = pca_prob2.fit_transform(data_d.T)\n", + "fig, ax = plt.subplots(6,6)\n", + "k = 0\n", + "for row in ax:\n", + " for col in row:\n", + " col.imshow(np.reshape((pca_prob2.components_)[k,:],(28,28),'F'))\n", + " k = k+1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ICA" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p2_ica = FastICA(n_components=36)\n", + "S_ = p2_ica.fit_transform(np.dot(pca_prob2.components_[0:36,:], data_d).T)\n", + "prob2_W_pca_followedby_ica = np.linalg.pinv(np.dot(p2_ica.components_,pca_prob2.components_[0:36,:]))\n", + "fig, ax = plt.subplots(6,6)\n", + "k = 0\n", + "for row in ax:\n", + " for col in row:\n", + " col.imshow(np.reshape((prob2_W_pca_followedby_ica)[:,k],(28,28),'F'))\n", + " k = k+1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NMF" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nDIYQ8P8DUQ+tVQCa2ZkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = NMF(n_components=36, init='random', random_state=0)\n", + "p2_H_nmf = model.fit_transform(data_d.T)\n", + "p2_W_nmf = model.components_\n", + "fig, ax = plt.subplots(6,6)\n", + "k = 0\n", + "for row in ax:\n", + " for col in row:\n", + " col.imshow(np.reshape((p2_W_nmf.T)[:,k],(28,28),'F'))\n", + " k = k+1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Q: Make observations on how and why they differ\n", + "\n", + "A: It's obvious that ICA has better result than only PCA. As we can see above, only PCA can capture key features of images but can not distinguish digits. The results of ICA(PCA beforehand) show that it can distinguish digits decently because ICA can separate multivariate signal into additive subcomponents. As for NMF, it only captures key components of digits." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 3" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nWC3rVh3nd/cVkiq9WLwkAycJrvADgiL8QFCEHwiK8ANBEX4gKMIPBFV1nD9PUcf5qxncfkay/ou/\nmJSsvzeh8u2xn5j93eS2f/zE4mS9/4u2a3fuD/ZXfulVaxt7cRznRMb5OfIDQRF+ICjCDwRF+IGg\nCD8QFOEHgiL8QFCM8wMnEcb5AVRF+IGgCD8QFOEHgiL8QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxAU\n4QeCIvxAUIQfCIrwA0FVDb+ZjTOzp81sg5mtN7Prs+W3mNkOM3sp+7m8+e0CyMspNaxzWNI33P1F\nM/uIpNVm9mRWu8Pdv9O89gA0S9Xwu/tOSTuzx/vMbKOksc1uDEBzndB3fjMbL+kCSSuzRV8zszVm\n1mVmp1XYZpGZ9ZhZzyEdaKhZAPmpOfxmNkLSw5IWu/teSfdIOkfSNPV+Mritv+3cvdPdO9y9o01D\nc2gZQB5qCr+Ztak3+Pe7+yOS5O673P2Iux+V9H1J05vXJoC81XK23yTdK2mju9/eZ/mYPqtdJWld\n/u0BaJZazvZ/VtI1ktaa2UvZspskzTezaeqdxHmbpK80pUMATVHL2f4Vkvq7D/jj+bcDoFW4wg8I\nivADQRF+ICjCDwRF+IGgCD8QFOEHgiL8QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxCUuXvrdmb2jqQ3\n+iw6XdK7LWvgxJS1t7L2JdFbvfLs7ePuPrqWFVsa/uN2btbj7h2FNZBQ1t7K2pdEb/Uqqjc+9gNB\nEX4gqKLD31nw/lPK2ltZ+5LorV6F9Fbod34AxSn6yA+gIIWE38xmm9mrZrbZzG4soodKzGybma3N\nZh7uKbiXLjPbbWbr+iwbZWZPmtlr2e9+p0krqLdSzNycmFm60PeubDNet/xjv5kNlrRJ0qWStkta\nJWm+u29oaSMVmNk2SR3uXviYsJnNlPQbST909/OyZf8oaY+735r9x3mau/9dSXq7RdJvip65OZtQ\nZkzfmaUlXSnpyyrwvUv0NU8FvG9FHPmnS9rs7lvd/aCkByXNLaCP0nP3ZyTt+dDiuZKWZo+Xqvcf\nT8tV6K0U3H2nu7+YPd4n6djM0oW+d4m+ClFE+MdKerPP8+0q15TfLukpM1ttZouKbqYf7dm06ZL0\ntqT2IpvpR9WZm1vpQzNLl+a9q2fG67xxwu94M9x9mqQ5kq7NPt6Wkvd+ZyvTcE1NMze3Sj8zS/9W\nke9dvTNe562I8O+QNK7P87OyZaXg7juy37slParyzT6869gkqdnv3QX381tlmrm5v5mlVYL3rkwz\nXhcR/lWSJpvZBDMbIukLkpYV0MdxzGx4diJGZjZc0mUq3+zDyyQtyB4vkPRYgb18QFlmbq40s7QK\nfu9KN+O1u7f8R9Ll6j3jv0XSzUX0UKGvcyS9nP2sL7o3SQ+o92PgIfWeG1ko6XcldUt6TdJTkkaV\nqLd/lbRW0hr1Bm1MQb3NUO9H+jWSXsp+Li/6vUv0Vcj7xhV+QFCc8AOCIvxAUIQfCIrwA0ERfiAo\nwg8ERfiBoAg/ENT/A/SkhmWp1vaFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "data_pro3 = scipy.io.loadmat('digits.mat')\n", + "data_p3 = data_pro3['d']\n", + "data_labels = data_pro3['l']\n", + "labels = np.where(data_labels == 6)\n", + "data_labeled = data_p3[:, labels[1]]#Select only the columns that correspond to the digit 6\n", + "plt.imshow(np.reshape(data_labeled[: , 0], (28,28), 'F'))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# function credit to https://stackoverflow.com/questions/4860417/placing-custom-images-in-a-plot-window-as-custom-data-markers-or-to-annotate-t\n", + "def plot_embedding(data_2d):\n", + " fig = plt.gcf()\n", + " fig.clf()\n", + " ax = plt.subplot(111)\n", + "\n", + " # add images\n", + " for j in range(200):\n", + " cur_img = np.reshape(data_labeled[: , j], (28,28), 'F')\n", + " imagebox = OffsetImage(cur_img, zoom=0.5)\n", + " xy = [data_2d[j,1], data_2d[j,0]] # coordinates to position this image\n", + "\n", + " ab = AnnotationBbox(imagebox, xy,\n", + " xybox=(0., 0.),\n", + " xycoords='data',\n", + " boxcoords=\"offset points\", pad=0) \n", + " ax.add_artist(ab)\n", + "\n", + " #ax.grid(True)\n", + " plt.xlim(min(data_2d[:,1]), max(data_2d[:,1]))\n", + " plt.ylim(min(data_2d[:,0]), max(data_2d[:,0]))\n", + " plt.draw()\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pca_prob3 = PCA()\n", + "pro3_X_transformed = pca_prob3.fit_transform(data_p3.T)\n", + "X_centered = (data_labeled - data_labeled.mean(axis=1, keepdims=True)).transpose()\n", + "plot_embedding(np.dot(X_centered,pca_prob3.components_[0:2,:].T))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Laplacian Eigenmaps" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pro3_manifold = manifold.SpectralEmbedding(n_components=2, affinity='nearest_neighbors', random_state=0,n_neighbors = 10, eigen_solver=\"arpack\")\n", + "plot_embedding(pro3_manifold.fit_transform(data_labeled.T))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Right bottom parts of images have thinner digits than left top parts when we use PCA. Bottom parts of images have thinner digits than top parts when we use Laplacian Eigenmaps." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/Problem set 2-2017.pdf b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/Problem set 2-2017.pdf new file mode 100644 index 0000000..9bd599b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/Problem set 2-2017.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/digits.mat b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/digits.mat new file mode 100644 index 0000000..a960053 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/digits.mat differ diff --git a/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/homework2.ipynb b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/homework2.ipynb new file mode 100644 index 0000000..aee258d --- /dev/null +++ b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/homework2.ipynb @@ -0,0 +1,605 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import scipy\n", + "import matplotlib\n", + "from scipy.io import wavfile\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.offsetbox import AnnotationBbox, OffsetImage\n", + "\n", + "from scipy import signal\n", + "from sklearn import manifold\n", + "from sklearn.decomposition import PCA\n", + "from sklearn.decomposition import FastICA\n", + "from sklearn.decomposition import NMF\n", + "\n", + "# PCA credit to http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html\n", + "# ICA credit to http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.FastICA.html\n", + "# NMF credit to http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 1" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQPu/tXhElklAMEgAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rate, data = wavfile.read('vl1.wav')\n", + "spec, freqs, t, im = plt.specgram(data, NFFT=1024, Fs=1.0, noverlap=768,window=np.hamming(1024))\n", + "# plt.imshow(np.sqrt(np.abs(spec)),aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvW3Mbcl1JvSs2vuc9+N+dbfd7jhtaxKNPAhn0GQkywIG\nkCFAomGEM38sI4GMZMl/IjEIELH5g/hhyQgp4ld+GIGwBCG0BKNYEWLkWMkMgzIxzpCZwc4k7onj\n2E5/d9/P9z3n7L1r8aOq9q5dp/ZnrXPv7nv3I7X6vec979pVq9Zae9WqtVYRM2PFihUrVjy9UE96\nACtWrFix4rRYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2K\nFStWPOVYDf2KFStWPOVYDf2KFStWPOXIn/QAAGCrzvlC3XrSw1ixYsWK9xXuV2+/zcwvDn1vEYb+\nQt3Cv3Tnbz7pYaxYsWLF+wp/593/7gdjvjcqdENEf0pE/4SI/oCIvm0/e4GIvkFE37P/f977/peI\n6FUi+iMi+vl5U1ixYsWKFRKYEqP/15n5Z5n5E/bfXwTwTWb+GIBv2n+DiD4O4LMAfgbALwD4VSLK\nBMe8YsWKFSsmIOUw9tMAvmZ//hqAX/Q+/3Vm3jPz9wG8CuCTCc9ZsWLFihUJGGvoGcBvEdHvE9EX\n7GcvMfNr9ufXAbxkf34ZwA+9v/2R/WzFihUrVjwBjD2M/VeY+cdE9CEA3yCif+r/kpmZiCY1trcv\njC8AwLm6OeVPV6xYsWLFBIzy6Jn5x/b/bwL42zChmDeI6MMAYP//pv36jwF81Pvzj9jPQppfZeZP\nMPMntnQ+fwYrVqxYsaIXg4aeiG4Q0S33M4B/G8D/B+DrAD5nv/Y5AL9hf/46gM8S0RkR/TSAjwH4\nlvTAV6xYsWLFOIwJ3bwE4G8Tkfv+rzHz/0lE/w+AV4jo8wB+AOAzAMDM3yGiVwB8F0AJ4JeYuTrJ\n6FesWLFixSAGDT0z/wmAvxL5/B0AP9fxN18G8OXk0a1YsWLFimSsvW5WrFix4inHauhXrFix4inH\nauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhX\nrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhToMj8J0nvWYE07541\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "spectrum = np.sqrt(np.abs(spec))\n", + "matrix = spectrum - spectrum.mean(axis=1).reshape(-1, 1)\n", + "matrix_data = matrix.T\n", + "u,s,v = np.linalg.svd(matrix_data)\n", + "W = (v.T)[:,0:3]\n", + "S = np.identity(3)\n", + "np.fill_diagonal(S, [s[0],s[1],s[2]])\n", + "H = np.dot(u[:,0:3],S)\n", + "X_pca = np.dot(W,H.T)\n", + "\n", + "plt.plot(-W[:,0],[x for x in range(513)])\n", + "plt.plot(-W[:,1],[x for x in range(513)])\n", + "plt.plot(W[:,2],[x for x in range(513)])\n", + "plt.title('Columns of W')\n", + "plt.show()\n", + "\n", + "plt.plot(H)\n", + "plt.title('Rows of H')\n", + "plt.show()\n", + "\n", + "plt.imshow(X_pca,aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using sklearn PCA func to make sure resultsare correct" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pca = PCA()\n", + "X_transformed = pca.fit_transform(matrix_data)\n", + "k=0\n", + "\n", + "for eigenvector in pca.components_: \n", + " plt.plot(eigenvector,[x for x in range(513)])\n", + " k = k+1\n", + " if k >= 3:\n", + " break\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# ICA" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvW3Mbcl1JvSs2vuc9+N+dbfd7jhtaxKNPAhn0GQkywIG\nkCFAomGEM38sI4GMZMl/IjEIELH5g/hhyQgp4ld+GIGwBCG0BKNYEWLkWMkMgzIxzpCZwc4k7onj\n2E5/d9/P9z3n7L1r8aOq9q5dp/ZnrXPv7nv3I7X6vec979pVq9Zae9WqtVYRM2PFihUrVjy9UE96\nACtWrFix4rRYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2KFStWPOVYDf2K\nFStWPOVYDf2KFStWPOVYDf2KFStWPOXIn/QAAGCrzvlC3XrSw1ixYsWK9xXuV2+/zcwvDn1vEYb+\nQt3Cv3Tnbz7pYaxYsWLF+wp/593/7gdjvjcqdENEf0pE/4SI/oCIvm0/e4GIvkFE37P/f977/peI\n6FUi+iMi+vl5U1ixYsWKFRKYEqP/15n5Z5n5E/bfXwTwTWb+GIBv2n+DiD4O4LMAfgbALwD4VSLK\nBMe8YsWKFSsmIOUw9tMAvmZ//hqAX/Q+/3Vm3jPz9wG8CuCTCc9ZsWLFihUJGGvoGcBvEdHvE9EX\n7GcvMfNr9ufXAbxkf34ZwA+9v/2R/WzFihUrVjwBjD2M/VeY+cdE9CEA3yCif+r/kpmZiCY1trcv\njC8AwLm6OeVPV6xYsWLFBIzy6Jn5x/b/bwL42zChmDeI6MMAYP//pv36jwF81Pvzj9jPQppfZeZP\nMPMntnQ+fwYrVqxYsaIXg4aeiG4Q0S33M4B/G8D/B+DrAD5nv/Y5AL9hf/46gM8S0RkR/TSAjwH4\nlvTAV6xYsWLFOIwJ3bwE4G8Tkfv+rzHz/0lE/w+AV4jo8wB+AOAzAMDM3yGiVwB8F0AJ4JeYuTrJ\n6FesWLFixSAGDT0z/wmAvxL5/B0AP9fxN18G8OXk0a1YsWLFimSsvW5WrFix4inHauhXrFix4inH\nauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhX\nrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhXrFix4inHauhToMj8J0nvWYE07541\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ica = FastICA(n_components=3)\n", + "S_ = ica.fit_transform(W) # Reconstruct signals\n", + "A_ = ica.mixing_ # Get estimated mixing matrix\n", + "\n", + "W_pca_followedby_ica = np.linalg.pinv(np.dot(ica.components_,W.T))\n", + "H_ica = np.dot(H,ica.components_)\n", + "X_ica = np.dot(W,H.T)\n", + "\n", + "plt.plot(W_pca_followedby_ica[:,0],[x for x in range(513)])\n", + "plt.plot(W_pca_followedby_ica[:,1],[x for x in range(513)])\n", + "plt.plot(W_pca_followedby_ica[:,2],[x for x in range(513)])\n", + "plt.title('Columns of W')\n", + "plt.show()\n", + "\n", + "plt.plot(H_ica)\n", + "plt.title('Rows of H')\n", + "plt.show()\n", + "\n", + "plt.imshow(X_ica,aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NMF" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\niuIEVBYfka0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEICAYAAABRSj9aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmcJEd95v2NuvruuTUaSYMuJEAStwADPjCY0wjJXpuV\nDVjrF1teG3t9vH5twK/XLGthbHPZ+GBlG1vGYCEuSSBACIFOQGI0EpJGmtEMOufumZ6evqsqM2P/\niIysqLMrI7LVOU08n49U1dVVOdFREU8+8fx+8QshpcTDw8PDY/WisNIN8PDw8PBYXnii9/Dw8Fjl\n8ETv4eHhscrhid7Dw8NjlcMTvYeHh8cqhyd6Dw8Pj1UOT/QeHssEIcQrhRC7hRCzQohLVro9Hj+6\n8ETvcUJBCPG4EGIhJs+DQoh/E0KMrnS7uuD9wN9JKUellNe2/jL+W36m5bX/JoS442lrocePBDzR\ne5yIuEhKOQq8AHgh8J4Vbk83nA7sWOlGeHh4ovc4YSGlPAjciCJ8AIQQa4QQ/y6EmBBCPCGE+P+F\nEIX4d08IIV4cP3+bEEIKIc6Pf36nEOLa+PlLhRDbhBDTQohDQoiPdGuDEOLXhRB7hBCTQojrhRCn\nxK//EDgL+HK8+hhYrn7w8FgKnug9TlgIIU4D3gjsMV7+OLAGRbI/BfwK8Kvx724FXhU//yngUeAn\njZ9vjZ//DfA3Uspx4Gzgmi7//quBvwDeCmwBngCuBpBSng08Sbz6kFJWHf5UDw8neKL3OBFxrRBi\nBngKOAz8GYAQoghcCrxHSjkjpXwc+DDwjvhzt6IIHeAnUCStfzaJvg48UwixUUo5K6X8Xpd2vA34\npJRye0zk7wFeLoQ4I+XfMqX/A/4hxWc9PPqCJ3qPExGXSCnHUOr82cDG+PWNQBmlrDWeAE6Nn98K\n/IQQYgtQRCn1V8bEvAa4L37fO4FzgZ1CiO8LId7cpR2nmP+WlHIWOGr8e/3+LWv1f8Bvpfish0df\n8ETvccJCSnkr8G/Ah+KXjqDU+OnG254B7IvfvweYB34HuE1KOQ0cBC4H7pBSRvH7dkspfwk4CfhL\n4PNCiJEOTdhv/lvxezbof8/DIy/wRO9xouNjwGuFEM+XUoYolX6FEGJMCHE68AfAfxjvvxX4bRo2\nzS0tPyOEeLsQYlNM/FPxy1GHf/s/gV8VQrwgDrZ+ALgrtow8PHIDT/QeJzSklBPAvwP/M37pd4A5\nVKD1DuAzwCeNj9wKjAG3dfkZ4A3ADiHELCowe6mUcqHDv/1N4E+BLwAHUIHbSzP5wzw8MoTwB494\neHh4rG54Re/h4eGxyuGJ3sPDw2OVwxO9h4eHxyqHJ3oPDw+PVY5SP28SQjwOzAAhEEgpLxRCrAc+\nC5wBPA68VUp5LH7/e1CbTkLgf0gpb+x1/Y0bN8ozzjjD7i/w8PDw+BHFPffcc0RKuWmp9/VF9DF+\nWkp5xPj53cDNUsoPCiHeHf/8x0KI81ApZuejdg5+Uwhxbpzj3BFnnHEG27ZtS9EUDw8PDw8hxBNL\nv8vNurkYuCp+fhVwifH61VLKqpTyMVTBqZc6/DseHh4eHg7ol+glSpnfI4S4PH5ts5TyQPz8ILA5\nfn4qqtiUxl461P4QQlwel4LdNjExYdF0Dw8PD49+0K918+NSyn1CiJOAm4QQO81fSimlECLVzisp\n5ZXAlQAXXnih37Xl4eHhsUzoS9FLKXVRqMPAl1BWzKG4CiDx4+H47fuArcbHT8MXefLw8PBYMSxJ\n9EKIESHEmH4OvA54ELgeuCx+22XAdfHz64FLhRADQogzgXOAu7NuuIeHh4dHf+jHutkMfEkIod//\nGSnl14UQ3weuEUK8E1WT+60AUsodQohrgIeAAHhXr4wbDw8PD4/lxZJEL6V8FHh+h9ePAq/p8pkr\ngCucW+fh4eHh4Qy/M9bDw8NjGbBj/3HuffLYSjcD8ETv4eHhsSz40I27+PMbHl7pZgCe6D08PDyW\nBbUwohZ0Opjs6ceqJPofPDXFvqm2A4E8PDw8njYEoSSI8rFFKE2tmxMGF//9nQA8/sGfXeGWeHh4\n/KgijCRRToh+VSp6j94II8kVNzzEgeN+1eNhj9/+zHbOePcNK92M3CKUkjAnR7V6ov8RxLbHJ/mn\n2x/jjz5//0o3xeMExlfuP7D0m36EEUaS0Ct6j5WC9g2DMB+DMI8II8lD+6dXuhkeJzCC0BO9xwpC\nD75iQaxwS/KLj39rN2/629vZsf/4SjfF4wSFV/TLiLx0bJ6hfcOCJ/queHCfUvP7jvk4hocdQumJ\nftlQD/ORt5pnSE30nue7olxUnVP39paHJcIoP+mVq47oqznZoJBn6HthUXim74ZSUU2NIPLjycMO\nQRQR+ayb5YFX9EtDLye9ddMdXtF7uCKK8mMle6L/EYS2bryi745yQU0NP548bBFEkSf65UI9yEfH\n5hmNYOwKNyTHKMWKPvBE3xHSsCRkTuyJvMFn3SwjaqE/42QpJNaNV/RdUY49+pq3bjqiZtwA80Jm\neUPgiX75UPOKfknojVI+j747yl7R98RCrSGocsJluUMY+RIIywbvqS4N3Ude0XdHOcm6ycdEzRvm\nm4je91EnaOsmD9aWJ/ofQXiiXxqJdePTdTvCJPq82BN5gxYJeeieVUf0fmIujVpi3axwQ3KMRnql\nH0+dYFo3ebEn8gZdojgPN8JVN9VrfmIuCa/ol4aI+8ZbN50xXwuS53mpuZ4nSNnYFeuJfhngN7gs\njXq86vEbppaGV/SdMV/3wdheMPskDyueVUj0fmIuBd1Hnua7Q6swP546Y8F79D1hls4IcyA+Vx3R\ne49+aWiP3mdLdIfuG1+zvzPmqoZ148dRG8wSSV7RLwO8R780tEr1JNYd2nf2wqEzFupe0feCqejz\nUBhv1RG9JjG/Gag7dB/lQWnkFZq7fDXUzvDplb1h9kkOeH4VEn08MX3Bru7QRO+zJbpD2xGe6Duj\nbvSL1wvtMIneK/plgLZufMGu7tCZST51sDvChOh97aROyFtWSd7gFf0yQ5OYV/TdkSh6P0G7Qnrr\npifMseOtm3aYIioPN8JVR/Q6eOY3A3VH4tH7CdoV2tbyRN8ZZv0WLxjaYc6tMAeSftURvVerS0NX\n+PRE3x2JdVP31k0nNFk3fhy1oZnoV7AhMVYd0WtFn4flUl7hFf3S0MPHp+t2RuQVfU8EJ2owVghR\nFELcK4T4SvzzeiHETUKI3fHjOuO97xFC7BFC7BJCvH45Gt4NjYySp/NfPbHQSK9c4YbkGEnWTd0P\npE4wNYKfa+04kYOxvws8bPz8buBmKeU5wM3xzwghzgMuBc4H3gD8gxCimE1zl0YtySjJQe/mFD69\ncmmE3qPvCdOj96vndpyQ6ZVCiNOAnwX+2Xj5YuCq+PlVwCXG61dLKatSyseAPcBLs2nu0mh49P4s\ny27wN8Ol0dgw5T36TvBZN73RpOhzwEP9KvqPAX8EmMywWUp5IH5+ENgcPz8VeMp43974tSYIIS4X\nQmwTQmybmJhI1+oeMLes+/HXGXqzi+f57tAiwZdA6Iwm6yYHRJY3NBU1y8EQWpLohRBvBg5LKe/p\n9h6pZkWqb1tKeaWU8kIp5YWbNm1K89GeqPtDi5eEL4GwNEzrxq8M29EUjPXzrA1m/+Rh5Vzq4z2v\nBN4ihHgTMAiMCyH+AzgkhNgipTwghNgCHI7fvw/Yanz+tPi1pwWe6JdGUtTM909XmF1TCyMGSk9b\nmOmEgHnv84KhHWbBwBzw/NKKXkr5HinlaVLKM1BB1m9JKd8OXA9cFr/tMuC6+Pn1wKVCiAEhxJnA\nOcDdmbe8C2pGB/sB2Bl697BXYt0hvQfdE82KfgUbklPkLRjbj6Lvhg8C1wgh3gk8AbwVQEq5Qwhx\nDfAQEADvklI+bRGtWuCr6i2Fms+jXxKhJ/qeiHzWTU8EOQvGpiJ6KeUtwC3x86PAa7q87wrgCse2\nWaEeeu9wKfgNU0vD54n3RnP/+HHUCvPml4dzH1bdztjmIMjKd3AeUfe7h5dElDNFljf4Wje9YR4f\nmIf+WYVEbz5f+Q7OI7xHvzS8NdEbTUfl+XHUhqbqlTlYEa46ovdBtN6QUjY8ek9gXeHTB3tDki/F\nmjfkLb1y1RG937HXG2aX5ME7zCtMFeZviO1orl65cu3IK/IWjF19RO+XlD3hqw72B78y7A1vbfWG\nWYM+D4Jq9RG9H4A94Vc8/cHnifeGObW8tdWOwAdjlxd+APZG045G3z9dYYowLxja4VeGvZG37L9V\nR/SRlOhTBP0EbYdf8fQHb930RiShXFQTzfdPO5o8+hz0z6ok+nJB/Vl58MbyBn8EXH/wirU3Iikp\nxfPM9087mo8SXPn+WXVELyWUYqXhB2A7dJ8IkY8BmFfkbaLmDVLKZJ75rJt2NNe6Wfnxs+qIXikN\nv6TsBhlPynKh4PunB/zKpzeiCMpFRR/eAmzHiXrwyAmDSEKl5JeU3aAnZakofP/0gN/i3xuRlBRj\nQeXr9bcj8Ip+eWF6h96jb4cmrXLRK/pe8NZNb0QSyn7l3BWhD8YuL0yP3i8p22ESvT9Xtzuaayat\nXDvyCuXRx9aN76A2eI9+mRFJmXiHfqNLOzSv+9S43pBGrMdbN+2IjGCs7592+PTKZYYieq/ou8FU\n9OD7qBtCQzD4m2E7lHWj+2eFG5NDhFFEsSAoFUQu5tgqJHoSjz70kr4NmrNKXtH3RBQZabq+j9rg\nFX1vhBEUC4JCQeTCunE5SjCXkKai9zzfBk1aDTW28oMwjzAtwDwosrxBShrWlh9DbQijKFf9s+qI\nPpL4IFEPyBZF7xc9ndFkAfpx1AYzvdLfCNsRRJJiXIvFK/plgDlB/ZKyHa0efR4ORcgjTAvQj6N2\nSLN/ckBkeUMUSYo5sv5WH9FH0iCxle/gvKFB9F6N9UIUyWTjnbcA26GLBxZzEmzMG4JIZW1JmQ8e\nWnXBWO8d9kYSjC34FNRe8KU0ekNKKAhBUQi/z6ADwkhSECoYm4cV4epT9H4jR0/oDVLlkg809oIZ\n68nDRM0bVJVYgRBeUHWCGcPIww79VUj0UPHZEl2h52SyfT0HgzCPCCNJxQdjuyKSSrEWC8L3TwdE\n8YoH8sFDq5Dopc8R7wGtTn2ZiN4wt/h7Rd+OSIKIrRs/htphxjDysOJZpR69t266oW1nrO+jjoiM\nWI/vo3ZIKSkIlAft+6cNUezRF0U+NkytOqL36ZW90ah144m+F3wJhN7Q1kSx4IOxnRBJpeaLOQnG\nrlKi9xO0GxLrxqvVnjBPUMrBPM0dIq3ohbf/OsG0bvIQjF2FRO/ruPRCo9aN9597oalmku+jNmiP\nviC8ddMJOv20ILyizxzS+89LQg86nVGSB/8wjwgjSaXkBUM3aI/eZ910hl7xlIreo88cjc1APqOk\nG2SSdeNvhr1gnlSWB0WWN+j0yoLPuumIpv7JwRxbZUTfrOj9krIdrWWKPYl1hvQWYE+YwVg/hNqh\nra3SiRKMFUIMCiHuFkL8QAixQwjxv+LX1wshbhJC7I4f1xmfeY8QYo8QYpcQ4vXL+QeYaK3jkocl\nU96gb34Vr+h7Qm2Y8n3UDTrYWBC+fzrBTD89UYKxVeDVUsrnAy8A3iCE+DHg3cDNUspzgJvjnxFC\nnAdcCpwPvAH4ByFEcTka3wp94yz6qnpd0Vrrxk/SzvAHa/RGEmz0Rc06Qq94ThhFLxVm4x/L8X8S\nuBi4Kn79KuCS+PnFwNVSyqqU8jFgD/DSTFvdBbpDkyBRDjo4b2h49N6W6IXmNN0VbkwOoYONRZ91\n0xGqqFmcXpmD/unLoxdCFIUQ9wGHgZuklHcBm6WUB+K3HAQ2x89PBZ4yPr43fq31mpcLIbYJIbZN\nTExY/wEmdH82anBkctlVBd1Hvh5Qb0TSiPX4PmqDsm58rZtuiKSkUMhP+mlfRC+lDKWULwBOA14q\nhLig5fcSpfL7hpTySinlhVLKCzdt2pTmo12hJ6SIlYY/M7YdbbVucuAf5hG5LFP8F1vhzr9Z6VYA\nqry18ujzYU0AMD+Zm91t0rBuThhFryGlnAK+jfLeDwkhtgDEj4fjt+0DthofOy1+bdkhY173ir47\nGkTvFX03SCnjrJscxTGkhOo03PQ/V7olCZRH31glrihmD8NfnQm3/tVKtwQwdg7nZMXTT9bNJiHE\n2vj5EPBaYCdwPXBZ/LbLgOvi59cDlwohBoQQZwLnAHdn3fBOMD36gsjRkvv2j8D71uRCbSS1bvzh\nLF1h7scQeRlHUbjSLWiC6dHngchYmFKP9392ZdsRQ1tbeQnG9lOmeAtwVZw5UwCukVJ+RQjxXeAa\nIcQ7gSeAtwJIKXcIIa4BHgIC4F1SyqdllCZEXxCUioV8DECAW/9SPVanYXDNijal/czYnPRRjtAU\n1M8LkYW1lW5BE5INQTkhMooxlVVnVrYdMVTWTZxemYPxsyTRSynvB17Y4fWjwGu6fOYK4Arn1qWE\n7k9dgyMPHQwocp9dhPmjOSB69ehTB7tDE3tSyyUPXZQV0c8chKsugrd9DtadYX2Zpnr0eeggHY+r\nzfZ+39MEKSWFQkEp+hz0z6raGStNJVbIkS0xMK4e54+5X2v/vTD1pPXHfT36pdHYj6E96Bz0URRk\nc50ju+HIIzCxy+kyMmcedNI/9fmVbUeMZOdwTgTnqjphqim9Mk81OLSKX5h0v9aVr1KP7ztu9XFf\n+G1prGrrJqjGj4tOl9FEVhA5OWA+qxthRgijeOewV/TZo2mCFvPRwQAMakV/dGXbQbt1kwsSyxnC\nZByJ/CjWzIg+JnhN+JZIgrF52ZiYM6KX8eHgJ2R6Zd7RyKPPz5IJgIEx9TifgaJ3RGLd+FrrXdGa\nppsL6yasZ3OdhOgdFX0kkxhGLm6EuctKIlfB6lVF9NKwbnJVg6Myqh5zpOiT4xbzMElzhlVt3ejr\nOCp6vSEoNzfCnCn6pB59TlaEq4roWydobkhMS8QsPHpHtNajz82qJ0dIrJtCfhRZ9taNq0efLyIj\nMlY8wcqnoponcOVhjq0yolePjZ2xK9/BQENtuCr6DAintZRzbvrokRvVfzlAZHj0+VH0WVk3GQZj\nC3mybgxFvzi1cu2IIY0bYR4E5yojeqPWTZ6IXk9SV48+Ax9SZ0jk7vSkz7xV/ZcDyDbBsLLtAXIZ\njBXxUXm5mGcm0S9kkMbsCL2h7ISqXnmiQJpKLE8evR6ErgMwg8mu+0Sfh5qHQcj0gaXf8zRCE5fK\nE8/JzdBU9C7t0baGo6I3D7/OB9EbIigXRJ+vGMaqInrTusnNAITGIMwB0bfm0edhWckTd650C5pg\nltLIpXXjMg4yTq8s5UVQNVk3dntMsoRe8XhFvwwwg7F5KSYENAah4+TKwqdt5NHn6FCNp+5Sj2tP\nX9l2xIiM9MrcZG+Z5F5fsL9OZh59o9ZNHo7KayJ613mWAaKocTi4lA2BtVJYXUQfT1CRpwEIjUHo\nqshDYwCHdulkSZliXWs9DySmFVge2kKjj4qFHGVvmWPHhaQzU/T5Ovy6iehzUAAukiQbpmDlkx5W\nF9G3plfmYQBChorenOx2qq49MykHkj65Ea68EoOWrJu8BPXN1ZxLPZcMFL1Wp4L8WBNNwicXRN8o\ngQArHwtbVUTfni2RgwEIzUTmcvNpmux2RC9bboa5sG6yuhFmBHOHtchj9cq6g6LXN1OHvm4VC7lY\n8eTMujFPmIKVD+ivKqJvBNF0DY4VbpBG07LSwWfPwKeNoma1utIDEGgEq7PKFXeE5q2iEKoKah76\nKDOP3n3DVKtYWGm1CmQ3xzKCWQsIvKLPFE21bvJiS0DLIHRQG1kQfYsay0UcI7fWTZ5KIJg7P7MI\nxmag6AuCYqGQP0Wfg3Fk5tHDyme3rTKiV4+N9MqVbU+CzBS9+2RPboaFHB23qBV9FOSi5m3TwSO5\nWfWYtl0WwVj7azRvTFx5tQo059HnwLpJDmbxij575PbgkawGYQaKPpdxjJypMfPgkfwoevO7dwnG\nuhc1ax5DhXxkbuUs6yY5mEV4RZ85TEVfchyAYRTy0Xs+ypGFI+4Na9rsstLWjXkzLKy40gByN0mb\nDpnPy82waTWXD0WvBVUu+idnYyiM8+hLXtFnD3NJ6TpB7zp4F5988JO8/7vvz6BhASoZDbfKehlk\n3TR79CuvNICWFU8+Jik0iprlwrrJfMOUi0dvBvQLhJFc8Q1BCdEXSrkYQ+bh4LDyN8NVSfRqgrp1\nbhAPnHqUQQQ/CqEyop7nRNELHWhc6QkKubNumoONeVH0WW+YclH06lEf8GO+tmLQY6g8kpMxJCkU\nfHrlsqDt4BGH0RfFNeQLIoMuigIoD6vnLsvKDIKxTYXf8nLcojQUfQ6W3bLVuslBFxHWQRTV8yzi\nPE4evVFqJINy1/cdvo/Hjz9u/XnAIPqhnIwhmrJuvHWTIbKsdZMQfRZdFAVQiYneybrJOL0yjznQ\njsvuXZO7mK3NOl2j2bpxs7cmFyd57PhjTu1Rjao1TipzIfoMFb3ObgM3on/H197BRddeZP151ahA\n2TalSk6sm+Y8+pUWVKuM6NWjTmtyIbFsFX29MUlzYt001GoeiN5U9G5K8x1fewdX77raqTlhkwft\ntjJ885fezFuufYtTe1SjarFYEG5jSN8kosC5XpIWVJCDmkma6IsD+bFuDGtrpQXVKiN6g8Qci1Fl\nS/Rhw7pxURtBdoo+KUjl0EePHHuEy752GfMu6X6gJmlpSD132GcQyICFYIHp6rRTc8z0yoJjMHam\nNuPUlgRhAMUKlAbcFX2hFF/T7jrmxsQk2LjS/lYUxkRfycnO2Jb+8USfHbI8eCR7j14TWUaK3sGj\nj8ee83mWH7nnI2w/vJ1th7ZZXwNosbbs+0cH0GuR29LdPHgkV8HYYiVWrJZ/XxSqvh4YVz9b9rUZ\nC8uXoi/G1o2bor/v8H28+/Z3JxxgA/MoQfBEnynMOuKuEzSMA4SZEX2SdZOBR18oW68M9JIScC5I\nNV5WhOGsWqNQZUuA041QE33VcenedDh4ntIri5WYyCz9dU2Ag2vin+2u02r/AQQrvaM5Q+vmN7/5\nm9zw6A3M1u1jPfqEqUJOboSlFf3XM0Zb6qADidViUs086yaLPPqBMYdlN01E7zIAR+O4QyZEn0Gw\nOlH0jlkXemVYTEogOF0uG4R1KJahNGjfR5rYnYlePSpFH7+20pUrwroSQEV7EZRcKhZ5LnsD1Iap\nhqL3wdgM0V5r3b5zdf68M9FHEcgouzx6UVQ3Dcvlqa6TDe62xFhlDMiC6E1ry53o644era6RpEog\nrPyyGzCsm4r9GEoUvZt1o0lLCyrIg6KPPfqSg7UVQxN8ENkFq6WxIsxLMHZVKfpGB+NcjCozRa8H\niyZ61/TKZPlu768mit5x1ZMQfT0LonffZ5CZdWMQWVYlEKSUCH2HtWqUVvQOwVjdt/H3ZqvoTY9e\nb/heaZ5PPHqXGIa+VOzN226WbBWc4BV9pmheUjpaN3FAT+AwOaF5Iwc4Kvp6TPSD9svuyAjGOvaR\nvgk6K3ppZiXZ94+emK7B2MZRgtmVQAjNTWFWF6i5E71uw4BbPn5z9Uo3RZ9Z6YSmPHrXYxLV32Kr\n6JtrAeVD0a8yom9Jr5T2A0mrwswUfQZElkz2YsVatZgeveumsjDOf3dNZ8ybdRMZHn1WWTfZEH3F\nLdio9yskY9E1GGsoVstxFEg7Mm1vlA7G2s8NDf1duRK9yFEwdkkWE0JsFUJ8WwjxkBBihxDid+PX\n1wshbhJC7I4f1xmfeY8QYo8QYpcQ4vXL+QeYaD14BOz9VU0WEscvqJXoXU+YclX0LR69i9LQkzSb\nYKx7VlJWin456tHbkkaCKDBsO4f0SnC2EXVviAwUq3O/aGRI9HrO23v06rEp/XSF9xn0I1cD4P+V\nUp4H/BjwLiHEecC7gZullOcAN8c/E//uUuB84A3APwihi3QsL1prrYP9nVR79O4TNJ5cxbLKCnC2\nbspOk13GxZbAfVNZouhrGSp6lzx6mY1Hb1o3JYeboZmH7TyOktWci6JvjRfZevTtit5WUJn94mTj\nRGGcR++4ocyA7Wqj1VmAE0DRSykPSCm3x89ngIeBU4GLgavit10FXBI/vxi4WkpZlVI+BuwBXpp1\nwzuhkzdmGyTSqtCd6GMFn/irWQRjXRR9s3WTxaayqeqU9TXUhbINxrqmVyZZN47WzaLxHWVC9IWM\nPPqE6O1TdKFRLwnsiT40yl842ThR3bA1s9kZa2sBNsUKiydgMFYIcQbwQuAuYLOU8kD8q4PA5vj5\nqcBTxsf2xq+1XutyIcQ2IcS2iYmJlM3ujE4D0DZIlJ2iN+pku6TGQUuKncuGqbhJjmfG6onpTvRh\nth69Y2lp85B5l6D+Ypgh0UehezA2I0XfJKgcq1ea5O50g26ybvKh6JvTT08QohdCjAJfAH5PStm0\nVpdqzZXqL5FSXimlvFBKeeGmTZvSfLQrWg8eAQdFv1xE7xSMNTfN2Ct6nebnmlGi1dhcfc6+n6II\nkPFmF7f+ySq9UqsvfbCG7SQ1Fb1zMDYK1EG/riUQoLEL2TpzSz2KDBS9OW6cvrfWPPoVjKs0j58T\nqB69EKKMIvlPSym/GL98SAixJf79FuBw/Po+YKvx8dPi15YdTd5hrFqtPfrYuqlLx2Wgnlw69csp\nGFs1Cls5ePQZbZgyycuayJIboXsOdGbWTYtHnwvrJiEyhxIIbcFYt/TKLGq5mKsvd0VfVEIIMqlJ\n75pHXywY9ejzHowVSv79C/CwlPIjxq+uBy6Ln18GXGe8fqkQYkAIcSZwDnB3dk3ujibrpqj+NNsB\nqAed6SHaNaqVyLJQ9PbXaa11k8UpXK3P0zXI7J9yJlk3zumVLYrM9qi8hbBReM45jTAp2uVQAiGx\nbtzSK1sP+IFsFH021s2A+jkDos8yj36lg7H97Ix9JfAO4AEhxH3xa+8FPghcI4R4J/AE8FYAKeUO\nIcQ1wEOojJ13Sem6bu0PTR3suKTMLhhrWDeuwVidnVK092mzrHVjqnh3oi85Z0xkVb3SVGTm4c5l\nvUzsE8upFH4SAAAgAElEQVSi6F08aP19lYYA4a7oC+716E0h5WbdBI0xBGqeDdhfDlwUfXZp3llh\nSaKXUt4BXbeHvqbLZ64ArnBolxWaDx5Rz1c8vVKrS+1Buw5m4ZZCZubRq/RK++aYk9TaupGGteWY\nA2169C4lB5rKFBvBxnLKJOEmj951ZSjD5puhlJD272u6qbrtxYDmDUHWefTLEYyFTAKyWeTRuwrO\nrLCqdsY2nfWpDy12tG4yy6PPIhjbFHCqWgWczFo3rmUimjx6WyJrimHYkw80KzCX762hWAXlQiG+\nXvp+ylbRG8FYpF2sJ6nj7VYqoLXUiLp0BtaNy0rMXPFA7qybEyIYe6LA9FZdDy1OiD4LbxUahyI4\nqZaweXlqca229MqMPPpMgrHlQajbE31WpNFaAgHsdjaaHr171k3rd29B0k1j0f6m2klQZbEz1sm6\nCevt1o0jsixqlvtg7ImETocW2w5A/SVn6tGXR8Dl2D2zQh9YTdRmj95NaZjkZZ27rvtHl1926B/z\npuxCGmaZYi0YbPZjmIreNbe/EYx1ILLEJnO1/+LLZLAhKPNgbNI/9iewdWpbqqaYZZy9os8eiXdY\ncO/gZcmjr4xAbc7tWo6T3fToS4WCm3UTZWHdZOMbQ3ak0ak6o00/ZZZHn+w1cPSgM/fo3TcEZXVz\nTlY88WE4tvPMXAm6WzfCV69cDmQZBNGDLjOiL5YzInpTtVgo+qiRXllwrEdvTlJ768bw6MvD1oee\nQ3NapUuKpe6TomjOukmLzHbGtipxsCNp3dcZBPQho+qVmSr6ojPRmzcbe6JXj4WCm1DIEquK6Dvm\nr7paN1l69JVRN6JPMi8G1c/WHn3DuslK0dunVxokVh50Ivqs1GFTPfqC/X4Msw1OWTemveVi3Zh9\n7eTRx5fJwIPO3LrRtfZrdue9mm3IRNH7rJvs0SkI4hyMXQ7rxtav0xX69PLd0qMXRjA2qzx692Bs\nSe0RcCH6rIKxkbK3hKOiz+RGCC2ZW1kEY7V1474z1nVDUHYlEILGHAOouhO9bVwly+qeWWGVEX17\nrZsVz6NvJXqkPZkl1k2s6C0mqpQyGXzO6ZWZKHozE2TIOojW2gYXdRi27B4GCML0wVhzheFWmbFl\nUxlkFIx1OxzcNYYBGXv0xXK+rBsh1F4D4YOxmUJ2WDLZZANIKTPcGWuoMa02bO2bZMOUVvTpJ0ZT\n1k0uPPrlUfQuWS5h1Agy5kvRu63mslb0Wez8zOo7I6q3ePR2h+FkoejNFQ+4H/CTBVYV0XfayGEz\nADOp4ZI0qlXRY+0fNnKptUdvQ/TNefRgnxoXRiHF+EwZ636Sxiae8pAisBW2AdThLOp5yaFmUibW\nFrQocfvvvj0Ya5nhlGHSQ+bWTamidqFnoehtyxQb1T1BEf0JVY8+72g62cWB6PWdvCiKGZZAyELR\n691/evlup+hFi1q1rlMiQyqxwsxmw5Q+ZcqOgLKqhBhGMhNFn5lgaNprEBO9zcqnLRibRfVKt+KB\nmRM9qIBsFh699cEjLYpeeEWfKZpr3diTmCatwdIggQwcjzjrpOgdrJumFDs7j75V0btM0oToXfPo\nRezRg7V9k1UwtpNHH1psmMqk6Bs0j6Gh+GjmhWMO18nGo1fVK9XzTE6YcjnTQEYNonfIbssi68bM\nSgL3KrFZYFURfROJOSwp9eAbiJWz22YXk+jdUr/a8uhd0ytdj4GTIQMF1ZZMqleW3Yg+K0UvZeMm\nmCh6i/TBMAqpFNSNMLOsm6H16rkN0ZsF5DLx6A1Fb2u3yQxWPaa1BTHR282xLKwb3Rf6JlguFqhb\nBPOzxKoiepPEkmJLFgNQf8GDRbVMziyQlrmit9kwRbtatZykkYwSRW+dVdK0Ycpd0Yu40KqzdVNo\nVfR2K8OBUhZioWUMFcowP2lxndaS0O6Hg7sqej23BouD2YgFiNOYLYk+yiLrptE/AKWi25GdWWCV\nEX07idkqMSCZpJksu/XOWLAjenMbvIPFYZZAcCnYBapfBuPgYCbVKxOP3pLoZcBQ3Dcu35lp3TRq\n3dh59HpVmNnOWCFgeL2ldaOjhLFHH9Ub/Z/mMk1JD24evV6FDZQGMiD6+HSpAXvrpml3dQZ59KBW\nPXWXeuAZYJURfXOtdf1aWiQefSaK3gzGxtZN3WIQmpN9cI16bjHZZYebYW6CsRl49PrG41SmODKP\nW3TLusmE6M04BiiffsFF0RurQkuxAHHSQ9xPrtUrB4oD9mPITHgANc8sg7Fme7LIowcoe0WfLTqS\nmMWNVKtTZ1sCsgvGNi27KzAwbrV8j4zUQdea/WGUAZF1yrpxIPosFH3UsqkMsPJYm/onqzEEyqdf\nmEp/HRmqin9CwPip6rXjT6VvjpH0oBMfrMeQIarsK6Bm59Hr9jgRvXFwDagUXZvqp1liVRF9sxKz\nV6v6QPBMPXozq8SF6B1VXac4hkvlweRmmEkw1iF1MG5D8p05EGvYKY5hY93E/SMQ2QVjQX33th69\nvsbGc9TjkUdSX0ZmmD4YRAElUaJUKGXs0dtZN1nEDMwbIah5VveKPjt08uit0uKy9uhFQYXgCwVV\nk95V0YPyaa0UfWMAuqZXmorV/ihBc8OUPrTa3bpx2WVprnrKDh693lBWLBQdi5q1KNbhdfbplVoo\nbLAn+tZgY7EgnKpXlgoZE/2Au6IfLNmvMFpvhOViwaqERpZYZURvBBqFg3WTqUdvqCiwzwgwj4ED\ntXyfP5r6MmYKatEhjgHNHrR7PXpj16dDeuVAccBZQZsbplw9+mKhSLlQzi4YC7F1Y6Poo2YyHD8V\njuyxugzQFNR3qV5ZKpQoimI2ZTRAWTfBIoTp+zxR9CV3RZ+k6Bb9hqlMobaua7WqXrPxDjVpZRHY\nU0eclRs/V0ZgcTr9dUxChDjzwk7RZ5FRAhl50E3WTazoHaybUqHkrKAjYxy51ropCUcSgw4e/TpF\nZLWUp3Hp9FyNjedYKXpth5opqC6K3vlm2MnaAph6wqo94Eb0YauiL/g8+kxhklg5rlFik9akSSub\nQFrYrOg3PQsO/MDiOh0CcvPpl+9mrZssKg9mFox13d5Pg+hdFXQkTUVvbwEGUpFYqVByLNjVEp8Z\nttw0JcMWoj9XEX3Kv02rd51aqYp22RFZIDP06Ivx3Hj2z6p5su2TqS9lruZd8+iFz6NfHpgk5rqj\nEcguNc6cXGf8BEz+EKb3p78ONCv66vHUy1PTo09uhpZqI4yyTK909+jrUV35vaLkGIzNJmAdRAFF\noYg+mw1Txk0eYG4i5XVabMSTzlM24vEnU11G3/T0ilBt8U/XFI1l8ejHT4Fnvxl+cLVVeyAbjz6p\nl1QsUPfWTXZoIrGSPYmZARnI2KM/8yfU42O3p78OtE/2lKrO9Oh1oNE2IyCUYRLHsPfojdhDsaxU\nq62iz0IdEmfdZLEzNlIevXNxvNZg7IZnqscju9NfRxii4+TnqsdDO1JdRt/09E1Qlbu2VPSGR29v\n/7Xk0QNsvgDmj6Su269vzuVC2b5MsR7SmosKwgdjs0QTiRU00dtXHdSK3nnZ3ToAy8Nw4L5015Et\nwdhk+Z7Op29Or1R9ZDMIpZRNG6bcPfqYgMa2wLH03ipkpA7Rh7Oo540+sgvG6htPJkcJmkRfKMHh\nh1Jep9VGfDYg4FC66yRn6hayUfTlQtlR0beseEBlJkHq+RHIxirM3bpRP3vrJmM0kZgONNqcDGTk\n0po/2zUqbHiHoCbryMb0GTOdrBtIfZ1OcYyaw6qnXCgjEBlk3cR9tOX5djEMmone6eAR06NPAtaW\nHr0jaQDNxchAbZjbcA5M7Ex3nVYbcWAU1p8Jhx5MdZmGom949LaKPpShex+1zg2A4Q3qMeX8CKPQ\nWSy07oxV1o1X9JmhKaNE72h0ODAiG+um3qw0QA1Ca6KPrzV6sno8vjfdZYwU1CRH3FKtAsqaKDhY\nE62T9JQXwNE9UE1/QlBWij6MZFvNfus8+kLROWbQFowFOOnZ6RV9azAWlKpPmXmjxVPTkZSWgjWJ\nq7iselrnBlgTvc4CcvnOkjx6vRfDIf00K6wyom+QmBCCclFYb10HMtl802bdQJwxkzI1snWybzxH\n5Z2nVL+yg6K3Uau6j0pCBT/tg7EtanXL8wEJBx9Ifal6VHe3AVB91Fa90sG6cboRQmdr4qTz4Njj\n6TbfdRqLFqvLVo++4KDok5uzy80wQ6LX31m5WHY4eCRujqHovUefIUwSA/sdaUmZ4uUi+mGLzU6t\nG6aKZRVM239vusuYmUmxoq8F9qWcdfqgcy1xfQM7+Xnq8WA6OwFaAnsZbZhyzropZJl1Y6hxXatm\n9nC664gWRa9FR4o8+DAuNWLuNXDdMJWNdWPsV9HJCikFlXnjyerM2HJR+KybLGGSGNjXmNBqdajo\nXiBLBcBaJtfwhvQ50J18yFNeqBR9iiWvGcfIQtEnW/yd0itFY507drKasNP7Ul9KB/bKhbITsYZG\nCQRdtMt2Z2yiVrOoXtnRg05BZB3H4nplL6ZYGQSRTPx5iAWVQ60b7dFnVtQMjBhWeqIvFoqUi/Z7\nMdry6Ate0WeKqIOid0mv1LVu3BV9ufm1ofVQnW6UV+33OtC8OtjyApUHPflo/5eJssmj132UbF+3\n9VfDGsSZO4BKVRjbAjMHUl8qK48+MvLoQW8Isq9145x10xqMBTtropNHP5Q+O8U8mAWwtkghvjkX\ny267mVvLFIMqw1wZs7duXNIr/cEjy4swipLlJGjrxj69UmfdOBF92CkYa6E2Oqm6tVvVYwpSlB02\nlbmkoBZEwc1fDQNlQ5kY35J+QxkZEr1sJrKSpQetFX2xUMx2ZyzYZV11ixdBqrEYhDIZO6DmWS1w\nIPpCOXuPHuLib3bWTaVYoR7Vrc6L1kOlaAiq3GfdCCE+KYQ4LIR40HhtvRDiJiHE7vhxnfG79wgh\n9gghdgkhXr9cDe+EessALFkqDT3gsqht3tWjh3SDsGPAaaN6nDvS/2WMVU8lg01l2rqx7qOw1k70\nY1tg5mCqy0gp1YapTNIryUTRJ7aEc9ZNRoq+NY8erMopBFGUpJ2CGke2it7MuslsZ6yGRXabvjmX\n41W4zffWmkfvUvQtK/Sj6P8NeEPLa+8GbpZSngPcHP+MEOI84FLg/Pgz/yBEa/Rn+RCEUWJHAFQs\ntx63Zd1YRt+Bzr6oTaCodcMUwMgm9ZiC6IOoQ8EuhzhGkhpn7dHX260tC+tGT0idBeRCrFHUSdE7\nVK90yOBQDergQQ+uUWMhLdG3BWPTWzedPHrb3dVmXMV9w1SHWFhKoq9H9WRnLNjNfb0I0POsHAsF\nm9VBVliS6KWUtwGto+Bi4Kr4+VXAJcbrV0spq1LKx4A9wEszauuSqIcyyQ2HWNFbLClbyxRnn3Vj\no8Y6BeTWAyJVzZMgipI+yqJMRFEUHT36erNHD8q6qc2mqvKpJ2RWefRmUL9YsAs26uqVlUIlG+vG\n/O6FSE9krRumwEp0hG3WjYNHLzOoONpN0Y9sgtl09YD03oeE6C2+t9asm1KS9JBjou+CzVJKLbkO\nApvj56cC5tlke+PX2iCEuFwIsU0IsW1iImVxpi6oh1HSqRBHu212NBqFjcyfrRB18KBt/VVoHsyF\nYpyqmULRhzJZ9biUiUiyblzTK8N6885hgLFT1GMK+0Yr+Czy6M3MJNDpg/bVK10Ce0DnYCykJ/qe\nwdj+jyYM2oKx9h59PTT2PsjATvUm1Ss7rAxnD6aqzmlWQAVbolePrbv0bavEZgHnYKxU30zqv0BK\neaWU8kIp5YWbNm1ybQagBqCp6MsluyWlVqv6GLjsFX16b71jQA6Uakmh6GthlAw8lzIRSdaNcCxI\n1Zp1A0rRA8z0H5DVxL4cwVjXrBt366bLdz+8IX1Av3UslirqoI5UWTeNMQTKIrUpowHNeetgWTOp\nm6IfP0X9LsX8MDdM6falbk6LR98QVCsXkLUl+kNCiC0A8aPetbEP2Gq877T4tacFQRg1e4cFt52x\nrmlWQOflcnlQLZlTEFnHgBzERJ9G0UfJwHM5+Lp1w5TTsrvVox+NF4gpNgM1Eb1j3npoxDFAWRNp\n1VgkIyQyUfS1KF0VxeaLdVP0KTfedQrGQuqd2vUOit7FutGKHixXz92IfsxOMDQpeiuPvj29Euxi\nYVnBluivBy6Ln18GXGe8fqkQYkAIcSZwDnC3WxP7R6tHb51eaZCYy8YJoLOKAqU2plMEHHsFnPok\n+jCSRLKRP5+UiXAIWDtvmArr7UvukfQrHv0dadJw2TDVusPaRtFnKxYyCjZGoTq/uBUp7b8wlIlY\nACiX7A+/roeNrBuwLHfdKYYBjZVhinmmC9G5WDdaFJglENS1Vk7Rd2CgZggh/hN4FbBRCLEX+DPg\ng8A1Qoh3Ak8AbwWQUu4QQlwDPAQEwLukdNn7nQ5B1KzoS0XBQj39Px9EAQKhcsSzOB2oE9GPbUmp\n6HsEnPpcmmrVVWq7GToEY+MCUG4bplqIfnCt+jtTBZmbrRv36pWNn0uFQupaN6ZYqBQr7taNKDS8\nAI3RzYrog6raILQUZBdFv/7MVKU0Wj36SrFolfQAzWcIqGtnqeh1rKf/eaarV2bh0Sd59A7ZbVlh\nSaKXUv5Sl1+9psv7rwCucGmULYJQtnmHttv7i7E6yMa6Kbe/Pr4lXUGyXkS/ONVZGbdAq9KmzCTL\nMhEJsQrHDUFR0O7RC6HiGA5En6V146LotTp0sm66EfTa0wEJU0/BxmcufZ1ONiKoCpY7rlUHvpSH\nlrxMq0dfLglrj74e1SkXy8vj0Y+epOIaaRS9UQJBty91c7RHr8800Fk3J6B1k0vUo+Y8etutxzog\nAzifP9oxjx6Uop+b6L8MQrfl6VjsZ/eRoaKVe9NeA8vNLrpP9AlK9tZNrTOJpYw96Am5HCUQSsX0\nO2PNEhGVYoUgsswogVjRdxhD605Xj1OP93+dTn298VxA9n1iVbuitxtDUsqmA93VtW2IvksMo1BU\nq54Uu6zNw2LAjuiTPPpkZ6wumX7iBWNzidat2SXLbAA9+AB366ZTCQSIA0USZg/1d51OG6YA1j5D\nPfZx4n0tsW6aU1BtJqnuk0qh4haM7ZRHD3H53PQefRZHCUaysewGO0Wf3Agd/V7VoC6Kft0Z6vHY\n431eJ+p8w9j0LPXYZ136MGovgRDJ9OmDrSmx4GLdiM6Cat0Z8Pjt8OXfg733LN2mDIKxbXn0DqeU\nZYVVRfT1UDaRWMUyGKt3NEJs3bj6q92CsdD/srKbol8bq7o+jt/TfVFuKRNh00e6TyrFils9+m6W\n00g660aTaLnonkevqle67Yw1Yxj6uEU3ou9AYqMnQ3Gg/6MXu1k3+gzaL7wTHrttycsEYXvWDaTP\n3mq128zXUqHbHAN47fuVmLrnX+GuT/TVJvcNU+qxNevmREyvzCWCKOIX9n4QvvZuQPvPlh69aBC9\nu3XTyV+NlfiT3+mvzHA3H3LNVkDA1JNLXiIh+paboc2qR3vO5YKqPOh0sHNHok+ZNtqaXulcAqHx\ns02tkqaDWeLvrBZa+vTdCLpQUIXt+lX03bz+0gC88O3q+Q1/uOR4DFosUm1NpB1Hid2WRTC2G9Fv\nfQlcfouq9LqvD0UfB4cz8ehbT3I7kTdM5QlBKHnx5Ffgrn8E3DZMaY8+m6ybLgGwZ/4M3PQ/4YPP\nWDpnvNummVJFrQ5SWTfuil6TVrlYdjvoI6x1DlaPbFRlEOoLfV3GrHVTLpSJZEQk7RRU2LYzNn1Q\nvzXrBhwUfTeCBrWie/K7sPOrS1+n21gEuPjv4RevgiO7YOcNPS8TRpKSkCrbh0ZxvLS7Y5OUWCMY\na7UyDHsQPcDm8+H8S2DyhzDXOx01i6wbKSXDLFKIbdmGdeMVfSZoVe+qmJCd/5xp1k0nxSoEvPmj\n6pSo2iw8fP3S14Hu2Rf9WDdRezC2bJmZpBV9pVBxrCXeIesGUu8eNhW9U2CPbsFYt6wbcFX0XYjs\nJe+EgTH47Nthz81LXKfHDQPgORfBwBr4Ye/rBJHkl6auhD8/CaLQ2rpprU+krm2r6Jeonbj1Zepx\nb+9tPa3VK21s2zCC3y99ntJ/XAyY1o1X9JmgdWlUKhasi5ol1s1ybZgCZd/8xu0q6+Gh6zq/J7lO\nl2AsqOyLI7uWXMIr5S55zoMfgn3bAR2wtlf0lWLF7USnsNZe6wbUSVPQty3RumHKfC0tCjLglYc/\nkyjWUkGk7qMmj76QgUffrQjss38WfuM2NQZu/7D9dUCR5emvWNKnDyPJ66a/oH6ozzeIPuWRlE0V\nRx2yXHrOMY2Tn6selzhQva16pUV7gijiFHE0yYRzOcktK6waoo8iSSmqNr1WdihTnGTdOJwdiZS9\nl92glP2z3gSP35kQS0ckmQUdvrLzLobqDFz50yqnugtqYcQoC5y565/h31XB0bJtwS6DWJ2sm6hL\n1s0zfkz1244vwqEdfbfHuW4KcJG8hdfu/Tu446MADJSLVIN0NzIzC0j7vfaKvkswVmNgDC74BWXh\n9LIm+lG+Z/6kOrHs+N6ub2lS7vVFa4++ybpZLo9eY2BMBa+P/rDn27KwbmpBxJrCAqI2B7KRoeSz\nbjJAPYoYp/ncS9vyqXr5pq7hYN10y5RpxUnPUTeEXvZLr8H8rDfCf79Tvefr7+56iSCUrBWzTW2y\nrVNiKnqnOEbYoR49qHrrp7wItn0S/vEVS55p2ppHD/aKvibjaXF0j2pKqUi1bpdHXxQNRe90sMZS\nY+hZb1QpuLtv7P6eTtUrW7E1rireYzNfk40VLFLJwLrRK2irlWEULrlZEFDZRUsQvc66cYmrVIOI\nMbGg+juoOh3ZmRVWDdEHoWSNaCX6AtImvzc+GQhwK5DVy1c3sf5s9TjZYxAuNdk3nQvnvQWe+E5j\nx0YLgjBiA3GN9/IwoE/hsrBujKybwdIg1bDHaqQXeu3o1ZkgAE9+r+dlMkvVA2oy/r7iYNpgucBi\nylIaZhln5zz6pVaFoA6KHxhPLLmO6Ef56tz8HivDoIXordMrdR69KDdOdFoujx5gw1nJzbsbzDNj\nwc6jrwYhY8RJBPX5RlEzn3XjjiCUrGW26TXb/NWmPPpMFP0SamNDTPS91MZSgTRQCnhhsmsGTi2M\nWCdm1A8VRfS2uxprYY1yoYwQgsHiIIvBot3Oz061bjRe9Cvw+w+p/nvs1p6XMa0kJ9IABmR804oz\noQbLxfREb5Rxzsa6WeK7FwLWn9X9oHgpleJf6sC34Q1QGuqZrivMv6O+YH0k5dNq3YBS9PNHutbe\nl1I2grH6O7MoXVGtR4yKmOhrs0nWjVf0GaAeRaw1FX0YWC8p9clA4JhH36+iH16vCnn1UvT9LLtP\neaF67FKgKgglG4iJ3lD0VhumonpCqIOlQUIZpu+nKIr/ri5ELwSsORVOe8mSAcKsrBspJUMsqh8M\nRb9QD1PdyHR7MlH0uqjZUuhF9EH8N5UHe19DCJUkcLw70a+LjJLGhqKvpQzGmnn0egVtV+umy+7z\nVqzvLaiSlNj4nF+zjWlQDSJGZcxFtflGHr336N0RhJI1pkcfLFgHQbRPB4559GGfHj0oVd9T0feh\nWjafrwKbXZbvQWQq+hHA/oT6WlhLfEx95OJC2F/OewLdr0v5q1tfogKyPZbRWVk3UsIQsaJfOAZh\nwGCpSCTTpcc1efRxPy2rogc1hqae7NxPej9CaemiZax9Rk9FvzEyUl7rC1RKdivn7BR9n/2z6dnq\nceLhjr82z0HWNZxsrJtavcawFgv1OeMoQa/onVEPo0agEaC+0KgDbeEdmjtjrUsg9KvoIQ4U9fAP\n+yH60oAK7B58oOOv66FkvSZ6x2BsPaonQUZ95OKiVo39IuyT6DdfoCyeHv3TieitaolLybAw4g3T\n+xiqqL5aTJF5Y5JGJoq+H7Gw/iy1QupE0pro+6hOuRTRbzCJ3iHYmFkAve/+ORPKI13nhzmGwH41\nX6gbgrM2Zxzw4xW9M4JIsqaF6BPrxmKzi7lhyn57fwqi33w+TO/rftJPtwqGbdd5Lhx6sOOv6mHE\neh2MrStSLlls74fYo48JeihWidVe6aGdoBVup/RKE5vPV4890izNnGwXGyCMJMMYf0d1hoFyTPQp\nfPqOit62VHG/HvT6s9RjJ/smsW76JPqFYypltwNGo+aVs3Otm+UsgWCiUFRjqQvRmxVHwX6zZLFm\n9Ftt3nAWvKJ3RhBGzdZNfcH6TFQzvbJUKLkr+n5Sv05+nnrsltYWRf0N5pMvUMXAZtqrYgamog+U\nwitblik2rZuBojr0Ir110+eNcMM5ysfvcgODzhumbHbrRlI2rBuA+jyDcbAxTYqlWcbZJYNDNarf\nYOM56vFwB2uiPq8e+yH69Weqxy5liwel8T3XGx59NeXmxKZCdC4lELqd+dAJJz9XEX2HeEsSV7n/\nc/FKxY7oS4EhOGuzlJNgtVf0zqiHsjkY66g0zGCs045G6G+Sbnm+ejx4f5dr1ftbnibqt1211KOo\nQfTxUr5sefBIazAWbKybPhV9qaJK6fZQ9FnZAJGk2bqpzTGYkaK3Hke1uSSm0hMjG5Qa71S8K17B\n9eXR67HYJag/jEH0gbFytoiFQRaKvk+PHhTRV6c7ZqYlKbF774aJndbxuXLdUPT1eYbj8TNfe9oO\n22vDqiH6IIoYMQdgfaFR8N9i+3rx+F449nhSAsEqdbDfDVOgMm/GT4MDXYi+Nt/fZN98gXrsQIr1\nIGIdLURvm14Z1RKPXls3y+bRg7qB9bJu4r0PQgin9Mo266a+YBB9//2UqUffL9EDnHphF6JPoejX\nnq4ODN/fHtSXUjLcqugtg7Gdbs72JRD6mGPQWDl3sG8S+08CsxPW8blK0OLRFwsMlgvM1RxKqThi\n1RB9PZSMikWk9rHrC9YF/8OwRvHgA3DvpymJEhJpuaSMB0m/amPL87or+toMVEaXvsbwehg/FQ62\n239RY4oAACAASURBVBxBZOyMjYm+ZFmzvx7W27JuFkNbol9C0cOSMYwgCijLCL51hZuij1R6ZbU0\nrl6ozzNYVuMozfnDZqqec1Gz+nySDrskTn0xHH+q3brrN70SVIrlqS+C/fe1/SqIVGXGanE0ua6r\nR1+OIobjv29e35DSoF9rC1Sygih0JPrk5oyEuQnr1XwlbCZ6gNGBErNVT/TOCEKl6OuDG9QL9YXE\nG0tbgyMMa5SkhPkjTnWpUwVjQamNI7s7b/dPo+o2X9DRz66HktEk7UsrekE9ilKvWMxgrLV1k+ZG\nqC2pLkWpgiigFIVw21/ZxwxQWTdDosbiwHr1Qm2OIRvrxlT0LmMobkNfN3mA0y5Uj/u2Nb+uCbQf\n6wbU5rvDD7cFZMNIMioWWKisUy805dFbBmM/8ZMMFAcoF8rM1meX+FQHdDvFrRMqwyqW0UnRR4ai\nnzts7dEPhKZHr+byyECJOU/07qiHasmdEH2waJy+nrYGR40iJHd1cPAOof9A0ZbnAbKjGqc6CwN9\nTvaTL1DHwrVkwUT1RQZEXa16ggWQ0rpMRJNHb63o+/TooaclBeo7K8U3q7HyGAAztc5ZI70QSTWO\nqprImqyb/ok+sSV2fCmJ91gpeinT3eS3PF+RXqt9U0+RdQOqiqUM20pPBJFkhEXqpVH1vdXtPfqk\nj+qq+NdoeZTZmgXRp/HooRGQbUGyCpNuin5QZyUVyskNdqRSYnbRE70z6pHadhwOxXXMDUWf2qOP\n6vGXfcTdOwQL/7CDfZNG1W2+QP3bEzubXhZ6Eo2epB6blt0pFX1Uo1Kdg+2fYjBW0Ok9+hRZSaOb\n1fb8LtZWUJ9TSgwYX1QEb0X0kdowVa3oleFcYt0splCsmrBGb/xTRFClUqjYjaGgqgi30qd1Ux5S\nq5+9XRR9v0S/9WWKyFtKT4ShZEQsEhSH1eogWDRiYZbWDRKm9zNaGWWmnv47S+XRg9pBfvwpONK8\nL6Nh3QBzR6w9+qFojohifHiOt24yRRArepPoh5Jod7oODqMg/rIn3FLj0lo3a05TQbBOwbR+PXpo\n1N5uSdUsxMtioYm+vsDogOqjmWq6v69enaHy+B1w/W8zGNfdXghSWiWJou+D6IVQgcYn7+r466A2\nr7xVYHTyccCO6PWGqVplLSCgNs9AKb2in6nPUACGpYSFSfuaSdrG6/e7B9VP++9tnGEA6fLoQd1Y\ntr4MHr2l6WWV9LBIUB5Rfn+8MbEgLIheV6+UwOGHHBR9l8N9uuG5v6huYvFJdEl7EutGwuxhK0Uv\npWQ0mmWxNKZWYYl1U/TB2CwQBCEjLBINa+tmgbXD6sufmk/3ZdWiuvqyTaK3maRhymCsEKrc7EPX\nw+Lxxutpl+/rz1YnND1+R9PLBT2JRhpEv3ZY2Sap+yhYoBJbJYM1pRZTV7BMPPo+J+npL4eju2G2\n/dDwejCXWDfFiYcZLY9aKnqVRx+VhlR/G9ZNNQ3R12YYlUJNsPlJKoWKnXWjd1n2G4wFVRuoOg2H\nDZsrrUcP6qjLgw80bcAKI8kIC4SlYbUTO7YHyxZnD9fjNpWlhMMPMVYZs/Po0wRjAcY2K7K/7z8h\naHwnyYYpsLZuqkHEGjFHrTymvjNt3QyUmKv69EpnRPU5CkIiRxqKfv2IIrHJ+f4nWBiFTEc11oYR\nLB5nNLYlrAagVlGlgf4/85JfU5P7/muM61TVYO7Xoy8U4KyfUmrMCLImGzkMRb8uJvpjc+lIqBbW\nKceXLldnKIqiQ3plHx49wDNeoR6f/G7br4L6QmLdMHOIscoY07XpdO0B5quBqlNSGVHq17Bu0mTd\nzNRmGAvj9y9M2hfHSxR9nzd5gLNfDQjY9bXGa/VFtbM6lfL9BXWd+z/XuEykstvC0mhs3ahVXKVY\nSB+MrarvpwRweCcj5RHLeVbtfwxpPOtNap4ZQetFvYkwtm3LxXLqm3M1iBhnnnp5XK3CvHWTMaqx\nLTGwJgkSDZWLVEoFjqUg+pnaDBJYF/t169UwZHKhS2mCXtDnneqbTz849UVKkZvnf9os3896laq+\naOySLNVbPfrGqudYSkVfj+rKWwVYOMZgadDCutFE36caO+WFilw6VLIMgkVl3YgizB9hrDJmpegn\nZ2YoCkllaFQpstq8VR797OIkYzoGsXDMijQAtX8C0n33Y5uV7WKeQ1xfUDcu4yzcJbHmNDjjx9Up\nXzHCUKVXhol1o27ua4bLqcVCUJulJCUCYOaAUvRprZs4Ow69ku8XZ/y4SrM0rKljs/uBeM7PTTBe\nGU8tFqpByBoxp4h+YCxZmfusm4wgYjIUg7HSqC8ghGD9cCXVADxWPQagFD2wPn48utj79PiOmIst\nhuEURA9wxivhye80PFZNWGkm+zNfqwbyAw01lhB9k3WjiP74QkpFL0Mqes/CwjFVk345s25A7ZA9\n66dg9zfatrAHwaJaYWw8F+aPWk1SgOnjqlb54EjsscZnopYKIpVHPz1/lDH9/c1PUilW7A5n0cTX\nbzBW4zkXxbbLY+rnYAFKfeTQt+Kc16qg/vQBdZkwYERUicojTYp+y5pBDk6n+/7rtVmlnoc3wNwR\nO4++Oq3G0cimdJ8bWquEww+/nbw0Ob0PgPVrz4CozubKGg7NHyKS/d/ga4E66S6ojMPopkTsjQyU\nmK+FRCt0+MiqIXo9IQoDY/GSWymhtcPlVGp1qqom+tqSmlgbAvXZyUULRT9/VFXLSztJT3+lUgI6\nZ1wr+n6tG4DxLXDO6+G+TyfKuaR37HWybtIqeiIqg3EKYqzo0+fR93kwi4lzXqe2rx95pOnlIKxS\nBnVI9vxRa0U/OzPNk6USP3/w07x2eJ7j8TXU4SP9T/iZ6lSD6BcmWT+43k4s2Fg3AM95s3rc+RX1\nWF9I5/NrnPUq9RivomS8co5aFP3Ja4Y4eDzd968UPbDpOTA3wWhllNn6bCpitVo1a5zzetj7/eSA\nmcn5gxSkZM0mlcp7kqgQRAHHFo/1fclqEDEu5ogGxpWgmjsMUZQkPaxUQHbVEH1BK/qBUUVk8aER\n69Iq+vhLXbtWVQIcWThOpVCxVPRHVP2RtDg99qL1srKqVV3Kyf7iy1Q/PKLOES3rHXta/dQXGK4U\nqRTT2VuRjAiAysA4DKyBhWMMlYbSK9Y0WTca575ePT7w+aaXg7BGSZQ4UB8hnLW3bmpTB7h3cIDp\naJGDIuKHdbUqGCwXUpUpnqnPKqIXRZifZMvIFg7OHUzdHi1YasXhdHsd1p2hsq8e/nJ8nYX+dsW2\nYvNzVSbYD78FQBRvoJKVEbVCiG/uW9YMcuB4ulPG6vU5ZbdtehbMH2G0NIJEprMAXYj+OW8GJOy8\nAYDJuUOsjSL2Dp4LwGapbK5D8+0FAruhWgsZZ55t5TpXVp9SYmbhGCMDyp5cqYDsqiF6YluiODje\nVE97/UglFYkdn1N393WnvgQQiONPsn5ovaVHP9Fk20gpm5ZuUkp+8NRU+3Ju7TPUxhftjcarla/v\nnuMzdz3JF7fvZdfBZhJbqIUcnW0h2me+Fsa2wParAFWDI0I0JkV9HiEEa4fLTM31r+iTqoOVUbUE\nXjjGQHHAwaNPQfRrToNn/Sx8/5+adhCr9Nci1+2uEs0dYdyS6IvHn+TRciNmsC9Sf9NAKd1xgrNh\nlbFCmWBkM8cnD7NlZAuH5g6lr6gZf/e//p8P8b+/0nlX8JNH53lqskPpgOdcDE/dDcf3JR79/Xun\nqAURjx+ZoxbWODx/uPe/XyioVdQjX4ewTrSo+jwqjzUR/cnjg1SDKFX2VhAsKLttw9kQBYzGp2il\n+t5a7NGDxxf525t3NwWGu958TjpPlXaOb4bH5idYH4a86w6VPDE4o/62Q3P9E32tOseACPhfwXY+\nfuQuNZZmDzEaE/1syjTmrLBqiL4Yp6HNFCOmxrcoopcytXVzbEqlkq3d/DxFKpOP2i+7548wKdbw\n6g/fwtR8jd/69HZed9Wf8Pf3/gP375vgytse5eK/v5N3fPKu9hzkC/6LyqeffDSZ7J+8+zAf+OrD\n/ME1P+ANH7+Bd3719/i1q7/EgeMLvONf7uINf3N7c2S/WIIXvA32fBNmD1MJ51hksLEyiIly7XCZ\nqRQefU2XTxgYj4l+ys66md6PFAWOC7WT9eM37+Zz257kpj338jN/+0Xu3D3BvU8e43jr9/eK31H1\n0h9qBBv3RYsM1gpMyjHKss5oYYDZ+mxqYq3M7uXRcpmto6cCsD9SN880B4SHUcisDKgUx9g1XWbb\nw3tYN3ASgQyYWGhPDe2J+Du692Cd2x5Rn901uYt33vhOHjr6EEfn5vn5f7yTn//H7zDVKmgu+HlA\nwo4vQbDAXFTmLX93J7/0T9/jVR/6Fr/85V/jTV+4iA9+425qQcTvf/a+5N9owvmXwOIUPHorsmYo\n+vJQYt1sWaNWCwdS2DfHazMMI7jnqLIPx+I5kMqnn1eK/u1XP8q/3PEYP/2hW/ibO77B277yazx2\n/DGCMOKiv7uDt//zXUy2ruyFULGMx26FhSkmF4+xNhI8Ik8DYGG/unYaRR/OTzFvBLw/NzYKc4cN\noveK3gnF+hzHC4K3fe89/Mb0dmR9HuaPsn6kwtR8re8gyNTxpxiIIoY2PVvV5Z58lDWVdXYe/dwR\nHpkZ4NGJOT74tZ3cuPs+DhW+zCfu/0d++aaf4W8f+X8oDD7FnXuO8p0fttxIzv959fjgF5LJvn+x\nkaI1cNJXuXviZr638Oe8/tO/zvaDO5iYqXLlbS2HTjznInUo9J5vUgnnmSgO87v3foQ7RseTjJy1\nw5VUN8Na7GlWBtfC0DrkwjFGSqPpb4aHHuTY4Fae/4E7+Mg3dvHhmx7iz+75Nf7gzl/h0Jo/4/Jv\n/xL/5Z+v5dUfvqV5km59GYyerFQmcHzhGIdFyMDCOkbXbwZg9rj6e9Km640s7GNPZYBnbziPjaLC\nftR11o9U2DfVH4npf3OuOswxOcoaZnlkr5roqe2bOOtmngEePTLHb39mO5dd/17uPng3//Ur/5VX\nf+6nmRL3MjlX46M3Ncct2HA2bHmBGkP1BfbNKQK654ljlNd9l13H76UazfOpJ/6IC6/6Kb7yxGf4\n/z7/g/Y0wLNfDQPjsONLFOKicjcvPsTlC7uozx+FMODksRIgOTjd/6puZ22Ss8QwH/2OuuYPdqmA\nb6rvLFb0dx8u8IGvPsxCPaSy8VvsPP593nLtW3j+v/44u+Zv5I49R/jrG3e2f/7ZFyl75ZEbmQzm\nGAgrvOzcU5kWo8zv209RFJde9RiI5o+xfVCtCIaLg9w8MgyzhxmJTylbqcybZSN6IcQbhBC7hBB7\nhBDvXq5/R6MQzPHxdWuZqB7loeoE9w9U4NFb+G/3v4OXiR3M9Fln4tjcIdZEEWLD2ch1ZzF3cDd3\n7KxyaPbI0h82ISVy7gj3TRcpju7k6u8/wfiWbyNkhc0Ll/PyDb/IQDnk/OfdxMjgAp/afguPH53i\n0PSiuimt3QrPeDk88IXEo18UFSDglC2PU157L7VjL6Gy+ELE8B7GzvoEr3zOIv96/6f42He/wK27\nDvPDiRllAY2eDI/cyGA0x19vGOZbT32bP9m4Hrnv+7Dra3xw8vcpzPZPQPWDqqphrbSBGTHG3v37\neeTBkMeOP8bemb39d9HBB/hGuJny+lv5uztvo7TmPoqDB6hPvJHzK5chinOcdO6/M1U/wHu/eh2H\nZid57Mgc1UjCua9TvnFY55HHlX98fPFMXn+hKn524/dVvfHp6vGu/34njNb2s79U5Kw1Z3FKcYh9\nIoIw4LeGvsmm/Tf3Fe+ZiVPqji6Msumkkzm5NMe3vqNuwAfmDqRqD7VZapQprP8epdEdfP3xrzMn\nHqF65FUUp95IMdzA+NZreMUFh/nivj/nE9v/g9v37KcaxOP9ub8A+7cjDz3Eg/MBw6deQ2l8O4Ob\nvkUwdzbVw69HhkOEYYmhTbcysfgUf3TD1fzZDd/jl6/6Aj946qjaB/KsN8LOrzC67zZuGRzmk0eu\n5bv1I9xSjmDfPTz3i6/mA6V/Ye+x/oh+em6CvSKivHgS8xVVQO6BnSrrZTqNTTp3lMXCCLVCSBhF\nPOsUQWlkD/Xp5zI0czFRbSODm6/np55/jGseupFfv+5D3PbYg+w5FguiU1+sqr3e/1kmZR1ZH+TC\n09cRjWzmLdWvsqYe8VSPYxVbIRemuHV4iIoocfn5/40DpRIHDmznRV/6Sd5T+jRTKVNQs0KK7WT9\nQwhRBP4eeC2wF/i+EOJ6KWVnkzEDVIMprhsd4Q2nv47b997O/1m7hvff+Md8tlTnl9f+DT/41jgv\nfuFPMrx+C2Jwbdd84qnFo6yVBY7WK+w8Ns4rgyleET3KtsVJntr5bU7b+jzEwJjylXvlJNdmqUY1\nPn/SkwyPPEBU3Ug4cIR3veBd/Pfn/3cAbnz8JfzhrX9I8cw/565qyEVfeT8yKoGIGAjO5kXRMJfP\nbOf5D3yO7w0NIs/4BJsKBWqiyhmjZzNW/1WuuORFDA3NcMl1l3B//X2wEf7lkWuR4RAUqmwqvIg3\nrT+Tn3/0mwQMc+vIIKeNnsbe2b3cOLWLDV//fa4dq/Kmufdz8JFTOOm0cykMjvesHfLkfV8C4C/u\nFgzVFrmICT4093Xevm6Uz9/2YX7vVX+i/NvyUPfrLE4zM/0kH98ywGDla8joJmQ4zDlrn8WnLr2C\nkYEyD0y8kV/52tsZPvtD3Dkvec3n/gIZjFEMT+InRtfw6yxywW0fYXdVTcTjxQs598zT4dvwh+L7\n/DHwz1//ff709R+jNLJZ7Z4s9NY2uwcmiESR8zacxxOlMXYUjnLk6kvZM3kXP7MOvvf1k3j1q97I\nwOh6lV7YYQ/A7PG4PdE6Npz5LDYc/RbXlT7GT7OBu7Z/kdetOZ/i8FqVLrtEe2ZmjvOxdesYWPsV\npBQIWeaZa87jtMpl/MmbLqAmDnPxtRdzX/3DyKEif//ADuAv4U4oM8aphXP41dERXra4yEdOOUax\nfJSh8e0URYk11Z9j79GN3PEbf87tT93N+7a9i5GzP8LtM6CPLXjbN0tsHjyb88UovyAWuWDXv/G+\nU7Zy2shWZutTfHZ8kR//xnv5YGWWkzbew9RtH2HuzN9lZNPpPfdH7Pqh2sz1xORWLn7lC+BO+NPR\ne3lHFHHlt97LCy/6DGPjm6E40PM6telDfG1gnPFnfIBw7plsOPVk9h+X1I68hg+//S0MDwT8yd2/\nxva5v2R4K3xvCr53m4pZjXI6a8onc9aaM7h87+3MnHIyYTjGy8/ewNpHhmAWXlCd4/YnvsGhffew\nedNz1E2vx9wIFo5y48gwL1vzPF6x9af52P2f4I4dn+aJSoHCpjuZ/ObvMH3SBxhfexJUxvrfQ+II\nYXWgxlIXFeLlwPuklK+Pf34PgJTyLzq9/8ILL5Tbtm3r9Kue+Pb3v8Bf/eDPAKiLkEOlEp+76HPc\n/dRt/PV9H2c0ipg1JlJBSoalZDiK4l2Uiqj1/wUwURSctVjk3r1/wavl3fyfyke5fWiQ3968iUgI\nhqKIISkpSCgCBamWRSL+vEyuB7MFybFikdc94y3sPLKHnzj9hfzRS/6Igmi06YZHb+Dzu77MSP3F\nhMUj1MIqxxeqPLG4jUU5ASJkLIyYKRbYOnI2G4bHGK2M8t6Xvpet41uT69y+93a2HdrGwf3nUCtM\nsFB8mEPTNXbP3IUoNZbCI5Hg6790G7/55f/KI7P7kAICBHGCAQNRxICUDEhJRTb3kO6j6QIsiCIv\nGvhLXvjw1fxW8VoAfnHLqewcLDIYRVTia5Rl++f1f1MFmCkUed/LP8CH7/kr6lGVf3vDJzl/4/lJ\nez/10Kf40u4v8czKz7FzajtDg1Uend7NgjyEEJLRKCJC1Uv5uVM+zx++pAIffxEAf7phE9eOD1GU\nkuFIMiSjxu7ZpDXNzyeLsIExvnzZnfztdW/jk9M7KEtJ3bipVyLJqIySzT4Fqf8uVfKgJuBQqcAl\n4cX870v/AD72XGSwyEVbtvBERVCQksG4TWVp9k57yySSfeUibz7jv7BYh0o54H+8+Dc5NY4hAFy9\n82oOzx1mz54LWSw/yNDQLPfuPcx0cICwsgdK0/F3K/iXn/0U+6aP8rzN53Lw/7Z37sFRlWccft6E\nQJBEW6BcCoKhBUEoSEqRDowOVKuk00FQayhUZ2pLZxRap9gRhtraji2jKfzB2NFCuUkRa4sI00G5\nCbYOIgQEEkvljk0IhEsu5L675+0f5wsEzIYEXfbs9n1mNnv27Gbn2d8537vnfGfP+c7dwL6iCh4b\nk4WqsrhwMZU18OauWob3r+SO3gNZvHM7JQ37SWl/DklxQ+2psDRnOQVnCsjLz+OmSISK1EvFr7Gd\npXtKClxsK4IgLv+aFDjXLoWs0qd4/aeTSZ/r/xJsRWYXXujaCVElwy2zFECaZCzuPX08Pmnfjs4d\nunG+3u9imXLrD/lq2kM8kN0LEaG8rpwFHy7gBu3H0K5DWXtoM6WV9Ryq2kGYC0i7cnCf7e7aYcz/\nyQpk/iC4UMLK7g8zr+N2FOjoKan4nylVfZdU1/4bW3QE5WRaKr8e9HMmjniE0a8Mo1rE1Qkh7ALo\n5HmuDglDvG7Mn7aNa0FEdqvqiKu+LkaF/kHgPlX9kXv8A+AOVZ3e5DXTgGkAffr0+fqJE58e2utq\n7CzYwsvb5/gFVlLocdMQfv/wQjz1+OObkymqPs3UUU9T3i6DjbtXU1N7jrpQJfVeHZ6G/b5rPFQ9\nhMaDocrAzLHUZUyhT4bH1LpXaZc9lY2nithSsIqacAWhSB2eRvA0AkTw8NDLBibxC0CqpDJp1C8Y\n/7XvXkuMVNVXs2j7qxw4uoYb03vwu9yXLl5rvbWEIh57io7z993LOF+ez6i+Ofz4W9M5W3aMF9+a\nhkgKj3/nz2w48A57D79DOFRJQ6SekIYJcykj1ENQFH+FnTRsBjkjv8eF43u5MX8B3DySA73Gs+q9\nP1BWf4qI10BYGwhrCNEIaMSdR9v4V0mT9uTe9RzjBoymuKoYz/Mu+/JqiWPnz/GXPWs5XvwWhKv4\nSuZgZj+Uh6gHb8+CUC0ns2ew9P2lnKk5SihSQ4iwu55J4/X3L937y8xvxFOyZzJ2xCQOHn6bRTvm\n0rVTD3LHPc++4gJ2H9xKWUURdZEaVMOoRlANu8/n4bllny5pPDNxJV/u2gsO/ANCtZzqO5aFm+ZS\nXn2SBq+GkFdH2Gtwqarf3SfqItKLt96dBvDb7y9F2nJWqyMc8fjTjnUUHlnN3QMm8MCoB9v8Huer\nG6ioreOVPX/lbMkWptw1k1G3fAOAN959hvc+2cY9Wfdy6+DJrH5/CSVnjhEKV9BACPUiRIiAevhf\nyZ77ElO6pHZjdu7f/EuVvJsHZw9SP3omy/I3c+jcv6gO1xAm5NqWW4fUQ1GXs78u9ek8jKcnzONE\n5Qlqw7UM7za8TVmV1VaStyGPirJCHh/3HIP7DvYvnle0C/3mEyzbvIL9J9fTEKkh4oXwGpc5/rrU\n+MnUfQllpGaS98ga0tPSeX3jk3xQupv7B01l0MBJLNz2ImVlR6gOVRHy6vC8EFkZ/fnl5JfbvFwg\nAQp9U651i94wDOP/mdYW+lgdjC0Gmm6a9XbzDMMwjOtMrAr9LqC/iGSJSHsgF1h3lf8xDMMwYkBM\nDvmqalhEpgMb8I/DLFHV5seAMwzDMGJKzH7bo6rrgfWxen/DMAyjdSTNmbGGYRhG81ihNwzDSHKs\n0BuGYSQ5VugNwzCSnJicMNVmCZEzQNtPjb1EV6CNVx2LK+YbexLN2XxjT6I5t8a3r6pedRzFQBT6\nz4qI5Lfm7LCgYL6xJ9GczTf2JJrz5+lrXTeGYRhJjhV6wzCMJCdZCv3CeAu0EfONPYnmbL6xJ9Gc\nPzffpOijNwzDMKKTLFv0hmEYRhSs0BuGYSQ5CV3or/cA5NeCiBwXkQIR2Ssi+W5eZxHZJCKH3P0X\n4+y4RERKRaSwybyojiIy22X+sYjcGxDfZ0Wk2OW8V0RyAuR7s4hsFZF/i8hHIvIzNz/IGUdzDmTO\nIpIuIjtFZJ/z/Y2bH8iMW/CNTb6qmpA3/MsfHwH6Ae2BfcBt8fZqxvM40PWKeS8As9z0LOD5ODve\nCWQDhVdzBG5zWXcAstwySA2A77PAU828Ngi+PYFsN50JHHReQc44mnMgc8YfcjfDTacBHwCjgppx\nC74xyTeRt+hHAodV9aiqNgCvARPi7NRaJgDL3fRy4P44uqCq/wTOXzE7muME4DVVrVfVY8Bh/GVx\n3YjiG40g+Jao6h43fQE4APQi2BlHc45GXJ3Vp8o9THM3JaAZt+Abjc/km8iFvhfw3yaPi2h5RYwX\nCmwWkd1uQHSA7qpa4qZPAd3jo9Yi0RyDnPsMEdnvunYad9ED5SsitwDD8bfgEiLjK5whoDmLSKqI\n7AVKgU2qGuiMo/hCDPJN5EKfKIxR1duB8cATInJn0yfV3y8L9G9cE8EReAm/G+92oASYF1+dTyMi\nGcBq4ElVrWz6XFAzbsY5sDmrasS1td7ASBEZcsXzgco4im9M8k3kQp8QA5CrarG7LwXW4O9unRaR\nngDuvjR+hlGJ5hjI3FX1tGs4HrCIS7u1gfAVkTT8grlSVd9wswOdcXPOQc8ZQFXLga3AfQQ8Y7jc\nN1b5JnKhD/wA5CLSSUQyG6eBbwOF+J6Pupc9CqyNj2GLRHNcB+SKSAcRyQL6Azvj4HcZjY3ZMRE/\nZwiAr4gIsBg4oKrzmzwV2IyjOQc1ZxH5koh8wU13BO4B/kNAM47mG7N8r9dR5ljcgBz8XwMcAebE\n26cZv374R8r3AR81OgJdgC3AIWAz0DnOnqvwdxND+H1/j7XkCMxxmX8MjA+I7wqgANjvGkXPAPmO\nwe8y2A/sdbecgGcczTmQOQNDgQ+dVyHwKzc/kBm34BuTfO0SCIZhGElOInfdGIZhGK3ACr1hc7ST\nHgAAACxJREFUGEaSY4XeMAwjybFCbxiGkeRYoTcMw0hyrNAbhmEkOVboDcMwkpz/AaoKKL+TL5lz\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = NMF(n_components=3, init='random', random_state=0)\n", + "H_nmf = model.fit_transform(spectrum.T)\n", + "W_nmf = model.components_\n", + "X_nmf = np.dot(W_nmf.T,H_nmf.T)\n", + "\n", + "plt.plot(W_nmf[0,:],[x for x in range(513)])\n", + "plt.plot(W_nmf[1,:],[x for x in range(513)])\n", + "plt.plot(W_nmf[2,:],[x for x in range(513)])\n", + "plt.title('Columns of W')\n", + "plt.show()\n", + "\n", + "plt.plot(H_nmf)\n", + "plt.title('Rows of H')\n", + "plt.show()\n", + "\n", + "plt.imshow(X_nmf,aspect='auto',origin='lower')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Q: What observations can you make? How do the results differ? Which ones make the most sense?\n", + "\n", + "A: As we can see above, PCA captures important components. ICA and NMF are better to distinguish three instruments according to columns of W and rows of H. Since we do ICA after PCA, it is reasonable that we would get better result of ICA than PCA. As for NMF, it directly decompose the input and get better result than PCA in this problem." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# Problem 2" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "data_pro2 = scipy.io.loadmat('digits.mat')\n", + "data_d = data_pro2['d']\n", + "data_reshape = np.reshape(data_d[:,0],(28,28),'F')\n", + "plt.imshow(data_reshape)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pca_prob2 = PCA()\n", + "pro2_X_transformed = pca_prob2.fit_transform(data_d.T)\n", + "fig, ax = plt.subplots(6,6)\n", + "k = 0\n", + "for row in ax:\n", + " for col in row:\n", + " col.imshow(np.reshape((pca_prob2.components_)[k,:],(28,28),'F'))\n", + " k = k+1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ICA" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p2_ica = FastICA(n_components=36)\n", + "S_ = p2_ica.fit_transform(np.dot(pca_prob2.components_[0:36,:], data_d).T)\n", + "prob2_W_pca_followedby_ica = np.linalg.pinv(np.dot(p2_ica.components_,pca_prob2.components_[0:36,:]))\n", + "fig, ax = plt.subplots(6,6)\n", + "k = 0\n", + "for row in ax:\n", + " for col in row:\n", + " col.imshow(np.reshape((prob2_W_pca_followedby_ica)[:,k],(28,28),'F'))\n", + " k = k+1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NMF" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWMAAAD8CAYAAACihcXDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXmUXFd56Pv7zqmp5251t+a2BlseZNl4kCUbDMYxg2MS\nCPcmwWS6LyQRSRY8DLkDIW+t+N6XFVbeIzgJl/AwCYQkJIQEQoyxMcZgPMuSbEmWrcGax5ZaPajn\nrqpzvvfHqZZaUnfXeOqcqrN/a9WSurrO2fvXu+qrffbZ+9uiqhgMBoMhWKygK2AwGAwGE4wNBoMh\nFJhgbDAYDCHABGODwWAIASYYGwwGQwgwwdhgMBhCQFnBWETuFZG9IrJfRD5dqUqFjSh4Gsf6IQqe\ndemoqiU9ABs4AKwGEsAOYG2p5wvrIwqexrF+HlHwrFfHcnrGG4D9qnpQVdPAN4EPlHG+sBIFT+NY\nP0TBsy4dY2Ucuww4NuPn48DG+Q5ISFJTNJVRZOlMMkZap6SEQ4vyjIIj1KRnFBwhGp516VhOMC4I\nEdkEbAJI0chGucfvImdlsz7l27mj4AjR8IyCI5TgKQJigbrez1qZNAqmLS9QzjDFCaBnxs/Lc89d\nhKo+rKrrVXV9nGQZxQVGXs8oOELNe0bBESrtKYLEYlgNDdhtrecfEk9UvOJFUJdtWU4w3gKsEZFV\nIpIA7gceqUy1QkUUPI1j/RAFz7p0LHmYQlWzIvIx4Am8u5tfVdXXK1azIpFY7PxllLpascupsHn6\ngXGsHyrqKYLV0IDV2oK2teA2J5Gs97myevtxTp+pWL2LoV7bsqwxY1V9DHisQnWZF6upyXtTZB2c\nvr7L65LN+lZ2NT2DwjjWD5XwlGQSq6UZXbaQkZUtjC22SbcKyQGvc9O9FQgoGEN9tqXvN/AqhTs2\nhtW1ALJO0FWpGtPjctm3rUMcJbZtL+74eMC1MtQ1lu39kwvE565to+9mgSsmcM+k6Hgzd8W591CA\nlawwIohte1fUbnDxpWaCMYBz4pT3B4sI6btuAODYRxy6OkaIPXwDjf++OeBaFYBIxe62G6qL2F4w\nlqZGproaGVtskV2QgbE4i1+Ghu++DIAbZCUrhQgSiyO2d+tMJycDrU5NBWM/hyLCyER3HIA/v+2f\neX/TONfd+Ptc8e8BV6oQTCCuXawL02HtSYemXhc7HaPhrEvzv74UYMV8QCwvEFvWrFeckkwisRg6\nNVWV2FNTwThqxMe9/kdftpUDmTPYUwFXyFD3aMYLOu7ZAeJA22gz7ZMZnL37g62YH6jrLUWevPiD\nZaVS3n/icdyx8TmHLiQWq2iQNsE4xCSGvYb+kxd/jj8BrnlqBNPnNPhKLvDo1BQ6eA4ZG8c52x9w\npfxDpy7v4UwH2HzDFpXuLZsUmgaDwRACQt8zlngCe2EXuC7ZU71BV6eqJA97PZLljy6moXcS3fJa\nsBUylM7tNwJgH+oNbH5usWg6jTsyEnQ1/GOOextB3ZsKfTC2WpshHoOpdNBVqTrZQ0cAaMz9a6hN\nTn3qrUws9j74q767BKmFYCyWF5TMzdiqEfpg7PQPwMCgeVPUM7m5rfY1q6H3LM7gYMAVqgyxJYs5\n/Jur+dJv/zV/deJdAIz+65LaGPdXN3Kzl4Im9MEYMIG41ihinnFs+TLOvPsKAAbXKYs2d9L8rfqY\nQjW5dhmtbz/NO1LwX/asAmBt7ylCHeLEm9qmTnQWV4WF2gjGhppBYjEkkSh4paC7oIX+d3p3tB/c\n+AgPxn6Rax5trIuVhvGhSc69sIjV+36XFT/wglv22PGAa5WH6S9RKSWVch7MYqB5McHYUDlEUFfP\nr+Iq6JDxKZrbvA/+b7Se5UEAty7Wd6HbXmflkU4kFiPbezro6hRHhYKmJJPYC7vRVAIZGcMZHPJO\nP8uUslrAampCGhsBZs2RUw4mGBsqhyqog6YLv9mqp88yenwtAL+5+O207rdwA16WWknqeY5uIVhX\nrmBo3QLEVVr2p7ByN+KddLo2esmX9OYn77yOxLnc+7vCwdjMMzYYDIYQELqecWz5Mtz2FuS016Oo\n9KWAwX+KuQR1R0ZYsMPrE2w7eANLnztXG7MNDHmxOzo4eU8X567PkjxjkxhupKHXy0Qotl0bszVm\n9IrdO2/iyM/bLHzJG6Zoq/B95lAFY6ulhbEblzK8IkbzqVYAGh8fvuzDbaVSWO1tADiDQzU7/mTw\nWPhdL++BNKbIHjmW59WGsJAvN8PpX76Wa+/fw1VNfXzjhTtwEhbEciHHtqEWgvEMDvy2zUdu+SmP\nPftOX84frmDc3MRIT4yhjWnO2d5NnKbVt9K9fYrEmTGy7SmGVzeQbhHio943Vue2QXTXniCrXRrm\nzvJ5zNVPbWI1N+FOTM7aGUq/dz0Lfvk431z1Y/5icCWJQZvE0MSFAFxjqXDHfnEj37zrf/MvAxtp\nOeLPTJ9QBePsqV6SQytpapvg/17nbWnVc+cA2yZXcirdzoHxLs4NLGLodBttr+YudzJZb9FAgEmh\nS8IEYkON4wydu+y52Apvn9AD747xJ8uf44fjcf739rvp3qXE+8fOJ9/RbKaqdS2Xk3fDhmScX9+/\njlXbvM5fpT/BoQrGAG2Pvsb4wrfwcPs7APjTlf/OpraTHM3u4y+z7+DZ49fQuTVG9+YBgPpM7Wcw\n1CB2aytDG5YC4CzI8vn976LvWAfdL9q0vzEEZ4dwJ3IzZWqoMyK33cDa64/yw/E4yZeb0Yw/qRny\nBmMR6QH+HliE92XwsKr+pYg8CPwOMH2N+ZncvlRl4Y6NsegLL8ATVwLw+zd/gskOITYBnduHuHrH\nFu915RY0g2o7BkXNeJYxhFMzjmUSSs+GFMlBbxhiweYErtvFyqMZGo4NQd8gOjJS1LTHMDhKMsnZ\nm5pZLmf4oz0fpPtV/+5PFdIzzgJ/oKqviEgLsE1Ensz97iFV/ZwfFXP2HQCgZd8BWnLP+bgUIBDH\nAAi/Z/krv8LvWBlC5+mcPkNDg5eYPXUiiUym0fEJ7zEx4S2xLu5LNnBHe0EHKrDz8DKSB1J0H+vF\nrwHRvMFYVU8Bp3L/HxGR3cAyn+oTCFFwhGh4RsERouEZBceZFLXoQ0RWAjcD07tiflxEdorIV0Wk\no8J1C4SqOor4kwOgoKJlJaYt64IweWYPHyV7+CjO7jfJHjmO09ePOzpadjrOoBx1coqm0w4tr6bo\n2uXA8KhfRRUejEWkGfg28ICqDgNfAlYDN+F9e/35HMdtEpGtIrI1Q7jnA1fdUTWQGxmhbssK/U1C\n7VhBQu3pOt6jzPYM0lGzWZrfHGLp00O0vngEp8+/5e0FBWMRieP9Mb6hqt8BUNXTquqoqgt8Bdgw\n27Gq+rCqrlfV9XGSlap3xYmCI0TDMwqOEA3PoB3dkRGcPQdwd+71dhrycQqtaJ5vLRER4OvAgKo+\nMOP5JbkxHUTkk8BGVb0/z7n6gDHgbLkVL5CuGWWtUNXuOepVy45wwXNOR6i45wiwtxKVL5AotGVB\njmDasl4cL0JV530Ad+JNK9kJbM897gP+AXgt9/wjwJJ858qdb2shr6vEo9CyatkxKM8oOFbbs5iy\nTFvWh+PMRyGzKZ4DZrvLVLNzNC8lCo4QDc8oOEI0PKPgOBOTQtNgMBhCQFnBWETuFZG9IrJfRD5d\n4GEPl1NmkVSkrBI8q+lYkfKMo3/lFoF5vxZIXTqWMSZiAwfwppgkgB3A2mqOy1Rp7KfuPY1j/Tyi\n4FmvjuX0jDcA+1X1oKqmgW8CHyjjfGElCp7GsX6IgmddOpaTtW0ZMDMT+HFg46UvEpFNwCYAG/vW\nRlrLKLJ0JhkjrVOlLHfL6xkFR6h5zyg4QjQ869LR9xSaqvow8LCI3NtI6+Mb5R6/i5yVzfoUIrId\nHzI8lew4cym0lr/qzE9HqFBbTjuL5W294zig7nQBBZ0i53lfaB0rQE20ZQWoqba0bCQeO58YX7OZ\ngt6zhbZlOcH4BNAz4+fluecuQ0Rs4ItllFURVPWmEg4ryLMkxwoE4MtP6Z8jlOA58wtHvFExsW3E\ntrytd9KgmeJXNZXw4TXv10sIkWdttKW6XgrQEj63hbRlOWPGW4A1IrJKRBLA/XgTsGdjA1CrWeAL\n9YyCI9SuZxQcIRqedelYcjBW1SzwMeAJYDfwLVV9fY6XXzrGEwilZHgqwjMKjlCsp+qFRy5xjGbS\nuJOTuGNjs++aYNl5TxsqR58IXVv6RNgd7c4F6NtuQm69HrHzvzdno5C2LGvMOHd5UUurYaYzPH2k\nmINqzLP2HQtLxlLbjoVR+21ZGKF2zKxbwdF3pRCFVZk16I7dpZwmb1tWaw+8S8d4guIrwKM+nbso\nx9jKK8gsW+D9/+xoJffy89MRwtOWs2bqqhBhcayZtpz4hQ2cucWm8ZT385JHjpA9cbLQw0PdlsMr\nUnTfdpqB0UYmX2gmsWOOF86/XVjetqxWMN4CrKlSWfPxQWCXT+cuyDG2ooe+dy7n7C2KPend3Lri\nhzaxyuWT8tMRwtOWUXCsibYc+dDtNG06wZ7rvsf/efI2AF6aWE/H3xUcjEPrKMkkkx2COjaTYwni\n5/Ls4TczIF8cnPO2ZVVyU8wY4wmau4FP+nHieR0tG7u9DbntBo58uIfrf28XX3jf35HtzpDtzmCP\ne5s4SiyG3dWJ3d2N3d5WalV8c4RQtWUUHEPflnZ3N9kG4cRgG18c6uHF3lW82LuK5HBRO1aG1lGn\npmjqdTl7YAGLH08gL87VLebyjREu7iXnbctq9YxR1cdaZUHZ55F4ouStslX1/WVXYP7zX+QoMe/P\nazU3wdJF9K9rJn7HAF+74lm+ONRD+9aE97oXt154neMijUk0k8ZqbATAnZgoeDqN3465MirSlmXW\n4ZTP5w+DY+jb0unro/ObIzQfv55vdL2P1jMZAGI/3pznyIvqEOq2bD4+yVX/AvL89nLqkLctqxaM\nK4YVzJ5xJZGbV4tt4zbESbcJi5tH+eO+6/nnx97Blf/wGnBh12tn6Jz3n8HB6te1Gli2rzslGILB\nnZwk/qNtxIOuiE+UE4SLwaTQNBgMhhBQcz1jnQr/JpHTqOP1AjXtXbqJA/uOLObQlh6u+toZnJGR\nIKtXdcSS8yufDYZaw25txRkd8+3qzvSM/URd7+E4SMYhPqq0vZpg5fcmcPYdCLp21UfM281Qm1gt\nLWRuvtLXYbaa6xnbra04w8NBV6Mwcjfd1HGwJjO0Hk0TG8vASzsvft388xPzU+7xVaLUG68GQ9A4\n61aTaYr5uo92zQRjq7ERd92VTHQkST23G3dsLOgqFY7jwLkRUhNTOGf6uCxsigVqbmwZDGHEXrOa\no3c1oRb0PFn6bK581EQwji1exKkPrmbwLQ5Nh2L0/LS2Apdmszinz8z9gnIvfWqgVzyN1dgIrguW\nhTs+XuBBuXwA6taUq6E+2P+RRfzqfU/z3cM34udNj5oIxoPvXAU/O8B7Fh/lpd03405OBl2lcFDh\nfMh+YTU1ATD4Czcwvtii6aRL+2tDsGvP/AeKILELE6Y0Wyd3/zbcQKY1QWr7YZyz/UHXxjAP1o3X\n0nPbCf5b53ae6r0GzWZ9K6smgnHvHfCV6/+Nf+x7K4s3jwZdncpQiXHeEAfgadw7b2Lfr3mLW/7H\nO77Ho2du5NATq+jYkn9WjNXQkDuJF4TVv89B1XDuvoUDv2IT74+xemgJmGAcatxUnIZYhkYrwWQ2\nRoOPZZnb2waDwRACQh+M3btu5t137OCeBoefbll7+UyEWqUGerXlYre3ceptjXz27n/ls3f/K7/b\nfoKjQ+0sfCWNs//QhReKXDzkgrfsHdv2HuefDP3bNS8HfxOeeM9fIKvG0FpaTRpR7IFRDp7t5Gh2\nlKHhRl/LCu8wRe7Defh9KZ5c/iJ/e24xV3997PKZCFGhFpcSL+wi3aH0Zr2kR7e98m7avt5K4olL\n8hbM9sVkCZpOe/vkTf++hleM9D7wVgCevOv/4cp4M87RJuw9r1NjLRo53CMnmBi6kV4nSbY/5WtZ\noQ3GIx/yNnu94+2vM+iM82ff/SCrtr4YcK0CpNYCcY5Un/DX3/tZAJY855B6tLAEMjo1hcRi3pdv\nbiVjLV5NSCzG2PtvRd/p5Rt5aXIF73nm/az5p+HamS8fYTSbAYE9U0uwR/29MgtlMLa7Ojm3yhPv\nTozyM698hCv/eZDa7RdVgBpZ2DETZ98Blv44hTXu3awrNoG+uorgnF9WXmvEepYzdMdyBtdY6Kve\njjuff/yXueap3ouHaQzhRRUr4fD88Brio+Ktdyh0SmaR5A31ItIjIj8RkTdE5HUR+UTu+QdF5ISI\nbM897qtUpZyz/bQfcGk/4PL4d2+n9W9acXfmmQZVBkE4Fl3HWPk5sYLw1Fdfx9m7v7SdTNT1AvGl\neWLnIUxtqRMTtG/tZdXfHWbVQ7tY9dAuur78YkUCcZg8/SIsjon9DTy55zqajyvS6N98ikJ6xlng\nD1T1FRFpAbaJyJO53z2kqp/zo2Ltz3hv2Pbn7WK2bymVQBwLxUqlkFQSd0LKTZQUas/LKO1KIDSO\nztl+P6euhcbTR0LhuOynkwycSdJ8PA1OgIs+comfT+X+PyIiu/F2XPUHy0biMbK9p30r4lKq7pgH\nSSaRROLCWGluRoGIoGXcyAubpx9EwRGi4RkWR/vpV+h+2vu/nwNmRY1Ii8hK4GZg+i7Mx0VkZylb\nioeVKDhCNDyj4AjR8IyCY8HBWESagW8DD6jqMPAlYDVwExe2oZ7tuE0islVEtmaY5xLbsrGamrA7\nF2C1tiLxhDfXtIr47jhXuckkdmsrdkcHdnc3kkigk1O4ExO4ExPo5JT3cNyKTO8KyrOaRMERouEZ\nBUcoMBiLSBzvj/ENVf0OgKqeVlVHVV28bahn3W5bVR9W1fWquj4+XwI6ddF0Bh0ZwR06h2bSVU25\nWBXHywv1Hq6i2Sw6NYVOTl4Ynpg+fzaDm85UZFZBIJ5VJgqOEA3PKDhOU8hsCgH+Ftitqp+f8fyS\nGS8rf0txVTSTxp2crHre26o5XkpuloBm0rjj415PeHTU6w1n0hdmEah648SuU9b0tsA8q0gUHCEa\nnlFwnIlong+3iNwJPAu8xoW9Mz8DfBjvMkGBw8BH8+3yKiJ9wBhwtqxaF07XjLJWqGr3HPWqZUe4\n4DmnI1TccwTYW3bNCycKbVmQI5i2pE4cZ5I3GFcaEdmqquvrrawgyw3CMwqO1S43Co5BlBdEmaWU\nV/uZVwwGg6EOKCsYi8i9IrJXRPaLyKcrVamwEQVP41g/RMGzLh1VtaQHYAMH8KaYJIAdwNoCjttU\napkl1LHsskrxrKZjJcozjuHwNO/XaDuWPGYsIncAD6rqe3M//2EuuH+2pBOGlCh4Gsf6IQqe9epY\nTta2ZcCxGT8fBzZe+iIR2QRsArCxb22ktYwiS2eSMdI6VUo277yeUXCEmveMgiNEw7MuHX1Poamq\nDwMPi8i9jbQ+vlHu8bvIWdmsTyEi24HPqOpjlTx3FBwhdJ73hcJR5viMlXjFOY1py/IpyXHGJriS\niCPxmLfDTCwGlngLstIZ7/zZLJrJ5jILzr1zeaFtWU4wPgH0zPh5ee65yxARG/hiGWVVBFW9qYTD\nCvKMgiOEyrPYD69/jmUG3rlPWydtmScXd1jaUmIxL0lXg7ejhySTaEMSEnHcZBw3FcOeyGCdG/MO\nGB2HyUlIp8FxLqR7nYVC2rKc2RRbgDUiskpEEsD9wCNzvHYDUEJC21BQqGcUHKF2PaPgCNHwrEvH\nknvGqpoVkY8BT+Dd3fyqqr4+x8svHeMJBBH5Kl5+1MFCjynCMwqOEB7PjlA4+tQrhjpqyzx/o1C0\npQjqKqQzaG4YAj0HYmE1pLBsGys3VOGOT3i/npjw0ts6jnfsPJ6FtGVZY8a5y4uKj/X4yHSGp48U\nc1CNedaco93hZUB0hoaKCW415VgiwbflpWPi/nz5BN+WqqAOOkuucGe+XDnZbKEl5G3Laq3Au3SM\nZ3YsG0n6ml1pzgxPFaAwR//x0xEK9RTx0qAmk95YXOzi732JJ7BSKWKLF+FeuQz3ymXIrddjNc6y\nHfp0druLA0Pwjv4TfFuqejewpv/vD6FvS6ul5bL3cJHkbctqbUi6BVgz528tG6shhdg27sRk6aXk\n37TTzwxP8ztWgMmf28D4Qpvmk1ka9p+FM96WPu7ERZnu/M5iVZinKmJbYFm4s2wV5aVIBbd3kljS\ny1vtdrRgdXfiHilow8fgHUukiE0tw9GW/u9MHrxjHtyRkXJPkbctq9IzVtUs8LHZa+Bts4Qq7tTU\nZekzYz3Lia3owW5vQ2Ix7M4F2F2dcxWUryp3A58stv6FMK9jJdhwA8d+Ocu6Tbs49i6b8au7kM4O\n75FKgmVPv9I3RyjO052cLCjoZI8cI3vkGLx5BKf3zHyFz/wpFI6lMPNvkudKMDRtOR/2VasY+Mgd\nTPxCng6uZc92hQM14FgB8rZl1RIFzTl9xXXQqSnc8fGLNtu0WlqwWlrAttDxSdyxCe9Soa3Vm+c3\ne6Pmq8P7NU+qvXLwY67kNJMLG/jv65/ga1c8iy7K/Z3OJ6e/sAOI3465MnzxdMfGLttwVWKxWXeH\nrlXHmVgtLTgb1iLr181Vh+q35cwhoQI+X9ZbrmPf/2znN/7gMU7dYRNbvIjY4kWzvlYsQWwbse2L\nzl0PbVlAHfK2ZbWGKYon493RzB4+ev4pZzANgwXfdK0rsg3CmmQvR7OjyJkkqVMj6NkBgAt3f+uR\n3N1qwNeZC8Vit7fhXrkca3gC582DJZ3DvW4lJ+5qIHGugaUjVwHg7A3JLCyx8m7xZXd1smdTKwfv\n/jIHMqP8f+feN+9Gwuo41Rh/rllMCk2DwWAIAaHtGbuTZdzICyESi6GFT4O5jEyTxWNDb2HvyCLa\n9wjWsV6c4eEK1jCEiCAi6PnelO83kgrCbm9j/G1XM3xFjI69KeKHEyVtFTZ0TTOpDf0M9jfTvt+b\n3pd8067GDbP8zLO8d5qRt1/F2uuP8sWhHj7/w/dx7dcOMu87XJULG3YYLiW0wbiumJ5QXgaNZ7J8\nZ/N6Go/HWLZrDOdsf4UqV10kmbxsXHg+1HHDEZymEcFdcwWn3hrDSSqtRy1iJe7ZOLpc+J0rN/NM\n+xpOdl4JQMq2Z53rWjUKHT6wbBLnshx5bBVfG1zJtY8fJXuqt3LnjyAmGFeDAsbf8tG45TA98VU0\nnBrB3neUEIWnoigmEKNa9c1p82G3tHDmLc0suOUMfYMtiBMv+VxTnS4fatnFYLaJI03emLHYFloL\ntwBch9iPt7Hsee/LtfRrvjoi/9Taean9YDz9ByjzD+EnYgneqk1KHqpw+vpofsH7t1YDcT0gTY2c\nWwOfXvk830qsR/o7KPVd57Q4LIk1szA+jGvnZhdYtXUb56IvVyskQywlUuxV2+UnsID8wztzUVst\nPwvnV2yFNBADIBaSSCCJRFmncfr6KlQhQ6loazOx1aP8Wusxbus8Qra5tJ6x1diINDg46nJiqoPY\nhBKbUG+aYq1Sw4EYirxqmw137qxthVDzwdgdGwu6CnOTm6sptnXh5xKwUqkKVspQDtqQoCHpDZ10\nxUcYWl3a8n1Z1UN7+xj7MpM8euR6mnqzNPVmvTHyeqLE93wUCf0wRdmXDkGS+5ZUVchkCx43lvjF\nd+frbWZJLSMZh8HeVr4+vIJXhq8g21RasBlb1YZtDfHl/neQebWDxiNnAXCytTBgXARhvmItAbn5\neqYWNgCQGJyCLbsq5ljzPWODwWCoB0LfM57uFVuNjUy99TpSRwZLXvEUGG5xswLUqe2xt2KxWlqA\niiRj8R0ZGqFtVyefjd2HdS7GkhMOVip12dWL1diIOzk15zhqtkE4e6KN779+G1c8N4UePu79os56\nkrWG3dWJTnmfVXdkxMs6uGYVo1e3cW6ljb59iJg1CkDyW+0s2NeKM3SuImWHPhhPM/xzN3LqbbDq\nkQ5ibwZdmyIpdlpbjd8IKQa7vQ3iuRubo6OhD0bZU6dZ/MICWo41obbSfHgUaWr0tt+ZRiRvgqRU\nf5aFzydoe3Mce8ebhWZxM/hNZwdj1y0AYGRpjOGrXBavPcPajl38evfzvCMFN2+5H4CW41MVC8QQ\ntmA8x/S02OqV9P/iGEtax7CybQFUrDxm6+mWuyIv7FiNjd5mjXmuCDSdQaYXxIQ8EANeYqutu2h8\nxcZqasQdHcW5tN4FeKQOnCG5Ywynf6Bm16Rdem+jHpCpNFOt3jTU4bdO8KlbfsSvtOyl1UqxPZ3l\nuud/i8V/691Qt366paJlhysYz/Em3vfRJXzztr/kl579XdY8u6PKlSqD6TvJs3jNDMT1FJitxkZk\n2WKGb+xmfKGFlYXmE55b44HBixPhWHbuUr4Ge4WuU9awSvZI4DtXlY3EY3UXjLOHj7KgrQmAyc4O\nPjfys3y+5V3YR1MsfzrDFT/c6lvZ4QrGszD063fw397/Hyy10zTvSNXWJfx0EM63O26dBGIsG2lq\nIrOolYFrbXp+5ii/vHQrLw17S31/8syN9PyoncY9p3F6z9TuLBmDRy3PiZ4Hd8duABbvgMVVLDfv\nbAoR6RGRn4jIGyLyuoh8Ivf8gyJyQkS25x73VbRmt98It9/I4H3jbGo7yRf638qilycqWsQ0vjtO\nrxAMGL89xRLIZrHHMsTHIG47/FZbLw8te4qHlj3FgrVnmeiOoaOX5y2uFIG9X6tMGDz9nnIZBsdq\nUkjPOIu3q+krItICbBORJ3O/e0hVP1fJClmNjeg1qzh+VzMAqxcd4QuDK/jnzbez9tAJv9bA++8o\nFhKzzy8ACWjusK+e6ji44+NYx8+w5FnoP7OCdVf8Ppr7HuralaXpub04/uakrur7NUCi4BkFx/Pk\nDca57PSncv8fEZHdeNtf1w1RcIRoeEbBEaLhGQXHmRS16ENEVgI3A5tzT31cRHaKyFdFpGOOYzaJ\nyFYR2Zoh/6WpOz6ONTpB0yml6ZSyf9sV/NWj99HzA8geP1FMdUvCN8fp6W22jaSS2K2tWE1NWE1N\nFTYoDF9c/VJAAAAf0ElEQVQ8VdGpKZz+AeT1A3Q8sY8rvryb5X+2meV/tpnU9172u1d8aX1X4vP7\nNQxEwTMKjgUHYxFpBr4NPKCqw8CXgNXATXjfXn8+23Gq+rCqrlfV9XEKXMc/METntgE6tw2w6j8m\nWP3tUZqfP1RoVUvGV0dV1HHQdAadnMKdmsKdmCxvN+wS8b0tXQd3agpnYNALvq5T9RuvVX2/BkgU\nPKPgCAXOphCRON4f4xuq+h0AVT094/dfAR6tVKWc/gHo9/Z3m/628PujXBVH10FdJ9B8tVVrywDn\nDFf7/RoUUfCMguM0onk+NCIiwNeBAVV9YMbzS6Z3OxWRTwIbVfX+POfqA8aAs+VWvEC6ZpS1QlW7\n56hXLTvCBc85HaHiniPA3kpUvkCi0JYFOYJpy3pxvAhVnfcB3AkosBPYnnvcB/wD8Fru+UeAJfnO\nlTvf1kJeV4lHoWXVsmNQnlFwrLZnMWWZtqwPx5mPQmZTPAfMNkn2sXzH1gpRcIRoeEbBEaLhGQXH\nmZSVQlNE7hWRvSKyX0Q+XalKhY0oeBrH+iEKnnXpWEY33AYO4N3VTAA7gLUFHLepipcKZZdVimc1\nHStRnnEMh6d5v0bbMe8NvLkQkTuAB1X1vbmf/zAX3D9b0glDShQ8jWP9EAXPenUsJ1HQMmBm6qnj\nwMb5DkhIUlMEs8hhkjHSOlVKgoiiPKPgCDXpGQVHiIZnXTr6nrVNRDYBm4DWFI1slHv8LnJWNutT\niMh24DOqWtEbAFFwhNB53hcBx/C3pQgSi4Ml4Or5labqFLZTsmnLC5RzA+8E0DPj5+W55y5CVR/G\n+9ayg14Fo6o3ldDoeT2j4Jg7d5g8o+AY/rZURTNpdGrK+zeb9VLCFjH8GXrHClBIW5YTjLcAa0Rk\nlYgkgPvx5vzNxgZg/xy/CzuFekbBEWrXMwqOEA3PunQsORirahb4GPAEsBv4lqq+PsfLLx3jCYT5\nkorMRRGeUXCE8HhGwdG05SzUqGPetixrzDjX7a6lCdjTSUU+UsxBNeYZOkfJbThqrVnJ2Op2so0W\n2aRgOUpy0KFp1ykAsseOF3PaUDn6ROja0iei4Ji3Lau17dKlYzxzIsmkn9vx+JlUpGBHn/E7cUrh\nbRmLYV29moFbcrvt9lggoBZkmxXJCqn+OBpbCkBjWzPsP1xo4v0NJda/EExbVhfTllQvGG8B1pz/\nacYWRGJ7O7FKLOZNfvZ3X7QPArt8OvfFjsHhpyMU4Wl1dDC+qg0n4bV35+4sybNpRMGNW4ijiOMS\n6x8DQIZn2Wl5bkLh6DOhaUufiYJj3rasSjBW1ayIfAz4PuBtQTQdhG0LVa3WNkR3Ax/148SXOQaH\nb45QpKclJAbTNG33bnRnT5w8/yt7xstKTI/6ydIOy49pS/JuolthTFtSZm6KYjg/rUMEsQSxLW8/\nOMsCpzqJx1X1/ZpLvefT+QMfw/LbMVdGYZ7ZLPb2N8meOHlRIK5QHcLhWCR2dzfWumux29sKqUNw\nbVm9QFyzbVlkHfK2ZbWGKS6giroK09vTi+X9XCTTN4U0k65k7QwVxMltEBAJpofe5ghi09trnfnA\nVYysgqXPNJN4Ymu1alc8hfSMq9t7rnuq1jM2GAwGw9xUv2cMoC6aG5kQmwubdRbxTVuvPeL0e9cz\nuixO06ksyce3BF2dspFYzFuRNfO5ZBLNZKu+L56v5HnfpjdeC0Dnh49xa0s/O3a/hUQ16uUXll1Q\n+9nXXAWAs7cm1l0ESjDBeAbqKqgi8UTdBthCsNZdy5FfWMDqdx3CmUqR/tqiGthCMT8zA7F99ZXg\nushUptg5xTXPybd7rbn7ukf5fweuZN/Z2vwislIpgIJuuDvvvIWTt6VoPuHScboPZ+ic39WraYIZ\nplC98ACwbCQRD6QqYSC2eiVHPrCA//5r/8ajVz8OQPORiYBrVT7T4/rnfx6fBNtGR0YCqlEwSDzB\n5JIsk0uybJtK8/dvbqThYMjH0+fo6buTkwUFYvu6NRz++QTXvH8f/TcKsqCoRXaRJPCeMYCViCOJ\nBIyNlX6Oxkbc8fEK1qqKjE9gOfCD/nX81b5ueHwBDZtfDrpWZXPplU72+AmsVKpa0xhDg2bSdG7z\nJvP9YuL3WfRUDPdgiG/ezYLEYgVnYgPQZJy2qwf465X/wZ0nfg+3OeVzDatD+r3rsae8YdXYczsv\nG4Irh1AEY2y7IKnYyitw25vJNieIn/F6V86+AwC1G4iBbO9pFm1Zzom9a1h4eBTd8XJ9jafOYGYg\nttvb0MmpSATnRU95s5paD3US/9FL1OQchCJmTlh9Q1jSzEK7iUTCQW07/0EhZ/C/3IH+Uj+jW7sA\nWPGifWFWWAUIPhi7Dm6eHrGVSiFXriDTmgJLGLi+AbmuAYCFfQM4g4PVqKmvxJ7aRgxq80NaIprO\nIKkkRCAYZw8eBiCe+7fWKLYHqJOT9B/q4Y97rmfiaAv2uV4qF7aqT+Zdt3L7x7fyV0u3sPqQt3aj\n0quFgw/Gc5Gbt2l3LoCFnbiJGNYre9BMlsztGxm53rsEbj55Fcnv1/6sgyjijo9D7V7QGObBHR2j\n81WLf5p4B4u2Kc4JX9d1+Iokk/TenuSJJS+xbcqha5s/t9rMPGODwWAIAeHtGefGp5yz/dA/cNF4\n1VSH8qmNTwLwpUPvoyfoVecGg+EidGqK7md6WbCrmdjJAbL+JgDzFTs3E+T3j7+DH794A2u+sQ2o\n/JBieIPxTC65cZBelubDrW8A8Pme9wRRI0MRWI2NAEhjg/flOg92ayvO8HA1qlUceZY7Gy7H2X8I\noKbHisEbcmk5quz40o1c8/39OD6th6iNYHwJsaRDl53b6dWVyC8YCSUzVlNqxvs45tse177mKjIL\nW4jvOY7T1+dzBQ2GwnBHRuh8fD9OX1+pGQYLouaCscRiLOsaYtz1gq81YWF3LSB7qjfgmhkuYkYP\ncvqLcrbEQXZrK32/eD0AY0uElmNK575Sdqj3mWkfkxwnklSjc1Bzwdi6ejWLm87yo4l27+e0oM2N\npnccYqaX0MqK5WQWtzC+MMFIj83IujRXr+hlQW6LsoEdy1n6QhrnTIh7xSYQG3wi72wKEekRkZ+I\nyBsi8rqIfCL3/IMickJEtuce9/lfXZhc2sJoJskPhm7kB0M3Eh8RiJU3oTxsjn4RlKdcsQy5Yhmn\n3r2QEx/P8J//+Ele+tRfcOjev+HGjhMceKWHA6/0sOqRNLHndpUV8Exb1o9nFBxnUkjPOAv8gaq+\nIiItwDYReTL3u4dU9XP+Ve9y3LjFG0eXsMdeDEDHSUVGJ7ylmqUTKkcfCcbzzFkAWo90cvr1Vr5w\n9l18If4zpI4l6NrpcPXz3ipK5/SZStyhNm1ZP55RcDxP3mCcy05/Kvf/ERHZjbf9dd0QBUeIhmcU\nHCEanlFwnElRY8YishK4GdgMvA34uIj8BrAV7xvssnXJIrIJ2ASQorHM6kLDqTHaX2xDch3hjj3j\n6OhYxXI5hMGxGlTTczp1Yup7L7Pie7P8vsi6F0pVHENwQy8K79koOBa8Ak9EmoFvAw+o6jDwJWA1\ncBPet9efz3acqj6squtVdX28Ahl65dRZFv+0n0VPn2HR02eI7T2GO1p6treLzh0SR7+JgmfVHIMP\nxKYt68ARCuwZi0gc74/xDVX9DoCqnp7x+68Aj/pSw0tw+wegf+DCvnnqVuQDESZHP4mCZxQcIRqe\nUXCcRjRPIBMRAb4ODKjqAzOeXzK926mIfBLYqKr35zlXHzAGnC234gXSNaOsFaraPUe9atkRLnjO\n6QgV9xwB9lai8gUShbYsyBFMW9aL40Wo6rwP4E68Zdg7ge25x33APwCv5Z5/BFiS71y5820t5HWV\neBRaVi07BuUZBcdqexZTlmnL+nCc+ShkNsVzzL6S9bF8x9YKUXCEaHhGwRGi4RkFx5mUlUJTRO4V\nkb0isl9EPl2pSoWNKHgax/ohCp516VhGN9wGDuDd1UwAO4C1BRy3qYqXCmWXVYpnNR0rUZ5xDIen\neb9G2zHvDby5EJE7gAdV9b25n/8wF9w/W9IJQ0oUPI1j/RAFz3p1LCdR0DLIZXjxOA5snO+AhCQ1\nRVMZRZbOJGOkdaqUdGBFeUbBEWrSMwqOEA3PunT0PWvbpatgNso9fhc5K5v1Kd/OHQVHiIZnFBwh\nGp615ljODbwTQM+Mn5fnnrsIza2CAf6voFfBlJjhKa9nFByhAp6WjSSTWI2NSLK8v1NoHWdDBCz7\n8ofM31kKdVtWkIg45m3LcnrGW4A1IrIK7w9xP/Arc1TEBr5YRlkVQVVvKuGwgjyj4AileVpN3uWh\n1dGO296CpmJYExk4fTbvNkxzoarFTm+q7vtVBEkksBq8XM7quN7zM7ILaiaLZjNzriANY1v6Qejb\nsgIU0pYl94xVNQt8DHgC2A18S1Vfn+PlG4D9pZYVJEV4RsERatQzCo4QDc96dSxrzDj3jVbIt9ql\nA+6BICJfZY4MT/NRoGcUHKFAT4nFvI1Ily1i5LoFAJy5xSJx/TlWdPSz+9hiOn56NYseP0L2xMli\nquqdX6QjaMc8haHpNE4ZuyKHpS39JvRtWQEKacuyFn2EFpELj4uZM8NTGIgtWYzd0VHuacLhKBbS\n2cHw9Qs4/m7l+LuV3/6FH/Laxn/iN5a+AAKxSb3osr1IgnfMR4nTRmcQjrb0nyg45m3Lau2Bd+mA\ne2lYdkF5iyUWP///S8bk/MzwVLKje+dNHPpAAyybgJMplj/lkHx8S6n18DuLVUGe0/sRTrVa2K2T\nAOwY7mHDkVsYe76bNU+cgx2vkc3OspF7YTmCNxRZ72KozPu1fELRllWgPtvy4vdx3rasVjDeAqwp\n+ejpIFxgAnmJxy70itVFL3zgPwjsKrke81O049h/9qZG6u/0sf/Gv+PlqQwf+vHvIW5Z9fDTEYrw\n1KFhUoOLadraAMDBR66l++VTdBx6Yf7tlQrrUYbC0WdC05Y+EwXHvG1ZlWCsqlkR+Rjw/ZJOUOwu\nHq4L8VzvWKzcNxQAdwMfLakOeSjW0b7+Goau8jZSXRTLcvfrH+DkS0u59l8GcXftKacqvjlCcZ7O\n4CAt+4Zofcnb6SN7qpdZ+sGl8snKnepiyn6/Vo7QtKXPmLakej1jVPWxVllQnbIcFzSd+79zvqel\nqu/3tdxiHE+eYeGrLQBMHF5K68ExVm55kfI6xf475soo2NN53Z8UsprLZ+sX1Xy/zlOHULWlj3Wo\nz7accYVXSFtWLRiXSmzlFbhtTegbB86PQ+ZDM2lvaAO8nUBCiDM4SPyHWwGIQyV2Ra4JJJ4ouB0N\n4cG++kpkfJLs8cvWVhgqRH3OpjAYDIYaI7Q943O/djsAfbdA03GLxY3XIS/uKPwEFdot2lBZpnvF\nUe8h15K/te5aTtyzgIazLm3fMD1jvwhlz3jqvttY/DuHWPw7h3jo5/+ekRumiJ2bCLpahgqipc8v\nrgtqJRAD9N61gI73nWTgBsFub8Nubwu6SnVJKHvGpzfE+edV3wZgSayZBwQ0EcqqGkrFXLnUBLFl\nSxm6Icv3rv1HfnZsE+6aK7xfbHkt2IrVIaGLcNPZvD7X9w4ADox20/lMAt4sa7qXweALsRU9OAta\n4Q0v/YGWsfw5jGh7C43dYyyPNXNd92lOL7oSgFTA9fILu7WVkXuuA2DwGptMk4JA40mha+c41nPb\nfSs7dMFYp6a44gejPHPUWxDR0O+w4D/Kn/JlqD0knvCGM0Lai46tWsGx/7SMsWUunTtvAaDre3tx\n+gcCrlkFyTpMHuvgVxbfzbYta7j6mDdnPN/nUWKxmYutaob0LVdx/H3e++0ff+ZLvC1l8e3RVv50\n772MDC+g7YXCVgGXQuiCMQAv7WTBS0FXwhA4lkAmnIEYYHDjEtb+pz388bJH+dWrfhOA7L4e5IV5\ngnG+Jf2FLQWvHv2DLHt6Afteu5arXhvF3bG7oMNqMRADSNYFy7uV9i8DG/mbbIqnd19N684kC18b\nhKZG3JERX8oOZzA2GADcEAWlS7Fsxhda/FL3Vq5LNDJ0tB2AxW8exAGslhaksQHn9JmLjwtpL38u\nnLP9NP1wgobx8aCrUhWs57ZzzdQNAOxYfDONx0a57shBnMFB36/OQzmbwmAwGKKG6RkbQstl07/C\ndAnvOjSedvlfb7yPP0rHWPGo129y+vq832cyuP0lTMcMi98M3Ij0iqfR3EyRFPnHxiuJCcaGcDIz\n8ObZKy4o2l8bYKq9k5Z+l8QPNl/0O3dyMqBaGWoVE4wNgSKxGJJIAJf0wKYD8XSOEQhdnhHnjX0s\nHlmOjoxQWyPBhjBSe8E4TJeqBo/pnqtYRd2gstvbkPY2dHTMe2KWy2Gx5MJqvRC2e/bY8aCrEF4K\n3AzC4JH3Bp6I9IjIT0TkDRF5XUQ+kXv+QRE5kduCupQtxUvDhw9k6Bx9wjdP1dmHFOYaXsj1dt2x\nCXRgCOds/5y7RBe7bNq0ZYg8y7ySqQnHClJIzziLt5HeKyLSAmwTkSdzv3tIVT/nX/Wqhr+O53cd\nCbxn56/npb2guXxzr9NMGidfjobi/2ZReL9CDXiKbaOultM7Dr1jJckbjHOJn0/l/j8iIrvxdlyt\nG3x3DD4IA6Yt64nQe1bgpmvoHStMUfOMRWQlcDMwfev44yKyU0S+KiJlb2scBqLgCNHwjIIjRMMz\nCo4FB2MRaQa+DTygqsPAl4DVwE3Msw21iGwSka0isjVDuJOoRMERouEZBUcIsaeqtyS6AjfwQutY\nYQoKxiISx/tjfENVvwOgqqdV1VFVF28b6lm321bVh1V1vaquj5OsVL0rThQcIRqeUXCEaHhGwXGa\nQmZTCPC3wG5V/fyM55fMeJnfW4r7ShQcIRqeUXCEaHhGwXEmonluLonIncCzwGtcWB34GeDDeJcJ\nChwGPppvl1cR6QPGgLNl1bpwumaUtUJVu+eoVy07wgXPOR2h4p4jgD9bP89OFNqyIEcwbUmdOM4k\nbzCuNCKyVVXX11tZQZYbhGcUHKtdbhQcgygviDJLKc9kbTMYDIYQUFYwFpF7RWSviOwXkU9XqlJh\nIwqexrF+iIJnXTqqakkPwAYO4E0xSQA7gLUFHLep1DJLqGPZZZXiWU3HSpRnHMPhad6v0XYsecxY\nRO4AHlTV9+Z+/sNccP9sSScMKVHwNI71QxQ869WxnKxty4BjM34+Dmy89EUisgnYBGBj39pIaxlF\nls4kY6R1qpQ1mnk9o+AINe8ZBUeIhmddOvqeQlNVHwYeFpF7G2l9fKPc43eRs7JZn0JEtgOfUdXH\nKnlu3x2nc/qqO2+eCz8dIXRteV8EHE1blkHIHPO2ZTnB+ATQM+Pn5bnnLkNEbOCLZZRVEVT1phIO\nK8iz0o52dzfSmPJ+cFx0YgJ3ePTyrYguwU9HCFVbFvvhrUXH+mhLy563I1E3bTlPrvVC2rKc2RRb\ngDUiskpEEsD9wCNzvHYDsL+MsoKkUM8oOELtekbBEaLhWZeOJfeMVTUrIh8DnsC7u/lVVX19jpdf\nOsYTCCLyVbz8qIOFHlOEZ0Uc9Y63cPKuJsbXTqJZ77uydUeChdvGie04kLdn7LMjhKctOyLgWLNt\nGVu+jPSVC3HiFomhKey+c+jgufNba2k2e/61tdqWVlPTBQ/HmXcjhELasqwx49zlRcXHenxkOsPT\nR4o5qFqe1o3XcuyuJtb9/B6+uerHHM2OAvCBzt9m7HQ7bTsKOk2oHStIFBxrri1jq1cCcPhDS0nc\nPkBTMs2xnYvo2t5M+64mrBNnAHAGz83M6FZTjtO4Y2PFvDxvW1ZrD7xLx3j8Ze6xm68Aj/pUatmO\nmoiRHFA2v3El9041MOV4zTN8sJ32IQd3ZKSQ0/jpCNVuy7mZNVNXhQiLY821pdvs3efINimfuvpp\nfqutl19rfSdbJ9bSeLqJ1GAjAHJueOauTOFvy/L388vbltUKxluANeWcYOT+20k3C507R+Hl10o9\njZ8Znsp2ZPseFu6KsfjxLtKrF2LZ3jDFmuFRrH1HC92B2O8sViV72osWIvE42eOz3mspllA6zoXd\n6k2rcoaHizkstG05F+5rXi6eZQtv4U9X/ix71m5n/1AXiXMQG8uc33z2kkv68DuWn5c5b1tWJRjP\nGOP5ftEHi3Dkf97Oe+7bykunVzI83knrlpJ3iL4b+GgpB+ajLMfpc2SzaDaLe+w41rHj5++uKhSz\nFbxvjlC8p8QTDH74VgBGlwtLn5/Aqkww/mQlTjIblWjLmcj6dZx4mxeMF24bx3pue6GHhqotCzwp\nAPEfbWP11M385NrbQWHR3gnsvcdwBmcdMq2ZtsyHxBMXvmguDuB527JaPWNU9bFWWVD0cac+dQdf\n/NUvc0+Dw1X7rmfNG8O4+QLx3NNL3l90BYqgVMcK18FXx1wZhXlaNsf+63ru/OCrAPzk4Brcl+IV\nyU6leVImVuD8FWlLiSfYf38z9961DYAft95Kz3MF1yE8bVkC1rOv0vVyEqu1FZ2cxJljmK1W2jIv\nuX3/xPL+nbk5diFtWbVgPC+zjfFuuAGA9MYRxtwkV/3kQ1z1UAZ3+xsBVNBQCrpxHTf83B6+vPxF\nAFZtu4H4M68Qju1Zq8P4fTdx/7ue508WekNr1yRuCbhG1UWnpnD6+oKuRnVQBXW9HbFLwKTQNBgM\nhhAQjp7xbMMKua6+vNHMH239P7jm306SPXi4uvWqMhKLXTT/staZWJLimubT/I/T3uKjlf+hdeVX\nCJMdNquSffzp2WsA6NgTpeuCOsCyEdvOO79/mnLe3+EIxrNg7zkCwIpsD/LGQbK5yeL1TL0FKnvS\n5e9fuZ3E8QQAK3/wYsA1qj6uDX/y4s/R+Gbub/DMUeqrlesbsaTgQFwuoQ3GztA57z9bz0VqjLGe\naHyzn+Xf66bpmLd4JYrtuPCnvbQf7CCRm/KVPdsfcI0MxVDNDlJog7Gh9nHePEjjmwcjGYSncfYf\nwt5/qJipiYaIYm7gGQyGuZlO31oiEk9UqCL1j+kZGwyGy5BYDEl4Cxh0qvR+fbXGW0tFkkns7i6I\n2WQPHw20LiYYGwyGy7G9HrFOTQVcER/I9fbttlbcK5fRf00zVhbaG5I4u9/Me7jd0ZE7j+AMDJa6\nGvjyalXkLAaDwWAoC9MzDjFWo5fhyp2YqNi3r8EwL9NLem0bXDfPi2sTiefCXlcHA+ta6LsjC3El\n09jFgj375/2sWY2NSGszADp4bo41EoVtk3YpJhiHFLu1FZJJACzXxZ2cDLhGhiggueEJScRRx4U6\nfN9NO2pTitFlwttueJONbYf4vPMeOrevRV+dK0+91zFyj1yeq95qaUHTaUQEN53xniyyA2WCcUiZ\nLdWixGJeRijTSzb4RS5QkUxiJRLgusUmUQ8901nVrHQWy4ElqXN8vOMIIxuf4R8P38PK0dWANzXz\n8oPn+Ow5DiLizUsuMd2mCcZ+krvkQ6xK5EOtuxV6hvAh08MUImhDEmthF+6RyZLfv2Fc4q/p3AyP\n/iE69nbwb1vX03XHKGcyLUx1u4yv6QQgdfh4wbNB3AqsEM57A09EekTkJyLyhoi8LiKfyD3/oIic\nEJHtucd9ZdcmIHxzVC24F2ulUlgtLcVXvghMW9aHI/jnOZ1TWycnwXXRVAK7u3O+iuQ9X6n4/bl0\n+vppfeUkK74L//j1d/P4Y7ex8GVoevUYTa8eq/q0vEJ6xlm8jfReEZEWYJuIPJn73UOq+jn/qlc1\n/HUsoFchiQTOqO+Xg6Yt68MRfPKcDp7u6BgWIM3NEIshyeTs09z8HTLz/XOZPXKM1MnTLH865g3J\nTE4GljskbzDOJX4+lfv/iIjsxttxtW4Ig2OR2/GURBg8/SYKjuC/p2azXn6Y6RwxAVCtttRMOhSL\nU4qaZywiK4Gbgc25pz4uIjtF5Ksi0lHhugVCFBwhGp5RcIRoeEbBseBgLCLNwLeBB1R1GPgSsBq4\niQvbUM923CYR2SoiWzMUuJpH5MKjilTVMUCi4BkFR4iGZxQcocBgLCJxvD/GN1T1OwCqelpVHVV1\n8bahnnW7bVV9WFXXq+r6OMnCazbfzS8fgnUgjgEQBc8oOEI0PKPgOE0hsykE+Ftgt6p+fsbzS2a8\nrLJbihey4WgRMxXyEYhjAETBMwqOEA3PKDjORDRPQBORO4FngdeA6fWRnwE+jHeZoMBh4KP5dnkV\nkT5gDDhbVq0Lp2tGWStUtXuOetWyI1zwnNMRKu45Auwtu+aFE4W2LMgRTFtSJ44zyRuMK42IbFXV\n9fVWVpDlBuEZBcdqlxsFxyDKC6LMUsozWdsMBoMhBJhgbDAYDCEgiGD8cJ2WFWS5QXhGwbHa5UbB\nMYjygiiz6PKqPmZsMBgMhssxwxQGg8EQAqoWjEXkXhHZKyL7ReTTPpw/8GxdUXDMleebZxQcc+ev\ne88oOObOXxlPVfX9AdjAAbwljAlgB7C2wmUsAW7J/b8F2AesBR4E/qtxrA3PKDhGxTMKjpX0rFbP\neAOwX1UPqmoa+CbwgUoWoKqnVPWV3P9HgGpn64qCI/jsGQVHiIZnFByhcp7VCsbLgJkbRx3Hx0aR\nYDI8RcERqugZBUeIhmcUHKE8z7q7gSclZniqJYxjfThCNDyj4Ajle1YrGJ8Aemb8vDz3XEWRMjI8\nVYAoOEIVPKPgCNHwjIIjVMazWsF4C7BGRFaJSAK4H3ikkgWIBJ7hKQqO4LNnFBwhGp5RcIQKelbj\njmbuLuN9eHcZDwB/5MP578TL4rQT2J573Af8A17Wp514jbDEOIbXMwqOUfGMgmMlPc0KPIPBYAgB\ndXcDz2AwGGoRE4wNBoMhBJhgbDAYDCHABGODwWAIASYYGwwGQwgwwdhgMBhCgAnGBoPBEAJMMDYY\nDIYQ8P8DUQ+tVQCa2ZkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = NMF(n_components=36, init='random', random_state=0)\n", + "p2_H_nmf = model.fit_transform(data_d.T)\n", + "p2_W_nmf = model.components_\n", + "fig, ax = plt.subplots(6,6)\n", + "k = 0\n", + "for row in ax:\n", + " for col in row:\n", + " col.imshow(np.reshape((p2_W_nmf.T)[:,k],(28,28),'F'))\n", + " k = k+1\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Q: Make observations on how and why they differ\n", + "\n", + "A: It's obvious that ICA has better result than only PCA. As we can see above, only PCA can capture key features of images but can not distinguish digits. The results of ICA(PCA beforehand) show that it can distinguish digits decently because ICA can separate multivariate signal into additive subcomponents. As for NMF, it only captures key components of digits." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 3" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nWC3rVh3nd/cVkiq9WLwkAycJrvADgiL8QFCEHwiK8ANBEX4gKMIPBFV1nD9PUcf5qxncfkay/ou/\nmJSsvzeh8u2xn5j93eS2f/zE4mS9/4u2a3fuD/ZXfulVaxt7cRznRMb5OfIDQRF+ICjCDwRF+IGg\nCD8QFOEHgiL8QFCM8wMnEcb5AVRF+IGgCD8QFOEHgiL8QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxAU\n4QeCIvxAUIQfCIrwA0FVDb+ZjTOzp81sg5mtN7Prs+W3mNkOM3sp+7m8+e0CyMspNaxzWNI33P1F\nM/uIpNVm9mRWu8Pdv9O89gA0S9Xwu/tOSTuzx/vMbKOksc1uDEBzndB3fjMbL+kCSSuzRV8zszVm\n1mVmp1XYZpGZ9ZhZzyEdaKhZAPmpOfxmNkLSw5IWu/teSfdIOkfSNPV+Mritv+3cvdPdO9y9o01D\nc2gZQB5qCr+Ztak3+Pe7+yOS5O673P2Iux+V9H1J05vXJoC81XK23yTdK2mju9/eZ/mYPqtdJWld\n/u0BaJZazvZ/VtI1ktaa2UvZspskzTezaeqdxHmbpK80pUMATVHL2f4Vkvq7D/jj+bcDoFW4wg8I\nivADQRF+ICjCDwRF+IGgCD8QFOEHgiL8QFCEHwiK8ANBEX4gKMIPBEX4gaAIPxCUuXvrdmb2jqQ3\n+iw6XdK7LWvgxJS1t7L2JdFbvfLs7ePuPrqWFVsa/uN2btbj7h2FNZBQ1t7K2pdEb/Uqqjc+9gNB\nEX4gqKLD31nw/lPK2ltZ+5LorV6F9Fbod34AxSn6yA+gIIWE38xmm9mrZrbZzG4soodKzGybma3N\nZh7uKbiXLjPbbWbr+iwbZWZPmtlr2e9+p0krqLdSzNycmFm60PeubDNet/xjv5kNlrRJ0qWStkta\nJWm+u29oaSMVmNk2SR3uXviYsJnNlPQbST909/OyZf8oaY+735r9x3mau/9dSXq7RdJvip65OZtQ\nZkzfmaUlXSnpyyrwvUv0NU8FvG9FHPmnS9rs7lvd/aCkByXNLaCP0nP3ZyTt+dDiuZKWZo+Xqvcf\nT8tV6K0U3H2nu7+YPd4n6djM0oW+d4m+ClFE+MdKerPP8+0q15TfLukpM1ttZouKbqYf7dm06ZL0\ntqT2IpvpR9WZm1vpQzNLl+a9q2fG67xxwu94M9x9mqQ5kq7NPt6Wkvd+ZyvTcE1NMze3Sj8zS/9W\nke9dvTNe562I8O+QNK7P87OyZaXg7juy37slParyzT6869gkqdnv3QX381tlmrm5v5mlVYL3rkwz\nXhcR/lWSJpvZBDMbIukLkpYV0MdxzGx4diJGZjZc0mUq3+zDyyQtyB4vkPRYgb18QFlmbq40s7QK\nfu9KN+O1u7f8R9Ll6j3jv0XSzUX0UKGvcyS9nP2sL7o3SQ+o92PgIfWeG1ko6XcldUt6TdJTkkaV\nqLd/lbRW0hr1Bm1MQb3NUO9H+jWSXsp+Li/6vUv0Vcj7xhV+QFCc8AOCIvxAUIQfCIrwA0ERfiAo\nwg8ERfiBoAg/ENT/A/SkhmWp1vaFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "data_pro3 = scipy.io.loadmat('digits.mat')\n", + "data_p3 = data_pro3['d']\n", + "data_labels = data_pro3['l']\n", + "labels = np.where(data_labels == 6)\n", + "data_labeled = data_p3[:, labels[1]]#Select only the columns that correspond to the digit 6\n", + "plt.imshow(np.reshape(data_labeled[: , 0], (28,28), 'F'))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# function credit to https://stackoverflow.com/questions/4860417/placing-custom-images-in-a-plot-window-as-custom-data-markers-or-to-annotate-t\n", + "def plot_embedding(data_2d):\n", + " fig = plt.gcf()\n", + " fig.clf()\n", + " ax = plt.subplot(111)\n", + "\n", + " # add images\n", + " for j in range(200):\n", + " cur_img = np.reshape(data_labeled[: , j], (28,28), 'F')\n", + " imagebox = OffsetImage(cur_img, zoom=0.5)\n", + " xy = [data_2d[j,1], data_2d[j,0]] # coordinates to position this image\n", + "\n", + " ab = AnnotationBbox(imagebox, xy,\n", + " xybox=(0., 0.),\n", + " xycoords='data',\n", + " boxcoords=\"offset points\", pad=0) \n", + " ax.add_artist(ab)\n", + "\n", + " #ax.grid(True)\n", + " plt.xlim(min(data_2d[:,1]), max(data_2d[:,1]))\n", + " plt.ylim(min(data_2d[:,0]), max(data_2d[:,0]))\n", + " plt.draw()\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pca_prob3 = PCA()\n", + "pro3_X_transformed = pca_prob3.fit_transform(data_p3.T)\n", + "X_centered = (data_labeled - data_labeled.mean(axis=1, keepdims=True)).transpose()\n", + "plot_embedding(np.dot(X_centered,pca_prob3.components_[0:2,:].T))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Laplacian Eigenmaps" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pro3_manifold = manifold.SpectralEmbedding(n_components=2, affinity='nearest_neighbors', random_state=0,n_neighbors = 10, eigen_solver=\"arpack\")\n", + "plot_embedding(pro3_manifold.fit_transform(data_labeled.T))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Right bottom parts of images have thinner digits than left top parts when we use PCA. Bottom parts of images have thinner digits than top parts when we use Laplacian Eigenmaps." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/homework2.pdf b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/homework2.pdf new file mode 100644 index 0000000..a470fc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/homework2.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/vl1.wav b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/vl1.wav new file mode 100644 index 0000000..49dc573 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework2/cs598ps_ps2/vl1.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/Problem Set 3 solution.pdf b/598MachLrngforSignalProcessng/homework/homework3/Problem Set 3 solution.pdf new file mode 100644 index 0000000..e861414 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/Problem Set 3 solution.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/Problem set 3-2017.pdf b/598MachLrngforSignalProcessng/homework/homework3/Problem set 3-2017.pdf new file mode 100644 index 0000000..e50cd71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/Problem set 3-2017.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/CS598PS_Proposal.pdf b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/CS598PS_Proposal.pdf new file mode 100644 index 0000000..f4f37bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/CS598PS_Proposal.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/1.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/1.wav new file mode 100644 index 0000000..3a9fa5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/1.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/10.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/10.wav new file mode 100644 index 0000000..50b2062 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/10.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/11.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/11.wav new file mode 100644 index 0000000..9484b39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/11.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/12.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/12.wav new file mode 100644 index 0000000..f952a3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/12.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/13.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/13.wav new file mode 100644 index 0000000..478e796 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/13.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/14.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/14.wav new file mode 100644 index 0000000..f6ce8c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/14.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/15.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/15.wav new file mode 100644 index 0000000..51a7bf3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/15.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/16.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/16.wav new file mode 100644 index 0000000..e256dd2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/16.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/17.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/17.wav new file mode 100644 index 0000000..84dcbee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/17.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/18.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/18.wav new file mode 100644 index 0000000..adca3d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/18.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/19.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/19.wav new file mode 100644 index 0000000..b0f0b1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/19.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/2.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/2.wav new file mode 100644 index 0000000..fcc8671 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/2.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/20.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/20.wav new file mode 100644 index 0000000..19b2fc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/20.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/21.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/21.wav new file mode 100644 index 0000000..56d77d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/21.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/22.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/22.wav new file mode 100644 index 0000000..7e007e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/22.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/23.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/23.wav new file mode 100644 index 0000000..d30492d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/23.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/24.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/24.wav new file mode 100644 index 0000000..f750644 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/24.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/25.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/25.wav new file mode 100644 index 0000000..b98335b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/25.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/26.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/26.wav new file mode 100644 index 0000000..93c0474 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/26.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/27.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/27.wav new file mode 100644 index 0000000..14541b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/27.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/28.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/28.wav new file mode 100644 index 0000000..28b213b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/28.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/29.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/29.wav new file mode 100644 index 0000000..c845fe9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/29.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/3.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/3.wav new file mode 100644 index 0000000..b79d9f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/3.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/30.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/30.wav new file mode 100644 index 0000000..5e138a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/30.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/31.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/31.wav new file mode 100644 index 0000000..f614439 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/31.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/32.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/32.wav new file mode 100644 index 0000000..e5cd3f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/32.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/33.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/33.wav new file mode 100644 index 0000000..17f9941 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/33.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/34.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/34.wav new file mode 100644 index 0000000..ef32e48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/34.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/35.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/35.wav new file mode 100644 index 0000000..595aa57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/35.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/36.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/36.wav new file mode 100644 index 0000000..0809678 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/36.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/37.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/37.wav new file mode 100644 index 0000000..82caa51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/37.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/38.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/38.wav new file mode 100644 index 0000000..1916781 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/38.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/39.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/39.wav new file mode 100644 index 0000000..85da444 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/39.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/4.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/4.wav new file mode 100644 index 0000000..6f252a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/4.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/40.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/40.wav new file mode 100644 index 0000000..735c98c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/40.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/41.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/41.wav new file mode 100644 index 0000000..c0086a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/41.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/42.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/42.wav new file mode 100644 index 0000000..cf38e1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/42.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/43.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/43.wav new file mode 100644 index 0000000..caddf4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/43.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/44.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/44.wav new file mode 100644 index 0000000..888294a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/44.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/45.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/45.wav new file mode 100644 index 0000000..7ef71dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/45.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/46.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/46.wav new file mode 100644 index 0000000..6c07e93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/46.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/47.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/47.wav new file mode 100644 index 0000000..7161752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/47.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/48.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/48.wav new file mode 100644 index 0000000..d726c93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/48.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/49.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/49.wav new file mode 100644 index 0000000..cb8fc4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/49.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/5.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/5.wav new file mode 100644 index 0000000..0e4ec4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/5.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/50.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/50.wav new file mode 100644 index 0000000..494607c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/50.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/51.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/51.wav new file mode 100644 index 0000000..b439c67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/51.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/52.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/52.wav new file mode 100644 index 0000000..ed5da98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/52.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/53.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/53.wav new file mode 100644 index 0000000..7c27d35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/53.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/54.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/54.wav new file mode 100644 index 0000000..1ce3bfa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/54.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/55.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/55.wav new file mode 100644 index 0000000..7b71397 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/55.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/56.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/56.wav new file mode 100644 index 0000000..766f4b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/56.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/57.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/57.wav new file mode 100644 index 0000000..cfdcc56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/57.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/58.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/58.wav new file mode 100644 index 0000000..4354c8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/58.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/59.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/59.wav new file mode 100644 index 0000000..770ef7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/59.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/6.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/6.wav new file mode 100644 index 0000000..6d50638 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/6.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/60.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/60.wav new file mode 100644 index 0000000..4552e45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/60.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/7.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/7.wav new file mode 100644 index 0000000..342ba4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/7.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/8.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/8.wav new file mode 100644 index 0000000..a670f1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/8.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/9.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/9.wav new file mode 100644 index 0000000..6e40e56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/music/9.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/1.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/1.wav new file mode 100644 index 0000000..59c6c51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/1.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/10.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/10.wav new file mode 100644 index 0000000..7f9b224 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/10.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/11.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/11.wav new file mode 100644 index 0000000..2f3dd84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/11.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/12.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/12.wav new file mode 100644 index 0000000..8007b46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/12.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/13.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/13.wav new file mode 100644 index 0000000..93c7133 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/13.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/14.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/14.wav new file mode 100644 index 0000000..26b8386 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/14.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/15.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/15.wav new file mode 100644 index 0000000..bdd5afb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/15.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/16.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/16.wav new file mode 100644 index 0000000..12a9137 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/16.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/17.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/17.wav new file mode 100644 index 0000000..f710664 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/17.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/18.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/18.wav new file mode 100644 index 0000000..8ae227a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/18.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/19.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/19.wav new file mode 100644 index 0000000..ac44327 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/19.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/2.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/2.wav new file mode 100644 index 0000000..deb9e36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/2.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/20.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/20.wav new file mode 100644 index 0000000..6011252 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/20.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/21.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/21.wav new file mode 100644 index 0000000..03504c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/21.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/22.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/22.wav new file mode 100644 index 0000000..4a9be32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/22.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/23.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/23.wav new file mode 100644 index 0000000..d6a6cbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/23.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/24.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/24.wav new file mode 100644 index 0000000..a87b5e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/24.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/25.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/25.wav new file mode 100644 index 0000000..4e5f5ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/25.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/26.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/26.wav new file mode 100644 index 0000000..08715d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/26.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/27.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/27.wav new file mode 100644 index 0000000..c106d33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/27.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/28.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/28.wav new file mode 100644 index 0000000..eb0e565 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/28.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/29.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/29.wav new file mode 100644 index 0000000..8d9fd0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/29.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/3.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/3.wav new file mode 100644 index 0000000..c52ad0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/3.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/30.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/30.wav new file mode 100644 index 0000000..0c77f96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/30.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/31.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/31.wav new file mode 100644 index 0000000..e382c6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/31.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/32.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/32.wav new file mode 100644 index 0000000..ba9472b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/32.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/33.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/33.wav new file mode 100644 index 0000000..555f1f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/33.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/34.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/34.wav new file mode 100644 index 0000000..12840fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/34.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/340.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/340.wav new file mode 100644 index 0000000..bc04580 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/340.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/35.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/35.wav new file mode 100644 index 0000000..1c5c8e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/35.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/36.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/36.wav new file mode 100644 index 0000000..0785a89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/36.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/37.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/37.wav new file mode 100644 index 0000000..e10396a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/37.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/38.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/38.wav new file mode 100644 index 0000000..911ece9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/38.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/39.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/39.wav new file mode 100644 index 0000000..ef7bf64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/39.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/4.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/4.wav new file mode 100644 index 0000000..a456663 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/4.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/40.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/40.wav new file mode 100644 index 0000000..50152cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/40.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/41.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/41.wav new file mode 100644 index 0000000..19a0a3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/41.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/42.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/42.wav new file mode 100644 index 0000000..0df5fb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/42.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/43.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/43.wav new file mode 100644 index 0000000..7c94957 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/43.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/44.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/44.wav new file mode 100644 index 0000000..966f39c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/44.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/45.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/45.wav new file mode 100644 index 0000000..2a99027 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/45.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/46.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/46.wav new file mode 100644 index 0000000..34c767e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/46.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/47.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/47.wav new file mode 100644 index 0000000..f1f14c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/47.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/48.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/48.wav new file mode 100644 index 0000000..0a13ab4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/48.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/49.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/49.wav new file mode 100644 index 0000000..eae033e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/49.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/5.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/5.wav new file mode 100644 index 0000000..58169c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/5.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/50.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/50.wav new file mode 100644 index 0000000..2a92b02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/50.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/51.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/51.wav new file mode 100644 index 0000000..b5b2538 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/51.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/52.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/52.wav new file mode 100644 index 0000000..1580cd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/52.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/53.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/53.wav new file mode 100644 index 0000000..d24a157 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/53.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/54.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/54.wav new file mode 100644 index 0000000..350f0a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/54.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/55.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/55.wav new file mode 100644 index 0000000..eeef7db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/55.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/56.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/56.wav new file mode 100644 index 0000000..1143fe3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/56.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/57.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/57.wav new file mode 100644 index 0000000..2e2e57b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/57.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/58.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/58.wav new file mode 100644 index 0000000..07711c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/58.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/59.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/59.wav new file mode 100644 index 0000000..2a60894 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/59.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/6.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/6.wav new file mode 100644 index 0000000..891a8df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/6.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/60.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/60.wav new file mode 100644 index 0000000..8996ce4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/60.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/7.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/7.wav new file mode 100644 index 0000000..d278822 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/7.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/8.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/8.wav new file mode 100644 index 0000000..3dc4780 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/8.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/9.wav b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/9.wav new file mode 100644 index 0000000..5ee3e97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/SpeechMusic/speech/9.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/cs598ps_3 2.zip b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/cs598ps_3 2.zip new file mode 100644 index 0000000..697099d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/cs598ps_3 2.zip differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/digits-labels.mat b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/digits-labels.mat new file mode 100644 index 0000000..a960053 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/digits-labels.mat differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/ekalismall.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/ekalismall.png new file mode 100644 index 0000000..82e915d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/ekalismall.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/ekalismall2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/ekalismall2.png new file mode 100644 index 0000000..87c5553 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/ekalismall2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.ipynb b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.ipynb new file mode 100644 index 0000000..a947107 --- /dev/null +++ b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.ipynb @@ -0,0 +1,540 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import scipy.io\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from numpy import *\n", + "from sklearn.svm import SVC\n", + "from scipy.io import wavfile\n", + "from scipy.signal import stft\n", + "from matplotlib.pylab import *\n", + "from scipy.stats import multivariate_normal" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 1" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "am1 = np.array([0,0])\n", + "am2 = np.array([4,0])\n", + "ac1 = np.diag([1,1])\n", + "ac2 = np.diag([1,1])\n", + "\n", + "bm1 = np.array([0,0])\n", + "bm2 = np.array([4,3])\n", + "bc1 = np.diag([1,2])\n", + "bc2 = np.diag([1,1])\n", + "\n", + "cm1 = np.array([0,0])\n", + "cm2 = np.array([1/2,0])\n", + "cc1 = np.diag([1,2])\n", + "cc2 = np.diag([1,1])\n", + "\n", + "dm1 = np.array([0,0])\n", + "dm2 = np.array([4,0])\n", + "dc1 = np.diag([1,2])\n", + "dc2 = np.diag([2,1])" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def draw(gaussian1,gaussian2,diff):\n", + " plt.figure()\n", + " contour1 = plt.contour(X, Y, gaussian1, cmap=cm.spring)\n", + " plt.clabel(contour1, inline=1, fontsize=10)\n", + " contour2 = plt.contour(X, Y, gaussian2, cmap=cm.summer)\n", + " plt.clabel(contour2, inline=1, fontsize=10)\n", + " dis = plt.contour(X, Y, diff, 0, colors='k')\n", + " plt.clabel(dis, inline=1, fontsize=10)\n", + " plt.show()\n", + " \n", + "def distribution(x,y,m1,m2,c1,c2):\n", + " pos = np.dstack((x, y))\n", + " rv1 = multivariate_normal(m1, c1)\n", + " rv2 = multivariate_normal(m2, c2)\n", + " draw(rv1.pdf(pos),rv2.pdf(pos),rv1.pdf(pos)-rv2.pdf(pos))\n", + "\n", + "def pdf(x,y,mean,cov):\n", + " X = np.array((x-mean[0],y-mean[1]))\n", + " Cov_inv = linalg.inv(cov)\n", + " X_ = -1./2*X.dot(Cov_inv)\n", + " return X_.dot(X.T)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "equation = \n", + "[2.00000000000000]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FVX6xz9ze0nvvZGQUEINVap0aYqKrh3Ftrq2n213\nddXV1bWvqyhiV+y60lQUpEiHQOglQEJ6L/fe5PY78/tjaNeEJAgCynye5z48zJw5c+7A/c573vOe\n9xUkSUJBQUFB4Y+D6mwPQEFBQUHh9KIIu4KCgsIfDEXYFRQUFP5gKMKuoKCg8AdDEXYFBQWFPxiK\nsCsoKCj8wTgtwi4IQoggCF8JgrBXEIQ9giAMOh39KigoKCicPJrT1M8rwGJJki4TBEEHmE5TvwoK\nCgoKJ4lwqhuUBEEIBrYCaZKy20lBQUHhrHM6LPZUoAZ4TxCEnsBm4G5JkpqPbyQIwi3ALQBms7lv\nVlbWabi1gsK5j81mo7a2lqSkJNRq9dkejsLvmM2bN9dKkhTZXrvTYbHnAOuBCyRJ2iAIwiuAVZKk\nR090TU5OjpSbm3tK91VQ+L0wZ84cbr31VkpLS4mPjz/bw1H4HSMIwmZJknLaa3c6Fk9LgVJJkjYc\n/vtXQJ/T0K+Cwh8CjUaeGHu93rM8EoXzhVMWdkmSKoESQRAyDx8aBew+1X4VFP4o6HQ6ANxu91ke\nicL5wumKivkL8PHhiJgCYMZp6ldB4XePwWAAwOl0nuWRKJwvnBZhlyRpK9Cu30dB4XzEbDYD0Nzc\n3E5LBYXTg7LzVEHhNyYoKAgAq9V6lkeicL6gCLuCwm9MSEgIAI2NjWd5JArnC4qwKyj8xoSFhQFQ\nX19/lkeicL6gCLuCwm9MeHg4ANXV1Wd5JArnC4qwKyj8xuh0OsLDw6mqqjrbQ1E4T1CEXUHhDBAb\nG0tZWdnZHobCeYIi7AoKZ4CkpCSKi4vP9jDOaxqddnZWnx8v19O1QUlBQaENkpKSWLdu3dkexnnL\n3tpK/r16MRvKCjFrdbw07nKGJXc+28P6zVAsdgWFM0B6ejoNDQ1KZMxZQJRE3sz9mUCdnj13PMGN\nvS/gkx2bADg+CaLT62FN8QGKGuvO1lBPG4qwKyicATIyMgDYv3//WR7J+cfB+hoanHau7TkQgChz\nICatljp7E4IgAGD3uPnP+p94bMVChr//Ig8t+fro9Ran46yM+1RQhF1B4QzQtWtXAHbt2nWWR3L+\nsbe2Ep1aTdfIWAD0ag1OrxefJB5t88HWdRQ01PD+xTdw6J6nya+vZkNpIQBv5K6k66zHGfre87y/\ndS0en++sfI+TQfGxKyicAVJTUzEYDOzYseNsD+V3gSRJ1NqbONhQQ4mlgVJrA2W2RmrtTdQ7mql3\nNGNzu2h2u2j2uBiRksmnl85sta9GpwONSk2AzoDb56Wq2YZOrSbKHHS0zdLCPczsPYQIUwAABQ21\n6NRqJEniim453Nh7MCWWBv6+bB49oxPoHZsEwJKDu6losjA8uTPJIeFIknR0FnA2UYRdQeEMoFar\nyc7OZuvWrWd7KOccXtHHzupyNpYVkltexK6aCvbWVlLv8E+aZtRoiTQHEmY0E2Y0EWEKwKzTY9bq\n6BubfML+K5ssNHtcABxqrKOwoZasiJij5wsbanH7vKSFRmDQaGl02gk1mAg2GBEEgdTQCACizEE4\nvV4qmiz0Rrbyvz+wE58k8sLaJXw87Sayo8+NQiqKsCsonCFycnKYO3cuoiiiUp2/XlCn18OG0kJW\nFe9nxaF81pYcxOH1ABBqMNEjOoHLu/alS0QM6WFRJAaHkhgUSojB9Kus4V4xiWypLGFHVRkfbltH\nk9vFAxeMPXr+YEMN8YGhGLVy3vy8ihIizQEYNTq/fvbVVmL3uMkIi8LqcvDfjct4a/K19IlNYnbu\nSubt3Ur3qDjFYldQOJ/o168fb7zxBnv37j3qcz9fKLM28O3+HSzK38HSgj1HhTw7Kp6b+wxlYEIq\n/eNTSQuNOO3CODI1k80VxVw37z0Gxqfy+IjJlFkbKbbU0yM6gdiAYGxu51Hf+aL87aSGRBAdEHi0\nj693b+HdrWuYktmDjPBoPtu5Cb1aQ5/DLpmMsCi+3L2ZR4WJ54Q7RhF2BYUzxJAhQwBYvXr1eSHs\nDY5mvt6Tx9ztG1hZlA9ASkg4N/W+gLGdujIkKZ1Qo/k3H4dGpebhIeN5eMj4o8eKLfUcqK8mMzya\nblFxCMDnuzYxID6V9WWFPH3hxagEFQ6Pm78vm0dhYx239BnKpM49AFhycA/DkjOO9reutIDowz57\nCQkBRdgVFM4L0tPTiY6OZsWKFdxyyy1nezi/CZIksbIon9c3ya4Jj+ijc3g0/xwxhWldetM1Mvas\nW7MA/eJT6BefcvTvdw8Yxasbl7O0YC/Pj7mUwYmdqLBZmPzpa/SITuCzS2ei12iPtj/QUM30bn2P\n/n3FoXyuzu4PcNZFHRRhV1A4YwiCwKhRo1i6dOkfzs/u8Lh5f+s6Xtu0nN01FYQZzdzZfwRXZw+g\nT2zSbyLmPlHE4XXh8Lhx+Tx+5/QaLSaNHqNWh0po/zn3i0/hw0v8K3oWW+px+bzsqiln4iev0TM6\ngfsHjyU2MJjsqHganXZAdjNVNlkZ20mehZ0LLy5F2BUUziBjx47lk08+YcuWLeTk/P6rSVpdDt7Y\ntJKX1i+lutlGTlwy7029niu65RxdjPy1NDqb2F9XTpGlmiJLFaXWWmqaLdQ5bNTaLdgPR7q0R4DO\nQIQpmAhTEJGmYBKDIkkKiSI5OIqMsHgC9cZWrxuQkMqO2x8DILf8EHtq5MVTgCu65fDwT99QZmtk\nX20V07v1JT4o9JS+7+lEEXYFhTPI5MmTUalULFq06Hct7A6Pm/9uWMa/1/xAo9POuE5d+euQCQxL\nzvhVFqtPFNlTW8zGsn3sqD7EruoiymzHtvZrVRrig8KJMofQPSqZcGMQQXoTJq0eo0aHTqM96gKR\nkHB5PTg8LuweF1aXnVq7/ELYWV3Ejwe3+G1OSg6OoltUMj2iUukfn0lGeFwLKz8nLoWcuJSjf+8f\nn8I9A0axtGAPvWMTuS1n+El/598S4fhcCWeKnJwcKTc394zfV0HhXKBnz55ER0fz448/nu2hnDSS\nJPHFrlweWPI1JdYGJnXO5rHhk/xEr6PUNFtYVriVn4t3srl8Pza3vHU/MSiCbpHJdItKJjM8keSQ\nKGIDwlCfJteVx+ejvKmOosYq9taWsKu6iJ01RVQ2NQAQagggJ64zw1OyGZnSgxBDwCnd718/f0dO\nXDLj0rud8tgFQdgsSVK7FoFisSsonGGGDx/O22+/jcvlQq/Xn+3hdJj8uipuXTSXFYfy6RWTyIeX\nzGBESuZJ9VHvsLEwfwM/HMhlW5W8ZT8xKIJx6X3pH59J//hMIk3Bv8Xwj6JVq0kOll0xw5Kzjx4v\nt9WzoWwvm8ryWV+6hyUFW1ALKvrGZTC+U18uyuh/QrfNiXB43Hy0fT2PLJ/PxVm9eG3ClWfEZaNY\n7AoKZ5gFCxYwdepUli1bxsiRI8/2cNrFJ4q8vH4pjyybj0Gj5dnR05jZZ0iHLWhJklhTspuvdq9m\n+aFteEUfXSISGZ3Wm1GpvUgPO7lNPVVNZXhFCa8Ido8Dh9eJy+v2a6PX6DBpjZi0RgJ1AQQbAju0\niHr8mHfVFPFT4VaWFmyloKECg0bL2LS+XNZtKH1iOnV4zG6fl5fXLeWJlYvQqNT8Z/x0ZvQa/Ktc\nVh212BVhV1A4w9hsNiIiIrjzzjt58cUXz/Zw2qTU2sA1/3uXlUX5XJzVi9cvuorYwI5Z1F7Rx+ID\nuby9ZTH768sJNQQwOXMAl3YZQnpYXLvXOzxOChuLKbaUUWwpo9R6CJ9Yjij5aPZAk1v+dAS1oCbc\nFEqkKYyEoDiSguNJCo4nJSQRvabtRd4jIv/17jV8u38jzR4nPaNTmdlnPCNSenT4hXGwvoaZCz9k\nxSH5Wb4z5TrCTjKOXxF2BYVzmAkTJrB//372799/ToTHtcaPB3dz1ddv4/R6ee2iK7m+56AOjdUn\niizYt47Zm7+j1FpLp9BYbuo9jgkZOejU2hNe5/a52VG1l101+eypyaegoQi1CrwimLUmkoIDMGk1\nJAX3RBCaKbftZnjydIINQejUul8snrqxexzYPQ4sLit19gbqHA1UN9dSYinH4XUCsuCnh6XQJTKD\n7lGZdI3sjEZ1Yg+13eNi/r51vJf3I2W2OtLD4riz32RGp/Xu0LMRJZGX1/3EX3/6hpiAIL6afiv9\n41Pbve4IirArKJzDzJkzh1tvvZW8vDx69ep1tofTgtc2LufuxZ/TLTKOr6bfSufw6A5dt7FsH8+u\n+ZK9tSV0j0rh1r4T2rRq7R4Hm8q2sql8K9sqd+PyuTFq1KSEmDBoBEKNEQxKGEWP6L7M2/sBWRG9\n6BIpP6+5218lJaQzQ5LGIUoiXp+Dcts2Gp0lpIYOJdjQ+qxAkiRq7HUUNZayr+4ge2r2c7ChCFES\nMWoM9InNpl98L3LieqBTt27NH5mNvLn5ewoaKsiJy+DBwZfTLerEyciOJ7f8EJd/OYfKJivvT72e\nK7r369B1irArKJzD1NXVERMTw3333cezzz57todzFFESuWfxF7y6cTlTMnvy8bQbCdAZ2r2uurmR\nf636jKUFecQGhHHfoGlMSM9p1YqVJIn99YUsLVjFupJcXD43YcYQcuJ60i+uF7X2/UiIjE67hBWH\nFtLktjGp81V8v/9zJEQuyvgTADur1rGy6Afu6P84kiSxp+Zb6hwFBOvj8YhOYgOziTJ3QUCFWqVu\nc/xOr5Od1fvYVLaNzRXbsbpsmLRGhiYNYEynYSQFt5610Sv6+Hr3al7btJAGRxMXZw3igcGXEWxo\n38VS02xj2hezWV18gKdGTuVvQye0a/WfcWEXBEEN5AJlkiRNaqutIuwKCjBp0iTy8vIoKipCozn7\nAWo+UeSmBR/ywbZ13DdwNM+NubRDC6RLC/J4bMVHOL1ubulzEdf3Go2hFb+1JEnkVe7ky12LONhw\nCINGR++YZAwaFwMTRpAW2pVgQyif7JhFXGAyI1ImsalsJVZXA6PSLqbCVszHO15lauYEdtcsIsSQ\nwIH6CqZ1eQiNyseemu/oHj0VkzaMosb1FDaswSulsa5kCaHGSEINkYSboogLTCY+MIUwY1SrQipK\nIrtr9rOscDUbSrfgEb10j8rksq6T6BrZep1Um8vBm5u/46PtS4kwBfPMqBn0j28/Ysjl9TBz4UfM\n3b6Bhy8Yz9OjLm5T3M+GsN8H5ABBirArKLTPN998w7Rp01i0aBETJ048q2PxiSI3zH+fuds38MSI\nyfxjeJs/YUD2N/979ed8vWcN3SKTeHb0TaSGxrRod0zQF3KwoYgocwRTMscSYzaRV7magQkXUmQ5\nQL2jmiu7387+up3klq+k0VmIWuUlUJdEz5gRdI3sw1ubHyc+UM3YTg/Q5K5jacErdI+aTGpob5YX\nPsf4jH8iSRKi5GVh/oNkR93MwYY91DuqaXDUUueowivK6QeMGjMpIZ3JCO9ORlg2gfqWi8JN7maW\nFa5hUf4SGp1WukVmMr3bZLpEZrRoC7Cj6hAP//QuRY3V3NBrDHcNmIpO3fZLW5RE7vj2U2Zv/pn7\nB43huTGXnlDcz2gcuyAICcBE4F/AfaejTwWFPzqTJk0iOjqaWbNmnVVhlySJO7/7lLnbN/DUyKn8\nfdhF7V5T1dTAHd/NYm9tKTf3Gc+f+01uVcBqmut4J+9TtlTsIMocwa19r2V4yiA0KjUby5YTF5hE\nZkRPUkOzeDfveUqthWSEd6eyaTd6TSFmbShmXRT763YSrA9jYMJo9tZ+zfbqzdQ7qhEJweEtRa8Z\nild00+SuIUAXiVrQYtQEE6hXM7bTpUdT6fpEHzX2CsqshZRaCznYsJs9tXkAJAZ1ok/sBXSLykGn\nlvcXBOjMTMkcy/j0ESw5+DPz9/3AYyteYGjSAK7reRnBhiC/75sdncKXl/+d59d8xXtbf2RXTRH/\nGXdrm64ZlaDi9YlXoVapeGHdEoL0Rh4dfmr/H07X/O8/wINAYHsNFRQUZLRaLTfffDNPP/00VVVV\nREd3bIHydPPv1YuZvflnHhw8tkOivqe2hDu+fQ2b28HrE+/w2+RzBJ/o49v8pSwpmI9eIzE+vTfX\n9bwZzWFft0/0UNO8E63KQ1FjLskhOXQK7cL+uh0kBKXiEdVEm0cSbTbh9DZRb2/A6mogLjCeOnsa\n+XW5BOgi6BUzEotzHx6fgzBjCpVNu0gPGwFAhCmdBkcxUeZjLhG1Sk1MQAIxAQn0jRuKJElUNZex\nr3YbO6o3Mn/fh3x/4Auyo/ozMGEUkWZ5BqJT65jYeTSj04Yxb+9i5u1dTF7lTq7pcSkjU/xj0k1a\nPY+NuJresZ14dPmHXPO/53h94p0kBkee8JkKgsCrE67E6nLyjxULSAwO5YZegzv079cap7xHVxCE\nSUC1JEmb22l3iyAIuYIg5NbU1JzqbRUU/hBcccUViKLIF198cVbu/82ePP62bB5XZ/fnmdGXtNt+\nS8UBrvvmeQRBYO4lD7Yq6o1OC0+sfIn5+/5HpNnEVd1vAGzkVazG7pHL3ZXZtiJKdTh9sK92MVVN\ne8gIy6bEWoDL6yRAG87Bhv1o1AYandU0OMuICUhEo9IRbIhgePIoJnW+mhhzMlqViSZ3DQnBfahu\n2ovvsKtFLWgxa8OAE2dcFASBmIAEhqdM5I5+jzOj1wN0iejNtqp1zNr0OP/b8x4Njtqj7fUaHVd0\nn8LzYx8hISiW2bkf8vzaN7B7HC36npI5kHem3EOdw8ZV/3uWA/XlbT5bQRB4e8q1jE7rwswFH7Gm\n+EC7/x4n7OtUfeyCIDwDXAt4AQMQBPxPkqRrTnSN4mNXUDhGnz59EEWRvLy8MxrTXmKpp+fsJ+kU\nFsnqGQ/45RtvjR1Vh7hpwctEmoN5b+p9RJlDWrTZX1fIi+tm0+RuZmBCLIMThtMnbgiHGvPJr9tB\ntDmenjEDWVbwLInBQ9lUnkdWeAIqwUVK6CA+2Dqba3vcQ6A+hMUHvqDWfgCNykqnsAsYmHAxbm8z\nhY2r8IousqMvweFpYHP5x/SJuxq1oOVA/TKsrkokScQruRiSdCcqofWImN3Vi5CQSA4ZSIDO35pu\ncltZW/IjG8tWIEkSAxJGMiJl8lEXDci+8cUHlvPhtq+ICYjkgcF/Jj6o5RpDYUMlM+a/hChJfHTJ\n/SSHtD0zs7oc9H7zKXyixNbbHiHEYDp6rqM+9lO22CVJ+qskSQmSJKUAVwLL2hJ1BQUFf2bOnMm2\nbdvYtGnTGbunJElcP+993D4fn0y7qV1RP9RYxS2LXiHUGMA7U+5tVdTXluTy2IoXUAtqnrrwIXrH\n5FDnqAYgLjCZMGMk5bYiJEkk1JiEVi0QG5BIeVMdHtFDTXMBicHpSIho1VrGpV/OxIzryY4aQFxg\nLCpBhUEbSGxANsWWTbi8NmzuanySF706AL0mgK6Rk4kwpRMf1Jv+8TNOKOoAVlclu2u+5fv9j7C8\n8HlKLLlIh7M+BuiCGNvpMv7S/0l6RA9gbckSZm18gqLGY1a0SlBxUcYo/jH8Xprcdv720zPsqNrT\n4j6poTG8M+VeJCRuXPAyNXZLm886SG/kk2kzKbU2cOd3n7bZ9kT8cTL9Kyj8Trn66qsJDAzkv//9\n7xm75wfb1rH80D5eHHsZGe1sPrJ7XNy9eDYqQeCdKfcSE9AyidWa4k28sv5t0sNS+Pfov5ESkkiY\nMRqHtxmn14FOrSfUEImESHVzOUZNKA5PA/3jRxJiiGFf7R5WHvqaYH0oYUbZetapdUQFpGDWReAT\n3Xh8Dnyih2BDPJ3Dh/Bz0fPklr1DpNlEdfOXVNg+obLpUwJ0lRi1VTg827C5duDyVtGaZ2Jg4kwm\ndn6a7lEX4/BaWF/6FksO/oty2/aj7YMNoUzNuo4ZvR5AJQi8v/UFVh76FvG4tL9dIzvz79F/I8IU\nxr9Xz2pV3DuFxTJn0l00Opu4/8e38Iq+Np/5gIRU/j50Ah/v2MiPB3e32bY1lA1KCgrnAPfccw+z\nZs2isLCQhISE3/Re1c1Wsl57jO5Rcay44f/azXXy8NJ3WZS/kTmT72JwYstarRvL8nhp3Rwywzvx\n16F/waCR3RUNjlrWlPxAp9CudInsTZn1EGtKfmBy52soseRS0bST4Sl3AJBb9iUmbQBdoyb49V3T\nnE9exWfYPXV4RRedw+PRaWoRJSeSBLLnSkAtmDhmp4r4JDtwTNtUggmjJgWTNoNgQz90an/XiySJ\nlFhz2VW9kCZ3NeHGNPrGXeu3e9XpdfBt/ifsqN5IVkQvLu0yE+1xKRKsrib+ufIlKpuq+fvQu1sN\niVy4bz0P//QeN/Yey/8NurTN5+70eug1+0mcXi+773gck1Z35lwxCgoKp87dd9+NJEk8//zzv/m9\nnlm1GKvLyZuTrmlX1Jcc3MLC/A38ud/EVkW9xFLOqxveo1NoMn8deudRUQcINoQRF5jC+tKfADBq\nzdg9zWjVepo9EnZPHfWOIiRJwitaMOlCcHltFDdupMldg1dsosSyBKPWRmKwk65REKBXEawfQFzg\nDaSFPkxG2L/pEjGLzIiXyIx44fDnJbpEzCIj7BlSQh4kNuBagvR98IqN1Njnc6D+EQobnqPB8TM+\nUc4ZIwgqkoL7My79cfrGXkOTu4afCp6moH7VUevdoDEyrcuNjOt0OXtrt/LFrtl4jivJF6QP4B/D\n7yXCFMZL696k3tHQ4nlNzhzI5V2H8l7eErZWHmzz2Rs0Wt6cdA1FljpmbVzeZttfoljsCgrnCDfd\ndBMff/wxhYWFxMbG/ib3KLc1kvbK37kquz/vTr2+zbaNzmamfPo4UeZgPr30r2jV/v5qh8fJw0uf\nxu5x8OyYvxNmbOl3B/hq99s4vQ7KbUWMSJlE//gRAOysmi8LuOTCK7rIibsWjaDD4irBJ+7B4lqF\nhAuDJolg/SCCDTloVEGt3qOjeHwNWFwbaHSux+2rQC2YCTeNIcw4GpVwzPp2eixsKHuP6uY9JAb1\nIyf+WjSqYy+t3PKfWZT/MRlh3bmi++1+icNKrRX8dekzJIfE8/iI/2uRVKzZ7WTqZ09g1Oj4avoj\n7a5vjJv7CpvLiyi8+2mCDEbFYldQ+D3x0EMP4XK5ePPNN3+ze7y+aQUe0cejw9rfAPP2lsU0OG08\neeH1LUQd4NOd31DZVM29g24+oagDXJI1g9Fpl/B/g549KuoAXaMmkRY6hLiAHgyIv4kAXSRu8QAW\n14c0un4iUN+DtNBHSQv9O+GmC9sQdR9gOe5jBcRWW2rVoUSYxtMp9DFSQh7EqE2lunkeB+ufoMl9\nzJdt0AYzLPkuukdNpcSay6qi/+IVj9VYzYkbxqTOV7O/fic/HvzK7x4JQbHc3u9a8usKWLhvSYsx\nmHUGHh9xDQWNlXyx6+cTPrcjPD58EnWOZj7avr7dtkc4+wkqFBQUAOjcuTOTJk1i1qxZPPTQQxiN\nJ1etpz18osj7W9cxPr0bqaERbbats1v5bOcKLkrvR5eIxBbnD9QX8sOBlYxLH3HC/ClHOLIp6Jeo\nBDVRAVlEkYUouSm3fUijcw0GTRKJQbdj1J4onW0FsAUoBqqAamRxPx4tEAXEAMlAX+DYdxYEAZO2\nE0nBf6HJvYfKpk8ptrxCuHEcUeapCIIaQVDRJfIiAnRRrC99m7XFb3BB0h2oVbKFnRM3jFp7JetL\nfyIlpDNdI/sc7X9wYj/Wlmzmq93fMigxh5gAf5/+kKRu9I/P5O28xVzebWiruXWOMDAhjZ7RCbyb\nt+aEbX6JYrErKJxD3H///dTW1vLuu++e9r5XFuVTZmtkRgd2NH6+62ecXg+35rRu2X+47StCDMFc\n2X3qaRlbZdNnNDrXEGGaQGrIw62Iug9YCzwLPA4sRBb4KGA08CfgqsOfK4ERQBhQBPwP+DvyBvnN\n/NKaD9B1IS30UUINw6hz/ECZ7T0k6diLIjE4h35x11HVvIdtlV/6XTs6bRrxgSks3DcXx+HNV0e4\nsfcVqFUqPts5r9Xv/OecSdTarSzM39DmsxEEgRm9BrO5orjNdsejCLuCwjnEsGHDGDJkCM888wxO\np/O09v3d/p3o1BrGt1NUWZIkFuxbT//4zqS1ktQrv66AvbUHmJo1FpPWf1axoXQ5dfbqVvtsi0jT\nJBKCbiHKfDFCi9jzfOAp4AOgGbgMWeD/CfwZmIYs5MMPf0YebnMncvqqp4EpyJb9HOA5ZGv/GCpB\nS2zg1USZp2F1baLM9v7RmHaAlNDBZISN4mDDSiptO48e16g0TM68BofXzurixX59hhlDGdtpOOtK\nNlPdXMsvyYnLIC0khoX72nexTM3qSeJJ1EpVhF1B4RxCEASeeOIJysrKmD179mnte8G+bYxM6dxu\nfvVdNUWUWGuYnDmw1fOLDyzHpDUyMuUCv+M1zRV8f+Az8ir9XQYubxNLCp6iwXFii1OrDiNI3/cX\nRyVgHvAi4AJuB54AxgAnU/A6HDlH4VPADUAtstgva9EywjSOKPMlWF0bqbV/53cuO/oSgvRxbCr/\n6GjaAoCYgER6Rg9kfekymtxWv2smpF+IShD48eDKFvcSBIFJnQewueIAlU0tI2iOJyUkgqJ7nunQ\ntwVF2BUUzjlGjhzJmDFjePLJJ2loaPsH31Gqm63sr69mVGpWu23Xle4FYFhS9xbnvKKPLRU7GBDf\nB6PW/wWxtXItAioGJozyO36wfiUWZylq4WSW9CTgE+B74AJk90sv4FRSLqiAQciWfg/gc2BRi1YR\npvEE6XOotS/G7TtmaatVWnrFTMfpbaTYstHvmsGJY/BJXnZW+0f7hZtC6R6Vxaayra2OaHiKnGtn\nw+Fn3hYnk25CEXYFhXMMQRB48cUXaWxs5F//+tdp6XN9aSEAgxI7tdt2Q+leOocnEG5qGYWyr/YA\ndo+DvnH+yb8kSWJH9SbSw7oRoDt2nSj5OFC/nJiA7gSdoFRd66wAfgbGIqeiarvg9MlhAm4DBiL7\n6re0aBHAX9TZAAAgAElEQVRtvgwQqG7+xu94lDmLYEMC+XVL/dsHxBMTkMj2qpb+8r5xPahoqqbc\nVtXiXOfweMKMgazvgLCfDIqwKyicg2RnZ3PNNdcwa9YsysvbzgrYEfLrZFHpHtW+uObXlZJ9gtqd\nhY2yOyUrwn9XZaOzDqurgcyIHv7HHcW4fDZSQgadxGjdwLdAFrL//LdIjKYCrgPigfn8ckFVqw4l\n1DgEm2vr0U1MIL90U0IGYXWVY/f4z6Y6h/egwlaE2+fyO97l8LMqbGjpilIJKrpFJrO/vux0fKlj\n/Z7W3hQUFE4bjz32GF6vlyeffPKU+ypqrCNYb/TLFNgaNpeDOoeNlBNkICy1VhCkDyRIH+B3vNxW\nBEBcYIrf8Rp7PgCR5rZDIv1ZDdiAyfw2on4ENTABqARaukoCdX2Q8NLk3ul3PNIkf5ea5ny/4/GB\nyUhIVNhK/I7HBkYjIFBmq2h1FMkhURxqrG53gflkUIRdQeEcJS0tjVtuuYW33nqLXbt2nVJfdY5m\nIs3t18Gpc8iLf61lbwRocFgIN7aMzmh0yr7ocGOU3/Emdw16dSAGTUu3jstbjtNb2spd9iOHMaa3\nO95Tpy+gP3xPf0zaToCAy+dvTQcb5MLWTW7/6J9wk/wytLjq/I7r1FqCDYHUO1rP6hhtDsHhdWH3\nulo9/2tQhF1B4RzmiSeeIDAwkHvvvfeULDq3z4e+ndqbcjsvIItR6+c96FvZTOMR3QBo1bpfHHei\nVfuHRLq8lZRa51DZ9AWl1jlUN8//RW8WoOOhfaeGCgg5fE9/BEGFSjDiE+3+Vwhq1ILWbycqgPZw\nyoHj88ccQafWtXocQH/4WXsOP/vTgSLsCgrnMBERETz55JMsWbKEzz777JT6kuj4i6Gtl8jJnjs+\nHtzhKabBuRKNKoTkkHvoFPo4Dk8hbt/xVdUk5Lo9Z4Ij92pt3BKtpSaQJLHVJ3ns+bbe14mev3j4\nmZ3OtF2KsCuc30hAE/ImxrLjPtWAk9Z+o2ec22+/nQEDBnDXXXdhtVrbv6AVwowm6h3N7bYLNcq+\n83qnrdXzIYYgGp0trdsgvVyCzuryX1AM0EZi99Qjil58YjNWVy4qQU+UWS7D5/AW4JMcqIXjffZZ\nQCHyZqTfmiqg7vA9/fGIdYiSE4Mm3u+4w2tBlDwtqi5ZnPUABOn9ZxuSJNHotBBqaD32vt5pQy2o\nCG5n/eNkUIRd4Y+NG9gFfAE8BlwPjAIykWfgGuQS7HFAwnGfaMCI7H6NRA6hngjcCryAHF5dzBkR\nfrVazaxZs6itrf3V4Y8RpgBq7U3tFngINQSgUamotLUePx9uCqXe0YhX9LeojxTHqLH7LxAG6WOR\nEGl0lWJx5eLylRNmHIVK0OLxWXB6SwjS90atMh5n7fdAtpRX/IpverL8hLxA27J2a7NbLphh0PhH\nCDU45IXiQL3/rtzaw9891PgLwXdZ8Yhewk2tu5cqmxoINwW1m0L5ZFCSgCn8sbAAqw5/VgO5yOIO\nshlzRLh7IueHCkau0huA/6/BhRyYYQUagHKgFNgEHO81CEXePzP08Kcfv8mvqm/fvsyYMYOXXnqJ\n66+/nq5dW+ZGb4usiBi8osiB+hqyIlqmCTiCRqUmIyye3TVFrZ7vFJqCR/RyqLGE9LBj+VziA1PR\nqLQcqN9F5/BjIhkT0A1BUFNi2Ui4yUq4cQwaVSBe0Yrdsxent5QgvZw868gGHElKBvogCIuQBTfp\npL5rx9mNHCs/GjmvzDEkSaTO8RMGTSIGjf/9S6y56NRmIkz+i7sH6ncTqAtpsYCcX1cAyM+uNXZV\nF7WaaO1UUIRd4feNBOxE3kC4GDlPlBc5uV8OcBeytd0Nebbd9m76jlGPPAvYhfziWM2xDYzByDve\nxwOTkC3/08Szzz7LvHnzuO2221ixYgUqVcctvO5Rsjtha2VJm8IOkB2VyvcHNuHx+Vqk682MkDc4\n7aze5yfsWrWW1JBM9tVuZ3z69KPWp05jJsbclWLLJiJM3bC5t6JTR9HgXIlPdGDWdiZAdyx3jST5\ncPnKqbX7iDAFYtC8CPyF0x8hswN4D4gFLm5x1uLaiNtXQVzgDL8dny6vjXLrNpJDBvrVU3V5nRQ0\n7KZrZN8WO0R3Vu9Do9KQFtryBWVxNlPQUMn49F+mUzg1FFeMwu+TMuB55Fl7D+BvyNb1A8gpQBqR\nRf554GpkcT8dog6ycTcUefPi28BeZFftF8i5p9YBM5H3vlwEfArYW+3ppIiMjOSFF15g1apVvPHG\nGyd1bXZUPEF6A8sK29/hOCixCza3g7zKAy3OhRlDyAhLZVXRhhYLpb1jL8DiqmNvrX9MeGbEWJxe\nKxZnGG5fHeW2jwAVwYb+BBsGAMcWXQVBjU4diSiJlFl1eEUTsu9rAS1T8/4a3Mj/IK8hT7duR7YC\njuHyVlHZ9ClGTSeC9f38zu2sXoAoeckIv9DveF7lWlw+J31i/fPneEUfa0ty6ROb7VdG7wirinch\nIXFBYtuJ2U4WRdgVfj+IwI/AVOTZ+YPILpRZyK6SPOTcTiORd42fSaKAy5GFvgTYdnh8O5EzycYC\ndwP7Tu02M2bMYNy4cTz00EMcPNh2abXj0arVjErN4oeDu9sNm7wgsStalYafCk+U32QQJdZyDtQf\n8jueFdGLUEMEq4q+9yv2HGnuTHxQH/bW/kioYRqJwbcQYZqAUZMGyG6P461cp7cMoyaZIP1A4P+Q\nt/5/CzyD7GP7NYuqFuQ3/lPIvvsxwMP8ckrl9tVQYn0NAQ3xQTf5ZZqstR+koGEVncJGEKQ/VuHK\n43OzrmQpiUGdSAz2T9mwuXwbVpeNESmt77xdXriVcGMg2dEpbY7e5fXwzpbVHf2yirAr/A5wAa8D\nXYBxwHrk32Q+snX8Z2ThPFcQkGcRTwOHgOXImyjfQHYHjQOW8qsWXgVB4K233kKj0XDzzTefVGz7\nxIxsii315FWWtNnOrDMwMrUHC/atx+Fxtzg/JKk/gTozn+/yjz9XCSpGpk6hoqmYjWUr/M71ipmO\nRmVgdfEsvKIPh6eAesfyw3nPjxf1EmyurRyx6DWqCOAGJGkmsrU9F3laNgtZqPchL4Ycj4Q8ZdsN\nLEHOw/4QctIvHXAP8tTK34K2ew5S2PAsXrGJxOA/o1OHH3eunrUlszHrIugWNdnvuhWHFmFx1TEy\ndYrfcVES+WLXQqLNkfSKaZlQrcZuYWnhViak92u/9mzBHmYu/KjNNsejCLvCuYsbeBPZvXoHchTL\nXORolH8BLYvAn3uokFOFz0W25J9EtuLHIKcOX3HyXSYmJvLcc8+xfPly3nnnnQ5fd3FWL9SCii92\ntV9v+JrsC7G67CzMb5kr3KQ1ckmXCWyv2sP2qt1+57Kj+pMe1p2fCr6hzl513DWhDE66jWZPHetK\n3sSgSSVA19XPInZ5K7G6NiMIWgL1vdCp5UVIn9hMnaOeWvsg5IIZFyI/zM+Bl4D7kRdT7j78uQtZ\nyF8BvkJO03sRcobIR5AthGNIko96x3KKGl9CJRhIDXno8K5TGbevmTXFr+MT3QxJugOd+th0sNRa\nyNqSJfSJHUJaqH/I5M9F6ymxlnNl96loVC1LC36+cyU+UeSqHiNbnPslX+7e3G46iONRhF3h3EMC\nvka2bm8DEpENr/XI/nL9iS89p4lG1pUCZBfvQWS30Vhk4/IkmDlzJiNGjOC+++6jsLCwQ9eEmwKY\nkNGN97auxeltfRfkEfrEptMjOpU3cr+l2dOy4MfYTiOICYjizdy52D2Oo8cFQWBy56vRqLR8smMW\n9uOqCkWY0smJu5bq5nx+LnoFMANQa/8Wi3MjzZ7dSJJIgK6bX+y4IGgxadNpdu+l3LYS2dp+BrnY\nxt3IPrAhyOFJR0KUrgTuQ15keQq50Ib/tE6SJGyurRxseILKps8wajuRGvoQes2xxeVmdy3LC1/A\n4ipnUMLNfi6YRmc9n+18gyB9KGPSLvXru97RwAdbvyQjLJVBiS0XRmuaLXywbSmjUnuSHBzV4vzx\n1Nqb+GLXZqZ37fgCqyLsCucWe5Ct2cuQ/effA2uQI9J+y3xQZxI98gzkALLBuQnZdXMf8gJwB1Cp\nVLz//vsIgsB1112Hz9exhcV7BoyiutnGx9vbL8f28AXTqW5u5K3N37c4r1NrubP/DOocDbyz5VM/\nl1CwIYwrut9Go7OOT3fMwuU99mJICRnEwISZ1DuKWFrwDA2OYnTqaCqaPsbm2k6IYZCftQygEnSY\ntJ1IDrkXr9iIw1OE/J8hBOiK/J9j+i8+I5E3K7TMUeMTHTQ613Go8TlKrPIidGLQ7SQH34tGdSyf\nTnXzPpYWPIPD08DQpL8QE3jMndLsbmLu9v/i8bm5KvsOjNpj1rQoicza+AFe0csd/We06mZ5ef03\neHw+7ht8aYtzv2R27kqcXg93D7yw3bZHUIRd4dzAgzxT7olclvJV5DTZ4/ltBN0jQbkb9jhgfTP8\naIXFlmOfZTbY3AwHnFDrPb37vY9gBO5FXiu4CdkV3IXWaj+0SnJyMrNmzWL16tX885//7NA1F6Zm\n0TsmkSd//q5V//nx9IxJY2rmIN7b+iPbq1rOCjqHp3Fpl4tYVbyB+ft+8DuXEtKZaV1upNRawAfb\nXvKrLJQYnMPI1PuRJB8/FTxDqbWShMA7cXgLsHvkBeHj0xAcwektw+2rQRBaz2NzIiTJh9NbQr1j\nJSWW2eTX3U+57X28oo2YgKvoFPoYgfpeRxdwPT4nWys+Z+Whl9CpzYxKe5jogGPumwZHLe/mPUeD\no4Yru99OdED8cfeSeH/r5+yo3sP1vaYTF9gy3nXFoe3M37eOG3qNbtdar2m28eK6pUzMyKZrZMfz\n2QunM1VkR8nJyZFyc9v38ymcJ+xCrqWQh+xqeQk5yuR0IElQ6oGdDtjhgIMuKHJDuefkoueMAiTq\nIEkHmQboYYTuRghp6Tv91WxCDpPcDsxAFvqWBmcLrr/+eubOncvatWsZMGBAu+1XHspnxAcv8sSI\nyfxj+KQ221pddqZ9/iRatYavpv8d8y+qJomSyKsb3mVNySbu7D+DYcn+5fT21m7jq91vEagL4ars\nO4k0H3NzuL3N5FV+RrFlIyZtON2iRhJlSsWkS8cnNgMqXL4yvKIFn+ikwbmSQF0vIs0XIUleBEGD\nT3SiVrUex+r21VJqfQu3rwJRkhN2aVTBBOn7EKTvh1GT5heNI0o+ChvWsKt6AS6fjU5hI+gRPQ2N\n6pjvr9RayKc7Xscnebkq+w6Sgv3j6+ftXcwnO75hUucxXNfzshZjanA0MeWzx4k0BfPZZQ+fMNna\nEW5dOJd38taw/fZH6RoZhyAImyVJymnzIhRhVzibSMi1he9B3tY/G7muwqlS64U1TbCqSbbGGw4r\nuF6ATnpI1skiHa+FUDUEqSFQDZrjpgYuEaw+sPigzgclbih2yy+FIvexiJYUHQwJgCFm6GcGwylO\ngl3IZT2fBVKAz5B3s7aBxWKhR48eaLVatmzZQlBQ+2+D6V/OYcG+beTd+ghdItsOKdpUls+M+S9x\nYWpPXh53K+pfbIzy+Dw8s/pVdtfs57acaxmRMtjvfImlgE93vo7b52R02jT6x4/wc09UNe1hW9VX\nWJylBOljSQ3tjCiuJ0DfHTlnug+DJhmNKpgQw0B8YjM19kVIkheHt4jYgGswaltu/vGKTZRZ30an\njsakTcOo7YRWFd5iA5HLa6OocQP765dh99QRYUqnZ8zlhBlTjuvLy6qi71lV/B1B+lCuzv4LkeZj\nz02SJObv+4FPdnzD4MR+3DXgxlZdMKIkMnf7MgYndiU9rG0LfHXxAYa99wJ3DRjJf8ZfAaAIu8I5\njh15YfQj5PC/Dzi1XZo2H/xghXmNkHd4MS9cDRcEQG8TdDdAhgG0p8Gv0+SDnU55FpBrh43N4JLA\nIMDIQJgaAoPNoD6Fe61Bjn+vRHZL3UybLqnVq1czfPhwrrjiCj7++ON262NWNlno9voTZIZHs2rG\nAy3E+pfM3b6MZ1Z/ztXZI/nrkCta9O/0Onl+zWx2VO/him5TmNblIr82VlcjC/d9xP76nSQHZzA1\n6/qj+WVAdr2UWHPZW/MDFlcpycECek0I0QHXEmnKQK3SHW7npaDhX5h13Qg1DMHpLaLOsZSk4LtQ\nCwEdrgvq9Tmpat5LUeN6ym3bkBAJN6aRFTmB2IBsv34qm0qYt/cDKptK6BE9kAnp0zFqzUfPi5LI\ne3mf88PBFQxO7Med/We0GgVzMjg8bnrOfhKP6GPH7f84WoD8jAm7IAiJwIfIP0sJmCNJ0ittXaMI\n+3lOOXJcdx5yXeG/8etXe3Y74IN6WGKVxTVNBxcFw/AAyDKA6gysuDpF2GSH5Tb43gJWESI1MC0E\nrg6D8F+ZuaMO2TX1A3Ks/iu0mQTkqaee4tFHH+XNN9/klltuabf7j7at57p57/HkyCk8Mmxiu+2f\nW/MlH2xbym05E7mz3+QWIuoVvczO/YhVRRt4fuyjJAX7Z0WUJImtlWtZfOALPKKHvrFDGJo8wS8b\noiRJNDiLKGxYg8u3BrXgo8yqJtyUTpQ5C5WwHoMmnqTgmxEEFR6fhVr7ImICrvQLnfS/r0iTuwar\nq4JGZzFVzXuptxciIaJXB5IcMpCUkMEE/6Ima529mpVF37KjagMmbQCTM68hK6KXX5tGp5XXNr7L\n9qo9TMkcy1XZl5yWZF5//vYT3shdyZJr72F02jH//pkU9lggVpKkLYIgBCIvfV0sSdIJA7gUYT+P\n2YEcUtyI7GZoX09aIkmwrhnerZP/NKtgcrBsKWcb4CSquZ923CKsaJJnDj83yTOES0Lg+nDZBXSy\n+IC/IkftTUBOWxBwgqY+HxMnTmT58uWsXbuWvn3bDo+TJIlrv3mXT3ZsYv6VtzM5s2eb7UVJ5LHl\nc/nf3jVc13MUDw6+vIW4S5JEfl3B0ZwyrWF1NbDy0HfkVa5GQEXfuCEMiL/waAWio99HdFNi+RqL\nq5mqpgr0mlL0GiixgFqlx6QNI0Tvw6h14fF1RRA0R8fg9jXj8tlweW00e+oRpSPhnQKhxmSizVlE\nmbOINHf2y/kCUNlUyvrSpWyr3IBapaZ//AiGJE3AdJyVDpBbvo05m+fS7HZwY+8rGZU2hEZnEwv3\nbWBAQhadQmNRq1RIktThmQTAW5tXccuiudw/aAzPj/X30581V4wgCPOB1yRJWnKiNoqwn6esQxYn\nM/IO8V5tN2+VHQ54vgo222Wr+NowmB4q+8jPNQpd8H4dzLeAT4LLQuHOyF9nwc9Bttr7IFvwJygw\nVFdXR69evdDr9eTm5hIS0nqJuyM4PG6Gvvc8+XXV/DzjfnrFtJ1lUJREnl39JXN3LGNy5wE8PuIa\nDK1UVGqLBoeFGnsdYQYza0p+YFvVOkRJJDUki96xg8kM74lec2xBVJJ8CIKacttnQAxOjwqLqxyP\nrxiTrpDqphCaPUeKZQiAgE5tQq8ORK8JwKQNI0gfd/gTi1bdcrHV4Wlmd00eeZVrKLUWoFFp6Rs7\nlCFJ4wnU++dRr3c0Mnf716wu3khScDx/6X8jySEJrC3ZzVM/f0qXiEQC9EYiTMH8pf+UFvdqi2WF\nexk/97+MSsti0Z/ubOEiOyvCLghCCnIezO6SJFl/ce4W4BaApKSkvkVFracFVfiDshY5dDEaOQX2\nyWZirfTAK9WwwCL7zv8cKbs6dL9y2itJYHODxQkWFzS5wXdciJ1WDcF6CNJDiAGMJxdi50eNB96q\ng8/q5cXVWyLgurCTH/sC5L043ZE3bIW13mzt2rUMHz6cCRMmMG/evHazQJZaGxj8zrO4fF5Wz3iA\njPC2FzskSeLNzd/x6sYFdItM4uVxtxIfFNGhr7C39gA/HFhBsaUMo9bAdT0vIzYggi0Vq8mrXEuj\nsxa1oCElpDMZ4dl0Cu1KmDESQfBRYnmdUOMwgvR9aHbnU2qdQ2zgnwjS9z2cb6bjz1OURKqbyzlQ\nv4v9dTsothxEQiTSFEvv2AvoFTO4hYVu9zj4bv8yFuz7AZ/oY2rWeIYlDyYmQE498NXu1TS5HdzQ\nawxl1lpu+/Y1nhx5Lb1iOnXIat9YVsiFH7xMamg4P99wP6FGc4s2Z1zYBUEIAFYC/5Ik6X9ttVUs\n9vOMtcgLpHHI6T3i227uhyTBl42yle6V4PowmBkBASdhoUsSlNlgVzUUNkKpVZ7PO06i/FqYERKD\nICEIMsKha6Qs+CdDgQterJJdNWk6eDoeso3tX3c83yFHDnVBfpYnsNxfffVV7rrrLv75z3/y6KOP\nttvtvtpKhrz3PGatnuXX30dqaPtCvaxwG3/96V1Ugop/DLuK8ek5bYqXV/QxO/dD4gKjmdblIv63\n5zvsHgfX9LgUSZIQJZES60G2VuSyuSIPh9eKSQsmrYm4wGRSQ8yEGfPRquPRqlSEGHIINQ5uUzRF\nSaTZbaPeUU29o5oaeyXltkOU24pw++QQyGhzAp3Ds8mM6El8YEqLvuweB4sPLGdR/lKa3M30i+vF\nFd0v5rEVn6IWVMye9Bc0KjWPLPuA3jGduLTrEABe37SIrZUHmTP5bkRJbNP3vq2yhFEfvkyQ3sia\nGx8kNrD1aktnVNgFecfAIuAHSZJeaq+9IuznEduRc6JEIudF6fgeC6jxwmPlsLIJBprhiVhI6OC0\n3+2DvApYVyoLuuVw4eFAnSzOicEQFyiLc9Bhy/z4KBaXD6wu+VPvOPYyKLPJfQNclAE3dMCfJEpQ\nZ4dv9kKADtQhMMchf7/bImULXnMS6wKLkTNc5iBb7q2kEJEkieuuu46PP/6YBQsWMGlS2/HqAJvL\nixjz0X/QazQsvvouerbjlgEosdTwwJK32VF9iDFpfXhk2J+IMLUeblnUWMqCfT8yrctFxAfFsLp4\nI0WNpVycNR6zTv4SVpeNr3Z/S6PTSoWtktjAEDLCwiixFFBjr8CoFVEL4BHB5VVh1Jowaszo1Prj\nCnVIuHxOHJ5mnF67X61RlaAmJiCB+MBU4oNSSA3JJNjQcuojSRL76wv5qWA1a0s24fK56R3Tnend\nJpMWmoxH9PK3n97H4rIzLWswEzL68cWun5m/bz0fT3sQkAuDj/7wr3x5+d+IDjhxce4Vh/Yx9bPX\nCdQZWHnD/XQKizxh244K+ykX2hDkp/kOsKcjoq5wHlGIbKmbkQXoZER9XRM8UAZ2Ef4WA38K7ViE\ny/46+KkQ1peC3SO7U7KjoXsUdIuEKPOpLa76RNnq31kNSa1bVX64fbCxDNaVQKRZfql8ug3eGgZv\n2mBWDaxugpcTILqD7p7xwCfIO+cvQ3bR/OKXLAgCc+bMYffu3Vx99dVs2LCBrKyWdT2Pp29cMqtv\nfIBxc//LsPdf4Ovpt/lFZLRGYnAkc6c9yPtbl/DaxoWsK93NHf0mc2X3EejU/oMqt1Vh0OiJDZR3\nn2lUGhxep58lu7RgFRqVhjv7z0Cn1vLEipfIiriAyZnXUG6r4MeDK8ir2IUoeegZnUpUQCAurx23\nzz+fTbgmGqPGhFFrJkAXRJgxijBjFMH6MNQnCEWUJIkSazmbyraytiSXEms5erWezIhuDEnqx5Ck\nXkfDGPfWlgJwZbfhfLt/IxMy+jG92zD+u2E+e2tLyIpIRKfWMCy5O2tLdnNJlwtavefnOzdx/bz3\nSQuN5Idr7iIx+AT+tZPkdFRQugB53+AOQRCOJHD+myRJ352GvhV+rzQjW5Uu5ApDyW039+Pjeni2\nEtL08EICpLeT9UuUZOt8wT7YUwsGDfSPh6FJsqCrT2PmDLUK0sPkT3uIkizoe2rhgiQYfNgCzi0H\nmx2ejZfDMh+rgCsK4bVEeTdrR7gUOQ3wrch531sxqYxGI9988w05OTlMmTKF9evXExbW9ri7Rsax\n9sYHueiTVxk39xWeGjmVh4aMa9ONoFGpmdlnPKNSe/HM6s95ds2XfLJjBfcMvJixnfocvdbucaBV\na1AJKpxeFxanFYNGj/Hwblav6GN/XSGTM8egPnyN1WUj4LA1/86WzxmU2JdLsiZyqLEUtUpNt8jO\nCILA17u/pchSSrfITEakDEbfwQXdBoeFPbX72VOzn62Vu6hqluseZoZ34poe09lQWsLKonzsHgM/\nHtzB06NuAECn1pASEk1icCQqQWBH1SGyo1O4ruco3tz8HU9fOAOjVodapSKrlbJ3Hp+Ph5f+j5fW\nL2VIUjrzr/wzYa341H8tpyzskiSt5o+TnknhdCAhb43fiZzEq6PlOb0SPFMJnzXAiAB4Lh7M7fjS\n8ypg7nYosUKECa7/f/bOOzyKcvvjn0mym95IA0JCaKH33hGQoiByRVTsInYu+rOh2K6KIOoV7CJg\nQbFcBASRqtJ775DQEkjvvezu/P44G9J2UyC0+H6eZx9gZ2Z3dkm+c+a853xPexjUWMT9anMmTVJB\nAxvJhQZgXxzkFkITq8De5A3NnOGJaLj/jOTdh1bBRwCkFOEQ8CGSlhlXfpfQ0FAWL17MwIEDGTt2\nLCtWrMBgqPjOIMS7DlvHv8iEZd/z8l9L2HLuJN/e+mClwtPIty5fjvg3m6IO88HWX3l29Vc08gli\nfMeh3BzendS8NPJN4k+TkJ1EYk4yDbyKuzdjMuNw0Bzwc/XF0cGRpJwUfFy8MTgaOJMWTWpeGgPC\neuLk4ET7uq2wWAd0fH/gV0wWE13rd2Ddma008g0h3K98uaXJYmarNRKPTo8hKv08iTnJADg7OtMy\noCm3NB9Cl/rt8XX15mx6AkuO7WfNve8AMPrnt1hzcg83NunEpqjDNPdrQLhfMM5OBp5dPZt/tezN\nQx2HMGPzQt5c/wMJOWnkmQrxdyt9Z3c+I5U7f53DpqhIJna7gfeHjCl3d3OpXAM//Ypax6dIjfo7\nSCqmKhTo8Pw5WJsJD/rBM4EVd27GZ8E3+2B3LNTzgIndoGcIOFUjOs/LhcxMeWRlg6WEeYzBAJ6e\nxdHyABEAACAASURBVA+nalbFWHS5g2jpXyzqp1LhRDK0DpQLj65LWqiZC/zUCP4dDf93Dl6vJyWc\nVeEDYB/SmdoBmxfR3r17M3v2bB544AEmTZrEp59+WmmFhofRhQX/Gk+vBo15dvVCWn/2Bl+OuIdb\nKql11zSNvg3b0CukFWtO7eGrPSt55e/v+GjHUm4IC8fgkEdE8mnWndmCwdFAr5DidHFyTip+bj4X\nUiWnU6PwdvHE6GjgSOIJAD7b+S2xmQmMbH4jvUK6EJMZz97YQ/znhufwMLrj6ODIujPbbAq7g6bx\n2c5vAKjvWZemdcIY3uwGWvg3I8RLBLokyTkZhHgHEJeVSl0PX+5rN5A1p/bSoV4T/N28+eXwBubu\nXUV2QR6ezm4MbtwRo6OBF3qPYXP0EfJNhQxrWvz5dF3n2/1beWbV/yg0m1nwr/Hc1bZbhd/nxaKE\nXVGz7EKmmY1AZh1UhQILPHNOqkVeDIL7/Ozva9Hh9xPw8yHJud/TThYxKxN0sxkOr4eEWEjSICZW\nBL2qBARA/fryaNQI/AMqz9UbHCDYGn3viRVRzy2EAeHlz9fPCeY1hKfPwX9ixX3y7iqkewzIvIkO\nSCnkDopszktx//33c+TIEWbMmEGzZs145plnKn1pTdOY2H0gfUKb8uBv3zLqp88Y17YbHw27Az83\nO11SVhwdHBjWtAtDm3Rmc/QR5h/4k18O76COK+yPP0GzOo15rMs4otNjKLSYCPdrTF2PANLyMi6M\n1dsde5Ag9wC8nD05lnSSMJ8Q/t19PNvP7WFP7CF6hXThUMIx6rj64GGUD21wcCI2Mw6gXCWKg+bA\nB0PfINDdDycHkb6I5PN8sWsFfq6e3NK8B60Di3OGOjKSrugu4+bwbiyP2ElMRjJmixl/N28e6jiU\nrsHhzNq+hN9PbOfpHqMxOhq4Iaz0BfBcRiqPLPueFZGH6BvalLm33FdpWemloIRdUXPkIumAIOAb\nqmYTYNLh2fMi6q/WhTsrELOMfPhoOxyIh671YXwnKUO0h9kMERFw9AgkrgPXVIitB+6hIs6BQeDt\nJRG5hwc4lkj75BdAljWaT02DuFiIjIT9+2V7nTrQoiW0bi1iXxYHDfo2hDl7YFWk1ME39oXBjSVl\nVERMplTdxGZC/zCY1UC+j3fiwKjB7VWI3OshE5qGIvn2T23vNm3aNE6ePMmzzz5Lw4YN+de/qua4\n1rFeKDsmvMS0jSt4e+MfrIo8zH8GjOTRLv0q9UTRNI0+oa3pE9qa2MwUlhzfypJjW1h07Ai/HX+N\nzvXCaBMYjENzF5rVCcbN4MqSYysJ9Q4mMTuJIU36A5JrH9NK2pSb1AljY9QOErKTOJUaRauA8Avv\ndzjxOMFe9k3NStro5hTm88Wu5bQMCMXN4MynO5dxZ5v+9GvYFoDO9Zoyf/+fHE6MItDdF1eDkSZ1\n6rEicheT+4y9UNao6zqjmvfEx6X8xS63sIAPt61l2qaVWHSdj4bdwZPdBtSI7UBFKGFX1BxvAxHI\nPM8Kgu4L6DpMjRPv85crEfXjSfDhNsjMh0c6w6BG9iPm3BzYvRt27IDMDAhOBN9CaPUsNGkBzkao\nyi9WUJmIStchI10uFseOwbatsGUzNGgAPXpCyxZQUujaBcHkPlKdE+xZvsnpjwiISofsAnB2grWn\n4J1B8N8GMDEa3oyVSH6gJ5VyIzIR7iPgHsDG7GQHBwfmz5/P+fPnufvuu/nrr7/o2dP2kOWyGB2d\neH3ASP7VshOTVv7MUyt+4tOd6/lgyBiGNW1dpZb5ep51eLzLzTzW+SYOJZzlz9N7WXNqL/P2bWTe\nvo0EuHnToW5DPI0W4jKTubvdbTT2lU62dkEtSciWfPjRxAgsugUfFy/S8tLp0aDThfeITDnDLc0l\n/6dVsvQXl5XKiZQYPhgqvjpuBhfWnTlIY996NLA2XN0Q1o5dMScIcvehc/1m9AlpXWrIt9liwdHB\noZxTo8w73c2LaxcRlZ7C6BYdeH/IGBr72i9lrEmUu6OiZjiKTAEahzg1VoVvkqXxaLwf/F8Ft6Xb\nzkmk7ucKz/aCMDtt8vn5sHGDCHphITQOgm4DwXIULAXQZChknoe4/eAdAj6NwCsYdEvVhL4sublw\nYD9s3w6pqeDtDQMHQdu25S86285JJU1RtL74qJRNDm0iJZDeLjBzG4wIl/1yLPDgGYjMh+8bQcsq\nNENlAq0Bb8RgzU7YlpiYSM+ePUlLS2Pr1q00a1a94bG6rrP0+H6eW/MrkSkJ9Appwqv9bmJok6oJ\nfNnXispIZMf54+w4f5yd50+QmJN+YXsDL3/CfIII9vQhPisSi27G360OI5sPoW1gc1ZF/oWToxMj\nwgdzPOkk3+3/Hy/3/TfuRjd0XSfXVEB2QR4B7uVLU/NMBfzfqtk81uVm2gU14lRqHIuPbaaBpz93\ntJE7hQJzIf87sol1Zw7QtX4zlhzbyvO9x5RLtRRhtlhYdHQvUzf+wf74c3SoG8KHQ29nQFjzan0v\n9lC2vYorh45EjLuRaUBVCUp2ZMPDZyUa/W8D+zXq687A5zsh3A9e7CMNPuXeX4dDB2H1asjKgjat\nISAKHEzQ50XIToDTf0H8QTAXQMO+kJMEqadgwBvgcIk3rhYLnDgBG9ZDbCyEhsLw4VC3RErgVKqk\nXLrUl3z7tnOSlmnkI/YFWQUwdQNM6CwpGxBf+bGnxEjsl8bgXYVu28VIZ+pMZByoHSIiIujVqxee\nnp5s3ryZevUq9mS3RYHZxJw9m5i+aSXRGal0rhfK872GMLplx4uu8tB1ncScdI4mRnM0KYrIlFjO\npMVxJi2eXGuu21ET6x2QNegQLw1dd0BHI89ksD4KyCnMR0fHy9mNreM/LPdeeaYC5u1dhcHRwIRO\nwygwm/j9xHbOZyaXc69cd+YAu2Mj6BPahu7B5UU6p7CAnw7t5L0tqzmWFEdzvyCm9L2JcW27VWqJ\nXB2UsCuuHL8AdyC53SeqsH+iCW47KUL1UyP7JY2rT0qOun2QROq2Shgz0mHxYjhzRnLdvcMhYT0Y\nPSD5BAyaCm7+kHQMEo9A+AhwtF4ctv4XQvtCcAWTLGJ2y/5+zcCpkqhZt8DevfDnnxLNd+8BgwdB\nWZFbfFSUaXhTcDfK2sFnO6W6535rJ6tFl4vdvhwpg+ztAZ+GVL5gqyNGa1uQtFgFN0I7d+7khhtu\noEmTJmzYsAFv7yo0XNmgwGxi/v5tTN+8isiUBALdPXm4Yx8e6dyXhj5VyclVjkW3kJidTkJ2Ook5\n6STlpJORn0NOYT7p+Zmk56Wi4YC70Rtd13EzOuNmcMHN4IyXsxtjWvaxeTex7swBVp3czRNdRhDi\nHcAvhzdwLCmaKX3v4vcT2/FycbMbnQMcS4rji13r+Xb/NtLycmgX1IApfYdzW8tONSroRShhV1w5\nvgB+QCwDKgsqdV3yx1uyJQq113y0OQpmbZcI95keEtWW5fQpWLgQTCYYMhSa+MOOT6DVbdCgB+z9\nGpw9oZXV+tSUV1qct3wArcdKWsYef0yE7HjQHKFOUwhsAw26g0+Y/WNyc0Xcd++CkBAYczt4eYlY\nF5jhkx1SydMqQKL4eXuhrgfc0dr255yfDNPj4c16cFsVFlNPIGWPTyGRewWsWbOGm2++md69e7Ny\n5UqcnStpBqsAi25hVeQRPt+1nuURB7HoOn1DmzKubTfGtOqMfyWVNFeD7II8Pt/1O8m5mUwb9CDz\n9/9JbFYKL/S+nYPxZ2gZEFJugTgmM42fD+1iwaEd7Io5i8HBkdtadeLxLv3oG9qs2umo6qCEXXFl\nKXJMrYxlaTA5Bp4PggfsRHNHE+GtDZJrfqUfGMuIna7LouWff4KfH9xxh5QfAhTmgMFNoueIP6Ag\nG9rcUTqPnhUH+78DR2fo8hg4VSBmOcmQcQ4SD0PCIUg5KR/Wtwk0Hgyhfewff+ggLF0KRiPcfjs0\nDJPn/4iQSpmbw6V0c3Bj6NFA8u9FJZFn0uBkqqwr3N8BHjoLR/JgSROoX4Wa+gnI+JtIoBLLlwUL\nFnD33XczevRofv7550obmKrC2bRkvj+wnR8O7uBoUixODg70CW3KiGbtuKV5u8ta6lddsgpyeWPd\n90RnJGGymHlzwL2lyx51nUMJMSw9vp/lEQfZdu40Ojqd64VyV5tu3NOuO0EeVWwqu0SUsCuuPdLM\nMCJSBk58F2a7ASktD55fDW4GmDqofE5d12HlStixXUoNO/hCThx41IPGg2Qfi1mqUxKPwLZZMOxD\nEXuQ3PruryCoraRlqkt+JkRthFN/QkY0OHtD27sgbIDtBdjEBPj5Z0hLg7FjIdyan91gta02Okrp\n5sIj4jbpqEkKJsBd8vBuBniiK6TocOtJScnMqtyci7NAE2Se7PuV717kBjlu3Di+++47HB2rkM+v\nArqusz/+HD8f2sXyiIMcTDgPQBPfAG4Ia86AsHD6h4UT7OlzWSPdyig0m0nMSaO+px+6rnM6LYn1\nZ07w95kTrDtznOiMVAC61G/IiGZtubNNV5r7163kVWseJeyKa4+3YuGXVPhfYxlbVxaLDm+th4gU\nKfsra7Kl67ByhVS99OgBTR1EYFuMkj8960H7+4pz6CCpGf+WxaIPkJ8BzpcYYek6JB2Fgz9C8nHw\nbQwdHwK/8PL75ubA999DXByMvQOa26iQ+GwnnM+Qi1lSDmw8K46S93cQ58k8E8xPg5kJ8EUo9K1C\nWuNOxAnyHHanLpXk3XffZfLkyTz88MPMnj37sgjtmbQklh0/wNrTx1h/5gTp+TKfNtDdk451Q+hY\nN5Q2gfVpHVifFv51calux281yS7I50hiLEcSYzmUcJ49cVHsjY0mNS8HgAA3TwaEhXNj45aMCG9n\n1073SqGEXXFtcSYfRp6EO31hip0KjKXHxffl8S5wQ6Py29evg3XroGdPuHEIHPoRXOtA02FQmAtb\nP4DgbhI9Oxolcj+6CAyuEp1fbFljReg6RG+GA99Dbqrk91uNKf8+ebkwfz7Ex8P990NIaPHxRQL6\n5nrwdREr4cwCGNdW/p6YLY6V7kb4wkEsfhc3rtztcgti0fcl1hE3lfPKK68wdepUJk+ezLRp06rx\nRVQfs8XCgfhzbIyKZK9VUA8nxmCySOepg6YR5uNHQ28/wnz8CPWuQ6C7JwFunvi7eeDl7IKbwYib\nwYizk9OFunUdnTxTITmFBeQUFpCel0tiThZJOVnEZ2VwNj2Fs+nJnElLJio95cL5GB2daBcUTMe6\nIXSqF0rf0Ga0Cqh3Ve8kynLFbHsViirxZZJ0Uj5mpxYyLgt+OSyLpQPCym8/cEBEvX17GHyjiKF7\nIBRkycPoIYJ66GfwbwHeoZKOcQ+AY7+JsJcUW90EeccgP9L6OAN6QfF2Ry9wbgLOTcElHIx27Ck1\nTfLs9bvAnrlwZCGknYFuTxWnfwBcXOHuu2HuXPjpJxj/sHSvalqxuN/fHt7ZKBH6e0PkuPgs2BIt\nTU6bo6BfMHxngDWZlZuF9QTaIi6QE6jSGshbb71FYmIi06dPx8nJiTfffPOyCZujgwMd64XSsV7x\nOK18UyGRKYkXIugTKQmcTUtm1ckjxGaml/JWvxgcNI1gTx8a+vjRN7QpLfzr0jqgPq0C6tHYNwBD\nDaWgrjYqYldcfs4VwPBIGQf3vJ285LSNcCwJPhxW3iYgIQFmfwENQuDee4vLB2N2Q9QmaDkavKyl\ngAcXyGJn7xeKjy8Sfl0XMU//DdL/ALN0MqIZwBgGDiXe15QCheeK/+3cHHxuAe+bwcnOxUnXIXIl\n7P9WzqffFHAp00yVnAxz50gz08MPF3+WhGy5sBkdJSV1VxuxCF4ZKQupD3WUbW9tgGO+Mqzj18aV\nlz9+ATwObAO6V7xrEWazmUcffZS5c+fy0ksvMXXq1Gsiai00m0nJzSYxJ5PE7CyyCvIuROV5ptLT\nsFwNhgvRvKfRhQB3DwLcPPF1davUBuFaRkXsimuHn1IlWrzXThXMoQTYGyeGXmVF3WyC37+EoGTo\nP7i0kNXvDAkH4cx6aHIjeNSFFrfC7tlS2ujoLPsbPSB7B8R/AHmHACfwHABew8ClJRgbgGbjV8GS\nA/mnIXcfpC2D+PfkNbxvhsB/g6GMR4ymQbPh4FkftrwH69+CG/4j71+Enx/cMgp+/gnWr5dOVZAB\nIK0CxOK3JG0C4a/T4inTJhBe6gP/S4CZWbAnBzpX4uF9F7KA+gNVFnZHR0dmz56Ng4MD06ZNw9XV\ntUrj9S43BkdHgjy8rlgFyvXM5XWiUVzf6EBcmedOA6eQQRpVIdcCv6bCYC+oa2MhTNfhx4NS1jes\nafnta74C52PQsiOcWQXHFkPG+eLtrcZAYTacWA7ntsP++fKajkYRWlMiRD8DZx8EUxLUfQWar4eQ\nWeA9HJzDbIs6gIMbuLaGOndD45+gyTLwux8yVkPkCEj6CvTC8sfVbQ99JkNWLGyeAZYys1VbtIAO\nHWDTJoiJKX6+SNRPpcpiKUALf4nWV58UTxkfF7i7gTR3fZ9CpXgjTps/A+ZK9i350R0c+OKLL7j/\n/vt57bXXePvtt6t+sOKqo4RdYZ8koGj9rAAZb/ckMpJtIpBWhdf4MxMyLLJoaovjyVIFM6pF+Xr1\n9HQ4ewiM3aHPA9D+XkATewCzNR9elFsPagvntomYd58o+fSsLXByFGStg4CJ0HQ51LlL0hgXg3Nj\nCHoOmv4OHn0hYSacvgcKE8rvG9gGuj4hHa8HF5TfPnQYuLrCqpVyISrJxrOw4GDxv90NMqvV3Vrt\n4+YAt3qLeVpaFQZy3wYkIJbK1cDBwYG5c+dy77338uqrrzJlyhSuRupWUX2UsCvsEwPssf49FngX\ncRDciDS9PFeF1/gtDRoYoIuNicsgzTruBtsLpuv+BosGQdZB1EWdn7oZorcU7+fsJdUwXR6Fzo+I\n90v67xD1GDgFQeNfIeAxcKiCkVZVMNSXiL/Bf6HgFJy+S1I2ZQntIxU7J36HmDKq6uICNwyEqChx\niizJ/R3ExnfeXvGVWXWyfC59lA+YgOUZlZ/vEOQ3/SKGVTo6OvLNN9/wyCOP8M477/D8888rcb8O\nUMKusE8ykIOkXdYARmSQsitwMyL2FZFuhu3ZMNzLdmleRj7sPC+iXtYHJj1NvM8b9gNXd4nGQVr5\nPepCrjUNcepPMfcCyamDpErOvwRuXSBsvkTalwOvofL6eiGcfRgKzpffp929cs67v5KSzJJ06ig5\n940bykftL/YBk0U6Ueu4wsNWa9qi/Zq7yEi9NVUQdj+gE2L5cBEUpWWefPJJPvjgA9544w0l7tc4\nStgV9nFCRPx9YDkQWmLbeaCyNaxNWZLXvcGOn/jmKDHDshWtb9suf/YaLOWLsXsgPUra933CIPGo\niJxvY1lEBYlqszbDuefBtT2EfgKOVfUnKQCySjyqmJB2aQENv5KF1rPjJY9fEkcDdJoAealwbEnp\nbQ6OUpMfGwtnz5be5uQAEzrBnW3gPqsJlUUvHbkP8JAF1IwqnGtvZLpSQWU72kbTND766CMefPBB\n3nzzTR555BFMpiqkgRRXBSXsCvu0R9IvvYD7gPsp1rt8bA5zKMW2bFnka2tnytH289Jd2rBMztts\ngv37oGVL8KkDwd3Bq4FUu2TFw/kd4OorKRnfElUk5nSJ1J0bQ+jnsvhZIUnAXOAmpDXTs8QjCBiP\n5C8qUUOX5tDwSzDFQ5yNph6/ZhDSCyJXiHdNSdq1l7TM3j3ljysp4rpe/q5nbB1Y1AQ8q/Br3API\nAw5Xvqs9HBwcmDNnDlOmTGHOnDncc889FBbaWDxWXHVUuaPCPt5IpGeLO6tw/J4c6OhqOw2TUyh1\n66NstNefPCUOie2tkarRHZrfIiWMx5ZI9Nvj6fI+6vEfgjkVQr8Ax4qmDmUBzwNfIVeqRshqcFFH\nrA7sBxYC8wBfYAYi9HbquV3bgf+jkPgxZN4Cnv1Lb28+StYFTv8pn6UIgwFatYKDB2FEARhs+M2D\n7Xr1qpiBFVHkPHsQ6Fj1w8ri4ODA22+/jbe3Ny+88AIFBQUsWLAAF5caWr9Q1AhK2BW2qcytcSWS\nu7VnZZ5hhjMFcKudCpQjiZJa6GCjYenoUYlim5SZNN96rJQO2hqMkX8a0hZCnXvAtVUFJx6D1P/t\nRzp3xiOToG192HzgT+A9pHVzDzJ7zs6vjf9DkL4c4t+XqpmSna6+jSCgFZxcA+EjSwt1mzawZ49c\n0Fq0qODcL4FmyBrJJUTsJXn++ecxGo08/fTTDBs2jCVLluDjc5HVRooaR6ViFLbRgGXIHNMvgP8B\nfyPaZkGGauyv4PgIayVLczuWthHJ4mTYxMac0zOnISys/IAKsD/tKPlr0IzgP6GCkzqE5CQigN+B\nT5Dw1d4VzBlJ0/wJvIj05t+KRPw20IwQ8KhUymStL789tI94u6eXyaeHhoKTE5y2UVlTUzgBDZE+\nhBpi0qRJ/PDDD2zZsoX+/fsTU7ImX3FVUcKusM97iJjvAxYA7yDDG/ohi6kNKjj2lFXYm9gR9lOp\nEOJto3Y9TSxuw2yYgNnDnAnpy8DnVnCyN7EnG6n7MyP1msOr/vo4ANORK9wKJNK3g9dQMNSDFBu1\n68HdAK186aOjk4j72TPljzFb4LdjsK9sp9hF0IgaFXaAcePGsXz5ck6dOkX//v2Ji6uB81RcMkrY\nFfbxBh5F9GwxsBoJXjch2YuKHExjC+WnK8hOHjg2C4Jt5MHjrc0+1ZnBmbVJDLy8K/JX/wSpz/wF\nOfmL4VGkeP8HJPq3gWYAr+FiYWDOLL3N2UsWgZMjyh9Xtx4kJYkjZUkcNPFqrwlhr0f5TuIa4MYb\nb2T16tXExMTQo0cP9u7dW/NvoqgWStgV9nkNaI40woBkLIrWyPpSuvyxLPGFEOAkFrNlMVnEczzI\nRiliYqL8GVCVidhWsjZIN6mrvdmU+cji503YXw2uKi8iVTNT7e/iOQAwQfbW8tv8mkFKZPnnAwPA\nbIaU1NLPa5qMzYuzk/7RdVmrqEpdeV0gHi7RINEmPXv2ZP369ZjNZp555hlV536VqZHFU03ThgGz\nkImXc3Rdn14Tr6u4ypRcGDUjwl4UCsyq5Nh0M/jYcdHLKhAx8rFRSZGZKaPkXO2USNoiPwJc2shc\nUptsA1KQiPtSqYN4KixEvhQb7+nSFtAgLwK8hpTe5lEPCjKlWclQ4jN6WW9/MjPB37/0MT4u0sxV\nlqKB15qN5+ydeiHSdFaJd9jF0KVLF3bt2oXRaLwm3CD/yVyysGua5ogspd2IzGrZqWnaUl3Xj1zq\nayuuMplImXcWEql7A2FAG4orA+2RZQEPO0Kbba0LLzv2DiAnG9xs1J+f3wHxB6DDg9LYU4Sui5e6\nb+cKTuYv5IrUv4J9qsMNwBxk8cHG+zoYwRAMBTYS2q7WxeLcFNmnCHfrZ8624a7mbhRb3yIKddiX\nI14xR/NkIPggT+jhXvHwjaLMVyaXRdgBgoKunVmm/2RqIhXTDYjUdf2UrusFwE/AqBp4XcXVpAB4\nCUklJyC38DuA/wBjrH+viEJdBmvY3CYTcsotnAKYTBKxlyXtDJxcXVrUATCDnluJsVcsEEjFiwLV\noWj8XQVVII4+5XPsUBylm/LKPG/9zCYbDT9GRygokXtflwkfJkA7VxjvJxH7u/Ew5jT8kW7/nIrW\nsS+y+7SmWLRoEe++++41YQVcW6mJVEwwEF3i3+ew4fysadojWAd0hYZWlJxVXBPEIk2Xp2xs2wo8\nRrFB2DVBZbf+NZkaqMpr2dvHzvPVOb1NWXCjJwy3Xqj6WkPxHdmwJA1CjdCmGqmsK0R2djY//vgj\nH374Ia+//jrz5s1j4sSJzJo1CwcHtdxXk1yxb1PX9dm6rnfRdb1LQHUWxhRXBwtyyf4DCUxzkdxs\nnnVbZU2PTppE7Ta3WX/sTJby2xwdJWovi4P1DU1lc80OUj9usbO4CEjnaDLyIWqCoslKdqyIQc7H\nwYa4mq3n71jmCyz6zLZGs5ksxd8ZQAc3iCqUBeqSdHOHTEtxD0FZina/Cm2JZrOZRYsWsWnTJj79\n9FPGjh3Lp59+ysmTJ8nNran/F0URNfFffB4xcS2igfU5xfVMA2Tyzi/AdiQ/64Hcm+0AHq7keHcH\nSLBjEuVuFbUsGzkBNzfIySn/vKtVRPNSxd2xCM1B5pGaK0hB0B+pitkCDKrkxKvCX4g7mp22W90E\nBdHgObj8tiJXStcyjVnZ1s/sbiP5nV1Qej1itA/EFMDDZ8VWoL8ndHSDk/lwOh+628lzF2WGKnJb\nuExERETw119/cdNNNzFgwAAKCwtZtmwZ7du3x93WZ1ZcEjUh7DuBZpqmNUIE/U5gXA28ruJqYkAG\nNDRHmpRirI8mwDdINF8RXo72I8cikbJV6eHhAXl5UJAPxhLNTW7Wu7ysuNLCDtB4of0pSIDUZroA\n87l0Yc9FKmIGUJy0LkN+BGCybRecFQ9OrmAoI2aZVvtdDxsloOn5MmijJE8Gwm2+Ytu7KUty613d\n4eW6UN+O30waco9+FXR01qxZGAwGxo4dC8CePXuIiYmhVati+wdd11U1TQ1xycKu67pJ07SngFVI\n7dc8XddryJFCcdVpY32UxGJ9VJTIC3SChELb5XcGRxmFF28jfVJU6peYBMElrh6+jQBNasDrlmkw\nqlDUQULUJ4CZSB16y0r2r4jPkCucjc7SIjLXARp49Cq/LSVSrIbLClhCojxXx4bFQnwWNLWuS0UV\nwIFcWZge4iVzZItmyRZYF6x1vfzrg6ybBHHFu1cKCwvJzc1lypQpgIj6mjVrKCwsZNSo4joLs9lM\nVlYWW7ZsoVevXsp75hKokWybrut/cFHzWRTXNPaMwDYgJdwVBb91DdLYlGSCQBsJ+boeMqC5LIGB\n8md8XGlhN7iBV7CMmrsoJiNiPNL6AepXvLtN1iJlQTdit3RS1yFjFbi2Bacy9eiFuVLdE26jW+cF\nXwAAIABJREFUQzYhXkTdqcx3lZEP2YXyfQFMjwNPR4jMh7hC6Rco1KGBEcZa01X2ot44RNivMAaD\nAX9/fx588EEmTJjAokWLaN26NRMmTMDXV87ZZDLx4YcfsmvXLvLy8pg4cSLff/89PXtW5g2tsIVa\nilbYR0Ny6tsQw6+ismxnKq8cbGxNB5y0k45p5Atn0sovoNbxkzxz2cETAPU6QcJhKKhoodQeAcDX\niLr1wK4lgF2+RvxlwhArXztkb5ZUjO/Y8tti94iHfP0yte8Wi3ze0Ibljzlpzck38pHvMs0M7wbD\nJyHwbbI0gTV2llTMr6nljy/JGcQI7Crw/vvvM3LkSPbt28cTTzzBK6+8UioN8+qrrxIVFcX48eP5\n7bffeOGFF/j777+vzsnWApRtr8I2UYh+JSA/JfmIoLcCbkcseyuiqbWrNCIfetrIGzetA79bICod\nGpeoLtE0aNQITp0C3VLa+rZBDzi+VJqVGg28iA81DDEAG4FMD5kG3EPFV6lTiBvaF0ikvhC7o6N0\nHRK/AKdA8L65/PbozeDiA37hpZ+PjZV1hUZh5Y+JSJELbGNf+DkDGlovmPtyJEovSsOEGOHrJMm7\n28KCCPsQ25uvBC+++CK6rpOYmMj+/fsvROPz58/n5MmTvPzyy7RsKWmypKQkTp48efVO9jpHCbvC\nNu8hqZihyEKpGRk4NB9ZTfmI0rVQZfF3grpOkg+2RSvrYui+uNLCDhDeHA4dkkHPDcOKn/dtAl4h\nELECwm6wn3IwZ1UwEq8jcgtyH2JV+QwwGBhNcXpGR7pKf7X+qQHPIheCCuo80xZD7l6o9x8pwSxJ\nVjzE7JYhG1qZG+XDh8DBAZo2Lf+a++PE2tjVAD3doZu1Q3WgtRKmiAM5Iu72OIuUq1ZkVX8F0DQN\no9HI7t27CQ4OxtfXl/3793PHHXcQHh6Os7Mze/bs4ZdffuHrr78G4MCBA6SmphIeHk696pjD/YNR\nqRiFbdYCk5Ae4i5Iy9nNSF9xPMWl3BXR0Q1259g2qPJxEUHfa2MidvPmMlnowIHSz2sahN8sfuYJ\nB22/Z9LXMns0ciRk2vBEB+SK9BfSaTUJOIb0zo2wPkYCrwJuwAdIDup9KhT1gvMQ/x64dQaff5Xf\nHrFcBL1ZGbtgi1kuYs2agWsZK4WMfIhMgY7WKqDmLtDKWhvv7CDrGEVsyoZeFZS7FHnnt7W/y5XC\nx8eHp556itDQUIxGI8ePHycsLAw3NzcyMjJ4++23eeyxxwgLC2PBggWMGDGCBQsW0L59e7Zt23a1\nT/+6QEXsCts8hmjbDUgHvTeia9lI9B5Yhdfo7g4rMmShr5kNw6+u9eHnw+KDElhClIxGaN1axsUN\nHlxa8EL7wJGFcOB7GDy9dPSbtRHSFkGTpZC9DVLml59kdAENybX3QGrcj1Nc6A1SyF/F6LAwQS4m\nYI3Wy7xfZqxMTgrrX75+/dgxMf5qb8NKeEu03Dx0sy4iR+bDwVxZv/BylEVpdwfItsCj/tC5ghmv\nO5Df9nZV+0hXgqK0TGZmJllZWZhMJu644w7atm3LoEGD+OOPP1ixYgWfffYZI0aMoFOnTvz+++90\n795dlUVWghJ2hW0eQfKy+6wPE2KQGIHMnLBRol2O/tZ0yLos28Ler6EI+4azMKZMjqBHT9i3D3bu\nhH4lKlAcjdD2btg+CyJXFUfA5izI3g6+d0hk7+Qn3ujmZHAq0elsSoSkr8CUBF43gddgROQvYSRd\n+jJ5n9A54FxmQIiuw955ct5t7iy/bcsW8PWVu5SyrD8DYT4y7PvHFElrpZtl7KCHoyycdnWDEd7S\ndVoRm5EsVGXzva8gmqbRoEEDXnzxRR544AH69++Pt7c3M2bMYPPmzWzYsIGRI0cyYsQITCYTe/bs\noUmTJkrUq4ASdoVtXJH0cwEi6LlIY0tVIvUiAg3Q1gVWpMME//LbA9yhbSCsPQW3tijdNh8UBOHh\nInxduoBbCeEK6QVn10vUHtASfMKg8DyYM4qHbeh5YKgLBTHFwp5/GlJ/BJwkkk9fDi6twGjNrRcm\nSImizQi/AvweEnteo41FhxPLIH4/dBwvC6clOX4Mzp+HESMkx16SyBQ4mQoPWCP5penwXFBxVH6+\nALZny/PnC+HfFfzHZCHLChOr97GuFMOHD2fv3r0YDIYLXahff/01gYGB3HmnXAx37dqFm5sb/fvL\nRf7EiRPs3r2b3r17K+8pG6gcu6JijMiAhkZUT9SLGOUDx/PFXtYWw5tBSi5st5G0HzwYCgpgfZlc\nuaZB1yfB6AFbPoCCbInA9QJwti5AmpLAkgvGEvP70peCoz/4PQA+o8W/PWuDbEtdCLFvQsSNEPs2\nmCopHSx7PrZEPfEoHFwAwd2hSZlyFLMJ1qyRhqyOHcsf+0cEuDrBgDBp8qpvgMO5kGqSSD/YCP/y\nhW/CpPM00s73C9I5XED1pgFeYXx8fC6IenR0NLt3777g/njkyBHWrFmDwWCge/fuPPPMM7z11lss\nW7aMIUOGsHbt2qt56tckStgVl5fh3tIN+YsdoexUD+p5wKKjImAlCQiEwTdCp07lj3Pxhp7PQE4S\nbHkPClPBlCJdqKY0KIiS6LvkDNS84+DaDpyseW5TAjg3g7xIyFgDfg9C+J9gyYa8Es3TOQek6ciU\nJv+uynSgjHNyXu5B0PXx8hU8GzZASgoMHVreijgmU/LrgxqDm0E6dx/3lxz77+mwNxeiC6Su/WCu\nGH81tZHqKmIJ0nzbp/LTvhbw8vLC29ubbdu2sXPnTr799lvi4+N55ZVXmDFjBn///TczZ85kwYIF\nTJgwgQ0bNlztU77mUKkYxeXFxxFGesPSNHg6ELzLiJiDBne0gZnbYONZ6B9WensvG235Rfi3gK5P\nwI6P4VgKNHCXqD3rb8g9CP4lnMryToDmLIOmNSeJ6DUXcPIGUzqgg5s1cjY0ALNVxNOWQvYW+XfC\nJxA8VS4OFZFxDta/JXcEfV+SrtmSnDsHGzdC+/bQtFn54388KB7so0rk3Zu6wO2+Iuybs8HDQTpQ\nEwrhHhs2BBc+N1J6/y/sWttca3h7ezN58mQmT56Mh4cHt912G3fddRd79+5lxowZ7N+/Hz8/uWC7\nu7tTUCBmcsprphgl7IqLYz+yiPoJlTcr3VUHfk2TqN1Wrr1HA2jiCz8egq7BEqVWlYZ9wVIIu74A\nh1zIuRHc2oH/BDCEiNOi5iRRuFMdpKQHyN4Jjl4i9DjI85ZMSd/k7gdHd7DkQfI3UO91cGsPKT9C\n9i5waW1/DF/cPtg2SxZL+79W3rAsJxsW/QqenjDMRm7kcAJsPw+3twLvMlF4W1d5FFitec26lD/a\nmitbxG9ABtedLd+wYcPo168fWVlZBAYGkpmZydtvv83s2bMJtlpNZGRk8N///pf3338fQIl6CVQq\nRnFxaEhN+9dV2LelC/T1gG+SpTSvLA4aPNQRUnNhgZ369IpoNBB6vwgxdeB4MzDcJ1F1zg5IWQCW\nHHBpCYWxXDC/Sf9NInQHdzCGgscAOPsQxM8AzLKomr0VHFxE1AGMjeQ5W6KuW+DYEtg4Ddz8YeBb\n4F0m724qhJ9+gowMuP12cCkj3AVm+HI3BLnDLTaqZIowOkBrV2jnJsZfFfEpsj5SE27FVxg3NzcC\nrd5Buq4TFhbGgAEDLmwfMWIEAwcO5JZbbrlKZ3jtooRdcXG0A3oDs5GyyMp4wl98TuYn297ezE8W\nUlefhAPxlb+exQJRZ+GvvyApSfxXBr0jdrgb34fds8HYBercCw5uItCubSF6Ipx9GJyCwHukvJbm\nBH73QuNfwb23CLhLC8hYDR4lSi1zthcbe+klPnTKSfj7NVkoDekpou5eZqXZbIZff4XoaBg9GhrY\nWGxdcBDisuDRLuBc5mY62SQL0JklRuRlm2FRBYu8RxEHhcewOXP7eiInJ4fdu3ezdu1aDh06xOOP\nP46TkxNffPEFIMKvKEalYhQXz+OI1cpqxIalItq5wWBP+CoJbvGRKo+y3NVGRP3j7TDjRvCtYLzb\nxg1SKuhbB5YshhuHQMOG0rR0+GepcY/eAq3GSEWKoxECHgefMZB/Aty7WevcMyBhJnjcIJF7yvcQ\n9IKkafJPgt99xe+ZtRn8H7H+Q4OcZHmvM+vB2Uvy/Q37l18oNZtg4UJpRho6DFqX9UEGdpyXSpjh\nTaFNiYvCxkz4ORXcHGR9okCHIAMM95L1i4psBD5G8uoP2t/leqFu3bp89tlnPPXUU3Ts2JHAwECW\nLVsGgMViUaP1yqBdjStdly5d9F27dl3x91XUMAWI2WFbxD+mMmIKYORJ6OMBMxvY9no5lwEvrRW7\ngVf6iXd7udc5L1Ul/fpD/frwxx/g6wM9exV7kWecg33fSg250QPCBkCjQWL9WxJzNqQugKytklf3\nHiVNS+YssQjwHg7uPaQGPupxaLwYEk/A6T/FjAyrzUHLf5VfJAXJqf/6q5iaDRsG3XvY+DyZ8PKf\nUh301sDS9fwjI+GFuuDlIE1iySbxZD+WJ+sVze1Uw6Qgzgl3UKEZ5fVGXl4eBoMBBwcHNE37x4m6\npmm7dV3vUtl+KmJXXDxGxGplMmK7Upl1dn0jPB4AHybAyoziYcwlaeAFj3WBWdvh813wVLfSgzrM\nZrG49fMTUTebwdtLfMxLDpjwagAN7wG9HZiPiXHYid/BuyEEtYXANlJVY3CXhVb/CcVukrouJmLu\n3SDxc8jYC5n7ILs+/PE05KWA0Qua3QRNh5VPuxRx/hz88gtkZ8OoUdDBRr16Wh68s1HE/JmepUU9\n1SQLo33LGJolmWB1BnyRCFODJZovy/tIU9n/VfQfcv3hYl2XKApIy4r6jh07WL58Oa+//vo/SvDL\nooRdcWk8BfwXeAUxDqusMOEBP1ibAW/HQRd3CLDxI9g7VPxjfjwEXs5wf/tiwc7Lg+SUYifE7Cwo\nLARHp+J9LBY4dhR27QJvbzjtBLe8BoURELsXIlaJyAMYPUWY3fwlXQOADoU5kBMHjongOh8yvCA/\nGAKbQ/2uYiFcdiB1ERYz7NgJa9fIqLuHxstFqCxZBTBto4j7GwNK++WApF4GecKdp+COOtDJFRo6\ni3PmSG+Yl2xb1OOBWciQShtZn9qAvQqYRYsW8e6777JkyRI++eQT+vbte4XP7NpACbvi0nBHRP3f\nSCPM6Er2d9Ikyhx7Cp47B3MagsHGL+mtLWTW5x8RUGiG8Z2KI/eY8zDI6seenAyZWaUtbyMj4eRJ\n6N4dmrcQW9yIKBh6i9jmmgvg7D6xG8hOgOxEyIgWQb5wni7gHgzuHaRksVUL8A6t3G7g7FlY8QfE\nx4tj462jZUB3WdLyYOoGOJ8Jz/USf/qyOGjwVCCEOUsj0t4cmZaUbhZBH2HHF34yUAi8UfGp1kam\nTZtGu3btePXVVxk4cCCzZs3i8ccf/8eVQiphV1w6jwNzkLTMUCo3mmriDG/Ug8kx8GG85JDLomkS\nqRsdYckxyDXBE10hKxOcncXx0VQIJyKkJrx+idz5saNQt16xl3tcvET6AAkJcPoUHD0KJpOkR/p2\nrr4/TFmSEiXvf/AgeHlJOWPLVrbXEZJy4K31YqUwuQ+0q2Re3QhvWZc4VyBpmHQzBDnJHU9ZtiDD\nxicjrpz/MDRNY9y4cdx8883cfffdPPnkk6xbt4533nmHprb87mspStgVl44T0qjUD3gLmUdRGSN9\nxK3w2xQZ7TbGxuQfTYNxbaVhacFBEcKJXcHHBz7/TPLsrm7Qv1+xiVZ6OuTkQEiD4jrx+DjobF1v\nWrsGQkPhjjtE8KPOyv7uHpKvd6xGXaCuw6mTsG2b3CU4OUHfftCnj1gP2+JIonTZFphhSj9oYaNh\nyxY+juBTQZUQSJT+BDIY5ZWqf4zaiLe3N7/99htTp05lxowZrFy5knnz5jFmzJirfWpXBFUVo6g5\nHkImLO2mar7fhTo8FQVbs+GjEBjgaX/fDWdh9m4R+UndwTUL8vOheTjExIKLM/gHwLlo2H9A0jD+\n/hAdBZs3w5Ah4nu+erV0fIZY68gtFrkoJCbAgYMQGQHNwqF3bxHnshG3xSyTnY4ekzuDjAyZ0dq1\nm7hQutuxz7XosOy4rBsEuUv6JcTOSD5dl5p/32rGXTOAF4HFwK3VO7Q2Ex0dzdixY9m2bRsTJ07k\njTfeoE6dCmwYrmGqWhXzz102VtQ87wG+wP2IR0llGDT4bwi0cIH/Oycuhfbo1xDeGSSOh2+uh23Z\n0CRcDLQ0DWLjZD8/f0hJBk9rJcn27VCvngzJ3rdP0i+HDsKXX8CJ4yLqpkJYuRI83OHWWyE2BmJi\nbKdRPv8cvv0W9uyW1x09Gp5+Bvr3ty/qSTlS+fLDQegeDNMGVyzqHyTA6FMQV1iFL9HKQeB1RNCV\nqJciJCSE9evXM2nSJD7++GNat25d6x0hlbArag4/YC4ymOPZKh7j7gBfhkIjZ3gqGv7OtL9vqDdM\nHyxWtkuOwbOrYFcMBAdDW+vMNycnyXH/+COsWS2pmW7dZdv58zBoMAy/CTp1li5QgO07ROC794Cg\nutCyJZw+bfscuveA28fC88/DnXdBu/bynrYoNItr5dMr4XgSTOgET/ew74Wj6zAtHr5OlmauwCpG\n7FnIgHEfZOa2ohxGo5GZM2eye/dufH19GTJkCC+99NIFA7HahhJ2Rc0yEngO+AxYUMVjfJ1gbkMI\nd4ano+HXCtrkXQ3weFd4tZ/UfM/YLNHwKesxBgOMuhW6dpWu1DvvAldXieJdXGR4B0BggFgRABzY\nL/sXkZAgUTyUt+jt0gVatQJjBVaJZgtsjoL/WwU/HZKZpR8Ogxub2B/AnW+Bl2LghxS4rw5MqVu6\nft8eOjLtKgL5vitZh/2n06lTJ3bt2sXDDz/M9OnTadWqFVu3br3ap1XjKGFX1DzvIN7fD1M8RLky\nfBxF3Lu5w2ux8H68uBfao20QvDcE7msPEckwea2kaPbFiRi3blOc89Z1Efn69WHzJjh7Rqpi/AMg\nK0uGeYSXMN06fBjaXsRw0HwTrIyUCH3WdqnoeaUfPNsL/CsoFUoywUNnYVk6/DsAXgiyfwEoy4fA\nj8ii9Q3VP+V/Im5ubsyePZsVK1ZgNpvp06cPr776KoWF1Uh9XeOoxVPF5SEO6Ix4lWyl6pGkSYfp\ncfBjKvTzgGn1waeSlEROoYzXW34CUvMg2FNy8n1CZfxeEfHxsH2bDLjo0EHEPCFecu+3WgvwTxyH\ntWvhiSdLd7LaQ9chIkW85LdEQ2YBhPuJO2OX+pVH3Ydy4ZlzkGKCd4JhqJ3adFusBm4CbgF+pfLm\nMEU5MjIymDRpEt988w3t2rVj7ty5dOlS6drkVaOqi6dK2BWXj+3AQKSeeh1gZ73QJj+lwLQ4SdO8\nXV/quCvDZIFNUfDnKThudZFs7gcd6kLrQGkCcnIoLdh5ubBkCfTrJ2mNzZuk2alT52KLgbJkF8DR\nJDiUALtjID4bDA4i5MObVa2E0aTDnCT4PFE6SWeFQJtKyhlLsh2x4m2CODhW43qgKM/ixYuZOHEi\ncXFxvPTSS7z66qsY7ZWsXkWuiLBrmvYeklUtAE4CD+q6nlbZcUrY/0GsRH5CegIrkE7VqnI0F16M\nkRFwd/rC/wXJYmtVSMgWkd92Ds5YfySdHaGRr/jRhHhBfU/wNMLpA3D8iFTFdO0KzZtbOzzzISNf\nfOKjM8SgLDodotLlImBwgFYBYoHQrRoDQk7nwysxsC8XbvKCV+qVnyxVEQeBAUgF0iZkJq3ikklL\nS2PSpEl8991312z0fqWEfQjwl67rJk3T3gXQdf3Fyo5Twv4P42dkgk9fYDnVE/d8C8xMgPkpUiUy\nKVB8UqqysFhEZr40Bh1OFJGPTodsG/lUp0IwVSDO/m5yUWhaR6x1m9Wx7T5p9zzM8GUSfJ8CrpoI\n+s3VuY0BDiCRuhGJ1BtX73BF5SxdupTHHnuMhIQEnn/+eV5//fUL5mNXmyueitE0bTQwRtf1uyvb\nVwn7P5AFwL3IcI7lyHDl6rAvR1Izh/KglQs8HyQLrReDrotXS2yWRORFj5LDtI2OYkDm5Qw+LpK3\nd63GyL6SFOhS6fNpojQe3eojFyhbBmgVsQ8YDLgAfwM2xqUqaoa0tDSeffZZ5s2bR4sWLZg7dy69\nKpq/e4W4GsK+DPhZ1/Xv7Wx/BCnMIjQ0tPPZs2dr5H0V1xE/A3cD7YHfgXrVPN6iwx8Z4i8TZ4KO\nrvCQPwzwqF4Ef6XINsP/0mRqVJwJurpJxUurauTSi/gTGUjtjYh6k5o9VYVtVq9ezYQJE4iOjuap\np57inXfewcOjCus9l4kaE3ZN09ZiO4s3Rdf136z7TAG6AP/Sq3ClUBH7P5g/gLFAHSRyb3sRr5Fn\ngYWp4jMTUwiNjXBnHclXV7cN/3IQmQdL0uUcMy0i6OP9ZAH4YlwGv0ZCoubIOoWNqXqKy0dWVhYv\nv/wyn3zyCSEhIXz55ZcMG1bZyLDLwxWL2DVNewB4FBik63pOVY5Rwv4PZy8wAkhHpvuMvcjXMemw\nKkOGZB/JEzOy/p6St+7lDp5XcNDn+QLpml2aDofzZMboQE94yE/GAl4MBUiz18fAjcD/qF5lkaJG\n2bJlC+PHj+fYsWOMGzeOmTNnEhAQcEXP4Uotng5Dxiz013U9sarHKWFXcB4R9C2Il/sMpOb9Yjme\nB0vTpMkn2Swi38FNouQOrpL+qGpFTVVILISDebAzWzxuTllb01u4wChvubj4XcLdw1ngLqQH4Bng\nXeAiU/yKmiM/P5/p06czdepUvLy8mDlzJnffffcV83u/UsIeifw6Fo2e36br+mOVHaeEXQFIRPoC\nMu2nLeIM2f4SX9Oky0LrpizYmC2zQUF6rJs4i21BQyOEGiHYKB2vXtZHSeHMsw60SDfLiLqoQpk1\nerYAjuRKzhzAqEEX6wWkr4dYEF8KOvA9MBGwAF8hc0sV1xSHDx/m4YcfZtu2bfTp04c5c+bQvHnz\nyg+8RFSDkuL6YTliP5CMOBQ+j5Tz1QQpJunuPJgrEfbJfIgtFAGtLkYNQozQ3BnauUpDUUsXcKmh\nO4FYxE99CWLJ8C2qnPEaxmw2M3fuXF588UVyc3P5z3/+w7PPPouTPVO4GkAJu+L6Ihl4EqmcaQl8\nhJT2XQ4KLHCuUBZe082QYY3MLSX2MWgSzXs7yp8hRpladDmqbwqRQSVvAPnAVOBpJE+vuOaJi4vj\nySefZNGiRTRr1oyPP/6YoUOHXpb3UsKuuD5ZjuTcTyHlfdOpvfXaOtKZ+yxwFBiGLJT+cya41SoW\nL17Myy+/zLFjxxg/fjwffPAB3t41u9qtBm0ork9uBg4DbyOi1xIYD9ixR78u0ZG69L6IiVc+sBQp\nBVWift0yevRo9u7dy+TJk/n6669p0aIF06dPvyqukUrYFdceLsAUxH3oKeAHxEjsAWTs3vVKIbAQ\nEfTBwBngcyRaH4lyZ6wFuLi4MG3aNLZt20br1q156aWX6NWrF0ePHr2i56GEXXHtUheYiQj844go\ndkEMxb4HqtQ1cQ1wHrkDaYRMOjqPpFwigceouYVixTVD165dWbt2LQsXLuT06dN06tSJSZMmcdre\nZK4aRgm74tonGFlMPY+URqYgvjN1gQeBvwDzVTs722QC3yGNRSHAq0BrJOUSidyJXBu+UorLyG23\n3cahQ4e49dZb+fLLL2nfvj0//PDDZX9fJeyK6wdvZGH1KOKXcjsyYGIQEIg09HyHDPm40ujAIeB9\n6/n4IUO9TyKiHgGsQlIuqtrlH0XdunX58ccfOX78OG3btuWee+5hzJgxrF69mstVvKKqYhTXNzmI\nodhyZLE1wfp8M6QWvDfS9NSS6tkFV0YiIuS7EU/0TRS36bVBKlxGWd9f5c4VVkwmE2+//TYffPAB\nWVlZjB07ljlz5uDpWTW7U1XuqPjnYUGsbf9CvMo3IWkbEHFthLgiNrA+6iJ3AZ7WR8m+knwgA0mp\npAIxwDkgGjiOCHsRTZEF0T4Up14UigrIy8tj5syZTJkyhfDwcF577TVGjBhRqcArYVcoLEgK5BBS\nQnkYqUQ5h3R5VudH3xnJ9QcjFTqtrY92qAlGiovm77//5oEHHiAqKgo/Pz8WLlzIgAED7O6vhF2h\nqAgTEnVnWh8ZlO48NSJzRD2RqL4OKqWiuCxYLBY2bdrEY489RkREBK+99hoPPfQQwcHB5fZVwq5Q\nKBTXEenp6dx3330sXboUTdMYN24cc+bMKTWWT3WeKhQKxXWEt7c3v/32GxERETz33HP88MMPDB06\nlM2bN1e7ekYJu0KhUFxDNG3alBkzZjB//nz27t1Lnz59aNmyJStWrKjyayhhVygUimuQe+65h5iY\nGObNm4ejoyNjxoyp8rFK2BUKheIaxcPDgwcffJBNmzaxaNGiKh+nhF2hUCiucXx9favl8a6EXaFQ\nKGoZStgVCoWilqGEXaFQKGoZStgVCoWilqGEXaFQKGoZStgVCoWilqGEXaFQKGoZStgVCoWilqGE\nXaFQKGoZStgVCoWillEjwq5p2rOapumapvnXxOspFAqF4uK5ZGHXNC0EGAJEXfrpKBQKheJSqYmI\n/UPgBao3QVKhUCgUl4lLEnZN00YB53Vd319D56NQKBSKS8Spsh00TVuL7TnsU4CXkTRMpWia9gjw\nCEBoaGg1TlGhUCgU1eGih1lrmtYW+BPIsT7VAIgBuum6HlfRsWqYtUKhUFSfqg6zrjRit4eu6weB\nwBJveAboout60sW+pkKhUCguHVXHrlAoFLWMi47Yy6LrelhNvZZCoVAoLh4VsSsUCkUtQwm7QqFQ\n1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7\nQqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DLz11pxAAAE\nnElEQVSUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUt\nQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DKUsCsUCkUtQwm7QqFQ1DIuWdg1TZuoadoxTdMOa5o2oyZO\nSqFQKBQXj9OlHKxp2g3AKKC9ruv5mqYF1sxpKRQKheJiudSI/XFguq7r+QC6ridc+ikpFAqF4lK4\npIgdCAf6apo2FcgDntN1faetHTVNewR4xPrPfE3TDl3ie1/L+MP/t3NvL1aVcRjHvw9TFhQlERI4\nA2PQgekgSUohRGKElditQdHhKilREMID/QVFJdTNoOONAxFmB6KTUXTnlFkmORTiRY4U1oUUdDEM\nPl2sNTDIuPbG/e55Z738Plez96y19/NjsX7rXe/Mevk7d4g+Krm+kmuDqK/t7uhmo46NXdJXwC3z\n/GpPvf9NwAPAauA9Sbfa9qUb2x4FRuvPPGb7/m4CtlHU114l1wZRX9tJOtbNdh0bu+1HGr5kC3C4\nbuTfSbpIdcX8q9ugIYQQ0up1jv1DYB2ApNuBJZR9GxRCCIter3PsY8BYPV8+DTw73zTMPEZ7/N7F\nLuprr5Jrg6iv7bqqT9314RBCCG0RT56GEEJhorGHEEJhsjb20pcjkLRDkiXdnDtLSpJeq4/bz5I+\nkLQ0d6YUJG2Q9Kuk05J25s6TkqQhSd9IOlWfb9tyZ0pN0oCkHyV9kjtLapKWSjpUn3eTkh5s2j5b\nY79kOYK7gNdzZekHSUPAo8DvubP0wRHgbtv3Ar8BuzLn6ZmkAeAd4DFgBHhK0kjeVEnNADtsj1A9\nd/JSYfUBbAMmc4fok73A57bvBFbSoc6cI/bSlyN4E3gFKO6v07a/tD1TvzwKDObMk8ga4LTtM7an\ngXepBh5FsP2H7eP1z/9SNYbleVOlI2kQeALYlztLapJuBB4C9gPYnrZ9oWmfnI19djmCCUnfSlqd\nMUtSkp4Eztk+kTvLAngB+Cx3iASWA2fnvJ6ioMY3l6Rh4D5gIm+SpN6iGkhdzB2kD1ZQPfR5oJ5q\n2ifpuqYdev0/9kapliNYjDrUtptqGqa1muqz/VG9zR6qW/zxhcwWrpyk64H3ge22/8mdJwVJG4Hz\ntn+Q9HDuPH1wFbAK2Gp7QtJeYCfwatMOfVPycgSXq03SPVRX2BOSoJqmOC5pje0/FzBiT5qOHYCk\n54CNwPq2XIw7OAcMzXk9WL9XDElXUzX1cduHc+dJaC2wSdLjwLXADZIO2n46c65UpoAp27N3WIeo\nGvtl5ZyKKXI5AtsnbS+zPWx7mOqgrGpTU+9E0gaq295Ntv/LnSeR74HbJK2QtATYDHycOVMyqkYZ\n+4FJ22/kzpOS7V22B+vzbTPwdUFNnbp3nJU0u7LjeuBU0z59HbF3cKXLEYT83gauAY7UdyVHbb+Y\nN1JvbM9Iehn4AhgAxmz/kjlWSmuBZ4CTkn6q39tt+9OMmUL3tgLj9aDjDPB808axpEAIIRQmnjwN\nIYTCRGMPIYTCRGMPIYTCRGMPIYTCRGMPIYTCRGMPIYTCRGMPIYTC/A8rHU6k2AP4uAAAAABJRU5E\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "equation = \n", + "[0.0625*y**2 - 0.75*y + 3.125]\n" + ] + }, + { + "data": { + "image/png": "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\nz/z5888rsKutTBRFUTqIEIKoqCiioqK47bbbTtxfU1PDgQMHyM7O5tixY+Tm5l5QnXrVY1cURblK\nnO9QTOevc6koinKNUYFdURSlk2mXwC6EeEoIIYUQfu3xfIqiKMrPd9GBXQgRgrYvfP7FN0dRFEW5\nWO3RY38DeJoL20FSURRFuUQuKrALIaYChVLK9HZqj6IoinKR2sxjF0Ks5sz7sP8BeB5tGKZNQogH\ngQcBQkNDL6CJiqIoyoX42XnsQojewBqgseWuYKAISJJSFp/rXJXHriiKcuHON4/9Z688lVLuBfxP\necFcIFFKWf5zn1NRFEW5eCqPXVEUpZNpt1oxUsru7fVciqIoys+neuyKoiidjArsiqIonYwK7Iqi\nKJ2MCuyKoiidjArsiqIonYwK7IqiKJ2MCuyKoiidjArsiqIonYwK7IqiKJ2MCuyKoiidjArsiqIo\nnYwK7IqiKJ2MCuyKoiidjArsiqIonYwK7IqiKJ2MCuyKoiidjArsiqIonYwK7IqiKJ2MCuyKoiid\njArsiqIonYwK7IqiKJ2MCuyKoiidjArsiqIonYwK7IqiKJ2MCuyKoiidjArsiqIonYwK7IqiKJ2M\nCuyKoiidzEUHdiHE40KIA0KITCHEP9qjUYqiKMrP53AxJwshRgFTgQQpZbMQwr99mqUoiqL8XBfb\nY38EeEVK2QwgpSy9+CYpiqIoF+OieuxANDBMCPE3oAn4nZRyx5kOFEI8CDzY8mOzEGLfRb72lcwP\nKO/oRlxCnfn6OvO1gbq+q13M+RzUZmAXQqwGup7hoT+0nO8DJAMDga+EED2klPJ/D5ZSfgh82PKc\nO6WUiefTwKuRur6rV2e+NlDXd7UTQuw8n+PaDOxSyjHneJFHgO9aAvl2IYQd7ROz7HwbqiiKorSv\nix1jXwSMAhBCRAMGOvfXIEVRlCvexY6xzwHmtIyXm4F7zjQMcwYfXuTrXunU9V29OvO1gbq+q915\nXZ84vzisKIqiXC3UylNFUZRORgV2RVGUTqZDA3tnL0cghHhKCCGFEH4d3Zb2JIR4reV9yxBCLBRC\neHV0m9qDEGKCEOKgEOKwEOLZjm5PexJChAgh1gkh9rf8f3uio9vU3oQQeiHEbiHE0o5uS3sTQngJ\nIb5p+X+XJYQYfK7jOyyw/085gnjg9Y5qy6UghAgBxgH5Hd2WS2AV0EtK2QfIBp7r4PZcNCGEHngX\nmAj0BGYKIXp2bKvalRV4SkrZE23dya862fUBPAFkdXQjLpF/AyullLFAAm1cZ0f22Dt7OYI3gKeB\nTjc7LaX8UUppbflxGxDcke1pJ0nAYSlljpTSDHyJ1vHoFKSUx6WUaS1/r0MLDEEd26r2I4QIBiYB\nszu6Le1NCOEJDAc+ApBSmqWU1ec6pyMD+0/lCFKFEBuEEAM7sC3tSggxFSiUUqZ3dFsug/uAFR3d\niHYQBBw75ecCOlHgO5UQojvQD0jt2Ja0qzfROlL2jm7IJRCOtujz45ahptlCCNdznXCxeezn1F7l\nCK5EbVzb82jDMFetc12flHJxyzF/QPuKP+9ytk35+YQQbsC3wG+klLUd3Z72IISYDJRKKXcJIUZ2\ndHsuAQegP/C4lDJVCPFv4Fngj+c64ZLpzOUIznZtQojeaJ+w6UII0IYp0oQQSVLK4svYxItyrvcO\nQAhxLzAZuP5q+TBuQyEQcsrPwS33dRpCCEe0oD5PSvldR7enHV0H3CiEuAFwBjyEEHOllHd1cLva\nSwFQIKX86RvWN2iB/aw6ciimU5YjkFLulVL6Sym7Sym7o70p/a+moN4WIcQEtK+9N0opGzu6Pe1k\nBxAlhAgXQhiA24HvO7hN7UZovYyPgCwp5b86uj3tSUr5nJQyuOX/2+3A2k4U1GmJHceEED9Vdrwe\n2H+ucy5pj70NP7ccgdLx3gGcgFUt30q2SSkf7tgmXRwppVUI8RjwA6AH5kgpMzu4We3pOuBuYK8Q\nYk/Lfc9LKZd3YJuU8/c4MK+l05EDzDrXwaqkgKIoSiejVp4qiqJ0MiqwK4qidDIqsCuKonQyKrAr\niqJ0MiqwK4qidDIqsCuKonQyKrAriqJ0Mv8P/K3wJ0/6rT0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "equation = \n", + "[0.5*y**2 + 0.25]\n" + ] + }, + { + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "equation = \n", + "[-sqrt(y**2 + 32.0) - 4.0, sqrt(y**2 + 32.0) - 4.0]\n" + ] + } + ], + "source": [ + "from sympy import solve\n", + "from sympy.abc import x,y\n", + "X, Y = np.mgrid[-6:6:100j, -6:6:100j]\n", + "\n", + "distribution(X,Y,am1,am2,ac1,ac2)\n", + "equation = solve(pdf(x,y,am1,ac1)-pdf(x,y,am2,ac2),x)\n", + "print (\"equation = \")\n", + "print (equation)\n", + "\n", + "distribution(X,Y,bm1,bm2,bc1,bc2)\n", + "equation = solve(pdf(x,y,bm1,bc1)-pdf(x,y,bm2,bc2),x)\n", + "print (\"equation = \")\n", + "print (equation)\n", + "\n", + "distribution(X,Y,cm1,cm2,cc1,cc2)\n", + "equation = solve(pdf(x,y,cm1,cc1)-pdf(x,y,cm2,cc2),x)\n", + "print (\"equation = \")\n", + "print (equation)\n", + "\n", + "distribution(X,Y,dm1,dm2,dc1,dc2)\n", + "equation = solve(pdf(x,y,dm1,dc1)-pdf(x,y,dm2,dc2),x)\n", + "print (\"equation = \")\n", + "print (equation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 2" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "train_data = []\n", + "test_data = []\n", + "data = scipy.io.loadmat('digits-labels.mat')\n", + "l = data['l']\n", + "d = data['d']\n", + "# 0-9 ten digits, first 100 samples be training data, otherwise, test samples\n", + "for i in range(0,10):\n", + " data_digits = d[:,find(l==i)]\n", + " if len(train_data)==0:\n", + " train_data = data_digits[:,0:100]\n", + " else:\n", + " train_data = append(train_data, data_digits[:,0:100], axis=1)\n", + " test_data.append(data_digits[:,100:])" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Perform PCA by diagonalizing the coavariance\n", + "def pca(x, k):\n", + " # Remove data mean\n", + " xm = x - mean( x, axis=1, keepdims=True)\n", + " # Get covariance estimate\n", + " C = xm.dot( xm.T) / (xm.shape[1]-1)\n", + " # Get top k PCA covariance eigenvectors/values\n", + " v,u = scipy.sparse.linalg.eigsh( C, k=k)\n", + " # Get overall transform and the input's projection to k dimensions\n", + " w = diag( 1./sqrt(v)).dot( u.T)\n", + " y = w.dot( xm)\n", + " return w,y" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "17\n" + ] + } + ], + "source": [ + "def Model(train_data,test_data,n):\n", + " result = []\n", + " w, y= pca(train_data, n)\n", + " for digit_label in range(10):\n", + " test = w.dot((test_data[digit_label].T - mean(train_data, axis=1)).T)\n", + " positive = 0 # store number of positive data\n", + " total = test.shape[1] # number of total current test data\n", + " temp = np.zeros(total) #store temp max probability, if current probability > temp, it belongs current digit label\n", + " labels = np.zeros(total) #store predicted label\n", + " for i in range(10):\n", + " gaussian = multivariate_normal(mean(y[:,i*100:(i+1)*100],axis=1),cov(y[:,i*100:(i+1)*100]),allow_singular=True)\n", + " probability = np.apply_along_axis(gaussian.pdf, 0, test)\n", + " for j in range(len(probability)):\n", + " if probability[j] > temp[j]:\n", + " labels[j] = i\n", + " temp[j] = probability[j]\n", + " for k in range(total):\n", + " if labels[k] == digit_label:\n", + " positive = positive + 1\n", + " result.append(positive/total)\n", + " return result\n", + "\n", + "acc_avg = 0\n", + "n = 1\n", + "while(acc_avg<0.9):\n", + " acc_avg = mean(Model(train_data,test_data,n))\n", + " n = n+1\n", + "print (n-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see above, we have to use at least 17 dimensions to obtain average performance above 90% for first 100 data as training data, the rest as test data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 3" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "music = []\n", + "speech = []\n", + "for i in range(1, 61):\n", + " rate_music, data_music = wavfile.read('SpeechMusic/music/{0}.wav'.format(i))\n", + " rate_speech, data_speech = wavfile.read('SpeechMusic/speech/{0}.wav'.format(i))\n", + " f_music, t_music, STFT_music = scipy.signal.stft(data_music, fs = rate_music, window ='hamming', nperseg = rate_music, noverlap = 10000)\n", + " f_speech, t_speech, STFT_speech = scipy.signal.stft(data_speech, fs = rate_speech, window ='hamming', nperseg = rate_speech, noverlap = 10000)\n", + " if len(music) == 0:\n", + " music = np.log(np.abs(STFT_music))\n", + " else:\n", + " music = np.concatenate((music, np.log(np.abs(STFT_music))), axis = 1)\n", + " if len(speech) == 0:\n", + " speech = np.log(np.abs(STFT_speech))\n", + " else:\n", + " speech = np.concatenate((speech, np.log(np.abs(STFT_speech))), axis = 1)\n", + "\n", + "rate_speech, data_speech = wavfile.read('SpeechMusic/speech/340.wav'.format(i))\n", + "f_speech, t_speech, STFT_speech = scipy.signal.stft(data_speech, fs = rate_speech, window ='hamming', nperseg = rate_speech, noverlap = 10000)\n", + "speech = np.concatenate((speech, np.log(np.abs(STFT_speech))), axis = 1)\n", + "\n", + "train_music = music[:,0:math.ceil(music.shape[1]*0.9)]\n", + "test_music = music[:,math.ceil(music.shape[1]*0.9):]\n", + "train_speech = speech[:,0:math.ceil(speech.shape[1]*0.9)]\n", + "test_speech = speech[:,math.ceil(speech.shape[1]*0.9):]\n", + "train_data = append(train_music, train_speech, axis=1)\n", + "test_data = append(test_music, test_speech, axis=1)\n", + "train_labels = append(np.zeros(train_music.shape[1]), np.ones(train_speech.shape[1]))\n", + "test_labels = append(np.zeros(test_music.shape[1]), np.ones(test_speech.shape[1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Perform PCA by diagonalizing the coavariance\n", + "def pca(x, k):\n", + " # Remove data mean\n", + " xm = x - mean( x, axis=1, keepdims=True)\n", + " # Get covariance estimate\n", + " C = xm.dot( xm.T) / (xm.shape[1]-1)\n", + " # Get top k PCA covariance eigenvectors/values\n", + " v,u = scipy.sparse.linalg.eigsh( C, k=k)\n", + " # Get overall transform and the input's projection to k dimensions\n", + " w = diag( 1./sqrt(v)).dot( u.T)\n", + " y = w.dot( xm)\n", + " return w,y" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.833333333333\n" + ] + } + ], + "source": [ + "w, y = pca(train_data, 10)\n", + "test_music_pca = w.dot((test_data.T - mean(train_data, axis=1)).T)\n", + "clf = SVC()\n", + "clf.fit(y.transpose(), train_labels)\n", + "# print(clf.score(y.transpose(),train_labels))\n", + "print(clf.score(test_music_pca.transpose(),test_labels))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 4" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from PIL import Image\n", + "import os, numpy as np\n", + "\n", + "dir_pos = 'sample/pos/'\n", + "dir_neg = 'sample/neg/'\n", + "\n", + "img = Image.open(\"train_pos.png\")\n", + "k = 0\n", + "for j in range(0,50):\n", + " for i in range(0,50):\n", + " area = (i*16, j*16, (i+1)*16, (j+1)*16)\n", + " cropped_img = img.crop(area)\n", + " cropped_img.save(dir_pos+str(k)+\".png\",\"png\")\n", + " k = k+1\n", + "k = 0\n", + "img = Image.open(\"train_neg.png\")\n", + "for j in range(0,50):\n", + " for i in range(0,50):\n", + " area = (i*16, j*16, (i+1)*16, (j+1)*16)\n", + " cropped_img = img.crop(area)\n", + " cropped_img.save(dir_neg+str(k)+\".png\",\"png\")\n", + " k = k + 1\n", + "\n", + "read = lambda imname: np.asarray(Image.open(imname).convert(\"RGB\"))\n", + "ims = [read(os.path.join(dir_pos, filename)) for filename in os.listdir(dir_pos)]\n", + "training_pos = np.array(ims, dtype='uint8')\n", + "\n", + "read = lambda imname: np.asarray(Image.open(imname).convert(\"RGB\"))\n", + "ims = [read(os.path.join(dir_neg, filename)) for filename in os.listdir(dir_neg)]\n", + "training_neg = np.array(ims, dtype='uint8')\n", + "\n", + "training_data = append(training_pos, training_neg, axis=0)\n", + "training_label = append(np.ones(training_pos.shape[0]), np.zeros(training_neg.shape[0]))\n", + "training_data = (training_data.reshape(5000,768)).T\n", + "\n", + "img = Image.open('./ekalismall2.png')\n", + "k = 0\n", + "for j in range(0,54):\n", + " for i in range(0,38):\n", + " area = (i*16, j*16, (i+1)*16, (j+1)*16)\n", + " cropped_img = img.crop(area)\n", + " cropped_img.save(\"sample/test/\"+str(k)+\".png\",\"png\")\n", + " k = k+1\n", + "read = lambda imname: np.asarray(Image.open(imname).convert(\"RGB\"))\n", + "ims = [read(os.path.join(\"sample/test/\", filename)) for filename in os.listdir(\"sample/test/\")]\n", + "test = np.array(ims, dtype='uint8')\n", + "test_data = test.reshape(2052,768)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Perform PCA by diagonalizing the coavariance\n", + "def pca(x, k):\n", + " # Remove data mean\n", + " xm = x - mean( x, axis=1, keepdims=True)\n", + " # Get covariance estimate\n", + " C = xm.dot( xm.T) / (xm.shape[1]-1)\n", + " # Get top k PCA covariance eigenvectors/values\n", + " v,u = scipy.sparse.linalg.eigsh( C, k=k)\n", + " # Get overall transform and the input's projection to k dimensions\n", + " w = diag( 1./sqrt(v)).dot( u.T)\n", + " y = w.dot( xm)\n", + " return w,y" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMsAAAD8CAYAAADZhFAmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvGd0JNd5p/9U6JwTgEbOaTDA5MBJHA45DKLIYU5KpCTK\nSru21vbKkgMtOYley+u0lihLpCTKzBRzGsYhh5MDBoNBBhpohEaj0TlWV1ftB+mDPvzXmj1/0yuf\nM8+X7rp9T906p3+/895737euoOs6l7jEJX494v/rB7jEJf6zcMksl7jERXLJLJe4xEVyySyXuMRF\ncsksl7jERXLJLJe4xEXykZlFEIRrBEEYEwRhUhCEr39U41ziEv9RCB9FnkUQBAkYB64C5oETwF26\nrl/4dx/sEpf4D+KjiixbgEld16d1XVeAx4EbP6KxLnGJ/xDkj+i+dUD4V67nga2/2kEQhPuB+3/5\nfaPD4UBRy8iyREWrYLdZMRlNqEqZklICBIqFIjo6rqKTJClAwIIF1aFSUSsYDAZyuRySJGM2mykU\nikiShFpUMWFCR0MHVFREREwY0alQQcWNCzMmABKeFCVFweV2IokSarhCBQ0VlQoVFGuFSkXFaDRi\nNBgAgUIhj2wwUFFVTEYTmqaBIJDL5RFFEUmWUFUVg8GIlBNRUDBjRkJEQKBkL2I0mhAE0IFcLo/V\nYkbXoVAogqbh8TgxW20UCnmsVhuqkker6ORyeWSDjKCDpkGxrFJSylitVipaBYvFArpGKp3BZrNT\nKOSpCvjIZzMEAz5UtUJkOomKjkoZDQ2Tw4QsSwiCgCAKZGN5VCoIgI6O2WZEEAQsZgsms4lcLofR\nYMBqs2AwyqBr/GLSIlCpVCirFYxGI8lUmnyugC1vpUQOCR0PXmK2JEq5gtliplQqIcsSsiyh6wK5\nfAFREEDXMZlMlFUVTdORZZmSUkISRTRFw4KZAkWsWKjYNUqlEgCSJAFgNJooFgpIkoTVYqFUKqKW\nFZRyOabreuDXifqjMsuvRdf1h4CHAKw2q+6tqsZgkHG67fT2d7NmTR+Dx4+Tj8fJ5UtUVJlwZBGL\n00LbmVoyFHBgZYlllPYCgaogolYhlUhQquhU1zQwNjGGhkRgqpo8KUqUSZLCiIyORivNrKGNMgUM\niDixs48dLP3VAk8//wwbNm3BZrQx/kcR8gjMs4QTD/MDC1QqFdb3ryWdiINeIZ1IYDM7SGeydHZ2\nE41G0SWZc4NDrN80gGySsTs8HHr3EKmxLLVUIQN+PBRIseb2XrLFAkpRYyk6T1NjPYFAkKMnTzM5\nNsI3f+cr+H0O5uIlXnzlDSKLC9xyzU6CXj+h+SVCyzFcskhbYys2t59Hn30eq7+anKJQKpXxu/2E\n5ke47oaP8cUv3Mfq8jw+SaQcjxBPZ3jns9Oo2JlihhHGad3WTDaxSkd3O4c+OExx1Ug3zfTSiR83\njt+1s7QQ4eixY1y57yo0DZpbWnjj7Vf43H33UEit0NbZRXhhidV0Bp+/hlKpwHIsxz/8/Q+4dexG\nPuA4vQTJkmCsa5VSuUI+k2KgtZG66ioSiRVC88uUdYlcJoVaVuhoq6e1qZUT58ZIZwoI6MiyQGmq\nxEb6sGNllRjxgTjJTBpJl5AlI6srWWRJwubWEBHRKhU+/5mbGDtxiOc/ODJ7MZr9qMyyADT8ynX9\nL9v+P9EBj8+BrulEl2PIw9MYjF5C4RhSWWVyYhar3YTT78IXDFA8I5AkTpkiHmxIPgdlQBYlmhpq\nUTSJk0ODyLIBj9tNfiqJgo5OhXqCZMmQIY0EzDBDDQFmmcWOGw+DbKlbx+0HDqAoKnaXnxlSHOUY\nRURc5CjE0mzfsoVUMsO5wSEaG4PUBWsoZHJ4vV7i8ThaBQRJY2BdP4JQYXhkmIamTiSDwA42M0eY\nPAp58rhwEY+tYnI4qGhlenvW0N3bxLNPvc7cYpgvfOleliIXsDk3Mh4KsxxLYpRlLozNk/VnMZtM\n9HZ2sTg3Rz6TQClk2LdtPY++9g4uXw06MrNzEXp61hOamOelZ15lZmwMo6TR2dPPsVNnmSfCXdyI\nBTN+fKSsCebGVik21JHLFlARWGKSq9lGDVUYfDrZjJn+/m7+9fFH2b1zF/7aGoL1DTz25DPcfdMB\nIpEoMzMhevvX896RI2RWEyiqwMZ1fbw39gbb2ISZEl/jv/EV558yEVrGajEzPDyCERHJIOCwuShU\nVBKry1QFvbS21rN9yzreOnwUSbSj6SplRcWFiyFGSLCKCYF9PXswSgJ2m5vJkVmyyQyyUUISDaiK\nQldPN0899yRXbeq9aFF/VGuWE0CHIAgtgiAYgTuBF/6PDyEKYBBQ0fEEfGhSmdDsFOfHxknlM7S3\n1lNQcohiGY9VpESSEpBHAXRqavzolQKyxcTZ8zOMjE/T3dFJX3s7kloiT4oW6kiRRUbGi4cdrMeG\nAT9+5lnGiAMbFtKUOHnqHJpuoKa6niMfHGOSKVaJoaGQQyFfVDh++hQj58fJpApkczp51YDVFUBX\nQVHKKJQxmSxkE0mW51fYtvlysokM3R09hAmTJ8tG1rKVdZTJIxlllFyBQMCJw+7g+WfeJrayzFWX\nDbBwYZD2hg5W5qdxihqZ1VVq6oLE0zkS2TIWm5d8OkssEiGfz6KjgJrhzuv2UsxkSCezyJpKXW0t\nA/3refSxp1nJlVjMKjz23EucHByiRJk5klQwcpB3OHb8BN29nRTzJfr7+rmeaxhgN0/xGsvEKRTz\ndDZ7WdvZzK0HDhBN5Rg6NUJ1oIaSqvKtv/4bJmamEbQyaimLyxfAX9XA2aFJwotLtFNLFTZu4zpy\nLPFXf/I71AaMVFW7aV2zhtGlMKlcDsmgMxuaZO++fayuLtHR1YYkmzDIZgySRrlYxCDLZMmgofIx\nrseHn8xSHJvFTCIWZ01fH53dHZgkgXKxTFtXN5PTIRRkRleyFy3qjySy6LquCoLwFeB1QAJ+pOv6\n8P+pvySKVPn8ZPM5UsksiiLgr3Lj9ljweh043pHZyjqERZ3s8Qzum7y4VTdOh5nE6gq5nxWpooo0\nRQSMZBuylMoKFpMLh9ON4yo/kqlER9JPwO9G0AQMkojL5mdpaQlJLbN+83rqGmp57ZXXcZ53UyoL\n+L1VtLY0kP90iT7PTbz25lGcLi+jhyM4sRIlSi1BqmM+CsdTzLBMG81Y7zBTQSeRSjI2PUXvfC9z\nR2eZZQ4NDTde2mgjT5YwcazYmZ9boKOrh9bWLl587lnCs3N85o4DDJ86ylfv/zyFT+eop5oKAZ7i\nJdxuN3lBJqWUkMwWislVNvQNYBTKSEYJCwYymQz33HIjP37mBcwROyd/eowkSbawkb0TezjHMBEW\nsSKznjUc5QhBGvFSQ8mWYWJ8msbmJqamJ9j/V1fyg0d+RjpZ4mHxGW4OX8uGgUaavQHyyhS9hhZO\nHh0ikY3S3duBklH44M2T/P7XP0silUBWRAbPjjI+NsqGvm52/MNWNmzppZTLIVQ0jEaBT37iTp78\n+csYjTIOi5O52QidHe1Iskg6tYrbG2B0Osx8JIUqqnh8LmSLSGRpGXONAZPdQH5thsyxLKlUlnS8\ngKSbyGbKrMQyFNUKVo+FsyNnqfZ6MZbs5AuVi9b1R5Zn0XX9FV3XO3Vdb9N1/c//rb6CKBBZjJIv\nFGlsrMNotGCUzbS2NOH1ONBQqMVLJ62YsWKx2MllS1RUgapANRolSuQwIBJnhaqgH4PZwIWREaam\nF4jGVsjkstQHazELAhI6k5MTKIqC0Wjg+uuvY3x8hNPHjyHLArLRwE9+9gT/8ujP6OjspqYmQDab\noKHOg80isYkNeHFzIzeyjrVMMsoG+qmjlhwKq6kEFUWlWCrQ099LliILzNNLJ/XUM8UkxzmJjsYA\nfbTSQltXN8vpDI8++q8szi9w9x0HkJQCN155JamVVcBAkC7+hr/hOnaxMDlGpaISy+Z56Z0PmF9O\ncnxojLKoo6sl1Fwas6yTisxw960fRyFLmQpXspc+uvkuf8UgpzCi0YCXL/MZ7uYWhjkNVHD5vKjA\n3NIcW7ZtYDY0hq6X0XQVk9XJcy+9CbKbeCJDd1cbXe1NKMUM42MThKbmaW3uwO0J8OOfPE0ipTAz\nMcnQ+VN0Nga459braW4Mkk1nKJZVNMlAaG6W1pYg8dVFglUBkokUTp+fqbkwBkFiYO0a9u7ax+lT\nwxjtDnbt3kpVrYfapir8fjeFcg6zWSaXz1LRwOkIUFFEzp8d5t03XiG5NI1QyVJSslx7zT5279rJ\n3XfewW1333nRmpYeeOCB/1+m+PfgwQe/80CxXMZsMYKoE1uJU1VTz6mTp9DUEhsW19JJCwol7Lh4\nNfEOsUSGfLHA/v2XU/OGiyUW0BGooGNsM2IwSuRyCvm8QlXQD5KR5GqaSlnFYjdTUBQCVVXs2H0Z\nJ04dx+v14LA56OrpxGiSOH9hCKvHTWx1lfPnR1m/YSNutx3ZYOK9M4dZzyZe5yCrxAgSIMoyAhIF\nSph6LRhEHZPZSHV9PcrJCnnyJFlFQ8OMlcvYhR83G+mjgsZQ7QSDwyPMT4a48/YDyHqR3qYm7GYz\n87EVug9v5bN8nSQp/LjYfvc65pdjrCRT1Da1MjIaQjRaWZi7QFtzNVJFpyLpuNweRkYnaQt1MkeM\nSSaoJYgDO0ECJFlhDR04EWmmDR1YYpGUPYFSUn+xA2eRcTmN9PWuIRqJYTVYKZc1Dr71NldftY/Y\nSoTo0goer4dAoJboSoroUoRN2zayFM3x7vunGRs/zw037+PAdVfS0VrPanwVJAmD0cr84jIWo5VE\nKo4uSrR3rCUcWqRYynL7HbcQmp5ifnaeSlElnsozE5rGbNBo7mwkk8lSKatUlDJen4vG+iYMgonR\nkVGMJgPlYgE9n+SeW66kpbMZ0SCSTeU4e2KQhYV5zg2fZim8sPTAAw889Ot0+htR7lJWKxhMJux2\nL+WygN3pxeNy0t3WjtvlQkFnmiWMWLmdO7B7bJhsRjDpHD31IV58qJSxYQOEX+x25SXcNgdNLUE0\nTUOuyCiaTlpREGQDHW3NdLY189pzL+IwWnFb7Xi9TsKRGC+//T5r162ju72DN14/xMjkMv/yk58z\nfG4CpyRyHXs4zgmsWGiiiTI6AgaylIgRJ5vJoCCwEo1z6ugpwoRZIkIf68lQIIPCBUZIk+ICU/yU\nJ7jnzruwSFAd9PPee+/ic7tYyaxS09WErzrIb/F5NJb4MncRZYnhqSlsZpFcIsHsdIi77r6DmeUQ\n80mFguakUJEoVTSKxTwdDQGKTHMPV1BFgNc5zDJ5FolTjY3NdLPIMo/wGONMUQFEgxGny4nD48Vs\nsSGqMqnMKnv37ySWjYEk4rI6+Mu/foiX3z5BTVMTa/q6CPg99HZ1Eppf5MTR09hMZm679QAev5tt\nA700NwapiBX89Y3UBoKMnR/D5/Sxuhoj4K9i48YtPPbkE6TTSVaSST48doi77r6Z2+65B2ugmkI+\nj65UOHl4mLdf+JClmSUam+rYtGsDt95wJ+++/QHTcyEwyAwODtHW1IDfYcGJhE8tsH/9BvZu24XN\n4sbmcROJrl60Tn8jIsuf/+VfPNDV24HNbqGpsYWhwSHsZgfjY1OsLK3SdkcHe/9kH/1f6+VR8Qd4\nTUbsZh23zUB7ay222ywEtlcz6wizqEXJ5HMUS0WS6QRup5PqDzwUZjMoCyU88x70No3u9h4WFsIE\n/B5MJhlRMpItS7x/9Dhuj4Ou9maSy3NUB/x0dvYwvxwlk8jT3tJIqT1B55YGDNUGrGvMKFVlYq4E\n9n4HliYLU9MzoAlMzkyzdm0/rm4nXZs6OaucYNPH+7C3SvTf0IU2oLL2qwO8dvogz//4RaSEGWPG\njB4vkSTDnquvxGGxsDg9wc7da7nh1j04b7Qyo4aQDAZa2htxeqqIxVPMTYe46+5PMXzuPPlsFq/f\nTzyew+pwki+VqDtfRxGFWmqJskKcFFFiVBPkbT6k+mtdnBbGObp6gpIzg0UUEUURTatQUcs4nE4c\ngkChUKS5pZ3Z2RC5dAnBIKPqZTZtWMPPfvY48USWc0Oj1NU10NXTzcnTZ1lcWCBYU8Xc9Bwb+vtR\nigVUtcj42CwrKyucPTvEwJ+uQ31MQHtR5mjkJFlnBq2iMNDXQ097B7GVOC63k4mpEWqrg+zcsZOR\n8fMM9K9nbHSGobMj+KsbyGUzlEtZ9l93NTt2beXs0FlKFY2Z0CKqolNd0wRGOydOnUFVFWqrg8xO\nT15UZPlIyl3+b3H73Pq+ay4nkUgQW0kjCgYi88vIBiOiBA67lZ17drIwO8KO/i68JgMrKxFMdjOC\nLJEp6disLrI5hfGpBdKFLKLRgCyIWC0mDI8LCMhoCKwQI3hfLVvWDnBh5CxGi4QoGokl8pw4M4zB\nItPf1cLarkZMwBtvHOLk+XF27ruSM2eHCfq9yJTo719LJBJHE42UygLFSoXTZ06wpm+ApcUVUqkU\nN91ygGd//jSSKOKwWBA1jfaOBmSDyN4r93HhwjSnTp2hsbEe+QmZRVbIksKJme2/v50XXv45f/GH\n3yC9NIuJIrLFyOmhEfIVmYnQAu09HRw5MUwgWMfw2UEWF1e47LJtJGOryAL4fAHOXziP1+dkx9AO\nLmMLRRSOcZbXOYyOiBEJ0AnsCGCzW/jw0CFuu+UGnBYL4UiMwQtDGAwSPqeT5uoAzqoajp8bpq66\ngemZWVL5HIKxgs0At958I0pR4oknX0Ct6HirPKiKhtkks23bOpRiHiWX5BP33MpiNILZ5qWk5Mlk\nMgS+VI2KxB/xJ4hINF3bjGwy4nN6aaqtx+3z8ff/9L8oFfJ89r57OfLBYeqagszNRFicjwEquqYi\nKBn27trGux8eRZEMtLe1sRpLomsq5UyG3r51nJ+YRlNLdHe2sW5gEw8++K1Tuq5v+nU6/Y2Yhrnd\nbgwS9HZ34fN48Li8lMsFqCg4HXZECU4cPkMmmsdmtGIUYc+WDXTU1WI1WRm7MEEiuYooioiigM1s\nwWWzomsqoCEi4cJNmhR+vPS2dbAQDlFd5cZutzM8PEEhp+H3erAZRdxOGYdZYnx8jjWdvVQ5rJh1\nha2X9VFVHySSzDF4bpRKIcvg6ZMMDZ0jlUyDKFIsFjGbrZQUlaeeeZpAVYAN/QO0trawtq8XnzdA\nV0cP//LPD1MqaizML2EwGNjFJrpooYV6drKT0YkJBvo28Hvf+Bbf+eeH+HBsjLfODKGa7SiIWOwO\nMukiZrOJ9w69yb79O2hq9bHn8h185gv3E46lOT81j+z0k9IsHGGGc4QoobCJDTzANxEQAREHDkS5\ngl5M8ql7bsHjsmO0GLGYzNgtNmrrG7HYXKxkFdKKRiSyytnTgyTTURxOE/1960kkc1gddl545WU0\nAcw2K4WSSqlcIZ3KMHhmCE+wnnimyHf//ocYjNU8/+KrWGwOnnvhBUDiRzxKgRKXs4fL9+xgOR7n\nxJkh3jp0hB888ihOt59AoJpnnn6Sm2+9Fo/HRXhhHkkWEcUyPqNKk9vMx3Zt4b9/8ct4rF4CniB2\nl4eq+npyJgOjS0vosozT7sTndrOm9/99nuX/ClmSqKoJIsg6qpalqrYag8mJbLFidThBFAmvzrGU\niPPiGx9gclST1iXC6QLTkTj+aj97+tYRcDtI5DLEs1kSiSxqSSWTTPEhJ5gjzj5uoIVOZqbPkylk\nSWXLKGWRqdk5EplVzLLClrXNdNfWc+HUOB6rh0gyhyJZOX76NFs3bEUtaORyRcLL83T19bD/qn3U\nNjQyOTPPzQdux+F0IIlFerpqWT/QRcDnx1dTxUJ0EdliYPOWfto72ynrRhQVLr98F4qSx4hEhgQl\nCpzgOOVyAYfLSc+mTZg8VeTKBjI5DVEyUymVaAh4cdgtlDMZvvZbXySbSPDxa64llcpw6NBxPL46\nRIuVYlmgUtKIEeE1DjHFCn/M/+DP+CeuZD827KySJLWaY23/BiZnZlhYXCQcniefy9FSGyRgsyEg\ns5xMEQ4vIEkSksmIYLJTVdNAMp7CaLbzw4eeRS1UKGfiWNUc9mIBsVRE1TUi0RiJaJx7P38/gsnC\n9/7lEVYzZc6cv8DHD9zMQQ4zT4Re2tlEFyNjo+zZsoN0IsPS0gr5bJ7MapJcMkelDG+/eQSX2Y7L\n7iCXTGDIJ+l1KGxqdDF27B0qq9OsrXcwO3EOVSly5MNjqKUKuVQCk6xTKOfZuGUtklm4eJ1+hB64\naEolhb7uTsJzU2zcuB6z2cP7ko6mVZAkcLnsaEAhXyRRguc/OMmdt+4ntBSlpb0Ls9lIsqgwv7CM\n3+0jmUxSFfQTXVrAarOy+Z7tdPesIW9MklyMUmOpYX5xlvMXlpmZjdHZXkdzgwOn2Y/L5aTwBzpV\nNHGaIYaYoI5a7udeFr6a4gSDtF7VzNreVqxOCX91DRNzcyhKgsPH36GjqZ00Eru27eLHTzxBMFCN\nARG9rDE+McHWzRvQlTLxVIyzg0dobqzHbDLy/ieOMzc1j8VqwSAbKBXLRNM5rFY7jc2dDE+E6e/p\noqhorKwmaWl0MBeaZedlO5ibmWVpfo5iJsVcNE0g2EVGUTHoNsRKBl3QMOMmhchzvI0VO5/4zo3c\n9am7uPyyy5FkI8lCHovNTTpZQMaE0WCkPliNw2IkW8iTLyyDqqGUdIwGJyajAWOlTGx2FkUs097Z\ngKiCVahQiOo0eT1suWIv3/2nH1LBhM3r5/3336O2roprrrmGhx95hOXoKvl0hj27dvJh30nWDbRy\n7yfvIBxeoGOulZ8++TSyrGKySJQKGnqlgqrp5LM5ahvqeeKpn7Nt2y4Op96DisonP/VZ3A4zNpuJ\nRC6HaBXoSGmMx/KEIsts3rSFE8eOktFybN++nUMnTjP5s+cuWqe/EQv8f/j7v3tgw0AHJsnEQ9//\nIZu27GBoaIiOzg5UtYgg6nR0tqGLIqHwItliibyi0tHVjcPlJpFKM7M0z8H33oeKjFZRWTuwhmwm\ng6pW8PqqyZXyGA0SJlkkny9iczoplkGUBdqagzRVu/F4/WTzKgcPH2aUOUqoNNHELjaSJcZbvM8a\ntiJvNZGNx7nuumtoaWoklUmzpq+H2qoqlhbnsVjtvPDyK1yz/2qcTiPtLfV0drRz+z338ND3H+Kt\nt95jx+6d+P1eFuYjyKKZTDqP2WzG6XAjSzINDY2888H7VPu8yIKIJJlZXorhcjoZHR2lpbGR+UiM\nxaUVEqkMuUKRvr611NTWgigzF45gtVswCQUCbgtrFnpIkidHmh2sx7VDoLujg3ODp9FUjbraaj78\n4EMqFR2vz4uGjsNpxu12YHfYqamrY2p6BkXVCVa5Ka4usqe3HqdNZmTsAh19XSjFEj0dLdxwxU52\nbV6LqJaRKWOzWjBY7URiUaYnQwRrqgnNjOKwuYgtr3L8+AlUvcC3//j3qVRUxsZnUIoaE5MTdPW0\nEayuYWU5jqbpKKqCbJJZiizS1tbB6TNnqfZVkc5lSESjNHV1YfcEGNi2A5snwMzyCjlVQJSMTIyd\nZ+fObczMhkim4yjFEvORVQqp+EUt8H9DzPI/H7jthus5c+osre29jIxOkcmmQajgD7jJF7IYLAK5\nbB5JMEJZY35lmWQyhV5RePOt91CNEogGqquDlJQSmWweu9XOysoy3Wu6mAnP0dHRhq7rWGxWfvLI\nM/iDXpwukYGebrobu0nlVV57931KsxIuvDRSSyvN2KiwwARBmphkiXF1msj8Ml0da5ibDSEbRSbG\nx9i4rh8dkfnlZXKFEk2NQQYHP+SWGz6Gx+vlT779Z+zYtouyquJwe5ieClMpQzadxWFzUFUdIJ1O\no2sa+UKeffv2srIYwiCKVDSRdCbH9NQkmVSS1tYWVtIKwxdm+NiNBwhHIrjdPhpaallZiWE1OFCW\nQxzYtpYmmwHXsEYd3VQo00gA+x44cWyQ/jW9LIRnaW9rYN3AJs6cOY2mK7hdNuLJGGpFoVQuc+Ls\nGTwuJysrywTdJlrcYC3N86Uv3c81NxzgqWdfZTmWxGo0UsgkWFwMERoaZvf2LRhsJibDc7S191BT\nXcO5wTNcf/1+2prrOHv6LA1Nddz9qRsJ+Lz8r4ce5vzIFE0NDczNzjCwvu8Xld9lnZpgLSvxGCWl\ngNPtIDQbxmiwklpNU1Yl8oLOK+8cJqsZOfjBWd4+eZqSwcybbx/i2iv3USlnuPW2A5QrJQpKgV07\ndrK0FGV16eLyLL8RZvn2t7/9gNnhYmDzJjrW9HL8zDkkUUKSRBRBJRAMIBqsWK1WnA47uXwBrVwh\nVy4RWV3hhuuu5uP799PS0clzr75OpaRQ5XXy1juHaGvrpZBI0tbcQLmkcOH8GKdPDVNTU01DwMV1\nV2zFYjHz4N99jzMTM+iijB4WuI6rqcJDnAgSKtV4qCBximFKrgKiXmFoeBCT3UY0lqStuZn6+mYm\npucZn55mz+U7mZ29wD2334gkmSlj5I033qa2rpZSoYiSzZHP5fG4rTjdDmxuF9FoBLMoYzYYEGSJ\nhdlZ0EUKhTylQhaz1YbBZqe3vw9fwI0uaNTX1/H4E0/Q0tbM2vVdiJKBil5h5sMj/OH9d2LRs2jl\nJM1nq7Fi41t8myD1jOwZ53s/eJj9111BT1sT/S1N1Ac8TIfmiETjeL0BAk43gi6Tzedx2h3UVPnY\nu3sXpw6/S7VN5Ctf/RxGjw+D2899n72fdz84yez8EtGlKNUeH3t2bcUV8FDb3ELvug2kC3kS8RRz\ni/PMhBdZO7Ce+Mo8d992I811TSQSOd44+D4r8QLr+wdoae3khRdfZXlpidm5eQr5EsFaLx1dDXg9\nfiRRJLa8gKCVqGrw0duzjnAkRktnLycHz2NzehgeGuRLX/gcP370UTp7e8jkM3S0t1EdqKGhoZGp\nyRALoen/PGb5i7/4iwfC82GGR0dQymVGHh/HNC8hhyU2Tm1E2Vri9Olj1Nc1UK5ohGamKZcruJwe\nlpcW2XvFVXg9VaQLRXLZDLlMCrNRxGQ14fY6MUgC5VKRsqJwenAQt9dLlc9G35p2XG4fy8sZ3n7n\nOC5/gFJZ/qVYAAAgAElEQVSpgN6gM9+/QPUnAhT6S4y7JnF9PIBxN1gbZBYnxti7dRP7P3YV1x64\nAaVcwmyQiEQjlMtlpl8cw3JS4Obp62h4o5UPW4d4+ucvs3vXTgwGA2+//Q51dXUYjSYcdhvjk5OE\nw4t43S5MkgFBEpEMMlabDUVVsNosqBUVWTQQmgtTKivIokhodha328na/n4UVaW5rZmhs+ewWMwk\nXl7EdDBH7sNF6s76MX7djOUmD8O3ThH8Vh2ZZIqrrr8KJTnHur5OGpr7WRqfoL9/DXOL84xOhfAF\n/EgGibJaRC8rdLbUEVmOsnv3bl54+VWuufEGLIF6PPVNfO9HD3Pi2CFMMqzp7CQ8v0SyLFMSbfzj\nQ4+QLVWoqa0nEl3BanWwFJkHCly9/0pEESq6wDvvHcFu97K6kmBmZobTJz6kXFHZvOMyDFYj8cQK\ny5FZvGYTbXX16DmF2Pwin/jEXZRKOc6NhdDQWU3GaGprxOV1cvtdd3DwzXe47wtf4e333uey7Zs5\nc/ok6/v6OXLkPaprahg8efo/T56lqrpaD9RW09LRjMvlJPTDMGnSGBCxYKXm035ymQw2q5f5hVWs\nIuQzGcLzYYLBKiSzESQRp9NJwOsCTcLvdjE7P00sFqOjsQ0BGJ8cx+VyIkkCm9b3UVNVhc3u4Qc/\neoyVRAEkHafbDoKO2Wbhvk/cQSq+QpW3nuefewmTUKStNsDyxARf/dKX+a1v/xmrZZlv/OE3efpf\nH6O9vRWHw0TsDyN00Y2XADHK/GX739LT3cXw4BA9Pd10r+nl+PHjuB0uREmnUFQoawIukwmzyUgy\nlUTRNepr60hnUhgNEulMGpfNysJyCowGsolVNm4Y4K23XmPr9su4+dY7eeWVV3BaLVjddr7xl1/j\nVX6AnTwiGtGvZzHWN3HbvZ/nJ//6JBMjIzQ5vVx12y2UzW4++eU/htAon/vCPSxGl3j8qVcxmEXs\nVjN9na3kM0mMJol8rsjs7By333wzb71zkGtvvIFzE2NkUlma6gKUC0WS8QydnX18//s/wmi1sX3H\nLt59+yDtHS0sL8cpqwK9a7s4cNN+KqUCoihwfmSK8ckwg2fP47K7MVrMLM5N8qX/8hXySglRVTl3\n7AN2b+whF4vgdARIZhRGp0KcGR3B7HBS29bJ+x8cpr29lZ6eXrZt28rWLRsYuTDGycERgrUBtm7p\nR1eLfHDoMKpSZP26rXzqrk9cVJ7lNyKyfOfB7zwgmMwg6pTKBULjMwiI9DOAGROGTTKC3YboryIn\nmWlobcZrkoiGZli3po/Q3DTeuipcTivocOHCJNFoHJfHhdvjoazoHDtxmtq6WrZvXU9ncy1Ws5Wj\nR07w0kuvk9dANJqwWe24XW6SqRRbtm7m+mv3kUsn+NrvfZ1IPE88mqDOa6WSiUIpj6euhfZ1W3no\nBw/jtFqJrMzT19NK1WsuiuQ4ywQP8hCbd20iuRrBYbVT0XQKSomyqrK6EsNpt1HRdPyBKkr5HPlc\nDoPFxNTsLDaLBYvZzGo8hs/vR8nlUDSdpqZ2lleixKJLXLX/CjLZLNU11Wj5X9RI6TYDQ+8Pcyd3\n8zX+K5dxOZ4vt9Jz2W4GRyZIZzLIWoXLbruRkFzPA//0IvPTCnm9zMmzJ5memmT9um1MT86RyaSZ\nX5inpq6BigC1wSBlpUR9YxOeQBPpfJHXXn2dbZs24XE5KOSzNDY3cvD9Q+y9fAdbdu3h+w//iC1b\nt7AQmsNssbOymmDLti0cO3aErvYuotEkSCY81QGGTp/C7bBRUkrc//lPY7ZaefnFlzn59jusTpxn\nU0uQ/Zs3YBTB6/cRWlogVS4RiWXQtSJf+dIXOXH0FHPTC8zNzHPozbcQdY1jx48xNxMisRrjmo/t\nx+11c9W+q/md3/5dokuR/zy1YVarlYGBXnwBF8GGakDGj5cRhgkxzWoiQwk3l99+H/Hu3Vj69nLs\nzBBfuv0mdrd5WVPtY3U6xtzYLDffeBstzW04AzUMnryAz1DPhdOD+HxOPE4PkxMhTBY3c9ECEwsJ\nyiY7sslIVbULqLAUWWDLum4uW9NCdZWfgS27+cy9v0WtL8C23ft4/KWD1HeuoW/TOu6+6zqMYp6K\nWmZkdJSvfOF+Hv3BTylRwoiZWqpoxU9oaoZKScRktmGz28ln8sjIbNq8FUUVUCsCIxdGSOey2FxO\nXC43jcFaTp89R6FQxOO0I2hlDGYzVX4PY2PncbhcSJKZ9947jtniwOVxYXNbsTsdlJMKAlYmSPAw\n79PCPsKZPKGpEPHVKIuLYa698eMcPDXPN372BknRgUGZw6QuU1FTROPLXBg8ydr+Hrp7u7lsx25m\npmZRimXisQyiYOXMuQkmQzMszi9QSudRCir5TAab1c7qSoxdmzbgMJl4/ulnqKuqZfDUMIWCiC7K\n2GwCN1y2hXU2JxcOH6OUKVAs5jl15Bjbd+6ksbORL//WJzn03vscOvg+QYOMKbrI33/zi2zu76Eo\nmLHUdfA/f/oEottHrqzx2S98jh1bNpHPJbn8yl0YBIlkvEy+bKStZy0CAumMwsRkiKW5RRoCzXzq\nzs+hqRefZ/mNiCzf/MY3H8jnS7h9HvyBGkLJMLa1Nhq217Eox9AwUjewnRenC1hq1tLc2sDegXbE\nZBSnUKYlWMeJwTEy+TTPvvgSn/n85zk3eJ72lgb+25e/TDEdo6HOTaGY4cKFCU7+bILMsTK5hSJC\nRMPVYafGX4XXaSeXTtNYW4vP62X0wjCvHXyTpUiUO+66g8efeprleIJcWWd4YpG2Net578gxYvEo\nfp+V7Ws72bP3cp7MPE/pKo2qe7x07GqjmMvhcvpQdNAFialQiIVIhPHpSYqFIg6rlfCJMOvDA+TH\nciSHU5i7zaxbP4AoQiadwfiyAduYnc7RHuRFmZnZGeoWq2iPtnPh3ChFv0JXcyOLyyvMR1cJfLYF\n4+968P6xi7faXyOfyyCJEqVyCbfXzdjYKDW1Tbz17Eskps5hVGKQz2BIJrh8oI9wdJbF5QzFYhGN\nCkW1wFwohNVso7qqmjND58gWcgwNnqOqqhqlVKShoZ7laAylXKG1tQ1vVQCfr5qjh49jjllxpu04\nIlasSYGjI4cYHZ1Ck82cOHuK/fsvp6e7DQ2N8+eGOXr4FCurOVLxFIVUlAf+4IuYXE4Us5vjkwv8\n3nf+Foe3FqevmngqTS6dxWy14g1UU1BKdB1sYzQxCougv6qxVBXB53LjdDq45dY7+epv/z4XxqZo\naPYQngn/51ng/+m3vvVAQ0s9iq5isdiZGB2jpbmB8dExvL4AosnKjutv5XxKxFLTwGomRq3HilXJ\nUklH0ZQyLZ09jI6PI1qsDA0Pcd999+JyiCSjUWxWE4GAk2QqSaEMK6EsfrykiOPDx877dnPm7BnW\nreujVMxSKJWwu/28+/5hNIOJ3r4BECQGLwzh8Vdzxz338cJr7/Dywdfobq6nraUOj9vOmt4+4gWV\noiJSLoukUimESgmzycTM9AyFooosiXR0trO2vw+1VGZNXx/z4TC2iA3QqKBhxUa+LsdiZAFNrYAO\nuVARB3aWWcaBAxd2znIGKzbqaGTWOUdffy+ybCSaSnF+YoJrr9zHO6+/Tmx5mUCwikJeJTQZQpQM\nlFQNuVJm97o1/O6X7+X5H/0jLiXNPddfQVdTkIqukIvHuGxzPyfOfIivxk9jYxvJRJJyUSVTKJDO\n5XG6XNisNrw+H+++9yFOp4dEMkG+WEBFoaIKGA1mXFNOoiwyzxy3cBPZtVkm5+ZIq2VkiwWn04JZ\nkqiqDjAyOoXb6SE0O4+m6xjNcOLcIDld5q0Twxw6M4loteFx+onGYphMBmJLi8xNTnD6zBlcPj+D\n58/SQRsCEq/xIha7nWw+T65Y4Lt/+3egVWhurecTd93Gyy+88u8zDRME4UeCIEQFQTj/K21eQRAO\nCoIw8ctPz6/89ge/PFhvTBCEqy/GLJIs4fa7sNvNaFqZvoFuSoUkFbVIuVzCaJSpq/HidxsQS/Ng\ngPPLafbf/klwOKlYZMpanqr6agI1QcQKTIwOMjs3hqfGjdnjZnRqjmB9G7oIdQSQ0bBjIUOGl15/\nmbvvvQdFKFMV9JPKF3j9/cMspHK8+uYh3nn3Q1599XUuv2Iv8Vyal157BYvdhiQLqLkU2/p7OHD9\n9fz1P/6In7/6LsdPjXL61DjhcIILQyN0tDaxe/d2SrkUiZUIE6MXOPTmm9iMJsZHR1lejaEjssDi\nL/8UAYfTSV1tDflC7hfJSlyUKQM6GTKIwBY2kiSBiEhTcwuPPfsygsnCxg0b+LvvfofpoTO8/for\nuN0uRNnI8IVJvv/PD7MYXuGZZ18i4HKxODfCrbddgT2f5Y8/exv1NQY0MUV5eZlvfvZGNrf7ueeW\nj3HfffewvLKCKIi43R5cbh8d7R3IBiMVUeD8+RFcngDnL4yRzhZQyhVEk0QoNMXk+BjTTLKe9XTT\nwRu8xTV33sx3H/4nsBqwup2MTYV5+qmnKaTzVFcFyGRS2G1mEDUSRQhlJM7NrLAYL5AtlEhGo4Tn\nZuhsb0fWyuzfcxm71vXSWV/H3NQM/5WvcTk78OFkHdsolUpYPU5C82EENO68/Uauu3oLH7v6mouR\n6C+0/et2wwRB2A1kgZ/out73y7YHgbiu63/1y9MmPbqu/3dBEHqBx/jFuWG1wJtAp67r/+a7m/4q\nvz6wpZ9gQyMOhwuvw05fRxNqpcKTP3+BXFln+67ddG3eRVTRSCRj7F3fTjkawq7mSCys8Myb75FI\npJmZWkCWdUSTgT2797B3zy5aW1v5ycM/ZGxsgrKqU3hZx4iEgIyMzoEfH2BmZpJSPsvNH7+JIydO\n8Pyrr4MoYDRaMMlurFYX0cUlLE4XyVSM8Owwu7YP0BQMMjE5i9keYCoUJpPN4nK5MEgSgiaCXqax\n0Y/dYcBp9nP4g+MUdQmTwwWVMrIkE1laon90gAUWmCOMgAHnegdWixmP00kyvkrweA2goSOiIVCk\niAOZNCWyKBivslHRSli8Dq6//mPcfvNNfP7Tn6apuRaXy4XF7CQ8NUFTSyuh2TCvvXmQK6+8hmBd\nLW+98BRf+PgVtAXs6FYXS6kcvoAXR7mA0WwliYWRRJbnX3yXyMIS8ViCUqHIjl2baWho4cMjR2ht\nraeuqZmfP/Ms9bW1dLd1cPTkcTqaW0kkkowenuR3+RIh5qimmcqfmnj8ycfZuXs7FVXl+edfIeDx\n0NzUyHJ0gebmZkaGz1PRJXSMlNQixUIW0QBltczurZfR2dnFzPgoJ959m81rOuiodROobeJfX3yD\n7IyNT/Ip3Pg4yRDHBo6zddtG4vEI2zatJzQ5SnWNB4vDyx/93sVVHV/U1rEgCM3AS79iljHgcl3X\nlwRBCALv6rreJQjCHwDouv6Xv+z3OvCArutH/q37e/1e/V9++D3Ciyu8+PpBopEwFqNES0sLqVSC\n2mCQjQNrWFiO0NzcRtDvRKNCW2cL0aUYLz53kEg2SW4lRmpulss2ree900MUBQOaYKC5uRmbSWNu\nZpam5hYujI7jcHsRBIHO9iZamhvIZFNcc/V1PPLIIyz8cIEqGphiFhWFPjYyyC8O07Rg4zyneJA/\nxI5KBQN/0vIgVncAUZRxu90kk0ksZjMOjw+zbESrKNTX+Wiu8zE7s8DsQpxYIovb7aKurp7Z0Cyi\nJLKciFEdqMbldnHwzTfp6+pBkgWMooSiKHh9LkTJSFmtIMkyJhkWI1EcHh/Hjx2jb2AtZa2C1+/n\nc5+7F1GrcPr4EZrqgjx+72M00IqIjISJjT/ZyPd++FM6utpwmXRaXTLr6+swe/2oFjt//jcPctsN\n19NQW8f8cgJbsJHf+e1vsrZ/gAvnR2if78KChBkro4zi3+VC1mDj5k0Mj46h6GA3WYkuLuHxuCmh\nUynnaW9vp76umdhqnqefe5G6+ioWFmYxyFZM0i/ySU3NQTZs6iMWWSARzzA8OkW5UmY1tswdd99B\nODzD6tISAYuD3PISQacBn8tCR3MjVquVidkIVV19nJ2f57qbbkXXJb72O1/739S9Z5Rc5ZXv/Tt1\n6lTOsXPOrZbUklBAGYFAgAgmGgPGEWzPjO1rezz2zDuDx2HG48Fp7LE9TsM1NhgQHiSChIRAuSW1\npJa61a3Oobqrqyt15XiqzvsB7r3z4V1j7nrvXQs/n55z1glf9l7P3s/e/9+DXC5RV11Ja1Mt7c2N\nSDoRSWfnG3/95P/VFn2voiiL784DgPfd+f8XXK/6j33M43JS6fUgCipUAlgtFjLpLFNT01hMVnRa\nA/F8mfPnB3nh+T/w4vMvoxXVXDh7gV/88jfkCwrn33yb8OQYN2/sRZ2JsnVdD6VslvmFJSYmZhAF\nLV3d3UyPT9JSV0doYRGrXs/M9BSDQyOsXbuJf/jmdzl94RIu6siTQ0JEh5YhBmiklkXmmWSIJ/gQ\nWorU0cbX+QG33vMATa0teNxeIuEoWo0eATX+BT/JeIbhoVGOvnWSVKaAoFJwu81o1O9A306dPs28\nfwGtVstyNE4kGsHnm+OeD9xNJpPBoNfjdDoAKJVkUAkMDg6iKGXCy0lcLi9KUWbrli3YjAaEvEzQ\nt8DL+/Zz9OhJetdtJVsQMGLBjIUa6qijnsWlAHVVVUTDAQ4eOYynpZPRcJJorsTViWlu3PsAs8t5\nMpIJd30D05NTdHe2ElrygyAwj59BRogSYTvX09nZTZXHzbWhYew2O8V8gaHhMRKpHENXx5FlgWuT\ns6xcuwG708P+l15GK2mIhsIYNFokVQmFLChFRkeu8dvfPo230kkmk3ynJECRDz30QaBMe3snq1ev\nY+OGHm67bRN/8eeP8vCH72X1mh7KhRS97Q00ee2IssLB1w7xV3/zNzzy0Af50n/7AqUSDF65ik5n\nQC6pOXHy4ns2+v/fXceKoiiCIPxvVzb/M5HSYbfywn88T0NLJ2a9CoPKSCmbpARMz87iD4aZmJoi\nFA4TWY4y5TOQLRe58+67MOhNHDnwMt11lRhVRdxGLUWDm5logqbGGtKEAYWyUubEyVM4rTb0GjVb\n1q0kEA5TKsGcf4knv/EdUtE00UySSwyyjl6aMaOizDxLQB4nZu5gL214sKLjb/keMeC1g4dx2u0Y\ntUasNjsluYROr0cuykxNjbPhul6SiShnzgyyfesqNJIOrd7CxMQCcuEdAuTY6BiSKKHX6xgbH6dc\nljGajJRKZRKJBADlsoKkVlNbW8vcrA+TxcRybBmNJBIMRNEZdOjVItXeGmS5TN+ZSxx45S10BoE9\nbMeASIYMc4xTHlFoqa/g1Nlp7t57N7GEjLGikr6rI+gNRq5OLhKPREhkCpSVAuV8iebmBlautDAx\nvcBF3xAadJQoMMs0oQtxairt2J025ubmyGVKCIIaSa2le2UTsws+HK5qxsYmePONNzFbzCQTCVQa\nGVEtoBIUMrllnM5qsikBk9nK7PQka9auYnBojIWlBRb8M6zsXcszv/k9Zq2ZPjmDWcixqnsdT/79\nt/ncE/ezYk0vGpWIbPawXe/i7f4r/Plnv8Dde3azfv0G7rvvXi6dP8PJkye59c4H6b/04nu32fdD\nGNZQX608/qlPoDdbeP3VV1ALapaXE5QpYTBKWOwOwoth1Hojy6kY3d3tjI2O09zUyIfuv5vpocuo\nlvxYJYmSXACjkePDI1xbiKLWe1heWsJhN7Nl81oWfdPoNVqyhSLlXB6lJBCIJZn2LxNLxhFFaPA3\noEFiDT300UcrHZTJcx0buMQ45zhDO03kkDFiwvRJMyNXhymmZdxeL3OBBcwmC1pRRVtzEwvzc7hc\n75Aja+vcVLss1FVVMnBtkrHJWUYmJmlsbEar0aE3GEgnU2hENVeGh6j2VNLW3EwxV0BQw/LyMmaz\nBa/Xw0JgkXK5jMvlIhKJUC6WyMsFXC4Py7E4oqTn2ugUao1IzbibZuoQyKFGRfbRMigyarUaWZaJ\nJ+LcdcdtlMsKFRUVXL58mf6BS+g0GuxWC/lCAUURQFEhF8ssPhMiS5lZfJixkK5P0VDjRaNSI5cU\nZv0LdLT3EElEEQQFnaAioy5gNjpZmPUTXo7QVlmFIGbI5+O89uorREKLeLyN7L75A9Q1VbN2VQ/P\n/O5ZSmo9Dz3wCGPDo5w8cQa9SYOilPH7fdx1515OvH0Ut7sKFsf4wueeoKaxln977g2uhdP8/N9+\nitGgY88dd6PTizz6wH0cPniI6flFVIKBfD5PYGro/2rO8h0g8p8SfIeiKH8pCEI38Dv+V4L/JtD6\nxxL8utpq5WOPfxRPRQUH9u8nGgwhSBq0ejUOi4lUPMfM3AJakwWD1cA9H7gDo93GL379a0RRoMHt\nYl11PZKcwybJZLMJaps7+foPfo6xpp3LIyO01tfTUOvBYVKjKZfIZyLU19cTiWXQ27z89qWXqaxr\nJFPM4670Ui6/07bef+osVpON23ffgkpT5ldPv0BJ1KIWVXgdLiqqKpnzzZDNZlEpakwWE5FIFIvV\nisNiJbgUoLa2mlwuR4W3iom5cWwGLXfedhMj14aYWwjQ3L2Ksal5KAssx2JMjI5TX1PDYihIS1sr\n6jJY9UZC8WXyhSxOpx1ln8IiAUyYKFHCcJuRQiaHolKh1egZf32SraxlgBFsOFF2KmiNajxuM8lU\nHK3OhIiAqBYpFoucO3uOrVt3ctPuneQLGcLhANF4nFQ8TSaVplRUUGsE8jkZlSBSKiv0XxoiHk+i\nEiQUH7gw00wDRWT8hBDQYsVMnGUSRFAhUURFljQOjGygnTu5kSYqUZ3MoxYNBEN+TE4njzz+FYyS\nA3e1h9aOFrramynmM4yPTfHyqwdRBA2CXEKSBLbu2MLL+1+n1mxh27bNvPHWG5QNLgqSBb1Rzbe+\n8VW+/KXP8c/f/hqDFy5g0ts5dPQ0fWcGEFUqIgvj/2dyFkEQngXOAO2CIMwLgvAx4B+BmwRBGAdu\nfPead0F6zwPDwEHgM3/MUQDKioLdbiefz1NbU4PJYiFfzFNTWUVgKUiukEctSbhcXkolOHfuPJs2\nrGNFdydqSYPNU8U3fvRLZhMZ/v0P+2nqWEkilWXP7Xfgcjlw2szUV7lob6rDoC7jsRtx2204zDY2\nbdpCdaWb1d0tSEqWQjGFXMhTX1OHRq2ho7ONzZu38vobJwiFUhQLOVoa6kmms1ybnCEYjCAioZeM\nJHIZ8rkCOo0WRS5RyOaora0lFFkmn8+TL2QxGpzoTA5++e+/w+3ysqF3FcHZGVoaG7h6dZgV3d3U\n1tYgl0p0t3fQ33+evovnGRq+SqlYwqQ3opU0pIijRqRIERE1+VyOclmhWCgSiUSQ0DDONLVUEWcZ\n/+ICtZU1IKqob25CLmbJ5bOEwyFyuSwbNq6nIMt88x++zej4JFq9mWw2R1/fGSS1Do1WD4oKo9GI\nf3EBUQUdnc00NNZx3frrMGMhToEkGeJEqaEWBRUunDTTwHo2YEJPM1UUifBlHmYN9dRjJcMSi745\nFuYmKBdTeJ0m/ukfv4nZ5WV63k8gEMA3PY5RJ6ES37GVZCZJupClZ81qMoU8Te0tlM1mzlybJIaN\n5Tz4w8tEMwV+8etf4bGbSUXCtDU1UV1dzR2330FldRUbN1z3x8zzf/nC+6GRsrqmUvnCl79ALpej\n/9w5FnzzNDbUUZTz5GWZSCTNwtwigkZDEYWbd2/lvjv30NbVyU9+/iveOnqM5sZ2/L4JPnjHjRjK\nZXQmK1/5+j+iNthZ2dGCU6+ioc5LIZfGbDBRXdVIXhb4w4FX+fjHP8K8b5I5/yKDcwtkcjIqWWTN\ndatZsaqLY2/1c/rMIIlEiM3rV6PR6bl8bYJYNP3ORq5SQqPVEokvY9LruPmmmxm5OoxRq0cQQWPU\nkc9l30loU0WGBwe45+5bmRgb5dYdGymVFc4NjnH8wiXkYolNGzZQLsjE4zFsVV5mZmfZ2LMa/+wC\nhWIGh8NC5j9SgJ4SJRQU2A1KEaKxBE6Xm9rDdWgxMMUwBkycqT2PRasllg9yy+27KabyqDUSxUIB\nWZbRSBpycplSqYTN5qCjowOHw4BcKJGKpbk8cBW1BsbGxtixYyuhUJCahmaWAhFeOXAIeVpAQMSC\nihvZwVHOkqJEFXZsGEmTZoxR2mhlMx2YSWLHQjfdrGUD+qiN5XQInSARiWQpW6x8+/u/4cqVIdRK\nnr/7yuf50fd+zO7b9vL9n/yE5vYOphfmcTttNNXVsjC7iLfBQW1tB8dODBKJx/jcF/4aq0NLe72D\n4OgQ//xP3+bBBx9kcmqWs5evUVfTwsUL5xm+dOY9rSzvC1mxAJitFkZHR5mdmUFv0JMvlqEo093e\nzEB2krmSCp0kYnXpGBkd5ZtPjfLwAx9i5pqPTEphYWEJSWfgV8/uo6utg2Nv9+GtrqGjuZK1bS1o\nkJGAjFqksb2H4Uk/z+3bT3VDA3Wr1hLJ50lN+rg6OIjdXcH1GzZy3fpe0lmBFw+8jsvu5PZb9nDw\nyFuk8ynKKgWn1UUmncOss5BMx9mz52aqKjxcutCPRlNmfGoKjcGOXqvC4zaDKBKYH0Wv1zIx7UOt\nM/HqW2dprKukrdmDztRLIqcjsBQmlYjgdNhorKtCRwmHzcTYaBK3x8VyIgmoMKJCoUSWAqqiGrlU\noK2jmeVYikMcwYOTAAHixOmq7sK/GEKvdfPqC0e4Zc8u8sUCCqCWNGQyOSSdFpAYHZtiZibAvffs\nRi3qMVr0bNu1nZdeeome3h4CgXmQVfjnpymXVGzZson+6QEiBFnFJmYJUkMNYYLkyeKhEZkCNswI\nxNAgE6XMfn7LZ3iCAEt436qip3cN/kQUvc3D5aEZZmenURSFdK7I15/8Ol/76pP8xVf+ik07dvDG\nq6+jkmQee/SD/Oxn/5316zfx0qHTdHYUqa6pYtvNu7AYVUTnJ2m+vpW+gyNoLUa+85NfkE4raAQV\ngfCAGQUAACAASURBVFk/Zum9bwi/L5ylVCqRzKSZnJzEoNODoCKRjNJQXUFg0YciZ6ivs5LMZ3Ha\nbCRjaay11Tz9+xfQKWpmJqfwOnop5WVq69o49OZp6qpsbFzbyYaV7Tj1BijnSSWSGMoq1AYDR/r6\nePCTn+DOu/YiCQoGi4U3z12iuauXVCLG1q3bCYaj/NN3vkt9TSUet5eFcBC90UoRNaIIbqeH4aUR\nzDoTokrNiROnqK2uRK/VYDSZcXlKRFM5FpeiFAspCvk0Pd3d2O12JqeniKdyWIx2Rid8zMzBLbdt\n5/LQJFdCc6xdex0z47O8tO8AVW4vwRcjCAjEiKFBS/mmMgUliyiq0RY0lBSFZCLLWHoCQRQwrpAQ\nDApiSKDGUMm10WFaWlqYnZvBYrPzxpsnaWyppLa2FlEUkSQ1qXgSUZIQBTAadQSX00xPjWIwGFBL\nAufPDNBQ20Q2l0AUQER6pzNgsA/Lej1r27ezdu0GUukC+144gNNmJF8okKxMc+TQG3zg3juwGG04\nqqwc/s0BPvvJJ5A0CgazSHBpmuCCkVSmyG9/9wID1+a52t9PQ2MD0UgYcdzM0b2H+Gu+zKeHvsT1\n7CRPlBf+7Bk+xJ3c8pt7OHttnC/+1ReJRsNMTU8QikVZt2YVocV5Nq9fzbbN1/OFr/w9Lmcjp4/1\nkVVl2bHpei5ceW/bx++L3rCnnvrnJytqK8kkU+QyGUpKGbNZj8flIpNIUS4VWLOqh2w2i9FiJ5lO\nkstnkVDQq3V4PR5EjQJlgcnxCWpqK7lhUy+bejpQl4sYdGZKooTOZELS6IklM8yG4kSTWZqbm0gm\nYxgNOswOFz7/ArfeehvZZJof//hfaW/vwON24HBaWJjzsWXbZmamJqmu8eKbnaJ31UpyxRxOj5Nk\nMoEkqlGpVIyNjHL9tq0Mj45QLJZJp9N0tLeh1RnIZLOoBBWJVBYBNVqtFlkpsxyNsmpFOys7O0mn\nCyz4F7E77Bh0OjKzKYwYyZBBhw6lWUEtiqQzeVQqkWgkhkYnIcsy+XwBp8tJsVigosKL3+/n05/+\nNOFwmM6uLkZGxxAlieVInIbGBgr5dw4EMuoNFAoFqmurmJmZRqszAyrsdgeVVV6seh2VFZVcuHgJ\nd4Ubjd7MwvwSszPT/MO3/gadpONnP/kpPat6GZ0YR1Uq0d3Zxdtvv83uW/dw6MgRHFYryeVlGmuq\nKRQzqCSJbLFEToZwcIlgcBmrw4vLU8HD99/O7TdvZ/OGNex96Xb+wD6KqFgkwSRzNFPLfdzOGxwi\nVysgaLRcv2k9C/M+opEQ1U4rXU01fOKjD3LD1utJpnPo9Gb2HzhER2srcj6Bqphi7D02Ur4vWvTL\nisJrh15HLpVwud1YLVayhSJTkz5sFic2i42ZsVnC/mWWfCHKpTImAWpdDuanx0iloxQFhRIKJpOB\nugobBqWEtqRg0ZpQBIGULFFUjJTKajSCmot9Fzh3oo/nn3uBgwcPMjc3y/jIAB997GGcTif//t9/\nS1V1DblclpoqL9Njo9x4w/WU88s01pq49aZ1VHhs9F84zdoNPczNTXPH3jvJ5nJ43B60Wj2H33iD\nYGgJUS0iqnTMB0LkS2U0BhOJZA6j1sqCf5FEJk0yk2JwxM/w4CgOs4lEKEBrez2lcoZiMY0XO1Ys\n1FNPmAj5fB5FJYEoMrcYIBiLotWLSBo1NqsN/3wEQQV6g47Oznb2vfg8mVSOyckpdt64E7vbhtVm\nY2xsEqvVjkqlolgsoZE0lPJFtm7ZRCmfY+jyJQ69cgCTTmTLllX4fJPU1tazvJxgcHCE8bFpdu28\nkaXFOXSSntq6BkRRYPO2DTTU1mG321l33VrefPMINm8Vl0amuDQ4hquyCmdtHWqLg/Xbb8EfK3P9\nzXeic3hB1PH0L39GLB4hGJijs6mCFipJU2CcOQooGDEzyDCv8hrNNPHC8//B3t27EWWZCoeN++7Y\nS3dTLUIxzQ+//11UGh3PvbCPoWtjbN+1ndHJETwWPf/PX37xPdvp+8JZZLlEZ9sKZGQqKh2YRAGx\nDMl8mvloBAQNgt6A1myikM0h5wsYjEaWFoM47Q40oppiOkuZHN5KN6lElqqGGgStiFrSkS2L/PI3\nv+fcyARxtZ6soOKJj32QCqeBI0cPc/jtk7x54gwf+8hj6ESRf/3BvyKqtLS1NyLpVAwOD7BiRRsq\noUx3Wy3f/dYXaanS8OtfPMmtt2/CtzDHBx64n5///N8oFWFwcJjrNq4nkc/wxKc+SnN7DRUNblas\n6qJUKDA1Nk4yk0YuFslmUszPzeF2eehsbWJiep6Llwe5cdcmLCaJ6qo6du7awzJxUuQ4ytsYMFFR\nWU22nKEslDAatdyy+0YKRQWz1YpvYY721jrMeitL80tMT04jqlTkizkcNjsh/xIus53lWIx4OM3R\nQ29TLgqUCyCp1QiiwPlzlygUUjitGlZ0NPDSvn1Iah27b99NbUstiYRMe2MnnZ0N6C2gNzmJphPc\ncde9TE/4eOl3LzLp9zM7t8jI1Sn0RiN/8fiH2b//WQqSwuHzw1Q1NFAWTezcczf7T5zkw5/7Ius2\nbyAemqKx3sXqri4ESuiMOmTyPM7HucwVgoRJEqOMhhGm2Mw2Wtpb+MGPf4rZ6mbf71/CbTRQ4bZw\n4ewpkOH48SuMzywTi6ehnKWhyctCcIHzFy+9Zzt9X4RhP/rRj55ErUGv15LLJKmrqyIeS6LWa8hm\nM+/AwYsFCnKRbC6LogK7xU46lcZqdZDO5KlyeVBKAvP+BQwmC0NXxlm9spuyUOA73/850ZRC16pe\npuZm2HT9RiRJQ9/5s2SLeTr6W7jz4i3U/HsF9mf1vNl0kJXdXWh1asqAze5ALxlJJdNYzQYkdYn2\n1noaapswGk0EwyGMRi0rV7Sz4A9QV1PL5PQ0brcTUV3m8ssD7JzfRXAwzPJElKwzi1rUkMqnqK6q\n5Lq1q+lobkFGQa/Xsxjwk/xZFudFCwMjg6SOF6j6cBM+vQ+928iyLcbU7DTNTa3IuQJqUY1Go8E3\n70Or1eCw21CrJZKpJGazGbfbRVVlNYuLAWZnZxEQkM+VaEk2Eo5FUBICs1d9tFxrRhkskr+UoW5P\nFYlonIbqWq4Nj3DHnXeSzpRYDEbIZgus6lxBf//b3HzjLrZv30HfuYtYLS4CixGeeeZZDCE9Ad8C\ntcPVxKNBTB6YmB1ny6bN3HXH3Rz767foe/4yba9U8kT6IcRHRYaujNBaW49KLtN37jwb166itaUB\no8VO4WMqVnxzCz9+/lfoXFqu276SEEFkUxH3R220NjXSP3CFl154nvCSn+mJEWrrK6hprGfBH+E7\nT/2UUCBMfU0dft8cdbVVRFN5zl8aJBgM/emEYZKk5vHHH8doNFIGxianMZt06FQqJLXA1PQEiiKT\nz+cxGvQ4HBaWQkG0Bj02hxVJJ2G3mEklYngrPOSyGdAa6btyjTwi7kovN+7ZxWOfeIyHH32UdCZP\nKpnBZrXwxOOPcTd7aKGJKXykyfLPT30Lk1FheHAIUaXC7a2kIBcQ1Wqi8TQDV8bxLaXJ5ASSiRwf\nfughKpxWMukE27ZcTzSewGqzU1NVhX8uQBU1DHGFKMssEiabKyAXs6iUAjfu3Ip/wcfFS+fZ99I+\njFYb8ZTMcQbIATexkyJpjhw+giCXaK6vx6jV0trQiEalQSkJGLRaivkslZWVSGoJjUZLOpPG43Ej\nl4vElhMMDg7jdDnweDzo9DpUQI4cq1mBDSt5VJzkLAsEUaOmkJPxOF1Eo1G2bd/OfGARWZB4+ZVD\nHHztdeamh/nQA3fhtFs413cel9vN/PwCZ86c4aGHHsSLiz/j08gkEInwFx/ay9995iP87ec+w8ce\neYQmmuhiHS9zGBEdt+zYTjoap8pdSdC/yOMf/TDpdAqrzcN8IIFgdNHStZZiCdauWc3Q0ACRWAS7\nx8ORYycJBJaocrvoamtByRcYGb6CXqslEo0RT2dJZ1L0rF7NgddfpVhSWFiIYLG78Da1vWc7fV+s\nLD/4lx8+ufPm7TQ3NWA2GwhHE9Q4PGhFNUaDAbvRTE1dPYlUhmQqhd5owGjVkY7F3zmhV1AolPII\nkoCoUpBEAavLhN8fwG5xsWnbBkpCnraOFoaHhkjGUkyMTuL02Ni2cxPWX5kY4hqv8hZtNGL9MyOr\nV/eSTqdJ5/Oc6x9ganqW5vYWMtkymQKEltMshuNYrC4Sywl+9IOfUFnRwNE3TzA5O0NsOc7YyAQ2\nmwOL34YDLwmSRIhywx07UJVK3LJrG9MzU6xcvRq7x01PTw8DV66SyuQxBe0MMEQv74QicmcJOZMn\nl0rTWFdPKBCkVBYYHLxChddLIhZHlNTvoFXf7VJejkfx+wM4HE7iyynKQpnq6up3tB3zelawggv0\n080KfCyiQkuSJCYMWFebUes1oBJAVNG+qodZn5/WtjYu9Z/gUx9/BJ0kMTe3SFkRiSXDnD93gYrK\nCva99Dzb8hs4wzkCTPMc38f64ThX+4+zbs0GpmYCuBfqEJBYYIkAMTKtcR548AF+/W//SndbPSpV\nCW9tDU5vPXmVhc/8t6+SyaowGcxMTkyg0qpx2m2svm4d2aKK85eHWPLNodNqcDnsLMeXcFnM2B0O\nHA4nMxPXWFiaZ+OmjYQjMULhZaYnp1jyB8mmYn86SslvfPMbT27dfQOZTB6L2U25JBCKRigUM1S4\nHQQjUSSthKAo5PI5LEYL2WgMi9GC3WrFbJCob6ylnM9iFSUcViPZVBan3U42E0MqyxTSacKRNGcv\njTB6bRTEAjfftgcUDVefHuUYZ6iiHj8LrPh0D3qdRGtLE8NDV5gZn6IsQ0dbIxRzxJajFFAQVWoG\n+i/xzDPPs2P3rZy9cJVoLELv2pWs6V2Fy+EkHE5gDBlZYoElwuiQ0LkEdmzZzPDYCGq15p2iYllh\ndHSU+blF1q1dR3owzzJRrjLIZtbRcL8di8PO7HyAxVCQsiCznE7Qs7YXl9dNMV+iJOdRqVQkYilA\nYOvWrVwdH0Klhgq3G29lJeNj4zjsLhZngoQIoUNPnGVW0YGPRYoUyJDncmQIh8OGRiNSW9PNldFJ\nLl4aQCwnefIrnyeTybEYTjC3mCOVK7G0tEAuWeD4W4fYuXMLK0ZXY8PNDKM8zAO8XvcGnU1NZGIh\nWlsb0Bxz8hJvECCIGomBxCCX+vup8XjRSxpklUQgKvOtp37M8XPnGRq8iohAKhHGaNJSKgus7V3P\n8TffIhhcxGY1snn79bR2tHB+4AIqSeLixVEMRjvf/vZ3qaiqp6GumZPHT2Cz2ljwBbE5vVRU1LDo\nm/zTQSFVVFcqNS0tlBWFu+66C0SYvTaKUSMRCQSZmppGMmiR1CKpZApXRSW+hQB37d3LW28dpv6E\nFzN6wizSQAPFT8nM+gMU83l6VnSi06hoa2rh6Ik+xv1BOla0cdftt1JWVDz7/MvEUwVOnDnDyt4u\n/vqrf8nzzz/Pg/ffh9cApaLM2TP9/Prp3xFPZlEjsnNoOwWyqNGwyBIb2c5P+TUFyqyji4onzMxN\nj+H0VDPnCzI9s4DDVYHVbKansw2DViCdSpCTCxSKMsvxZaxWG0uhZbRaI1eHJ8hk8pQ0IhqhSLXT\nyJ9/6hMMXB3k4KFjuDy1yIrAfffezNHjJxgeGqGpqh6VWkMun0NRFCYnp7A53WgMIpVeN1N/mCNB\nkm5WECNBiSJhlrBhRwC8e72oVTpGhkdQa6C7u4uMkueeO2/nn//hlxQLZdBm+OpffgabQYuoMXFm\nYITf/e4/sOhN6KQ8G9evZ/jqVewOB4V9MhNMUEDCi44dD9UgZ2bZccMuspKNN86N0HfxAhWVLlqa\nWhgeGcagtWKQJBqrvag0Go6duEBwOUx1Qx3ZTIpEMcvKznbcVitn+y5SKMLa9esILAbw+efRaMyE\nwotcv3kDvvlpjCYHCwuLFAp5UukMG9euwTc7TSEvk0oVEUQVLpeDgTNv/+kcOaEW1axbtwalVObl\nl15ETYn27nZ88wGGRqbJl9TYnF4am+ppba7n0uUrqCUBi8NKfUsTi4QQ0BEkSY4y/ZcGiMTiqDRa\nLl+9xsWha5w4ewFPhZcHPrCXPTfsJJXO8OwL+1DrDfgWFvjsZz/Pr3/2S3pbm8kuRzn42kFSBYVc\nIY/TZuTTH3mYKm8FXT1rOM9l3LgIs0QdtZzgFNNM0U41TrTEl/x87OGHuGXnJu6960YS8QBBv49M\nKoYi5wiFlgiEAxQKRcLhMBaLlWwuRzgcxWK2UMjLqEQNkqhBVOkJx0t8/6fP0NDQxsc/+VEiYR9T\nY1c4duQghUyKj374MWS5iFanweNxATI9K9pBztBc5cY3PsIWellLL0ni1FCJChUVuNnIelbSQy6V\nY9E/T0d7C/lMDpUi4vVU41sMoDMaKJULrF3VjqiUWQot03d+iEwmy6OPfBC1tsyjD32Qju422rpW\nUFPbzCJh1rEWmWXcWEnIIr54iWjZyCtv9XH6/AU62ztpbm5GZzbQ3LqCKd8Sw9NzHO67yJETF5gL\nRdi0ZSdTY5Nsv2EXHZ3tSGoRjahGJ2lZTsY4ePgglwcHSMcTRMIhrBY7x98+xsruVbjsLiRRw45t\nN1DMFgiHQ1htZlb3rkSn1bCyZyVLS4t/1D7/x3hfhGHf/d73nmxsa8I3PYndpCe8OEdbRystLe1c\nHRpldn4OuZzj1ltuwO+fRtDoeeLTH0MtKjTU19P78kouMc4SYQTAtM5CIpV+Rx8OCJIGUS2ybv11\n1FR4iEejnOofoIzA6RMn8LocfOlznycVCVEM+aj3OnjskUf47fMvUswlqK1wohQLNDc28qNfPE1t\ntpEECZqpJUiEY5xlL3fShJ05Jrn9s7eSS2cJLS7gdNuorK5GY9Sxeu1qZqbGkSkjI5DPpnF5PRTl\nIjqtFo3WxNDgCHX1jWTzBRQ5i85gJJ2XkdHSf+EK27atx2XX4zBr0WuMKIqKa9cmoaRGESCdSTE2\nfo1Vq1eSigRRFdLs2b2DmhPVnKCfAnn06LFgIcQCBQpMMk3OnMHtdtHe3o7T7kAtihw9dopA0Eci\nk6OqyoFGKNLV0cr0nJ+JqUU0KoHTJ47T0lKL22lB0mv5/e/3MXptGnVUwxgj7KQRDRkmLBl8oTBn\nB8cQNBYsFgtqlZpZ3zQ2u51IJMeq1atBVcbpcrC4sEg8GyeViOOwWOk7f46HHniQNw8dQi/puTI8\nQU9vDzXVVXicTixmI4lUkkw2hdlkJbAYpKG2keDiEqPD17CYrRTzGbZs3ci5/nPYrHYi0RT5fJ5E\ndOlPJ2d56rtPPblp2xYCgQCpVJzmxgZeOfw69W1tuCuqmRgZQ68XWQqHmJ5bwu1yc+nKIN2reigW\ni+gP6OiiCx16ZvAhNJXxerykUhnisQSyXEYUNMwvLNLe00U4E+PC4AjlQpGaWi+PfuRRetau5LVX\nXyG/NIO2GCOUStF/dZDzF6+yb99+br1lN8V0iva2ds4e78OAhA4Lb3GCG9lKmTiQw4GDZHMao8GI\nq8KFUafD4fZSViTePnkGT3UNRVlGQo3RZKBUlEmniozPBJie9ZEvZLG7rCxFg+y8bQ8//uFTDA5e\nJJXLkMpmmZwcYduWDSiKQrmkoNMaMZttyEIOtSITj6Vw2o3cvPM6upq8tHWvpqFlBS/u24cLG1XU\nEiBIiQwyKtJksGPH0mshlc0TDCyQzySwm/S0tDUxPjzEJz75CJOT49jtbk6fu0RDYwd2q52DBw6y\nZs1a/IuLWOw2CukiWrWGUCQMIRUpEjzGvbTRyovFw9i8lcilMo2NtZQKea5ODqEgEY9l8M/6OXfx\nEvHFeS70D7BxyxZ23bSZzRu3MDflp1gsEYsGaKhv5NiZc+h0Bvzz8wT8SyQTKTq7uhkansRsNpHJ\nJEkk8szOzyOXiljNRpajIRAkpq5Nsn3rds5fvEA6k0ctiMSj7w2y975wlie/9uSTap2R8FIEj8uB\n1+NFLhYILkVoa2vHoNeRzyfRaDSoRQkBAb3ZhKASESUJ7oGLHQPM1vmgvozJYCAej1MovMPIMpoN\nXL16jWQmzcDQAJuu30D/pcuUy3kqPF6mPz3L9q9tZdX+NvL7E3i/VMFUKEVbVw+jo+Ps3LKdX/3y\naWpqKqm0atHU66i5uZNfjzxL54ZuGu+qptyaR7VO5Ir+Gp3dPVwdGaN7RTe5XAZR1HL8RB+ixsiZ\nc324PG40okAkGkUuFFEEAUlnJBAIsKKrnfaONtq7W6i0m7hh21ZkuczVq8Ok0ml0GpGWpmbUKjVW\ni4GlUJQ3jryFyWzHpFfT0NRA76pOPE4zGlGD0erlH5/6ASxp8DNFhiJqdKgQEFEjIWHHRstkKxfn\nLrM468M94yBiXmYxGiCdSbN9x3aKcokKbx3nz10gsBhkbGwSUVAxcHmAZCrO+P5xBo9dYc/QbeRC\nWaaqJtB4bPh7Zmn8TCsXhkYoKjKx2DJqRUUqFmP3hk1EIgmW4xnCgzGkhJpoIkBv+UZiTSUunj9H\ndUUVAwNXUIngqaqiWCpjtTgIhMJkMgUkSUsqm2R0fIzrN69namqUcrlMVbWXZCyFShDR63TYrXYK\nRZliIUffmfNs3bGLpaUAcqlAKhb+U6qzSFy5fJloLMasf4HB0RHCwQTJUBijWGbzlnX09q7GZrMR\nTySYmp6mWCxx8vgphoaGWApHcLq9mIwWyiWwWWwsL4dxuR00NTVwww072bpjCyq9Bp3VxNTUFPd/\nYC8aSaS5tYmP8ElUWMjhoIUbcDR2sGnnbqLLKRBUzMwtsmv3Xo6dvYDZomPtyg4y6QT1jdW4XRZi\n4RBGnQZJlHjwgYfQGoxs2rqFQ0ePUSxpmZ0LUCyWcDkdtDS3cqn/EtFYCpWopayUMZrNxJPLlEtl\n9HoD/kUfDz/8EJ945CFiyxE2b97Eut6VlApZeldv4s03z/La4TPo9DY8Xi8Go4GJ6VlQKdisBoav\nXGZh1kc8kePIkaMYtHoaqeUbfAUtoEJEQosDJ6tYjQkrF7iIGg0a9JRRoahEpn3zVNZWUy6JXL0y\nxh9eeoXWli7mZhdZWgoTDIbJZvM4HC5u4mZylDnOCe7lXmw2K/lCiQl/lKdf3E9nVxc9q7rx2IyM\nXTpPu9dBjUZkTVsbsUgMEzbSyLhp5Ys8hbV2JZFokQOvvE4yHcMf9HP58hUKhRLjk+MUZBmdXoOg\nVqHRSNQ3VbMU9lFZ7eS+e+/EabKxY8s2wuEQwWCI+SU/NqeVhsZmzBYHZ89fQG/W8dN/+8F7ttP3\nhbMYjUaam+pxu23ojBosDhOCTkOhVGbo0nnkdJzujnbUkkRdTS16vZ58MsFjH3qATDxGSc7y0rMv\nsDDjw6A3cW1inE88/jjV1dW0tbVhNBo51ddHS2cbje2tLPj91HvdbN9wHYODg5zjIi9xiueYI4AT\n2Wji0OGD7H/lANlCBpPVwOyMj7lABEfLSgxmCzdct4Lbdm3izr03UyoWiYRCaAWBq1cuMjs1Tiyy\nSFdnKxOTczzz+wMUFTW+2WnmfD5q6lqZmFogny+i1kiUFJl4Osa9991LJBIBtHzrm99DkTR89otf\nJr4c4eYdm1i5ciX7/nCAjq7rCEez7D/wJiaTiV037cDjcVJb00RLSwttza1QVDHnm2Xjdd3s2ryS\nD7IZO0Y+w6coUQAkosSYYY4xxslRwI4dCQ1ZitQ21rN67UaaW1Zy/Hg/9dXdpDNJisU8RpMWm01P\na2srRpOJUCjCfvZTTS0JUvRzjptu2IFRWyRflJlbjDJwaZCjr73B9k0buWF9F7de343ZINPR2Uh9\ncw1FckhAIzX8Kz9EI5ZxOb3YHS7SuRQ9q7rJp9OU8hk8LgetjTWs39iNQgqn24zFZGLNml62bNlC\nLp3DNz1HJh2nptKF1WFgZW83a9Z30r2qk7bOdgQ1qHUCDc1/lKfyP8d7UUrWCoLwliAIw4IgXBUE\n4bPv3v8/CtpLFXKYnGYaGqpxWBxoSgqCqsys308i5EddKrF+zVpychaLSYfBoOfk6T5qquvw2Cto\nrHJi0JVIpIPYK7wMDQ3Tu2Y9uYKAwWDi8Y98kPh8iKl+H/FoEkENnSu7qKqq5HVeQk+cEUb5OafI\nqqy8ffIUKDKSSktZ0HBq4CIlSc+3vvVDFuaDlAsZrl+9mgMvPYNOL2HzVDMTWEBSyuQzaU6ev8x3\nfvwr9h89TmdPB9l8DLfXSblQIrAYRC7D+MQUOoODQrpMb/NKBs710dbShX9+iVBgkb/72ydZ19XA\nyWNv4K2vp72ri+9/7+tcGTqLpDMzGYly6M23sVlN7LhhIxPTE/SdOUcul0PQqOha1cvlwWHiiWXO\nMUCQICUUtOiJE2eaGWbxk0OmiMwUU4RYJkGGK2NjXLsyzvCVCS6cv4RKJaMTJC71X6G9tQv/jI+p\nmTG0SpHUUoBGqom8WzM5xFHMNguemhrUkoKKIvliGaenjeNn+tm+dw/joRgBRSCtwOzcHHlibKOH\nHlqY5SifvftmfBOXENUlBFHEbDFw//33Eosl8M36WY5HcDmcPPyhB9i+bROtrU2cO36K44dPEQkm\nMZoNnLnQh1aSkGSFaCDA6bfPceZ0H5Oz19BI8N1/+Hu0/FEh7/8c70XPIgNfUBTloiAIZuCCIAiH\ngceAN/+TDv+vgP8B2nsQ6OZd0J4gCP8laE8RQFKVycTjVNsdDF8axmy0kMunMdstjI6NI6ok3LX1\n7Nmzh9c/dZg8MilSDDBA6bNlgktxNl6/gbHJMdqaaujp7kaS4ODrL3PPfXfj8TaSWH6T7LKfWzbd\nztLYDBanh87mVlpfaOPfn/sRn/n7bzMZCPN35s9TJI8KFXkKHFz/Bm3N7ezcvpXXD7zCa4dPsfX6\nXlqaBW66aTeHDp3C6TJht1RSREVJUaip9KDTmihkZaKBIHajCUpgs1hIXy2QIYcDC6nn0uRIZKcp\nZQAAIABJREFUYnhQwuVykcmkyOZy5IspzpwOo926kW0dq/nJj37C3OIcG3vbyCRDLEeimKxeUpki\nY2MzVFa7SacLZI0Zlst5JLXI2889zUcf+zjRUJQ5/Bylj3GCCJhwYkeNgIRIhAhzVj+Nra10r2hn\nenaS+sZalhaTTE9Po5TLnOk7RTyTQxTVDA9ewabXsLLSyY4btvHsyy9jqJTo9axg5Oo4YlHNv/zL\nT9l77x2YzHqmxidJJ3LkklFEg0LTiut45sWDLEVzJGNH0Upa9DVwUTxHqVeh0J/hnrtvpcpppMFl\nxyx0E55Lcfnsy4iiFkGlJhKJkYonyKSXCYeXiEXT/PlffI7JCR+vHHgduVTA4XRicTnx2JxcnRil\nmEvT2tbG4qIPjVokFFgiGQ69Z2f5oyuLoiiLiqJcfHeeBEZ4hwV2J/D0u489Ddz17vxO4DlFUfKK\nokwDE7wDsPiv/kGl10MpKxNZjCHnSxQKJbRqCYdRj8vmRK83EF+OArCL3YhIhAnTQQctLS24PF4u\nXbrM1s2baG+pp1jIcvHMSe7feyNvHXmdcCRIJhalxmnCJZaZ6O9Hm8/h0Gmpdbm4bdcOfvD5P+fs\nc8+QY5kMaaaYAVSs7b0Oq8lK3/GTCCiotQbKagtn+i+DWmLDxvWcPn0aq6uCfEnHkSOnefutk5Tk\nIhpJwWo2IUk6/PMBspkMGtQ00kiQKMOMYMBEOBpFo9GwtOSnVM5RU11POlPGW9NKQYZSPsOD9+3F\nrFPxi59+lx/+4O9x2vUsBcMMjowjqvSsXrOWWGwZb1UFGq2e3t5NuKx24sk0OpyYqKaEmiIF5llA\nBdThZh3dfPmvvoS3upKxqUkMBhOtLa2s6Okim0tTVmQSiRhOu41qjx2xkOTBPTtot6swyUl2bV5L\nU1Md48Nj6CU9DU3NmCwOtDodk5Pj3LBrB0ajgebWRtyVNXz1a99mfjlFVpBxmlUYCgFW1uq4945b\nyCZj3Hf/XXziYw+zfdtaWhttWPUFluZH35EPlEpotDpcLhegopApYrM6uf222/ndcy9y7kI/mUIG\nuSxTVvII5Tx6g4ZQMEhXZydCucR9993DPffcxT9++7tYHK737Cz/W0rJdykvvcBZ/mvQXt9/eu2P\ngvZUqFi5ag3XRmbIFApUVnvIFsCqA4NWg15v4Nip08QyOXRWC3u4mdvZw3FOcYrTXPvlGF63lVtu\n2YXb6UCrEjlz4jh1bhtmSrTVVnH49T/w2MfuxaPR0FLpxKjOU4gtoNfV4nXb6RJXcux4P6VUDjU6\nTGhox8wSEXJLJdKxJHqNQKmc5v+l7r2C47yutN2ncw5odEKjEQmAyASYQDCTIimSilSgJMuy5CRn\ny56xx/Z45ljj+Sc4jOUg2bIlW5Jl2VYWSUmkxJwzSCLn0EjdQOecvv7+C6nq+Fycv1SnfKrsVbUv\nvrVrf/tmv7Vq7b3ed23cuIU//vFPuEsdIJGzc9tNPPLJBzhw8Az9o5Os7uwkm4oSioZRqeVoVBri\nkSSxWIzGpQ0oJzQECOPGSZoUfkJoBC16vZb5xWnKy90EAnGyuRxv7NtPx4p6brv1JoosFqrLK8jn\n81S67dyyq4P972aIBBO8+85hSt0ltDRWIYoi0WiKM+evYdQaiSSS7OMUdsoJEkWDkjw5ppmmHCMt\ntJEWcvj8ERx2F1MTo8xM+wiFw8jlMmLxCDU1NaSjEZpqypiMzyMJz1FRYkGvlpBKxNHbylFINGTS\nefr6+lCqpbz33kHuuOMWZmZmKK90Mzg6RGtLK9GpKfRSKQVJgTV11dTYlrNhy2osS1tYtXEH3oCP\nXdu3Y6lfw/TIAB/b+yBrVs/zi2deBKkcQUjT2NSGWW/Fv+BDo9Bw9Uof41Me7HYHcqWS226/mWwq\nTGDOx+zkMO2NdeRTOaKJBL55P2fPnEVt1fODJ574yOf/I4NFIpHogdeBr4miGJVI/u++Fv9fhPb+\nUmSvyFLE0vpmtNqDFMizsBAlK5UTDaW49647+MOr+8gWlMzO+yjOfiCMbcXCejrxsUhUG6Lcbaay\nphIhA5fOHKGx0o7d7qB/ZJzaynJUUjmnz51Ap9ewrq6JqiITcrkEmZCl69IlMDsJJeIYkSPDTJoc\nBWIUo8HlLmdcmETIC5hMeo4cPsqSJVUo5GrUaif/9r9+wdf/4cs0LVskJ+YRcxHkkiwanRa11kww\nEEGlLSIUHWGhu4dd7ERAoAoX3fQwzxy18gauD4xRXuWmkEuzfFk9LoeD0UkP8wt+KiorMen0SOUK\n5DI1oTk/JouZu/fcgncuzOH3T5LKFhjzBAjo06RTWaL5AkcvD2C1FLGCdiZYxMcczSxFQZ67uQkp\nClKoeOW1dwknEiz4FpAjcPDge7Q1NbJ921YEQSDiDzLgnycyOUqzs5jbbt+JRiqla3SOAU+A7Eyc\nQDgIqSxynR4hJVBZ5WZqaJLpWQ+1TQ0YQxqSsSh1VUtoaymnWJRw7cgBalo2ceDgMbZby9h/6G3O\nX7jG3OQi7xx+F4VCTlN7mnePvY9aB4lEGiQqgsEQoYUg585epqm5nYnJKSoqS3BaLTQ11LB//wEK\n6RxLzXK2NlZx+MYMBVsFK1av48yZMxTbXdTVVH/Yru+j2UcCi0QiUXwIlJdEUXzjQ7dPIpGU/IXQ\n3sKH/lmg7C+Wuz/0/T9MFMXfAL8BqKiqEBPxKAqFglwug+SaBBNa1Gg4+9kL5LfkmJ6ZwVJsIZPL\ncnzncZZUVtHY3MpjFV8ilU0SjwaZnw/x6iuvY9KqWLduA6FIBM9imPFpD3fdehs6q4nB8TF8/5zF\njoxiilkgifoVPYOD/RSTQ6OREbsjhNJg4I5bb+PM0VNE4z7UGglqTRHD/f1Y9QYKiSz2qnKudXUT\njKb4yc+eIRyJ0NbazszUJO6yEgxGNcm0SCKZprd/FKlU9sE9f+MFVFIFc1olySRkInJ6h0ZRyFTE\nEzFamhu4cOEKeq2E5sZaLlw6x8T8Am1LjaSzaVKZDH6/F6lETTQ6z+zcFLV1ZZw5c4lY1MRdd97B\nhbOXqKqqIOAPkUvliLbEyUoFigtWRJecVa0bMDpcTEzPEop5iJzOkEmnKIh57LYixkdmSAk5Dr13\nGCWgKEhYVWGgwm5h6007GHk4gwob/83rqNFjWKeGgIevfP4x/ut3zyFVahmZGOPmLdsIh8KYjUXs\n2XUnf3zujwxHe1DTwbe/8gAN5VpczhIqVnbw66efZ3jay4bb7+XY1UGEnJrFhUV+9vNf8uDH7iGX\nT7H/7UOMT8zQ3NyArbSEz7ev4cThwxQZ1SQyaSYmJwnNz3JTaz2hiREygSmc1lb27NnNC28e5mpX\nnEQyTjKRpLNjFVU1VZw7cewjgeWjqOhL+CAnCYqi+LW/8P/VhPaqa6pFS4kdrVKNKOSQnCpgRA/k\nESlgeMDG8NgECrkCJCJSJFRWuKiuraZqyRJsTgeLi2H+9NKf8M3OYtQZUCilSOVKfN45HnnwLoLe\neVZ1rGZ6fo6ef+zjbnYiouBl9uH6rpsLx46zom4JazZt5N3jZ2nvWMvY6BDJSJJAJIJUoSXkD6NX\nqFFKJBSZ7fSOjTHj85KXSFCqtViMZsLBCOlkktq6ChAzGIxW+vqHiUbiZMUserOJtR0ddN/oZmlD\nA2fPncdoNiMWRJLRFIKQIZtOctPWjahUOQqiDIlcgc6ko7WhllwmS319HfF4lJdfP0B9fT0zMzNE\nIhG0CjNXr3ah0evYu3cv1y6cp39omGQyxZLqWlRGNQ6HE7PZjE5r4OCho0jlaoRCgVgsQToRpL6+\nnvPnT7O+cw1Wm4Pe/j6y8QT5SJJNNXpuu+s2QgU5z37jGPMsUkIJDZRS90/FlBrVjE7McbC7G284\nTefaVcyMT2O3OrjU1YVKoUSvUmExmZidHmdNez03daxEns9w5tRZZKk4jR1r2Xe1B7mjhsH+adLx\nCEgyFIQErtJiNBoVbS1tIFFw8twl8tk0JbZiqsocFJWUE48mmB7uJ+ub5l8/t5dyl52oVMWb53vx\nJnLkcgJajYlwKM4bb+3HYjEyO9r/VyukXAc8BGyVSCTXPxy7+SsK7RUKImqFgkw2xcb169CgRI0U\nAwa0mPFMjqNSKIhGQwDkhQKJRJJwJEhFpYtwOIjRrGbHlk70CpFKtxWtQoJKDlqjnkvX+imrb2Zk\ndIalpRWsopbf8wd+xyvEgMPvHua+W25l85YNnDp9HJVMzvUr10mGs+g1FoScCv9CBEHIIlUpiORy\n9E1McKN/mN237UAlL9BcX8VicAGtQY+jxE4kEkavNRIKhsiksiiUCgxGE+XlFVy9fp2bd2xHQp7O\n1W0opCLZTAKpVEChUCCVyxDJEs9KEfIfUKxPHTvJ6XNXiSVz/PnlN3jn7cM4HFZ8vnnq6+vJpvN4\nvTN0dHSSSWf508t/YsP6tTQ31tDSXofRIqO83I1er+fAW+/R2zNMIBAiFk4QDURIRwOEgiGGBgZ5\n8P4HiEXCJPxhsvE0y5evQmc2UbDXULCWc+r6MIN4AVgkwDHOINEbOXbhHAaLGaPJQJXbybmLFyhI\n4OzZc9RU1RJLCsQyAnmZjEgqw3SowOhimIPHj5Lyj/PNf/4SN9+1nY8/8jDDw6NIJVkUShGFWolM\nrccfSLBhwxZkckgno6xoaUAuhVtv3UksneLimZPMeecZ8vhQWks40z9MQKYjpSrmxsAU586fZtE/\nz/nzZ7h46QIlJS6UCvVHgMAH9jdRol+9pFrs6FxBb3c3S6qXIuwXyRFFjpRZ/Kg6dRiNWjLRJLVV\nVYQTXpbUVvHJz3ya4ZEJpDIlgUAAs8HAifffwWkx0z88gJDTMB1LotIrSE7PUGouotJp46aX1jPA\nLNeZJUiewt4M0mya5rp6/HOLZEUBlU6Hy+ImV5Bz7vJ5REUBs7mIvKhldGCURe88re0NVC8pRa/X\nk80K7H/3OHnkaJVylIUcH3vgPn700ydxlFYQScSQKKWYi4tYubKDd998g9WtdegVehaCUcZ9CxTy\nWYSsgFIuQynPYy9xY9RqUGuU5CR59Doz0WCMYqMRq82IRitlamIaESWlS5Yw1NdLc9MKVCoVLzz/\nW77zrceY904RiSdRyg3ojTpmZiMM9E8w7hlDKKRwu934FhYJ+BdxWXXsfeBhnn76acwaKcXFOla1\nt3P0xBWkegeLvjkEcuy+aTvHXzyBgSIMWJlhkpp1TmzKLCZTMSvWb+D1o0eQaZSMDc2zpLKGSNiL\nyaSnt28QlVzNI598iJGBfi6dOsb2dSvZtaGVppWd9E7M8+8/egpvXESv1LF16xZ+/9IfMZqNIBfQ\na1RE/YtsWbcGuUzB5PQ0JaUurvf0oFWbicfjGAx65AoFYjLK1g3reWP/PsKJGO1tbVRVLmHlmrX8\n8jfP4lv0IkfN7HjPX0/r+P9vK3WXiLu3r0ehVOKZW2Bqbh6lVIbDaieZTCCTSZmcnmT9qjXU15Zh\nKFKyYctm5uf8PPPbFygqtnHTllsQhAwSIc7c9CiR8CLlzmou9I4STESptxVRaTEhzyUpclqQGs2M\nzkXoGvFw9doNdmzdyNzMHJs6Ozlz6hhLG5u4cqUfhdpAgQJKtZpCQUZ37yDJRITVK1fhKCnn6rVz\n3H/fvQwNjaDU6jh9+gypSIxik45//NqXeOPAQbzhNKOeWe578H4C4SBKhQyNVMrpI0dY09bBwMgQ\nI8ensVJMMXa66UXhFsnlEqxdtRIQUOoUmIx6hgYnmJ6Zo2qihlpKiBJGhZ65nQHSqTTJRJKZmUnu\nve9O6ipc6M1GfKEEhw4dZ13HahzOSs5fuMrpP5xDBTTQwClO4qSEjWzmEqeBAPf8w3qaVyxBr7dR\n3biGL3z1/2J8YhaEDLl0hmw2jwQ5OTGPBBGzTsVSt5P1Gzbz46ee5P7Ip4kTwoOXCSYJGL24XA5y\nOZFYKo3ZYuCTH7+fwd4Bhgf6qb5aRowMw0zTQBujq2dY0b6KUyeOYXOYMGnV9AxNYdYbiMeiuG0W\nlBo18VicxWCAJVM1FIAkCTJkSdenyKXzyGQyVGo1q9esorenh3vu28vly5cZHhrC519ErzYxNXzt\n76e191NP/eLxmjI7Ab8fgQImi4V8VkQsQD6XpbTEQVNTA/lMjOoqF8uWNbPoD/HnP76OTKIlEAyQ\nKUgoKXGSF3IsqVlCNBpELZUxNePB6XRQU+bGadYjJiIotArSQB4VswsRdu3cyWBfLy2tyzCYjSxv\nX8bzz79AVpSh1WsJR5OMjkyRyQnMeCbZvWsX8ws+Rkc9zM0tcO1aN+OTo+y6ZRsLnglKnTZi0Sgz\nnmHu2XM7E54pHnz4U4SiUXQ6JXJpnsa6SrJpgROnzqM3FSGZEGlgGU7KkaEk7kiRzacoK3WTz+aY\nmJpEWhBZsWolNUvruXK+mzBRTBRhwIy/IsjY6ARr161EoS6wZcsGSmwOAuEkvf2jVNXWodVqmZub\n5fKly1i9VkRy+JhnOe2oUDDNLAuM8zw/Zd2vV2F3lhHPKHj4U1+nuXUVcrGAKOZQqpW43KXkxRyN\n9dUY9RpaWpfhmZ1nMZZgaNrDUGaYaUYwYcRJCQ27G5iZ9VBZUY13YZGCVGT1ymUYLMVcuHKNxYBA\nH9PkkKJDw7g4xsTUODJZmh/8xz+zdvVy3n33CJlsAVEo0FDfTG9/HyaTiZISF/0TfUwygRw5blwk\nS5O0r+hgeHSMbDpD0OfF7SrhmWd/zeziAju2biObzxAMBkiEA38/Vcc///nPHq+pqSIai1MQJCzM\nL6IUBYRcllQ+Ryqbx+ed5mN797C0rhb/YpT33ztOOi0lHMzg9XqZmBlFqVZhKbKQSOZwlVeQjMTZ\ndvMOGtuaEUQFKokUo06F1GBky2338dXvfA+fP8b8tIfdO7bR1taKKJWw6A+SSmeJZdOIEgFENUsb\nWzl25H2+/tUv8cYbb5HMFoglIkilClZ3tjM6OUS520FHewtrV6/k5OkzbLlpMyVWI5WVZYyNT2I0\nmQkGZljRvITKUitLamvwB+IMjYzRutiCBTsyFCwyT7o6RjKbY3R0CIfTgUQuw7sQRK2WYS8uxnHG\nRjeDCAhkyTMunaDEZeWOO3fRuXY1SoWWG92jzM1FKC2toCBk6R0YYHx8GLfThXJQzTwzbGYTY4yR\nJU2IcTawkvc5Tndhjv/84VMcOnGJW/fczb63XiWfylBZVU46nyGXF3CVOZGLedpbmzh68iSbtt/M\nYjxCMpPE7DfQSBMVVJJDwLXTjS8SYG7eRz6b487du7EVWchkEuy6eRvnDpxChhw1GvLkMdbr+cF/\n/CuPfOIunnzyx6xauYqOzk1cuHCefD7P0OgwcoWEeCrG5k0bKblgo456AEYYZv2t6zn83rvoFFLU\nEgExE+PRB+8FWYEnf/Urvv/9/0Sv15LPC0T8C38/YPnZz3/2eHmZk0QkhUapQ6uQYzIaCSYi1DU2\nEI8GqasqZe26Tnp7hzh/4TLJhEAsniCRjqHSa4nG4hh1GjRqJWqjiXSmQElZOcFggBVtLYQW55iZ\nm8VsL6W0oobn/vxHpAoVcq2GdCpFOBpEqZTimZyCAigUSmQSKYv+AINDo3RdvcJ//Ps/4fVP0dDQ\nSs/1IdQaLQhJcvkcDmcJRqOO+qoKCnkwmMxc7brI0ZMn6FyzAoVUQC7XsnHDBmZnxlHLwahTEwoH\n8ExPMzw7h5sSirBRQGTZo81o9SLtbavo6uqn2OJk0beAWq7CHwwwOTJJkBBe/Mwxh9au5NFP3YtG\nLkNvsPHmu6c4fuQKw0PjXLvWRSIRYcP6VWgNKtwV5bx34jAPcifTjDDBDXSkWY6WO7mfY/Rybv4G\niXSez33uC8TDEcYG+2lqaaK/rw9rsRX/4gJCNoVcpmJxIYpSouLwiXMkQgHuvfN2Ks5VMs8iBXJ4\nmKI71IvbYWdDZwf11dU0VNfyL//2H8zPLeIurUB1Ss0cMwhIKSDliWe+y3O//imdq1fy6Gc+w/jo\nJCV2BzVV5Vy6eJlsOk9rWxPOEic9PTeY9XqRIGWeeXZwM0KrgNfvR5KMcsea5dx352088cRP+PSD\nH+d/fvADIkIOl7OUYouJydGRvx8OfonLIVqK1bQ3t5NK5Ugm49id5fgW50GS5qGP3UOJpQj/YpAD\nh44RSmSYGBnDWmxFKpdTVFREMplEp1Fg0GupbWxBaTIS9AdY0bQUaT5LXiJQU1FFPpPlTy+/TMuK\nNiLJDJ65BeRyOeFgACGbw2qx0Tc4RFVlJeFwkEQiQV//BFu3bQOSVFSUkUoW+NOLryLN52lrWcrn\nvvh5Hv3q17nnwYe4fvkcCwte7rv/48x4ZpGRJez3snn9Ok6ePYNSb8Rqd+IssdLQWEcuL3D63FV+\n97s/otUU07RiNXqjGq1WzujwEHKJjOPvHaShsQkEKfFIiNKSIpwldmrrmhkbGyORjHH3PbdjLS7h\n0vlLhBIZiopdPP/b5wA5UmmeXD7Bww/eh81ejEyu4Ldf/QMFEqxjOZUYufPsBk6fu0zPsJd9h86S\nF2Dbug66rl8nlEjy8Kc/DdkCCz4fQ0ND2Gw2egZ6UKpUpBJpLKYi6pfWcPH0SVauWs7w1DTT4Tjb\nN23h9IkT2EqcaFQK5jwzCHmoLC3DF15kdGAAV2UZa6fW4sKBBy+nuYwWKb/gXynDiZ8Q6tNFDEzO\n88wzzxDwLaCQyCkutpLOZdm0eRN/+tOf2LJ1CyPDw4QWA1RXVzE3NcH92zfQ4DRQkErIS9T8+rnf\ns+XOuxmLhLEXl3Bg/wFGez5agv83EVmefvpXj2/fug6lUkk8mUSpVjA8NslnP/0QnatbqCh1MT46\nwb797xFPZUmmcugNRkLREHK5FJkcFFIZOqUcnVrN5OQEDW1t6PR6ltbWkkylaW5vp7u3jwNvv0Nj\nSysFiYyG+nrefms/+Wwery+A0+6mq7uX6qW19A4MYDYXMdDTTf3SBoqKLVisJhx2G93XrlHIpXCq\npRQrBQw6NTKFmvePn6GlfQUrVq2mf3AYjVbP+4ffQavVMzs7x83bNlDitHHy5BkaGluJJ+NIZTAz\n52Hr5s1cOt/Fon+RyqpKMskkgghCPsO/ff+7lLiKuXb1BmJBZMXyFmxFaqLRCCaDluaWRsbGJ1kM\nJokmBWZmfRw+dISyMjuhYIhsPo27tARnsZVXX9tHS2srysNSrnCdWqrxMUvQPk/Htj18/7+eYNWq\ndTx4920cfe1lHn34QQYGBukf9VDqKuXdgwexOxwolEoUai3ZnIBKqUKn0zEzMYTLrKfW7UImgaVN\njZw6fQ6pTI3dUsT45BTVVbVEogm8wQBSmYTW5W0EQ0GsYSunOE6MOAIFtGiJEsaBi042svPUPZy+\ncJH25ctxOey0NjcQDIXJCXnOnj2L3eEgHPXSsbKNdCLKiqYG/uFzn+KX//U9WmrLUaglyBQaymvr\nmAkGWdLYSDQapWZJNZfOnf/7IX+JYgG1VEpkIYAKGRJEXDYNRo2IXq3i3JVefvzz54inRaRyFSqV\ngkg0TGlZGe7yUoRCFqmkgFKtRK6QYioyMTEyQCS0yLR3BlEl5/W3Xmf//rdwuRxMTU1QXGzlrdfe\nIBWPMDY6QYmrnP6BARpaGnjokU9QXV+LVKHgyV88iUGnZdY7TzgaRSKRUF7u5CtfeJi7b93K5z95\nD+n4Iu3LlnLzljWcP3OOX/7qWc6dOsmNa6f57vf+kUu91/AlUpy51M07bx/k7jtv5dVXX8FssRKO\nxsilBPa9vp8N6zqwF1u4cPY8uUwWhRy+/OXPcuXKRTxT03zyEw+TFwSmpyZprK1ic+dKVq9cRnNj\nC0q5mWQ2zZGTp7jR24OEPAqlFLPZgEGnQ61R090/iESu4K2336GKamQo0eMAbNz24FfZdvu9KDRF\n1FQv4aknfsL//Pfj5GNBvv7ZT5FL5PAFguQKMDbpYXBsnJHRSWKxFGKhgNFkZPNtt2IwGWlaUo5G\nkqRUq0RLgc7V7UQifqqqK+nqvgxyAY1Bg1anY3xqghWrViECUfIfSo6kWcNKZghxkHNs524kcjVW\nnQFZJseNrusIIrgrXViK9XSuW4VWp8CqV7N2RRvSdAJpLs2B/a/z6Bc+h9FmJ56TUtBo2b5nD9//\n0Q9JxVO8+dp+3n77/Y98Tv8mIsvPfvrTxyuq3GiUCkxaGdZiFTdv24TRZOHsxRtcutyDy+0in0mT\nS6VQqZT4vH6USiXpZAqdTI6r3IVEyJPN5ugdHSCZTvPlL3+RickJUukMFpuLfCZHMBQiGEszNDbO\nwoIXs7mIxqYGHvvaYxSkeR64fy8gYd8bb/Lw/ffz5isvs/+tdzEWFbOkvo7ZeT/ukiX89/f/h1t2\nbaF/eICODetIZDPUtzRhMdm5eOE86zasor62ArNWwwN772b7ji28eeAtqus7KDJb2LxxFS/84SVs\n1gpOnz2PzabHYDYRi4SQFPIM9w2x9549/M//+jcq3GXkCiJDQwNUuUtxOotxOKxINDpCMYHhMQ+i\npMCxE+fwL8yikcqwFzuYGJ8mFfOj1Uspq3Jjs1mYmJhDLIj4fDM8zF3MMEMvo7x46m1a2peTTqUZ\nGOzDWVbGS79/mR0370BEQCYrcOTEe0g1eoxmB4VUFplcRSafw1lqIx4JoVWpeWDvrVy+fJqNazdR\n1tzAhatdjI5NsHvHDq739mMwaDl38QSf+MS9TE8MoxIVeMZmMS2aqKIKHVoKFCjDzRiT3OAGFZSy\ndFcVnevXc727m9a2Np79zTMYinTYbDaudXXhdpehkyk5dOh9duzaTf/ICD1Dw+y+ZTeZPITTMrqn\nQnQPDqNWKfjD719jaW0TKrWaydGhv5+cpbq6UnSWWjBp1SxvruHW23aQSOY5duwM455Zkq+JZMmi\nQIYSOYvrgiSTabR6HQq5lPqaKhRKCWJBykIoSvrPsJw2bFg/4I38uZj5+XnsVguSfJ6ZKwtIAAAg\nAElEQVTfPPMcle4SokE/m7ffhMZoBKWaZa2NKBVa3j1wkCXVtbz64ouMdvdQU9fI1f4hSmuquffB\nj/Hcs8+wc9NG3vzzcxw79g4XLl1h/8Gj9PeNMrcQxl1Wyh2378Q/P4teI6VlWSOOUhf+cIJvf+c/\nWb1iOcVGJeUVZSz4Izz34kvsfeghsskYBUFCNivQ09OPtcjA+nWdPPv8C+x98BGOvXuAW2/bSGPd\nUvJpObOLfqLRLDlBwvDwECfPHmPlipWUOiu4cOYqGUmC+tpKSt12kjkBtVTJoUMnUKml6HRK9t55\nK8U2GyazjW98+3FUWg0GnR4hnSGXTrK+qQ4TCZJBD+2XVxHAwsscIYwchVuGTCIhJ+ZJpWPs2LyF\nK1eusmldOw9/7C6SiRRf+Oo3UGnMrN+yjeu/60KKBj06qqhBiZKvcx/X6WM/B/HfkmBqagq1Wk1J\niQODUcfhI8fJJpJ899vf5bnnn0el0+J2lXKl6wpVFVWIsjxGoxGVXE02nSYWi9He3s7FixcxGHRI\nKOCfmeDRTzxCc/saHvrcl0kLWarKXJTaK7jRN4DWaGSs7/LfT87yox/98PGKilKqq9186pGPE0+k\nOHbiMv5AFLlMTbg7jBI1SdIEiGBsMKLRqBERUWqU2O1OJIUC8/4Q0XSO3FCO+7ibEAGMWLhUdgWN\nRo1QgKeffhar1YpJo2RFewuIAu8dPoLBYsBksvCtf/o2q1eu5tCBA4TmpjArVczNzlNTXUPPtW48\n8wt0dnZgsRhRGQz85KnfIMo0DA6OoVRp2XnLTipryvD7F8mlk0glBTyzsxhNFtLpBCqVDqfThW9+\nnvWr2ogGF2hsbmZk3EOJ00k8HketVmOxmFizeiXnLl7l7nsf4J19+9Eq4K69t5HLi3hmwwTCCdTa\nIt4+9D6eaQ/1S8uxWm1cuHiJbF6CvlhNKOBlZnqGmpoaTp+6SHNTI9lMmnQmidczT21VFYlojOql\ndfR29yKXyNmwYQODQyMEvD7cRSq+8ZVP0vB6A2W0cYNh9NiI2BMYTAZyUpHSsnLGhsdw2Eu4MTRI\nIpPlh0/8jFJXGZ1rO+nrHyA9A/PMESGGhxm8+NGR4xIXGGSIrB1K3aWkEynK3KVcv96F02Vn06ZN\nvPHa66xe3cHuW27h8uXLVFVVoTfoKXeXMTfjQ61UIeQKTPn8BMIRVnd2shAIUFxs4fNf+go/+MVT\nvHXwGAqjFrVGTWvLMk4cP41coaSyohrPxEeLLH8TYPnxj3/4+J7dm7jl5i0komHOXeihu2eMTDZH\nPBJHOSpHiowwEXIUkLslmI1GDCY92YLIyNAIXt8s874QgUCAtxaeR0mGKcYpp5zhjeMMDw3jLqti\n+YoOkrEoa9Ysx2zSIZfLMOp1xONZTp+/TCQchkKOXCrOzWs7aGtYyo1rXeQyCb71D1/hYncvQjZL\nKhLG6rBhNltZWlVH18WLOMosLCzMo1SryRVySGR5pFJQak109/RRUeZEozcyOztPT3c/VouZptoy\ntGoluZyccxeuIopSFEoFhYLIiy+9Qk19E56RMT7z0F6++KXPcu3aEJMzQXKiQDqV4+13D5Er5FGo\nZNRWVFMQBeQKOQajjvYVLSxvbaLEYiWdzOFwVHK16xI2uxXvvJfW+hby8QT19XV4vHPYii1MT3uY\nmBynqbkJ3/wiIa+H2++6E+FlN5/h25TTzBX6ULpU1Lc08sWvPcYde/Zw8L3DhGOLBKJhpianeWDP\n3djcdqQIqNRKYn1psqQBARsm/MxwhS4aqCNODNwKXCUuiorMDI8MYTYa2bZjK2azgYU5H8Fw5IOL\nBYUcfyCA0+ng6NETVJWXM9A7SMPSJrr7e1ErFExMjGAy61EqYXp2nvWbtnO9t4+a6jLa21s5fPgo\nCrWCRz/3KAfe2UcmEf37Acuvfvnk4w/s3YFMLmXS4+P8pasoFFJSidgH1cNDkCROihxKtMhrFQRi\nIea9i0jzAplMColCyb/8yzd55OF7EH8jAiLlVPESL9Ov7mVxMUSmkKas3EVpaTkebxCLyYJ/dp6C\nKHL2/HkMVj0ylZJIIkU2DzKFHI1URClEuW/PdoLJHJmCCblaz/zCLOs3biGXE3nv6EEe/fJnSaST\nmKzFZAsiyXSGvCghnRcJhCPI5HImPeNs27KR/pFBltQtZWJ8BndVHVK5HCkZIrEC3cOD2EtKMesN\nmAxWZj2DGPVSVnes5PrAGIvzcWYm/UQjGbquXycej6OUSEnF4tQ2VHDv3bfx5qtvsLFzPZNjE1y7\ndoOapqWcPHcciURGJJZlMeSluaUCs62IUCTGiy+9ysqVazl67hR6i5aOztWIokgmmSdXUPPbPx/g\nROYGHWxFhYoFZvnpyz+i2GJGToH33z/Mgw99gnffeZ8Kdzkb160jHA4wNjXJnNfPkpoG3JdKGWYK\nN6UY0JElThoFM/iQocGnDtA/PIxvwUckHMVcVML7x04gZPOsX7OSYDDIlGcEuVJLf+8YwdAi2mIT\n09PTtDS1cOHSBdpXNeEus2LQKylks8TDMerrmhkdniKdjOMZm2BsYppcFv7p64+RTi6g1ckZ6h/+\n+wHL07/+1eMPf+Jj9PYMc/HSNYRXJOT7BXSjOhiSIL1XRsaVQVWjJVQUw3zGgMwjxezVEZmOoKk3\nUWTSs/e+ezEaNYhfKpD7NPxS8Sy+mgj6/UbGZ8aIXQsjPSDHdouNYDTBqZOnGBud4PK1GzjLy9Do\nNGTyOazFdoScQDQeRS4r8I+PfQmJTEpE1HPodBehSJLGpmZUGiUvvvQSN23bgkIlZ967QC4nkErH\nkUmlCIU8SqUSIZcHiUg+kyYRj5FO55jzLVJSXs6h9w8SCIRpbGgil80il0iRi1JsxU6Gx4YJBBbY\nvHkLwXCMi9cHuXiui9HJUcZnx5HLlOzatZMLF89TU72EpQ3l1NTW4nC6uHili3nPIrm8wPmLF7l1\n9+1c6bqOmBMp0hvYuukm/vjiGyxf1kZ9YxMnTp7EbNNQW1XJxPgIIX+EYCiBRCJFrtKgX1aEa08J\npzIneePcm/T29TMdDFFaWkaxxUQ8GuSuO3azf99bFPICwwPDqDRali6tZ2hoiEn7FAtpH17lHOny\nNFVrqsloM6zZtZruQD/JSQFjzIgtaCUXzbEwFUAd0ZIYidJ5Zg3Oh1wcOX6KYosD/2IIIS9w06ZN\nrGlfyanDR5GKkM2JtLUuo5AXKCqykEymkEmVzHkXyWTSFEQZCpkaiUTCuVNncNqLuPnmHex768Df\nD1h+8eQvHjdbihkbmyKbFwh3h7FhI0GCFGn0bQYEoUAkGieWTJNdSGLFyihD2LAwJk5iK3YwNNzH\nmo4OwsEwTzzxFMlMgZn5BfITAjHi2LEyyyxChUhTfT19fYNkcwVsTic5IY9GpyGWSDAyPIQg5ClI\nCuSEPOZiG0XOMl4/dIxURiCVy+L1ekklM7S2tPPKq39kTccq/It+guEgBrMBiUTEZCoilUhSKBTQ\narRk8zkcxVay2TyZfIFULkNdbT1Hjx5nYHCCuppKylylTIyN09PbjUat5K579mB3lhCOJOkfmkAs\niNhtVmKZKNKClLPnTtDa2ojPN0lVZSljYx5efOlV8oKIKCqQyeXIJBIcdgdDQyMYZQUUuSxDvX1Y\nrSWMTE4QDkfQGLSkkgnWdnZQ4a5k3uMlnswQDIZoX72KySkPI0MDZNI5XnvtDRKxDJe6e2ltbiaf\nSkEmzfPP/5ZVK1ZQXlqO1eZizjvH7Mw8yWQKEZHVy9uRSEWy+Txag4H1nWt545VXqa2uIjOd4FN8\nkmMcIUYUJy4CBJEhw4ufnCvP6o4ORkaGiMVi5LI5bEXFeCcniS0GKXXZ8C4skP7wnU5vLkKr0oFU\nyfXr3RiMeqLhBFlRQCjkUMoUhBYWGBgawjP10XpK/k2A5Zvf+tbj/vAHYhQF8iT6o+QRySGSJE2k\nOIZELOAPhDEWFaGYkiFHgxwpdqyYOszY7aUkEkkGB4bo7eljbGyKUDREWsiSnIqhQIOASI40zlYr\nDouRluZm6pc2Yi02091zDXtJCTmhgM1uRSWT4Z33ItEa2ffuCUbGvVjtxegMMl54/mkuXb7IxMQs\nAwMD3H7nLdzouUpRkQGlWoVMpqQggCgKKBVytJoPChhtNgfJWAynw47Xu0AmnsQ772fDpm1MTM2S\nzcaprqqkuq6aa33X2LljJzq9jmgsg8XqIrg4jUomobK8nKGBfqwOMzkhwbe//RgVlU6UMi2TU37m\nfEFkchVyhYxCIYfdUoTRoCcTjVJWJOELD+1hx5YN3PfIwxw5cQxRLiWfzVNsKmVh3kdtdTW+uXlm\nJseRK2UYDDomJidQypQgkZFNC0x75omG/WikUkb7Bzl34jT1dXX4fQs0NjVx+tQJsjmYnPSg1Wto\naWlmIeTHu7iAy+lkcc7H5MQUJRYDBqWEr04/yH/xY3aziwe4h0oquEQXNdQxjZcgYeyOIqRSkaol\nZSiUcpz2Es6ePkNbcwNe3yzpXByvz0NLexsiCtyl5QwNjZFMpWlqbiQYCJEtpGhta6KhoZ6Z2TnC\n0QTh4EdTpPybAMsPfviDx12VbtL5FE67EfM1PUkSqFCQJE3CnsQXimM0GilkMkTmotRSjgUTNSxl\nyDFMQSjQ03uNUrcTv3eBUDSB1Wonl0mjnpQBBaTIUKEkqQ/gnZql1F0JCjk6nQaT0cClrisE/H4y\nqTQlZaUUWRxcO3ODlpY2JuemcTpL+O4/fh1JPsuOHdt5+c19GKylDPT1095Ui8lkRsjmiQZjyPjg\nxTebzhIIBHA6XaSSGWQKsFjMxCMxCnIZOSFHIhmno2MV589cJRgJotaoWLl8Ff5QHImoQaFQE40G\n0MgFmhqWEwtF0Knh4YfuYnlrE7/79a/4/Gc+hWdykrfeOQJSLXq9gUB4Hl2xCpvdjFlnpKWxErdK\nyfVLF8jJpPz7j36CVuegzL0Eh72I2TkPYkHKmbMX2XPPbSTSKZYvX05FxQf1bqFICCRycvk8yPPE\n4/PkMnmsdjsiOQKLIfqGJpDK1UzMTZCMJfn4Q/fT3dVFeNGPUadizbq1jIyPocgKlLjLCAQWmJue\n4p7kTu7mLp7mOQaY5X0OIUNGiDACOZKqGKGIj207NtN9oweruYT33zuMWm0gHIuhVKSpLtXyr9/7\nJsdPHyNfkGMyuzh55AhljmKm5qdpX95EfW0Nk2MTBPwBMoksSp2JgPejRZaPQitWA6cAFR9w9l8T\nRfF7EonEArwMVAKTwF5RFEMfrvkO8GlAAL4qiuJ7/6c9iixmcf36dhxOB+l0mmg0gUKqJpFIYDab\n6evrw1hUhFqpwmYtJhyLYSjSUxAFwoEQpQ434VgYGXnKSl1kMll6RqcQ8gWUMhlKqQSjXodKrSQa\nDaGTqchkBZQ6Ext33oxELkEoZHlr374PbpIMenJ5gbxYoO/qIGvXbqTIaqF/YIjvfuPL1FaUg6SA\nTGPiR0/+lrf372fV8iZ6e3pYuXIZ0VgIjVqFRqshlUxhNBkJh6LoNBrkigLlT7kZYJQQWdTo0aCl\ni+sIJLFj5h7uJE6SfZxkJ7vIEuOlsuepKC1h6/Zb6R8cYOer29lMJ9/kGyyhGvU/a3lp33ES8Qwu\nRzGFS0HypLBRQjUN+G4PYcLP1pYGrEUG/OkckzEpl7oGyOTzeKc9rOlcRV9vH/l8nuqeCqxYySEw\nyCgBgqRIESWLDBm6GjVL6t0UGYq4fuEyJoseoaBGKEgpMpupq6+ld6AX39wsD+29j/DCAiNjg7gq\nK/B4ZtHJVMwsBvEvzqDTKLjrzt3Ut7XzyyefY2E+gEwiojfrkMiVGIwWxqdGsVks3HrrzSDmGeof\nwDvjY3lLG3PDQyxx60n65rBWV9K84WZCeQ2Pff1r3LnrFtwl5Rw48h537rmNsZFhPJ4ZqqqqOXjw\nGDa7jZHui381WnEG2CqK4jKgDdgpkUjW8IGo3lFRFGv5gGf/7Q+B8pciezuBX0okEtn/aQOlXE5l\niRO1TMH87CKhUILZOR+hUJjBvgGWNbWQSkRIxiPkMhmUSjU9Pf1EI0kyWYGFgI9sNkWJw4ZcAqlE\nmnyugNFQhEFrQKvUoFIo0SolNNVVU+ouxVJsI1sQ6e7tJxSJIggFbtl9Cw6bg8nxKQxaPQqZHFe5\nE5e7hHf2HyIcTPDjJ37N+UtXUEhljA9eRy3GcVhNXO/qRSbR0t83TCKRRCqX4Vv0YTKbSMXiFBn1\nqOUKVDI5MpSoMDDONCnynOUyMyxQQTXb2UWCDEmyNNLMa7zGft7iU488yIYNGwiGAuQQeJpn+TLf\nZBmrkKLF5ihFY3BSUlqOmAmxlkpe4CdUYuI9DlBA5NzFq6DVI+pMhDMiR46ewrewgGdyAv/iIsOj\nw6xdv4aWZY30M0yWFG5c+Jjnbu5mkUWWUoMGJQUhz+TkGDajmvoKB5uXt7N761rsKlBkEwQX/MRi\nCcorquju6eP4ydNkRAGXq5TSEhdDI6OYDCY6t2ygvKEWV1UdX37sm6jUSqxmFasbqynVwI7O5ViM\nGpoaGkGUMjc9h7XIQltrK0uXVrNkiQODNo8kE8ftcCLNSzl//grf+fZ32L1rO5u3bOD1/W+QSeV5\n4bkXEASBsjI3Xde60BjUVNe4PwIEPiJYxA8s/uGn4sMh8lcU2ZNIpWj1RqLROMUmKw6rFY1WiVwu\no75hCQpJjtqqCpob64lEIkx5plBp9ShVKoqKLXhmpilI8kgQcBZZPmDHKaTIJXlm56fIS/JEknHU\nai3xeJw5f5hBjwez08nu3bfy5itvUEjm0ChVrGxfTn1NHQvz88hlcrRGDUePHkGn0JKJxpjyzPPL\nZ18iWZDgdJXQuaqZ3/zshxiUCuLxGJl0nsmJGXJZAYulmHg0ilImQyqI6NVaRAGmmKWBJgqI9NGH\nBCnFWJjBjxQNXkJI0WBEiRyQo+Znv3qWo6dPk8on0aiUmDGRRuAt3iVKiD+//AKxwATSfAiTTuQu\nttDPVT7GbXyJj9F34xw17Z388Hd/4NClft48cgl/KEYBAZlMirvExdyUhwXvNBIxzwramcZDjAg3\ns52X+D1f4PM4sBEnTlVlJS0NjXQ0NbBiSTXRGQ8T506yqaGaSrOW/utXCc2F8Xn8jE3MEctLuNY/\nimdukTMXrpAqSBgZH+VS11X8wRA/+sHPMSgNNNdVc8e2ddQ59NzduYJqvYaJoV4SySQhf5gL56/w\n/sGjLPri1C1t4eXX38Jkt5IoFChtX86K7Ts5dPwEW29az527b+PEqdNYHTayuRhNzU1YrVauXbtG\nOBhm28YOhELmI4PlI5W7fBgZrgI1wFOiKH5LIpGERVE0fzgvAUKiKJolEsmTwAVRFP/w4dxvgYOi\nKL72//Z/rVYjbtjYiVQqRa2SkctmEEUp4WAIa7GZitISNEjweoOEkhkEJeTlCjzT0wi5NO0tjdgt\nJqQomPbMU2wtIpFMk8wk8fv9WK0WjCYDkoJIIZujkM8jFMAfTRCMJ7Bai5CRZ8uWm1Dq9aSyAle7\nrpNLZ0gkoyx4Y4RCWZRqLRKJCqkihVad4Wtf/BKbb9pANp5Er1Tz8J33MhuIUVy3FL/Pz5r1K8gl\n46g0ctKpJEqpAkGhxfOMhwlGUSDDR5B62kijJE2MOspZwzJEUqSIM4YXH0EMezT/m7r3ipLjvM52\nn+qcc5icM2YwmMEAGCSCAAiAEQxgEIMSLVqSFWxZkmVZtkRZOdkKpCVLIimKJiVmkARBEARBZCIN\nJmFyDj3T093TOXd1139BXnidi2P6HP9rmXVT9VXVWnWz9/r23rX382I26TGZjKQSaWSPKxjDQ4Y4\nAlk2fLWD/suXsWm0fPKjd7B83yxXGKCNMupo5+2/6SelMnH53EWsBhsTEzNs7e7gpptu4uyJY+zo\nbKH34lVKGxt5t3+U8WcWsWOkkRYW8ZBD5DRn0aKgjVYyt+bQSynaauqRQkHaaksZHhxg87U34s/I\neP7IG0yvxMmlc+TzEq1dbST8ATyeeSRRIpsRqGupo76+lldee5l8LkNnx1r0RgtCOs7NG1socZpZ\nTRf45eMv0NzRjSAI5CUYHhsnFkmxeXMT9Q01nD11kn/62pfQ6Qw89Fd/jdbq4qYbbuDc2Uv0XRmg\ntKKctra1nD3/LtlMEovFgNGspbOrmzMnT3Hu6LEPFIZ9IG7Y+3SWdYIgWICXBUFo/X88//8F2VNr\n1Oi1OiLRELmMhFqtJpZIk5dkCJKK0bEpSsqLCYo5UvkcBqWBUNCP3aRDKdOTjISQ2a0sL3kxGExE\nI3GQy0jE4pj0elwOByvLXqxWC0qlEoPZjEahwKhPYIynUavVTE6PMdDXS2f3FuQyGVu3dHP+3Dku\nXxmhobadaMxPJp9EoYgiL2jJ5Kz87vGX6FjbSW51llBkhZu21GEubuDh3z5Jy5oO+i5foq6+nrxU\nAEmG3qwjnZWw3api8VKMAwdux1lSRiRd4KVDR1EIClbUPla7/ThsBi4eu8Tk7AydXRvo7xvEbi+i\npLiY6dlJ1n58LcvnJnAXuaiuriX+kzhf42uc58/0vvE23c9ciyGsxmw0sW7LNr649ydYS+q57rr9\nPPunFzHbS5ChoNlpoHj7eobGx9m2bzeldc2c6B9j2DqKUS/DutvG1Ngse3bfwNihIQJBH52fXks0\nnkQrV3L41Vf55F13MrEyR1VLC1qHi+984e9p8K2nmmJU5Gikkf+YfJ5PcS9nEEmQwlcdIRxa5bVD\nVyl2FxGOhCgvq+HV197AbXfwu5lFvvXNL0Esidxoo6d/gJamNfT09JBIxJGrNIwOj1DfUMuWrdfw\n8Hd/iFat4+b9d1DT0M6vfvEIvsVZ1ndtYG5libOXzvLooz/joU/9BfV169Bq9bzy/EGUwgdvvP9v\ntehLkhQG3uG9XGTlfbge/18he5IkdUmS1GXU63GaDNRUlKNVa4hEY2QyIggKjBYTggCegJ9QIoZC\nrSWTyWE1WdAoVDgsVmrKK1mYX0SnNeL3BchmRGLhCE0NDYRDYWanZ7AYDJh0OhSCgmQqhy8QxOdb\nIR6JIIgZGisqEPJ5RgYHkLI5UskE26/ZynW7r8PttuN0G1AQ59GffYt/+MoX0ajVROMin//8l4mt\nhggFlli3ph4pH+fhb32ZhdlRujrWMb0wBzIN0UiKFX+YUChMf18fn37wk6xtaUTM5t7XOWyipryS\n2ZkJVEo1v/jXf8Nd5GZNUy1GjYyKUhcrHg9iTmR8YppEKkNlVQX19Y2s7+hmikW+y/copoibea/k\nfKV/iH/51eNc7JvG4a6nq30T7xw/h5AvkPYvMzk8xOTVXpLxVSqrq+nYvIGzF3u43DeIzeGguaWV\n1WAE34qPxx97jPXru7jzwAFSiTTz04s898KrFJXWc/Ct0zx/7AwJlZUvf/OHqM3FzBHEj4dZrnA9\nbXRSxcs8QyvNTDJBPBNGb9Ry7bU73lMOM1k49NobbNl6DTqTDV9a4C+/8h1+8PPH6BscxmEycPLw\ni7RWlZAMBQgHfcx7PIgFGaKgYtu1+9iydQ9Ts8v88le/JpfLsfO63WgNapQKiWf/9AQyIcVTf/gt\nr796kItnL5KKJEinPngY9kEkJ5zv7ygIgqAF9gCjwKvAx99/7ePAK+9fvwp8RBAEtSAI1UA9cPG/\n+k4qmSQeChOPJbA7nAgKiVwhSTQRxGK3YNLqUKCgUMij1mqQK9UoVBpyIqwEQ1RWVqPR6tGotYh5\nkWK3G69nCbfDic1swWl3EA1Hyecl5mY9BNNZ4nkwWwwgprGbNJQWF+O0Wjh7+iR2iw1BULB37z5W\nw4t0ddXwu0d/THh5iW1dTXz1yw+gUubw+YN852e/YXgxglfQ0dp9DUaLka999UsEAz5KK8o5c+4C\n+ZwCldqI1mAnlYOBmRkiBRnH3+1hZn4Fm62IcHCRDZ2djAxP4i6qwbvs4/rdO1EJeUpLSli7toau\njWsoKStlfmGJydkAWpODJ599Fi8hQuR4gXMoKMZR4uDo2assRQX++YePMDY+x4kTp4gEAxiFJPfv\n28g//O2nGQ9EWCmoyCkVjI+Pk0plyCRz7Ni2nfPn+rnS08/2bdvJS2mOvnWcpSU/kWCSxallNrR3\nUFRcwkowzG333MtyGEIZBWmZgAQEmOErPICRCH/D/djeByfezwM0r2nEYjHR19eL1WZlft7Dzbfc\nzNBgD6uBReLJMDlRwLvkp9Rip+fEMerNSu7dt53v/NPf4XLYqaquY3pmgdNn3uX1N99GrbPy5tET\nXO65QCAwhygXOXHmHbLZOK+99Gd6zp1DIQmUOosQ8iK33HIbMrnwX5nmB3cWoBh4RxCEAeAS8JYk\nSYf4H4TsZbJZMoUsBSFPbXUplUU2Sqw2KktcWMwqyspLEFN5nCYTVoMBeQGEnIhOpYK8RDqaYWXF\nz/z8JBI5zGYjkUgIGXL0WgN5MUskEqK2to5YIklaAUu+KAqlCqtFgyATKSorIynCE08+S2N9E6Vu\nO3kpx9DUGB+99x4euut2wqs+Gjo6iKXilFg13HfndZhcFmZDad7pmUVuKeXKyBQpf4rR/hGKzEaK\n9DrsVgvDs3N4I1EOvf48RW4brqJygrEUNfVrOPbWKd555zSl5eXUNTbSN3iVXfv2MTQ6jT+UobNj\nM9VFdjrXtjLYO4TR4MAXSpJLJ3njlbcJ+zMkyZECFkjwt/yEcEhL9+bdJDMSopjDZjaRk5Ikc0H2\n7OqmEPCiK0Spq6tnaGqZ3tEZUvEcTz7+B27Zez3HD7+N3mTC7S7l3PkLbNnaTUtTCz2XhpGjwOEw\nMDMxhX95GbkEY4NTPPvyYbRCEnM2wAG2UkMZhznCMKNoUfBFvo4ZO5c4j8lopLS0lIIEs1PTtLc2\nU1Sqo6m+lGQijs1ho6zagtmlYce+LTx44GZu27GRyb53eeKRX3LN1i0olRq8y7lI8dYAACAASURB\nVKssLQRYXAjwb4/9jpyYZlNXO7ffdisNlTV0reugkMnhmfcTjcM9938SbyCMPxzi4KHXQPbBs4f/\nFfMsBoNOuvmmnYiZDGaTGbVWTSCQwGxSY7XpCATizC8HiEWj6JVqXHYH8UQUrV5HARAEcDlcLHo8\n5EURlVKFIJOTy4loNBrsrxqwYmKRRbwEEfap8cciVJW6ScXjlJdWgCjw9sl3aGuvRa3W0tMzRl3L\nGmxFblYXFnjgrtsoK3fz4iuvsmlDFzdfvw9vIMTTzx/i4GvHWLe2nc71a5BlM0yNDiFm0sx5vTid\nbmbmV/D6ogRCYTZv7qC9tYG+vgFMJidr123iyJvHmJyaQiAH5BEEibKyUpZml1HKczxw7+3U/6CU\nMTz8hjfRoEBwL9PZXMOiL4M3HKOppZ6rY+MAGNVaCrk0K6Ew9U1NVFZUcfnCBb758D/yx2eeoLO+\nku1tTRgses4OzjG3HML/5CoreNjKHv7M8yhLBPQqCUEuJxKLUVHTgEqrIOALEg0FueeeO+nr7WWg\nv5+6+nocTifeVT8bW8rZvaWTtWtbeenF5ylyWSmraeLw8R4WfF40KjXzCx7kgkAyk8FsceIuLiMj\nCgwPXOErf/03fPvb32TztVs4d/Y49933Md49eozl3h6+9InbsJeWEZCZefats+QkkCvVzE6voFQr\nmJufor6uivBqiMaGWrZuuYaXXnqBljXNDA4M09beQSgUYnnZR74gkkjGKSl20XP29IdnnuWnP/3R\nwxvWr8Vqt6M3GMgXCqRSWZbm5zHq9Cz5Y6yEwugNelLJJPlCDoVMTgEQCwUKgkAsHEOj1qBQCmRz\nSVQaLYFQmBW/j+RKnCwJQKKUUgI1IQpSllgiSSSaoiBTcubcReoaq3nwL+5jYd5DTXUzA8OjqFRq\nEoksU9MelpcXqK+u5pptW0mm02iNanKpNE6Xk/MXLpEu5CgpK+b8hfMkRRGL3U5FcRE9ly5RW1NH\nMpEmFAyxa8/1JLMiq8EkMkHA718lFIgilwu0NDey7/o9pDNxfN4QCoVEZWU5yYtx/GRYJISFPHX1\nsKmtme07ryMYCjE01I/T5SJZEMmJIKDCbnMgKAVMRh0moxaLXsW9d92BUqMkUYB/ffQJZjyrXOob\nIBOFW7mL05whQxiVPoZFSLNpbQNNNZWcPH2eTd2dZFNZAuEwqUySuroqnC4HGp2GublZikucfOFz\nf4nDqmJ0pIea8hJ23rifqaUobxw9Q21lGSaDgdWAD5vFiE6rY2Z2gbHxSRLJNAVBSTyWBLLIVdDS\n3IxFqyO0tIzVbOETn/oYq6kM5/tHyCv1NDa1sLDgIRqJkyvkkUhT5HazZk0rI0Pj9A+M4l8NMD0z\nw77rb+bk6XdZ8flAEojG4mg0KhwOO/PTUx+edpff/vrRh8VsigIyYrE4wdUQgiCnzFWEKGaZml9G\nqzMRj4YRFAKJVBylXksikUQulyGXBMRcHplMhlanRqNRgwy0ahXB4AolPhtmjDixkSWJqlNObW0d\nRoOd5aVV5uYXqawpRaGVMdg3yZqmDkaGR0hk4oiZFHK5mpXVKHfccxfTE2NUVFVzqW+AYyePsXP7\nFprqarl+7x5GRwY58sYRvvf9HzA0Pkaxw0UulaS2oZajx4/y2b/8NOcv9NF7dZRNm7dz9M038Ho9\nGNRqUokU2XwSv9/HomeBeDyJWqtgw4YNiJk0jr4iHuVPFCNhIshffeUB9PYiroxMM72wxL5du5iZ\nmqS5tZmZuVnMGi3ZXA6Pb57HHn8EKZ9i57YNaOUiJW4Xb7x1HLWuiLn5OcR0hhtiN/AUT2NChZxV\nNm6uYW25g41r6igrsmOymJhe8pBIpSgrrWRkYphN3V04nA5uuPF6aupqOPz6W7z99jH2Xn8T6VyW\n7i17CGTl/M03/ok1a5pIJ0SCwTAGg5GOzvV4lgIo5SrWrW1nw9q1nLvUy9T0JDu2daPV6/EueCGT\nJ5NMM+8P8N1f/QFbcRnWkireOfUuC/NLeJdXkQQoSAlcLitLHi+pRJaCKJHJiYQjPh746AO89dYx\nZDI5SCAW0sgUeRKJOEa9ieXFuQ+Ps/z63x59+K7bd7PsmUeGDIVaBbk8Zr2aAmki8RhqjRqNWolM\nLkeh1ZIWs9iMZvSCErVKQU5KIZNLJFNJBEGOSa1HgURLQy1lV9yYMaFAIEYM9WYDkWCGvv6rRJNh\namsrcdjMWMw6ahobuDwwQDCeQKvTUOwqQSkU0KuUDPaPcP2+nQR9KzTV1NLVuRG1SodWq0OpENi2\naQtlJS5+/cRjbN6xm54LlwiHQxw/cZpPfeYvKSkr5fyFQWSCwPlL54hnRIxGG3a7Hc/iLDKVjEwu\nhSAIVFaVMzs/g1onw+FwMHxphjirqFjgR3yHlX2gL67kTy8fwu9fxbPkYcPWLYyMj9C9tYtgJojH\ns4SYyhL2evF751lT7iKDkpVYFplKzYt/fhGbxcj1N9zE4QtvY6cUOQGa0FO12Yqtso51bS0kgouk\nAots3rwLR2kpZq0BrUZDKOKjob6WpbkZMokQWZmEzuIkkc4TDiXxhIK89KeXcOssyAUF8XSGAjLG\nJmdQKLUYjEZMZhP5bJpil5NoJML8/Ayz83MgScTDaXr6Bmhsb2PW68dZXEwwlWRsYop7P/JxZme9\nJBJJ4qlVKqpLcbp1KORaJqeXkQkCSq2aro1bWJhdppApEI2EicWD3Hr7PpRKOcVOF9MzMyQi4Q/P\nDH5FWbH01GM/4fTZ04yOT6MQdKgU2vco6hoZKHVkUwXC4TCSJBGORpCp5QhiHrvRgkqjJi9miETC\nFLlKiMZi5MUcFRXljI+P0tRcRzoeB5mASmdgwRPmUm8fcp2GqrpqHFYL+Uwak8lIdW0Tj/76t6iV\nWsxWHUIuTW1lCbt27ODnjz5FIp5lzbpaHvjoHdRV12G1Wsnn8zz3wnNs6d5GcXExP2p/lHfp4x/5\nMk/ya+5/4qMksyIDl6eIJQqcv3CRj3/yo/z+D39Eo5CRSaVRq9S0tDaRTiVJpGKMjY7hsNtwOp3U\nVdcwNzPH/MQg//Lw19Hr9Xzr/kcIkiOLnDQZKMlR5HYzvTDPTftvpKq2hvNnTxKLJEnH45SVuPnW\nP/4T5Q1r+Ocf/pDLP7tIKU6cOMiQ40JTL5KYRpmJopKSfOVrX2XJ66PWoSMb9RFOZhgOiBzr6UUl\naTDYLLStrWd6epobbtjH1cFBFj0e7C4XxUVuAt/1sInNRAmyxAKxj6cR5FouXLiAWqXmxptuZHJ0\nhKWlZSan5mld244v5EOlUiAIcgxnDdhwcZZTKAH3jgp83hUkMcd9993H6e9cwIMHkSxFuNjMJgRE\nZt+TtwIK7GUPv+cJyiljsdxDOv9eI2siGqJrXcd7fShKGaeOHvnw5Czf//73HzYaFXR2tpOMh0kl\n0hg0GnQGDXKNGoH3ihZOuw1ZoUAuk0Kl1mDWGxEzWZKpFOWlJeTFPJFwmFxWRK/XIhUkDEY98Xgc\ni8lIPi8w7wkyMbOAQq+mqa0JjVaJjDzRUBQxA1cHh/H7gjhcDtzFTjZv7MCkkWPWq9jQtZklfxSZ\nRoNcK0MtUxEIBHnqqac5deocDpeDspJSun7fiRwZIwzyeT5L8iMZLl8ZpLyyjonxKZY8C7gcTjyL\ni0hiAb1JR2V5GQNX+wmFQmzfdg1btmyl92IfqUSG6flFysrLSUTSyJRG/v2pl/CvyiggYcJKgCD1\nnQ0EVoPI5ComxmcY7L+KJOW448DtTM0sotNbuTQyy09/9RvOnn0XIQaluDjBOSooI1a0jFWZ47Of\nuA93kYOLA/3IUmEqbArUiLR0bGTzjXfzzMHXcDndBFb99PUPsmfvDTz9H39m87adVJZWMHC1n09/\n+i858vs3WWKFPCmUQOXdtfQPXmX79m0sLXk4ePBlqotLMBhNlFVUcGXwKgUpy969e2lr7eDY8VN4\n8RElSo4cSoeW3dfuRKs2YLfbGTjTS4IQnayljbXEyXCKCyzg4Xc8jp8An+Aj3Mgu/sQfyVkl9BYT\n5WUlNDc0MTk2SSwSJZ5KE/J7Pzxh2Pe+992HK0tKSSRibOxqZWZiDDlyzDYbWSmP0aAnFI0QjkSo\nqq54f/owh5QvYDYZUWlVhCIhZHI5JqMZvcFIIOADofB+C42WRCqH0ermyDtnkBvVrN+4jkQ6gkIp\nR8xlyIs5Etkc6byIXC2jqraKsYlxqirKKHG5EAQlnhU/7Z1ruXipn77eCbZv3UY4nGB21oPdWUw4\nEqWpoRrZHzMY0VFPHRlynKkYoLKqiWQ6TkVFMZlkgtKSEqampslk06QSUbz+Faw2DUajjuGRYfr6\n+9AplAiCknQ2jS/oZdG7zIX+Hpra1hGeDlKMGyMaDKhp2NnA2MQo6WQavU4HksDSnIeR4SFCq34S\n0TQxMcPU1BhlRSa+4L2fAlm62UKBJB7jEPffdC0J/wIh7zwtbXXcfNN+pFwKbzhJQG7nreNnmF8J\n4JtbIZvJUOR0UlNVx9j4FH1XBtEIWiqqq/iHb3yD8kQdl+lhD9tJEMFfE8JitjA/N4PFZKa42E1x\nSQlKjZLWtmbmF6ZYXQ0hSQK9vf24l9ysskI15VRQgV/vo6Ksmr7+q4yNjCEERO7gFnQYGGWaOfxY\nsSMg5xmeZh/Xc563qMHJFjbxhukNspk0SpWM2ZkZ9AYTUjbHajRGOv7BwrD/FZA9uVxOPJfG6w0y\nMbbE3t27yYsZQsEwiViGSCiGRiFHo1Wh1RswmE2YXQ4khRyZQo5SoyKZzVOQKViNhUnnUpQXl2E3\nW8jnsqRTIqFQmpcOvYnWrqek0s3g0FWMBgupRAr/yioV1VUYNCrUGiU5IYfRZae2tRVkMrJ5kXgq\nzcjoKD3nz7CjeyOCBM+8eJC8Eqrr69DqDOzcvRtJgARpiikGBM4ygFZnIhGNIuXgzMnzZHMSR44c\nIZtKkc1mkAQ5MoWCa6/ZwcZNnbisOmSpMA6tQENdMXaXHQQlVreDDd2byJMlyCpTTBFgFRturo4N\nI9doUGjVRJNRCmSxOq3YnXZMVjNyNQR9Xor1Wja2dtDPNI/xDG9yGC8z2NUCl98+Tnhhiv17d1Dp\nLOO5Vw6zlFFSvXHve6Xf5SB6uZZkMk4hlyMeCvLHJ/5IbW0zao2evv5+xEyeloZWhuhnHWspoCBJ\ngaq6OgTUxCNRiuw2dFo1Xl+Q0bFhFuan0On1tHd1Mjh0FUEScWAkTRQnTraxHYvVzaFDh4kmUmgM\nZrayAx1KMqQZZZTr2MKt3MhN7CFLgklG+Cyf53kO8jE+isXuoK6umu4NG6mtqWdmcQG9xYpcp/zg\ndvq/YWf58Y9+8HBtZRmZVI5oMEpBzLNlcxcnT53EVVREHkin0uh0JlaDEWZn5xkcHScSjVLksCGJ\nIma3G4vVTCweRZREsrkMer0etU5HMiMyODJKTspTVFGEyWygtLyYVCqFWqNDbzDjWZznwU/cid1h\nBkHCMzeHy2zkM5/8KAtz85RX1RBcWWFNUz2xRBSHw4HDUURo1U9NRTn9A/3cdc8dyAoF9I/rCBJj\nhDlElNgP2MkmU7zw3EvU1lTjXV4mmUwil0O+ICLIJBQKgWwmTXNDPVVOFw61mqpSN/GAn0TYT9S3\njKvExd49NzA0PIa0KGM97ZRRTi+9ROQRnEV2GhpqiccjlJQWoVDKKasopnvLJmLxBOlInHXta+jt\n6+Vs4ALr6KCKCvLE+cIP7kcnpNi7dwee1QBRSYmzso4/H3yFBX+IS339zE3NsKmtmdDSJHZ1Hhky\nkKuob1rDyPAYoiTi9a2wd9915E6JLOMlQQwHDpYrvFRWlJFJRkkkoni8y0gFAbNejUIuIRVkyFQa\nBGQoZXIkT4EgARbxosfEYGEIuUJOKptFFEUWwguc4Cx9jFBBBbdyPc3U8xov8k98jXOc4yI9HORl\nGmhmx2dvJCEWaO9cz+HXDtLUXEdpRRlqnRLP1PSHJwz7l5/8+OHq8mIKOQmVRs/41BQ2i5bdu67l\n4qVLFGQSckFFKpWmpLSU8fFx8nI5ciRMGjVOu5nZJQ++pWWMBh1yGTgcFhaWvbx76QpT8/Os39iB\n0aTFZDQQjsSRKQSUcgV6g5nhoTG8i14MagOHD71Jd8cW1DI599x2E+VFLg4feIsTB0+xeaCD4MkE\ntlsdCIKSk6cvMDE2yo7t22lvX8PMzDR9PT24TpXzDueJIaFHw0rzEsePv8M9d93LyZMnCYX8dKxr\nZ2Fpnh3XXsNqMEDtWA3KWSWxUwG+cP4vWN48QXDFi0mexq2X8ZH91zPvWWZ4aJzVcAJng51CvYR8\nvYzZ+CySUCCbTxMJB1nX3sbY2Cidne2cOX2CRCLB3Nw8Va5iXMVuNmzpJilLElL6EZtzTDDCwOAV\n9u/bhcpqISZTcGVigecOHUWjNzMxPQuKPJ/5i0/y/BO/5a49m9n9ThPpYIFIOEKsX0SqEHAXuQgG\ngwRDAZr2N7GY82Dd6kSzQ0siEmNsuJ9YLEhjUz3KF7VMzk3SMdVK/mqWXHOeSCSD2WKn5/IVClnY\nzrU00sRhjqK1a8nnCqzrXM+OXTuZOjtOF91E8PM9vkrHSAW+/QFmlMOs/UET5xOX6ZcNs+26zez6\n9D4233Qzl8fm+MPjj2NWy2luqkGQJMxGAyMDVz88zvKvP/vJw9fv2YJMIUfMF7A47SwseKksq6C5\nvpb5uQXkKhlGsxGVWsXc3BwyWZ7W5kbMegNyhQbyGWwWE7JCHpvRgCTJETMF5DIlLqcFvV6O22En\nE02QiCYQcxCPJxno6cdhtZHNZImn89iddqKRVaKRIOcvXGFiYpL+S1fZzBaKcTNLjNf8ZxkaniCe\nzpLPS1zqeZfmNXUYtHp0Bj29hyYpoMeCjhDLzBbNYncVcfjQYfRaNWvbWxEE8C6vIFMoiESiGAIm\nokSpohQDCkYr+5ByCcwa6N7QgU5vpLG+nnWbdnDk7ZO4HE78AT/TM5NY7EYcdgs6o4mysnJy6fcS\n5bffOsGNN92IwWBBrzORTiRIZiVOvXOaTR0dLC5Osn//bYwMj1CQoLimgf84dAQMdhI5JelUnLr6\nFs69e577PnIPOSlP3LfEtvZW6s+U00odLbRyhHco6axEr9UQDKxQ7LbT0tJAeVUtUxPzXLxwkbJS\nNy2Nddx37z2ksiLiMTnv0keeHGoMNOxfw7l3e/EueWnvWI98WskoEyhQsYwP9KDVaJmdnyOTFxGm\nIUKKBqqxIqfhM9XobW7uv/8eCnmJX/7bE7idLtKJBAq5ktL6Nn77uz/TXt+AU6dhbHSabC7PxNgE\n0eCHSMzopz/98cPtrQ04rTZ8vgCZTA6txsT83CJrmhtprK1gZnKaTF5EzEs0NdegoYBZr0Ypk7Pg\nWUAuV+O0GLFZzAgKFbOLXsRclrJiFyaDFrNRj06jQ2+0kM0UQC4nlUhRVVlJIBCgfW07OrWC/otn\neehTd5PNx/H5E/gjQWon6siRJkKcafz4HFFWwxE0ajlrWlowGlW4HGbMJiv+1Rizx1YooZQkPpop\npvHLzRx87Qizs7M0tjYRCIYYGp1EzOXY1NVJOLJKg6eJOCGypPgTz2KtdGAyO+javBW9ycCmrZuY\n865y+MRpfKEI4xNTpLNJFEoZG7o6UCllRGMJkskk3iU/V3p60Wq19A1eZcW7AmKBhSUfHZ0b6O8d\nYHnRw65rd/H8c8/jdhdjd7tYWs0zMDaNxeHm/OUelr0eGhtbsBgtDFwZxO9b4nMPPcixN15h7XQr\nWvKsEKWTHRzXvMvU5BjxmJ8d27uRCTKMZh3hUIi52XlUOi29l3tJpfKMTy6wOOqjliZAgYCK0/7z\nrAYTmMwmBEEi7RGRocDLCilSfPqrn0GjkZMSkzhsRh4YO8AAEywTxkkpx2Lv8Pgfn2Tes8y//eYJ\n7rv3Ad549TVyGZHxyQWOHjmBLAeBpTkC/kWUSjXIBeKpJIlg8MOT4AsCpOIJ/P4AZrORZDxBHpEs\nIkdPnCAvl9O9aT16pRKtUkF0NYrVYkGvMRCNRJBJoJIricYSpNIZorEEKysrGI16XC4zJSUlyGRy\nsmIBhVKNUq1m2bMIgNPppKq6mlBklcErF/jFz75PbUURt+zbxR137EJCIk6eGXzkUWJARzQWRK0T\nSGbjBAIrFLtcFBeVM+8NEEvnSZHFh58S3OTIo9FoWPIus75rLdHYKpFYFBkqjGYbpaXl3HbLHfQz\nhIicFaIoMaIwWTl4+jzf/Plv+NfHnmHOH0Njs3PHnQcAiYrKErZs2YBcBlqNHovJwZqmBq7ZsQ27\nzYxCem9OSAIEhYKS8lLWrGnAYbfQvraNAgXeevs4qWyGRCqJIFOyuOzFYNBz+sRJ4oEQDz30BWw2\nJy0tbajUBjQaM1//5ve4/6G/Zgd3UMCOmQa+yy8IhwMYDCruvfcelpe9zE57SMdTNNQ3odEaWVj0\n4SqrpH9knEWPnzQib3MMP0EKyBClAgqVDK1ez8TUBCaMJEkQYZWtdDEyfIVz59/i17/8IU8+9giL\nXOVmuinCRIBVujZuRZArUal0KBVqjr91DLVGTTKdIplJkE+HCXjGqa10saG7E3exA6QCN96w74Pb\n6f+Kn5Klbunum3eQl2TkxAKOPxSxgg8lSqKsovm4kq2bNqCQyblw6TLax0w4sOHFi4CcFBnkSKTJ\nIkPJ1I5JbDYbtVWVmAx6klmRQl5GIpkinIgxPjmJSqsnGk9SUlLK0kseXNh5kNt4mSf4Cp9Hi4EQ\nGZ7lDP03z6GWa8nF46xpW8ep86dZWplHAHZs3AKSyPruLXh8YdxuNy+9dJBcJs09B27AbjXy0x//\nEhR6jCYlBUmkqLiWS5f7Uck1yCSJvfv2sehb5vLFy9gdZnRaJeUlpVwY6qPI7uDa7m7eeO1Vduzc\nypXeERZW/OzcfS21tWV4PMscevUITlcRFZVu+oeuYlBr2bFlC6mcREEh8Pprh6gsLmPd2nX4fRGs\nDhuhUIDVlRA2u426+nqeeuqPNLW0kcqEySdS3HbzrSxFo1w4f4lsIk0mnebAR+7izcOvodTAz374\nXZJkOHN6iJdeeJl1HVVUVZVz4vgpdu/Yh/9fgvgIsIZ1HOc0oboAuXwGSSyQSmWwBMy008ooo9RR\nS548F+nBioWP8SCPuH9FPp9hXeda5CqYnh3j6KGXuTo4xPT4BLOjQ1TUVuMorcYbyPDtb32XUreD\nDZu6SKfjVJWVc+70GcRMingihdFmZGnRw5rODhQaPSaDkcWFJaZmJ/HNLHx41IpL3A7p5l3rMVts\nrIZiyJ5TokWFhESOLOm7RFK5LPU1ZTTXV3PmsxdQoUWOigQJAEyoySIjTR71QwJ2mxmHxUwulyOS\nzBKP5UilUrx76RwVNZUMDU9TXlWNWq3GcciBDRN5QtzFTmzoySLjOY4xTYLBjkk61rYQWg3iXV5F\nqVFidZpoaain1G5HZ7Yz5wuikikQs2kW5mZY8S6xe+8OotEEzz/7Cm5nGYnoKjWNlawGVymrqCS0\nkuRq71U0ah0KvZJoIonNZkGnV+FdXqao1E1VTS0Ws51XXjuMkM/gthWxsOylsa2OtpZ6JifH8Xq9\nVFdXk04licSj6LUa9my/hlxWxokzp3G5XJj1Bg6/cQIJBQVk5PJZLCYD8UQCpUINyIknQ0SifnZf\ntwdyMiZmJshls6jkajLJDCajAYPLQkbK8w9f/zvGZlb5zSM/obrSwZYN65ib8VDkKKP3ci+Rs35K\nqOYqo1ixU3N3JdNTUywtL5HPQ3wlgR0TBgzkKRAmjAsrG9nCaS6RKopTWVdC+7o2XMVFZLIit+zb\nxU9+9CN++M/fYnr4XcRcmkRBxZnLY3zsE5/hC5/6LAVR5O679nOl9zz33r6P4aFB7CYLgiSxvOLH\n4KpiyhfjzImTrAa8WBxWJgdH/sfoLv/XDwkoSHKiiSRqlRodatQoEcmiRYNBp0Wn1hKLZ/AFI3Sy\nHjVyVMhJkCSDhICaNCmWmaWk1E1RsQOUAvF0llxeRl6UceKdd1izph6rSU9tTRl2iwGdUskEIwwz\nSi/jpFCiws4UXiKI9HCJ9Z0tXO65TH1jK3PLS6gUYFOr0KtkGMwWphcX0Wq1SJLE0NAQi/PT3HHH\nbRw9chKTxojdZEcuk7Hgmedy70WKi4vY1NHFzNQ4uXiY7V3NGMQY+lySfMTH0sIsres6SMXiyAU4\ndvwoao2AXqchEAyRTqUQ4wUCgQCtbWvZtXsHLnspPb0X2L5zM8v+ZeL+RfKJAMl4gvmxYfLZNGq1\nirxCgVqnwmgrQqFWIiAnkxHJFDIU8jLuvvsjmC1Gro6NoNFKKApx8kkfOnkOKRuk2G4hk0rR09PH\nIz/7PvXlbnZu7mJ2bAijxsDM9CRavYpa6lGioIDIMotIuSwd7R089OBD7Nt3AzvYiRYzdTRQThFr\nqOVzPEgXLdzKPuKpJBlBze13fYSbbr+X+z7+aUbGJ3jm2T9z9MQJiiurqa9roaaigpaGKjzeBex2\nNzlgNRQkl4zRe+kEWzfUk4ovIGUj2CxqdDodf/rDc3Sv76SQSWA1WT6wnX6gGfz/20dOzKMxGBFz\nIrm8SOF9cqSR9zTo9VY9/slZJArMzIq4sNFMI330YcZAAQUZRDRoaKCeXE5kNRhFKgg8+dTzWOwu\nWlvXsWnHdspKnIjpFA5HKS+9+jobNnZjwMYCS6SI8x0e4VZuYgU/eqyoUKBUKti6dSujo2N0tK8l\nnQzicNlxF1cyPjVPJi8Qiy3hXVri6lA/O7Zt48yZd1m3bh25XA6VWoHVamb/LTcyND7MwZdfxqa3\nUmQ1s6W+hpxvkXXVJeSTKbTFTg4eP0shmXpPdLTYxR/+/VHkahk1JRVsu2YnDreZ6oZqZPIMQ1cH\n6ek9yd9+6dv0XhqnIBP5/P2f4jff+kfqaqyw4iETCTASiiFTakln4lRV3dmtvwAAIABJREFUlFBS\n1cLVviuo1WrUGhVFTjNta+twuKt4/HePY1KBNhzkjj3X4jAZyOULFMxaXnjtOFs37qC5toYDt16H\nlBc5e/IcNquJXCZBsdtOPCniYxUdZpQYMKCg9/IV/uKznyGwGmZodAI/IbSouEwfn+MhlEhoUCMi\nYUDHV7/8Jc5fHeKXP/8lde0bmF3w8rOHv8b3f/RL7r3rZjS5CKlYjPKyCuJpicnZBZyuIpzFJfz5\nuYN84yt/RXJ1iqqqJta0rCUajhGMJ/n6tx6lob6RhdkFHvzkpxidnv/Advq/IgxzuRzSDbs3o1DI\nEcU8crkci8mISq2gUCiwurqK0Wwnl80SCPioqqoiFQ2ysWsDoyMThEIxItkYFrOZ4qISsrkcCpWG\nTEbGy6++CkhY3FaSiRS7tm9neKCfbC7PyOQU5TXVRM5E6aKLC1zARRmxrjhqrQqX00JrWxtH3jjC\nNddcSyQY4dLF86y72sEt3MIVhtBjZPIT05SXlfH66y/zqU89yFufe5tB+mmnnS7a6DtwlZl5L+Nj\ng9x94FYmnpimlbWc5xg7aSPFCvKdInft38uKJGGvXcdPf/UE0VSKfddfh9NlorWlgZqqWk6dPsHh\nt08x/JiXnXSTJQ7EKfp1Izvu+Dxer5c9lToe++n3MAkFUqkUFp0Cua2cH/z+aXROJ88//e98p+Rf\nMFFMCaUYUHHteAfnL7zF3EKWi6cvQ3yeGxuLkeUTpNMRtAYDq84qdt54gCeefgWZoGFyZgSrxY5e\nayAciaGSS6RSGeQKPQXkjE1PEw1GyGbT2Fb0dNPFOrrx4OPtrWdYnl/A4rAgyHI80HMAPXK0aAkT\nZYwp5ghxP3eym3u5Ze9HuXZjM6feeZummmIeeepbLLFAPU0MMoLn+SCf+8Lf07a+i7HhqzhndOhJ\ncTe3oUWB9t+VrO/u5vs/+g2Hj15ErlKwYUMHZ89fIuSd/58NwwRBkAuC0CsIwqH31zZBEN4SBGHi\n/bP1P737dUEQJgVBGBME4b8uN0hgt7sJR+MoVRpiieR7QG6rFUEmw2B8v0KWzyOXKfEsehEUOgaG\nxmle04TDacTpcKDV6QiFo+RFuHx5gGeefZGcKKO5rQmTSUc0FOH8xX7iaYG8XE51dRl6JVRjJ8Q8\nLqxMMU54NUAsHqSnZ4BHHvkNsXiCI28eZnF5gr/54mdRoOMkvRSQEcCPVq/mpReeo3vjBn7x819w\nhR60mNBhwE+ATZs3sRLw8Z1vfw8xW2AjG8kBZdQSJo4KNXIhT1alIC5IvH7yHWKJNEUV5Rx8/Q2e\nf/EQf/233+DL3/gGO3Zsp7uriwABLnOZHnrJIiOUyPPdp17iD0cvkUglUZut+CMhNMoc6XSQosoS\n8oUCYi6Db3mRFqqpxASkKZBlbnGOwYFZmtvXcOXqeRxmE9tuvpHdB+5i2/476b7pTnbvuQGLzYFM\nISOVj1PkKKHYXUI4FsVsMXLhQj+hYJwljwfIsuz1EIlGKC0rwo0VOybyxNEjYdZLuFxGqiqKsZmM\nONAjkiJPDiUyvsinWUMTL/Ica6glF17l0AsvcmD/7Zw+c5mDnMJHmsd5lqd5mV/97g+UVRQhinGQ\ngwI1buq5xDw/5k88/vwx/vYff4SzvILiqmIKSomLV3qxWu0f1AX+WznLXwMj/2n9P0akLORFlpcX\n0Gv0JOJpDFodVoueifFxJEmOzelGrVFSVOTGZDKj1erx+iMsrfgZGBqmrq4GtUKJQqFCUCqQKeXo\ndUYEmYDRqCSbSnP9NdeiRIR8lmQyTj4rp6VpPZXuEhSIOFGjoIARPXlRRKNWU1pZREVlOa2NjWTC\nUXZsvobK2nqyQB9jaNFhw8z586fRWwz0XR1CkitwUco2tlNAZIZlZEo9LU0tPPvC66QKakZY4gTn\nSFPgIkOEybPrxv3klGpuu/tu7rjjDjJihnPvXmB+eowKlxO9wkDXhm0gKSgtLqKeCsqoJIeImQoU\nahuBKR8Zv4+ekSXSqTxyBGSZHOFwlpQo0NaxHqfVxOWeHnayjY9wB7vYxno6GBgdZ3E1yC9/8XPK\nysuw19ezrDDRG4WEqxGP0obaXsbg6DS9vX20tbWhVhg5/s4FRkZnmJieg4KCkbEpFpe9RGMJ7jpw\nJ8gERkbGWUMrOfIUEHmap6irqaekpISr/Vcwm1VcZYAMImHCKJETJMAuNrFCAC0KQv5ZNm/ZwG9+\n92sUCi1P8TLf41HO0EcWBVabi5aGJqR0jsbGOppYSww5ZxkkgsTs7CpTC1EOHT5BUamLluZG7rzr\nbrKZ/1c8xH/fWQRBKANuAn7/n27/jxEpC5KEQW9ALhfIi1nkChkajQatVksoGGJ0bBRJLhCJxcnm\nRWbm50jlRMKJHJf7hwjG3isx5qUs2Wwa8gI6rZbOda2UlblpaahheW6OHZu7WNtYxaZ1LYRWlrl0\n9iyelRWqqUGLEQfm9/YDvRqX1YxRr0OpViJJAh/72MdwFRfxysHXcOBiiEH6GeAxnuD6fTdSVlbB\n0tIKzY1trBJhkCHmWWKFFULhFdrXNmA2Kujr7ceHn6d5GgE1t/AAGsr51yefJa22cfzMFR574knK\nKsqoKS9l47pWZqZGqK0tZW52GrVaDUA1ZazgJ0WGP/MCzz3zHJPnjlOsKvDvjz/Nud5JRr1hMjon\nG/Yd4OipHi5c7CGVzLBn337e4gw+onyfH/N3/D2vHzzC5s4uvvRXX6QgSuisDkRBjsXlJiVBTWMz\nVycmmPMs8rFPfpxwOMwt+29EEmREoimmJxdpaV2Dy+1GoVAyO7fIpcuXMJtNrF/fiQINGTIkiGHH\nyuFDh+m92IPd6mCwd5hRJhlmhPV0kSPPOc5jw4gSGXIKVFQ4+T/UvWeUHNd1rv1UV+ccJ+ecMABm\nBjmDAAMIgkmMpiSKsiybkmxLlizZkmVdS6ICZVlOSqaVEwlGgAQIgASRMzAAJg8m557pnKu7quv+\nALSWv7u+6w/fDWvR9et016nqtXrtt3afPvt9dkJaZM36VjpX19+CEXaxiQ1MMs74xDDFZWXs2nM/\ng/0jHOIYImZU9GgxIhrMTE9PshT0U19VCYJKX+91RPH288XtEilfBr4B2IDPqqq6+3+XSPkfIXtm\nk7Hzg4/fR16RCYVDrF69mkAgcHMnN5Mh+yMJE06WCJIkjXKPisnqJBgKUVZWTDC4iNOmYeP6NfT3\nDqLTWFAQCScjrOhYzkhfDw6zESktkUgmsbvc5GQt586fY/X6dfT291BaVsb0xDR1dQ2EIkFEvchS\nJEkmB2WlxWzeuJ5rPX3YrB4yUp5j753EqBfwFrqpq63hxMkzjI6M8eADD7O4GLjZk8WsBSFHMDzL\n7l33MNQ7xkDfKJ/41Kf53Of/grrmRtwFXlKxBBpF4eLFi1RWVZFKJEgmk5SUFFBfXYLZbOR6fx+N\nTctY3lDN9MwCv3nlIDanF53eRCKVQZkQ0aOhgGJMGFlqW0KUI+y6exsDA8OMzoaYm51l69Z1jNwY\npLK8movXLvCt57/DCy/8hPmJaTx2G8tXdHKtvw+bw8LiwjR2m5VYPEZjawtpKU0ykSQWS1JdU8do\n7xALoQSxWBaH3Y5eo5LOpLA77QgiJDISqgJN9XXodAqb1ncRDAYwmy288ONf4isopqqynImpMVYs\nbyeWCrBp0ybsNieCoCGZTOLxeJj3L6HVG4gmMkSjMaRUGiWXZ2pillA4jKLkkbMKsiChSHk8Lh9p\nKUsmkyGRjJHKJBFFkfJKNyvb2zh36hwF5UUokkB5eTkv/+oX/2eIlIIg7AYWVVW9LAjC1v+3Of8r\nREpVVX8M/BjA7bSri/5FqmpKcbpLmZmZwmx1cfbcKTraW7BiwU8Q9aYNDI0okEkkMOu0xMJhkrE4\n4XCG0uIp1nS0c/rUZWb8Ebbu3EHf9euIikJKlcjn84h6A/FkjHQWWpev4M0DR9CJRubmU4QTAWaC\nYVZ1tCPnJHLpLJ6iMnJ5ldHJabR6B1euDNHc1EpBQQFtbXV0d1/i1dfeoKGuiUndBNMz4wwMDKPX\nG9FrdRiMGhRVIpFUaGxeTiym8tWvPkdZWTnjI1MEQ1GyUoq8JLGycxVySmHJH0IWNcwFF2lrb+Fq\n7zVknUBzXQ2VpSUIeQ0b16zjvXNnKC2rIxz1U0kZc0xRhI0FpsnE81iMOgbGZ5heWCIvybStaKO8\nqoJ0OoXd4eTpP3iGX//2ZWrqGvF6ilGVLCNTC9Q2tGEyCiDrSKRSaI1GxsaDPPrIg0iSxOjIOHq9\nkfv2LGfv6/vJa+Js2rSeS6cu8CfPfpIr1y6xfuMaxiZmePnl1+gfGsRh13Pv3dvQiCpDgze4b89u\nEokoFy5coq6uGrPFgMNTzuLiImpeg0FvYW42wC/+/RdI2Rwmm4uUlCcUiWA1WxDREg0GiGVSmC0W\nXDYHelEHCMwtzSGKebR6A4HgNA888gChaAA5kyKXVXC6fMSjaSpKKxgc6r3tmL2dlhPfAD4IyIAR\nsAOvAquAraqqzt8iUh5TVbXxVrsJVFX9xq3rDwFfUVX17P/sM7xuh3rX1i68Xjdur5uFxUXisTQm\no5bK6krmvxpAwMgSQWLEMdxrIJ2SEBCwmU3EEjFUrYJVr2fj+tWUl5QyMDrJkXdOYLM7KSsvoa/7\nMh2dy8nKOVJZmUA4TTwaw2a20D80QnVTHbKo4LCYUAGLxUZZeQ2hTJrBgWE6W9o5cfQC8XiGWCzE\n8hWtaHWQSEYJLIWJxSLU1JXT1rKSt996C61OQzAcoK2xnt333Us4EkdR9ex74wBGk4XWxiZCoTBS\nLouKQmVlOdFolNmpWbxOFxXVVTiLLNitFqRsmmg0QpmnkKsnTzIzM8+Tf/hxzl3vQcnqsDtcyP8i\ncYNBnuRxnufvaX9sOePDI0QicfY8cB/Hjx0mks5hsZiIRWPcfEg5MZpNxNJpCgoKWb22k9/94jdk\nMxKiFkTRiEYUkSQJo86A0eOAPKQTaeRsDp2ipaTcRyC6hM1qZX4qgpKLs/mOdczMzWMwmJhfmMdu\ntxKPx3nwgTuwms1oRT37971JkceLqiiUlJQQikXwFLlpa11BMBBBpzORliTOnngXn9uJxmjh8Hsn\n2b7tDgRB4Fe/+hX33LkJvcHAlm138YW//BvWdHYxNjWNqNMQScyzdvVaJqbGWNbSTFVtNXlF4Fe/\n+C1OqwetzkA6HsPuNHHt4pX/8zv4tzLL73+GPQ8EVVX9piAIXwDcqqr+pSAIrcBvuLlOKeHm4r/+\nPwPtFfpc6jOP70bUGzCYDEjZHKlYkkBoEV9BAZrvGxhmAgdOEqRQ7lFQFEBV8LpdyFmJPDJqXqa0\nrBhBzdO1ehVH3zlF38AwVrudsqIisrk0qhaykoZL14du2o4tBhJyiuKKEiwmA5GlIEVl5VTV1iEL\nFgpLSpFTWebGpjn49lEUWcVqN1BcWMD09PRNHoAgUFpWyoqO5Vy6cIUtm9cQiQSJRJdoqKzCZvUQ\nT+fIyApHjhxFUfLYrHbsDgd6ncjszCzZnITJbCESDuFyulnT1cUrb+zl05/+U653d7NqVSdDo0OM\n9FzjyUef5Ni5C5y/3I0GI4l4ElPASJglLFixYiNbr5LPSBjNVhRZZik0g9XiQiNo0IgaNIJIPBal\noqISnVYkFAredJxGQoiCSF5RKC0rZXJqiqrqKgBMNh3PfvyT/PoXL7Jxw1Z+8M8/xGTTEQwGMJqs\nKIpCXkmj1ajUNTWyadMmTp06RWFhMWazEZNZR3lZCR6nk+PHjuKyuzAb9ESiYeKpGKLJypo160mn\ncqh5gZdefolHH96Df2aOcCSGxe4gj4ZsVuHgoXf4448+zYGDB5mdn0fJCyDISGmZFSvaaGquoX/o\nBrV1FUxODlFYUMzA9V7MJhNms5WRGzfQiRYSqRzzU+P/18Xi4SZ5sgKY5GYzo9CteV8EnuFmNvpz\nVVUP/mf3LfS51KceupM5/yJagx7NXgErNkopY4IpYsQxYSdMFBBQ7pbJ58FiMpFJJbBZTHg9HtCA\nXq8jHAnicjhv/tvSN0AegVxWRtRq0Og0kDfw7olzCDoDFXUlWGwmjEY98WAUt8vD6o0bmV4KYrB6\ncFldBCbnOLBvP+mcilZnJCPFMBhEMukcv//6otEo5VW1iEAuF+fpDz+Gmk/T291DPKEwORvkxtgI\nVosFm8WKlE2TE8CsM5DJpEinEiiiFo2gIZPJUBgtoggfoCFCGLk2h7fMgc1oYLC/n3giiyhCc3MT\nwaUIsiyzrLOJyspqJianEbU6/IFFeq9dR1BVHrj/QQZ6e7E7nEzPzRK+FsGMyJ3sJkqQEJNMMk89\nzViwkLw7TGllEWgEYrEYgigiy2EeeegP+Jsvfh11yEyEGCIaJCQe+Nj99A1fJT43R2tzEyU1tSyG\nQwwNT7CsrY39+19l5857MBq01NdUo8gSpaWlRIMBrFYrNY21XLjci38xRFFRCR6Ph6/83d+yeeMm\nLp+9RONIFRVUcJwzrGcLrxUcwGqykstlsNitRAYjCMA2NhEnxuJqPwaLhRsTQ/zxx/+AEo+HWMhP\nWVkViqLg8TiIRLJ86zs/oPfK7WWW/79g8GOqqu6+NQ6qqnqHqqr1qqru+L1Qbp37uqqqtaqqNv5/\nCQXAYDAgijqsFjsmgwkNN8swFggyTwwNRsJEMWO+6c13ONHrdWSzaRQ5h9+/SCqeJBlPEYsm0Gh0\nhCMyY5MLrN20jpLKYuS8gpTNoUVAUFXqyopZ1lqL2WxicnyG4EKYaDSN3VXM2HwIR0EpHudN6kvf\nYA/rNm3EYDWj1evIA2hEzBYdeSVDMhVBq9cQDC8QjoeRJJloPElleQW7d+/mwYcfIBQL4vO5gTyL\noTkCsSVsLhN5MYOgyWEx6agrLyUVC1BZVUyCMA585BCopJmUohL0R3ngoQ/g9RZTWlLBU089RWtr\nM/fs3o7H5yIeWCSfjrM4PU7IP8vy5S187rOf4JkPP4V/eo6ykiL6B3spryrFgok1rKaba5znAna0\nODBgRocHOyuXt6JV81gMehx2K26Pk8aaZkpLqti8ZQcJ0ugwkiYH5Dl+bB91bjP3bVpDa2U558+c\nJhZLkUmpXL7Yh9nipLevm7q6OowGO6GgRDAQIyNBOpXn4sUesjkBRYFsNsfExCQbu9Zx8tg5khmF\nQcZ5lTewYucox7CajCg5CVHUoqpQTCm1NBImRpIk4aUIi9MBzAYzJ0+coLW+lurqWux2L8NDfuJx\nlemZMZpbam87/t8X5S7RWAK3txhJkrDbrUSIUUY5JzmDHS8adOSIkyKNGxepbBqjVkcoHqGuphqT\n0UwilkSjg1AohMvhZXJ+kfGZKa6ODLKstYnWzmV0X7nG4OQMba0rKC4rxldYRDKTg4xMOBygsLCK\nuKLSWFiOzWxDSidRUDBZbBx+510EQUM2l6C4pITgUojq8jIEFZSgTEt7Gz3Xe6moKmLBv8g7b79D\ngXsXekFEymsxmXSkklm2bt1Ay7I69BYT3rIGpHSGzoZaxscGmBmfZe/LMnfe8zBz1wKc4BwaBHIs\nYfN6MRlEvvW171Lo9bCYCHPonffI5pKkMhHaWpppqq3BbjbyxMOPsO/AEeYmZ4kuRbh0/hJN9c0M\nDQzQ2d5KQWkJIBAlyCQjpElgpxMTEkVUoEEkk8uhNejJKznsTgsJRaZpxXoyzjrc9e1YuEiUJRy4\nuI8d+B7RYJBSvLN/LyvXruGunVtwlzTy/Hf/lWw2S3V1KaHgDLFQgqGZSdyFPnoGx0gmkwiCQDAY\nRG8xkcwk6exYidNoIRpJIWUFBL2eHAIJQIeVIozM6xbJ5mUURabAbGGJG+gpYZ4cGnRg0IBGwGqw\n4nN6mJ2fobCoDCmr48Dh47x95ASf+/xHyaNj723G6ftCLAa9npmZabxuF1qdigkjwwyiR4cbJ5e5\nRhGFyCgssYRZMYCq0FhfSz6vMDAwhKvAjV7Q4fS5yOcF3B470YwDrVbH6PAk87PzCKKGqZlZ7A4f\nBS43L7/yKsWl5cQzce576AGCsQzF5XWYdCKylCQRjSClk0SCIdR8nqXgAk0t9ei0GtKZBJlshngs\nxo4d2wGIVZQTS0SBPEuhILGYjNdpQafV0dnZxZF3jzE1OUEossB3f/gvXF5K8c7xqxy8cIDPP/sk\nbu8g/oif377+Os/yLEWUEWaODaxD/WuBI4dOcTEcxF3gwR+PIuqMuB0OVlR00tBYS3TJD4KW0fEx\nZqbmqTSbSMfSJJJxFgMztLQ0MTQ2Qk7QocGMEy8lJLFgIkiGWUL08TJeCsnvT/DQw7uQ0ilkScDt\ncdO2ZSd/9dOjdL/Xgw87QRZYz1r2cwDTSzm2d7bz4AN7qK+r5vjVPvr8YfSCSlZRKfYUc999d+Mw\nufjdb18mLmXI5SS0ohZBA1kpi04jojXpmJmc5GMf/Sg77tnO5MIc6bRElhw6DFhxcJGTiHEjgihg\nM1hRIiE+yBZyKDTSxlEu0W9cRBa0RCJL9F1Psn3TFmQ1xPe+92MqKhsYGR/jhX9/kY2b1t92nL4v\nxKLX67CbTaAqGPQ6xGfBq3GTnEoR1QepzJUSDIfRiiIWsxlxn4geLVlSaNBSTRVxEkikUNEhPyag\nM+op9N7sKXnqzBmq6yppW9ZOaUklY2NjXB/sQ2fSo7MacDushBNZCqurMYoGxD/JEyfCDBOc4B2U\nagEprVBS7KOksITFxUV04s222dFYmBOnjrFp40aqqisIh0N0X72K0WDm8JHTeJwuJuenefjxR3nl\ntdeorduEokpc677Ke73T9IxlyC9F+fjHv8gXPvkH3P3AB3n3zDQv7tjHX372Mxj1Knt/9wvWB9fR\nUl9BzxUNq9d3UdPSzNysn2AoQCiUIpvTUVRchZrKYLWaiCcz9Pf001BbjYYMe07fwb/xc9aymanL\nswRaY9yIpdDaTGDXgEnAtGQjHdWQNkhob4js++ZRaqmnkxUIX02TQsN4XMZUWkestQdfxsW76XdR\nNQLplMTla/3csfZxpGSc1upKXjl+gVDQj8NZRl//MBP+aYzcLDNqaGwkEPBjsVhIJpM4nE7ktMyh\nd45QV1HFDz/3Y9popJVaeugnV6RgNdiYc01TbaxBSudYml/A6TER909w395t5CIh+noGWGOs4vxv\n+0kgotUIWBwFqBobPdfHicZS2OJBFvxzLPjnuDE2c9tx+r4o0VcUhZyURisIyFIOnSggolJaUkQ8\nFkGv11JeXo7FbCYZT6BBwI0XO05Mt5aYDkxYMWBGjx4NqXgSh9mG3ainY2UbXq+PgcFhnE4nFouJ\nQCCA3edlw5bNdKxZR0FhOVpZTz6RJcg8ZzjGBU5hxgCqTGmZF/IyczOzhAJBHDYriiJjt1vZtm0r\nJ0+dYGR0mEgkTH19DUXFXvqH+7jW20ckEuO7//jPrFi5jNGRUQoKizh84BAFSha7f4Bo/3kCM/M8\n/+3vEwjH8XkcSKkwv/7pj3jptz9nbHwck8VKd88FNHqIRSNkIlEWAnOIWhFVEJFlDdmMyIGD7/Kb\nX7+CrAAy1NXV8/nP/g0JJDayGZUUMcYxxuZJBkb56Q+/S4nPgVHUkEjHyZMjq8gY0SPgYowob3Ia\njd5EiajizSxS59MjyyrZfAYpG2fXrjuIhMPEkPntvjdJC3rieQ0PPfIoJSWlaAw6MGoJhpJcvHAW\nt9PMyI0BXA4LZcUFdK1sx2bSs+/NN1nXtZpUOMoaulgkSSlVfJgnsNusGI16gsEAxUUFBENLlFQW\nobHryZptfPq573HwyEHWb17D7PQoDq+V7//gH7DYDORyOfa+up+Dh46wsms5qiZDVU0BjY3V6LS3\n35/lfZFZ8qqKpFFZjEawGE2AQB4dWkGlqqSY6flFDEYzOk0eq1mPRJYsOQIEMGPEihUZCT1gxIjZ\nLtLde5FYKkXn6mX4fG6kdJas0cSFi1fYtHE1otVENCWT01oQBdj3xn6Wt7cw3NtDlgwyClpURAQ2\nbNrA5ctXKSmtoLamgVdf2UvX6pXI2SyCRsOlK1dwutzIskQmJ2A2m7FYTXR1tJNM5ojE0mgELcWF\nxVw8fxb/6wts3rIZl1lLqVVlUUigikbkdJ53Dx/g83/xEf7pa1/kmcc3MTA0yLPPfom77nuc9R1d\naPJaykpKWRT8eMIuahprUdEwPDjIxNAoRqOI3mJC1kpkc2lef+sghw6/SwFeOmmkjGo6KEW9109L\n11p+8qMfcP3qZdpb6gkHglS3tBIIzfMZPsLP2Mc/8gMM6Cj7pJ14cInnP7KbD3zgKVxmLVEF1q7v\nYGS4h5LSYlavW0NDdQWTaYF//dHvsFjt7Lx7Dy++9DJ6DITDQWweN9V1tYQX/WQkmVB4gWw2htFq\nx+X1cH1wgHvuuQ8uKpiw8gqv8jD3U1lTRE9/L8FgmC1bPsXJ42dZtWEDyVScdCpJfXsrq9fUMjw9\nRue65Zhrl/PIg3toWdaCnEuRSOgIBYJ0X4ny4WeeIJlO8cZr+yktLWC05/bi9H0BrPj2N7/xlab6\nSkxGI6ZbtU/JdBKdqCGn5nEXlSGa3NjcPpLZFI5+G2kSCIjESaHHhIAGLXqMGBDWqPh8xfgXFvAV\neNCoAnqNislsQhWgsMDHpu13EknkcDgKyKSyjA4PEQktEo0GMS4ayd/CGC0wh7eugKHhUVqaWnj1\n1dfp6FjJtevdqHIeb0EB6UyKbFZmx46dzM4sEAyFSafTLAYWyeXyBPyLqCqYLUbqGxowGPQkE3FM\nZjPXrvaSTN3cIEUE/9ICVSU+vv31rzA/OUJbYxPD/SNcvdjHH3/iTzhx/Dhmk5lj772HyeRkfHqC\n8vJiCr0+Bgf6yEoSoWiQRDxOSVkZmWwGQRBJRBL0MMkSC+SJ4mzXMjW2yJmrI4QTEm3L2qioLCIp\npXHazXx84ikSBGimjgGuUfWZUh57/HEaaxtIJ5IMDvYQTcaoqasWjeghAAAgAElEQVQmHg1TWlLM\n2NgYC3NzxNNZkhmZaDxNb98AGo2K3qAiywnKS4vIKxLJWJSqhkpcDgtGgx6jyc7lqz3otCYCoTDx\nuRjb2c41ehhlnKL2QiLRAE88/gSnT59FlsHvn6Oxro662mpOnzvDtStXeOjRJ9CarLSv2oCkaFi9\nehVer4+W5jYGekcIR2NkM2ksVgttTY34XB4unL14W8CK90VmEUURrUZEp9GQk7OoSg6rCRC1iFoD\nVreXR3c/QTSZ4KWXfkbqyQUKXT4CgRCarIGp1DxmvZVUOkFFeRFiVkZURTqXt6KqebK/zqDDQIAF\nlrMWz44yTp25hs9bQiqV4vL5M+QyGcqKS1jwT6FbqSMWSWMqcuNTCgiGAmi1IlevXqa+tobevus0\nNTWi1+oYHRsnGA3xjW98k7//zj+iyBI107WMMcpGNnKcUxjKbz4AxkYnmJ2bJ5tOEU9GkXJ5wqEw\nokaLZVEPizICeR6++DDJJ3I4a+p46be/pLl5Oeu3rOfk6dMYTEb8S37Wrl/H1FSQxYVFrly6wB1b\ntmDQC0i5PHlFQacTSaeTKLKMkpeRvTImk571d7ZgzQSIzAyjOErIyFFi6SDhxAIff+ZpkuksnStW\n4nJY+ZD/fk5fPMumbTvpvnaVpVCcz/75p3n8iSeoqyphZilPZMnP5OQkBau8bNywAUGByelZMukE\nipJFrzOiolBVXUR9zSo0Gg0FLh+FXh82t5VCj5fvPP9d3EdKSRHjAR7kAEdItsT5pfU3JOfS6HRa\nRl4b5X4eoHKwmpd5DRE9KUJcvHSBDGksmMlj5Ue73uJpnuZzm/+GyfkFBA0k4knu2H4n9Y0tDA30\nMtA7gtVsxmgU0GsMtx+n74fM8q1vfuMry5vrsNmsiIKKoMro9DpEg4msDBOjo+zasZ3J8RHq6xqZ\nHh1lYnyKPAKCRotGoyUlpTEYDEiKjKjRIuUy6HV69Ho96jWRXm7QRAtNrGR4VQCj2Y3JrMds1BAJ\nBpgcGSUai2Ix60HQYNDqsJjNWO0WamrrmZiaQYOKx+tDktIUFxdgNlmQJIkNGzfw/R98H1WRyeTi\nKOkMG9nICOPEiYNDg6IoZKQMqqJSWVlJXskzNT1HSWkJqWQKY0hPlBBmdJznNPUP1/Lcc89TV1fN\nD//9BVS9gUwqRUVlBau6uvD5vERCQaZn55mdmSMRC+NxO7DZbcTjUVa0ryQYjlBfX08mI2HSG0gn\nMkSDM3z06SeprCxn+cZNxBSBsspK5iZuUFpciEmn4p+dwmE3IQoCBqsdvcXNRz/2LIJGy57duwgs\nzDC3MM2a1gru2LKd5pblONxu3npjH4XeEvQGA6UVhZSVFTE2PkpRcSEWq5H3Dh3gy1/6Mr/62a+Z\nnfUzNj5DY10LqYRE3YVa2ljGexwnSoycOU88FrtZXiNl8CVdNFDLIku00MogN9jKNkKE8eGig+XY\nsABGrjLChHeeWDzDot8PAgSDETo6l7EwN4siq/jn5iivKEejNdNz9ep/HRSSVhQpKvSiyDni8Thu\nnweT2UYineetA0cwaTS8e/Ag3/jSX3PlvcPcuXU78UQORBOLwTB5JY/TYsViMpHLZrE6HGj0IpKq\nMOEPcYlhdDipYhkThLA7vehMN4VkEg1sWLOGpuZ6nC47RYXFqLJKTskSiAXQ6rVMTk6SS2fJ5hVC\nqQCuAg9yTmV4aIjtd+7g0qXLlBcUoc3E+OAH7ucOtpJGZpRJrJjJZFNY7TZyOQlFyZHJpNmyZRtm\nk4lQYBFFlQizRBVlZEmwmg4SyQwP7ryLu9ZvxWGy8Sd/9HF87gJiwRg/eeGnjE3NIGhEMpkodXUV\n1NXXYtUqSIkwXpeX02fP4XDZWVoKUFddh39hkRUbO0ig483TV3nj5AAv/PwtEok8iizQsWIt+ZxK\naWEhm9Z1cPVyN5LOxb/97Hd86Uv/jZ0770ajUwkszOMoLCCXy7GisQWfSeStl3/OW6+/yJNPPsaJ\nc6e50H2d946exmQW+bM/+xTzs/O0NC3jkSc+zHe+9y8Eo0kEnZFUWuXZT34Kd6EPP0t4cWNBjwYV\nNa9QX1+HRieiCDDPHL/jFazYkchQSTlvc5giiqmmjpd4jcOc4QbjvMsRLFYral7B4/TitLlJpJNc\nuXaZSCqIVq+g5iUkSSKRjN92nL4/xKLVkslkSKVS+Hxe4vEkCwt+3j16lK6u1bQ0t/K9v/8mghSl\nodBOem6MIqdILh3A53MSj8cJRkJkcmk0ap6F2Vl0oohWrycQWsKEgTRZZoggo0EV8ni9Dg6+tZ9Y\nJMq//9tPWAoEuGfnnSRjSTKpFLl0CofZjKhAyL9INpultbWVnTu24XZb8C/NI6kyL730ErmsRDoS\nx2mxoebyODGzwDhFuPHioaKyDEVJU1tXTnt7M0NDNzh75vxNj74sk0wk2MQGjBjYzna66eGTn/hL\nKurqKa5q4B++96987e++xuEDR+m/2ovD7OCNva/TffUCGzetYfe9Ozh25AA+XyFWmwOb04Kv2E1l\nWSkieS5cvkBrewu5VAoVDUdPXaC4vpWopDIfiHLq7HkWAiHGJ5cIRTLEczp+9tI+/vQzn8NgstDb\n08PBA4cor6jGafNw6vgxtq/tZGm8D4eYZtuqBp596iEunD5MabGLu+65E73Zitddxesvv0VegcOH\nDrH/jUNkUtC+YhUzcwsUFRdRWFzM0NAweURMWHDgYjVdrF27jsDMEpqcFrfZiR4LH+UPeZmXOcyR\nW6Y3N+e4yEu8Tg4BFR1+FlGQsZlNoOTRG42ggYbqSjKRBZpLC9izdQ2tFUUUuy1Mjgzfdpy+Lzz4\nhT6X+uQDOzAYDGhEAfWfZUxY6GOKPCaaqGCYbtbTRiFaJCLMEGaBDLPkiCKgQ8GMgTwyJgxYsJAg\nTZwM2T0aSquW4fB48Pi8FHg8hPxL+OdnCS6FiIYjnDt9kvt238vhI4cxGY0UFheQSiWJhsOsW7uJ\nA4eOsnJVJ4HgDJVVteQkmau9AySTcco9hRTanWhEuDE2REVJCfm8jM7jQmexMTE+SXlxEVabkUAg\nxti7M4CIHRsxwkhkMNUZ2bFjOzeGh+jqWsf+fYe49/472XP/bp758DN0rFgOssSy5ipMRgNzX/Zz\nkrMEyLCcVhIbQswFYuhNOsprKvF4PVw9f52Ojg6uXLlCeWUFZoOZRb+fwGIIg9FAToZgPEY+J/FH\nH/sgfVd7iYSXGJ8bp6l9JVOjN7jv3gfZv+9t8rJAVlHQ5STSmQBffPYjhMZOs+ehByivbyKakjG6\nSzl47Bx/8cVv4HD5MAo2GhtricWXmJy6wYb123njjf0UFhYjanTIUoyiskLa2tq5cP4y/kU/69ev\nZ2JiBofNTU9/PwBGg/FWj54cZWVljI6OsuCfx1fiw2A0kIgkyckKJoORnKKgZDM89ujDHDhwEI3+\nJh63qtRHiVWkwuOmvMB3k7nctZYXXnqTcxe6/+ugkERRRKvVYrJaEEQRBQ0ZMjiwM8wNaqjlGf6Y\nAUYQEdEi0kQpu9mIBR0LzBElSpgwblyYMeDEgQbYwh2sW7sTn7cMs8mJy+ag//IVPJabm6DhaIjL\nV65QWVHB+MQEBQWFIGiQMhLpXJaudWvIoaI3GOi53svc+BIXTvdy+WI/drOZj3zoaYrLyhgaH6e7\n/waekkpGxm6wbV0Xw33XMZsNNDY30L5sGeVl9Zw7cZ5tbKeKKiQy3MXdfI7PkVdV9r78KtF4iMXg\nNF2r2rh29ip//EefIZWUWZiZJZuR8HrseGw6VlLPn/FHfJEv0MEGzlzsZsXKdhKJJIlwDB1aHn/0\nMcbHRxG0KnqThvdOHCEYC2Cw6Cgo9PDBDz1BIhigo62V7gsXSKbCJOMR7t6ynY7WRp75yNOYzWZy\ncv5mlXc+j9lqRbSaaGlvZduuPVhLyjEWlDK+ECWnaOm5PsSX//pLuG02JqdGQZMllYmye/dupqen\n8HqdpFIxRFHFZrcTicQYGBpmam4ek9HOpQvXmZ1eYGZmGtFgxKzV4DPkWF7hxqiFJX+AkpJyioqK\naVveQGV1MZ1r2ti6bSNZOYtGEdhz7/14XU7Wr11BMpmkobEBl8PI9q1r2bFlA01VZWxa04VJVGip\nvf3asPfFAv/vn//2V1rrqkFRySsymksCMio6DJjQMUgf1+illWZkFEwYKcJLlCzXGaOCeuw4Mdzy\n0XtwkyXJajYRQCazWYdOr8eo19N94RILUzO89upr6LQ6zpw9jdVgoa62gXgyyvDwDaw2C2g12O02\npudnGOodQkCmsbqIaqePREgikc2TkSQmx8dwuBzE0jEi8QStbctw2a1k0ynaOzoYHJ9iw9rVjAwN\ncOzEGZwuL/PBeYbpo4M1+JnDjB5ls4Tb4aGhuY6SQi/Xzp9i6x276b3ajdNmpay4lOmpSWZGRtm8\ncSvhNyRAy7f4PiPMsnznClYvayIeDXLx4hVqa1rIJpPcGL5OeVUpXrcLl9tJTWUNGzdv4b2jxzh6\n7D22btnAUP91VDnJndu2Y7KYcLnczEzMMOdfYGJmianJWURBxoRCbUMd8USGqelZvA4nDa3tfOFv\nvkY4qTBwY4ru3hucOneOYGCee3dvZWR0kJXLV/LS3ldAgLQkoRf0xMJJNHotJcVliBoNRoMeSZa5\n/97dDPfdNOyZ8mnsSoyPP3YfYjaOx+VkdmERWdUAWcLhENvv2IzdZmF0ZJJwJMCOO7dy9PhRrl6/\nSnFZIdcuXsLj89HZuY7BoREcBgElPIfTYkGnN1JR18Qrb779XwcM/vzz3/pK5/JWZEUmI6URrgrk\nuFkhbERLAQUYMJFAYhPbEbCgxcoCMepoo5tuOm8FnhEBlSwr6ADMLCKj3mkgEg0wNzPB8EAv46Nj\nOF02Bm70s337ZqZnZ1kK3WSB5RSZiopKwqEIJrMJi9WMxaxl57q1NDk8rF+zGtmiJ65mUbMKzS1t\nSNksgiiQzWRYmPeTjkd54vEn+fdf/o54ViYrZyGvompFBFFL5Ww5dhzESZAiyjxTuFttSFKKUDCA\nSW9hzz0f4J9++AOKi0sQBZWFhTlqmit44rHHee75f2AxkOIwJ9AAIgnMlhTnLp7H6/Nx/4MfIBSK\nc/nyJe66eyeynEeScmRSKol4kuvXrxJPJHBaNJQUF1FQ4KWypgJkgaSU48yFKzidXlLhKJlUllQk\njFUv87d/9eccOHiAdEYmFEsyNnoDd2EJSSmLxWLj0uVuikrL6b52nc6u1STjMew2F2fPnKGpqQGr\n3UaB20tdbR2pdBL/YoBkMs78/ByFBYXI+RxXzp5EiIfoaConn1jiZ99/noXJG1RUVdC6souYrHCl\nZwAUcNgdeL1eCgu9nD17EY/TTENdLROjY2SlPGVV5azo6EQU9SwGgkyMzOCfmqSxopjGpmaWYllC\nmTwHjhz9r7PPoqgqE/MLuF12tDodmk9oseosZFNJrOjJ5JNkc1lsLg9fv/aPtK1YzkOP7GHwjasM\n9Z3g3p07efPoCXbdsYPDbx1kx/atWCoLOXWlH0dBBRc/e527WI9CAQVYOb7+KGaLiXtW7WB6ZpaH\nH7mfA28dYXxqkuXt7fT89joaIINECw14/8LCtbPn+cCOu7h+5RzFRjPudIhIKsHVa9ewuZ0s+edZ\ntaqDualpmrvrufDpQQw4KaKEIW5g0GlpaKkH4GrsOjaLAxEN6VAaxaBhZdsqopkATpuLq1eG+Nvn\nvovVrmd6aobl7S1kMwlWdq5gy467qa5p54+e/QR6nRFXLkGZzc59u3fywuF3KCkt5b13jjE2OYXP\nV8Scf5H+ngG2XNvGIgMkiTHGEM5aCx966kluDE7hq65mZnqS+cgCgViMiYkJvG4fbq8Lm1FPW0ct\nT3/7YRqeKcaNjSBp/rHzx8wEgpw4dxW7zUR/3wDbtm5kZiGK3ebg5IlT6EUtW7dsZs/9D3Dq5HGq\nKmuYnJhiYGiIzZu3ssZs4ciRI4gaHbmsjH9hHiEZ4ald22mvKeaN126wNDHEYM9V2jfsZHIxzKmz\n55CyWRD1RGMSr7/6JmvXrebRwUe4yAkc3U4y5MghcHbvRdayjkKKeNP7FgVOH1OBML6GLpJGDyFk\nvv/TX992nL4vFvhej1Pdde82REHAqBXxuV2EA2FcNhNWs560rBBLZYjE4qiilpwKza1NdC1fSffF\nS1jsNobHp5menKKhoYnOdWs40zOAxerC5XAz84fDvMk+HuNRdIi8d8+7FBUVotOJtLYu48ihY+j0\nFqKZMAtTM+j6ddRTw2Uu0UQrhjth2/r1vPjCP/PZjz1NainAXDDIa903mIpJlFZWMzs5hsPp4rEH\nHuDXz/0WARNJIghk2f7UVsxmK+8cOUxVdTleXwlWq5NsRuLcmUto9AZkrcL88BBf/9pzHHnvXdw+\nL8VFhbyy9006lrfw0EP3cOeu+9BIef7kwx/CZzNy9vIVaj1OHnp4DxmdiF/KUle3nOe+/i3MVgvT\nSwsocgKz3sI9o7s5wCEaqWUZjSQ+FgatDq/Lx/zsAkeOvE1VaRF2j5fm1lZ6r/ch53MUlPj4/Bc+\nw7+2/gMP8gHaqSVLHMOAiRde3Mu+N97mQx/8MM9986v8249+wue//Hck0hIFPi/BQJjmlmb6+vrZ\ntWsXIwODaEQtoViY8YlJdKLIlq3bCIej9Pb289gTDxObn6LabqStugCnWcvc5DR6mxvVU8uff/nb\n6ExmMnKWzq41ZLNJpibHmV9YxBqwYEJEh4kYMWTytNHOKKNo0VK8rZBUJk1gYQ6DqKWyvJrJ+QUy\n6TQzE7fHOr6tzCIIwgQQBxRAVlW1SxAEN/AiUAVMcNMpGb41/6+Aj96a/6eqqh76z+6vIqC1mokn\nYohaAwuhEA6bGU9hITk5g02jIRiNYTDo0OuN5HI5zh49jtduZdd9d/PJP/8cm7dsY04UeODhD/De\npR6M1kKWFv2klqKc5jgPs5uLXGENGxm4MYrVaafAVszoTIC+0Qn++stfZH5+mtPHjhPrX8KFHS0a\nDOhx2My88M/f57tf/jzzY70Mjg+z+4knaXrwIb72Tz8iHQmRktLUeut4df9+IqSAFDJp2qhjYXwa\no1mP2WCgsbaecCjG+OAQcl6ltr4SjV5LQXEB6z/1KX71y714PA7mF6Zw2J0kE0l6r/ezNO/HZPDy\nxs9/TpHZgM+upaO2khUtLcRzEBW07Nyxk298+58IxlP4YxHWrV+JIOcp8PmIjQa4gy3oEAgRxSga\nSaYUTvRfYW5qhF2bV6HkMxSX1tE/OITFYsFpEmhprOfS4eN8nS+jxU2MId7hDR4yPM0nP/FpHt7z\nMGfPXeDrzz1P/41JYpE4VdWl5HIZnvnQB0hnBSLhOAf2v42UUtCYRbRaKHEXMjM9Qe+Zk2y7Zyc3\nBvt58Ze/oq6+nlPTo2xsKeO+u9fgaapn36HLvHH8RVSDCQkFp8fJqTPH2LlzGwuXAnR1ddH3dj8R\nsqyijRRxnLiYZwaQcOEmJSWQcklKqoop8JbSe32AaETCYrPejgRuXyy3jm2qqgb+w+vfQ/Z+78H/\nAvD5/wGyVwK8IwhCw3/mwddoNCjkEUWRTDpNkddHPB5lPhhEp9Wg1YgY9TpEQUsqmUFQZMoKCsim\nJPbvf4v21mWMT4zx377+VfbuO0ze6IF8FpvZxN5f/Yo6ynmPd7HiwYSZPbsfJrg0z/j4FHP+ANt3\nbsZbYKWuZg2jQwPcYJgCwtRRf9PzH83Q2t5GT891Otqq8ZQU8vpr+3inb4TypjYiSpCyspVUlNfQ\n3X2VOmrooJNuLuLCTk1bGTNTM+zatYu8AqMjUzcbx6Ki06jE4yGWyHDgQAg5p9DbN0RDfSlGowFB\nzGG0GNCa9Pz1X30ZWy7LXetbyaXCbOxYRk6jJSvAvgNHmA2EOHnuDE998A/4+S9eoMDjZHJihkg4\nQZAAS4wTJ8waVhCeDaBgYGZmimw6TT6fZ/nKLgaHJ1GUPHX1FUSXxjEa9Vzo6eYl3uB7fIchurmb\n+8lo9GTCS/QPDGA0mvnJL/Yyv+Rn1657GBy+zormdk4eO830QoDVqzaSiyeJinHSwQXEfI6c3UaJ\ny8bOtSuZn7pBV1cLUkJDSlZJKQ5O9i1RWJXh5MlXmQ3Emfcn2LGri+4rV5iY9ON0Ojl05DAtLU0Y\nzVpAxoSRfnrYzHqmmMGHFy8+dBigHBoaG/jpCz9hcS5CLJ7G6fKQTCb+r4jlfzzuB7beGv8cOAZ8\nnv8A2QPGBUH4PWTvf0p3keUcciKBks0i5wWmZueoq60llU6i15uYnJ6mwGrCoNUhCRI6vQFVEBge\nGOVa7yCTM/PsenQPe/e9jdbkJC9qiCyFuHDqJCtXtjJsHKKozIskJQium6OuoBYpmcZud/LBDz+B\n1WnBaNZjtxpY2bmSmvpG3n7zbVKxKHqdjlQQzvf18tj9XyOvkZlfmKa8pJR1pgJmIlHuPnsHYeIs\nEqKEAsbbJjmvO8VSIEDCFsG2aEKr1zM+NolG1OHxFLC4uMj41ATVtVXcsXUbl7svcelCNys7VxMK\nLzE4NIKShw2b1uJ2u5mbXULVJsnIOWYW5nlgxxpyikxU0COYLXi9bt548wBdq1dw6NA+dtyxDYtB\ny5rOTl7au5/VT60jtzBLciJKr76H0lQpTp+TrJTB6XSSzmmIpPKcvnKNqpJSZkb7MWoVSksKWIxH\ncP5tMT01VzCbHdjvqOdSzwBH3noN0NPZuYlcLs/ikp9Tp07R2FDP2dMX2LRpB+cvvcjR8EFWtTWi\nJOYRkgH+8OmnCBuMvHPkPaxGPVs6N5I0+3ju775JVVU1skZiMS3zm4MXyGZTZJUkT37oIUbGRlm9\npguzyUReVamuvemnf/nFl2m9u5kz58/R3FyPdoWKZcHAUnCJhVk/ZaXlXHnrCn29IzS3dBCLJtCK\nKdwuJ067Bf/U7eGQblcsKjczhAL86Bbzq1BV1flb5xeAwlvjUuDcf7h25tZ7/4/jP0L27DYLpT4P\noUiEWCJDSsoSjERR1TzxZIrK2jpii/MYRA2qqEEBookYqmpgYi6IyV3Eld5xthU3oBd0uA1azB4H\nmlUdXLp0ntr/Tt17B0mSlgfev8ws7311VXvvprvH+5nd2Zmddaw3uEMIAcIsCDg5jOCQTiBAwkin\nEAi3wC6wrPfs2J2d2fF+pqfdtO/q6q4u711W5vfH7H2fvoiTbi9CFwFvRMabkfW+FfXH8+Rbj/s9\n3c3ojSbi0WW2bx5icSXGqZPHec/7HqCttQlJK7K4FCUWnWPr9q2UCkU2rF/LN//276mWyyDU8DY1\n860fPMbdN21hsLebcHSZvgYv4/sOc5ZhznAGF1YaaOCm7VtYXIpgsptpCtSTSSQx6Q1UKlW0OolE\nKoW/LkBNEpiamEaLDo0kgKhlZmqSUqmEKGk5e/YSq4basdmdDK7djK9uhYunjjKXTjAdS+Dx+ilq\njFwYHqNWLnHvrbvQGzS0NdWz7+Bhtv3Rhzl2/Djr1g9x4uQR9tx6M2atgqwIFMtVsguzNAYDxKJR\nbJ4gr7x+hLnFCNHoIl989MNoUJmemCA8u8C67TtZjKaZnRvhyNlrjExcw2OwoTXZuDIywfj4GHfd\nfRctTc1MTU1y770P8sKLr+DxOql32YiGr6PNpfjyV/8cWW/kO9/+KaKksOmOu4iUq5iaN/PIpzSc\nOfgC7U06FkIRStUCUEGjE6koZcxmK6Oj4+zevQe/388vHv855WoVagoeT4BgoB6Xw00smqSlpY2x\niddYvXYAahr6elcxv7RCW2cnU1NT1KoVEqkYSqX8DlXgnQclt6uquhq4A3hUEISd//ZD9YaX4P8Y\nsqeq6npVVdebTQYKmSy1Ug2P04XTaiORzaIIErGVJGMTUxSqNTQmM0anh7JoJJKQGZmeI9AYwGy3\n4K1rZmUpxtFDB9ELCnUBN4vLIUQ0aBSBkfFh/vhjH0Gj02J32lm3YxPtPZ2kEjGi0ShTM9P4XXZE\nWUYSBLwOF0OrBqmWSlhMJtpaOqnKGva9dZFzY2Gs3g7+9ce/oqujl+OcwYmHRloooTA7s4BGK7J2\naJA333yLK9fGWVyOMjw6RjKTJRKPUapVmZmdoaW1hUKhAIgIcpVKuchgfw+lUhazzYzF6qLOF+Tn\nP/wBB377EpF0lJwIeLxEVJGXjxwiU0hQLqcpl5LEoksUSyX6+gc4e+4qZosNSZBZPdRJKZfFrNMx\n2NeL3+9FazCTK5R44MEHiSXiFCp5Vq/pZ9OGzZQKIjrJQnQ5TiGTZf8rr3P0zZPEomkWZhfpbe8k\nlozh9zfw0ksv0tzdxMzULM+++DKH3zrOa/t/i0Yr4nPZmJm7zoc//gnWbtnFkfPXGZ6NYXbaMFq9\nfO4rXydRFPnevzzOocOXuG3PQ3S1dVHN56BUppDJYzBYuHBumFQiiUbQsjQf4Ve/fApVVgm63awZ\nGuT1/QdYWFwiUN9EJJKiUqyhUfWYDVaS8Sgf++MP8+EP/heujw6jyBVu2nkTUMbpt79jmX1HyqKq\n6uLb8wrwPDf+VkXehuvx9rzy9vJFoPHfbG94+9m/OwRBoFSt4Q3UIel0ICo4jBoqmSSNQR9ajRaT\nw8lzr+3n1LmLLC5FGL46wmJ4BbfPz+bt2+ls60BS4MrlK/zyid9w+I2jzEzPsRBZIZrNYjHYyWdl\nLl4a4dixt/D4/Jw9d5lsocrRN09jszjw2N3oJR0em4MjBw9xcP9+yuUiJquVxegyostGVifx9BuH\n+dK3vk1bWydvHj5CN90ECNJDPykKjIxPUi7LnDlzBpDQGwxMzk4xNDjE/MI8nT1dnD13joZgA7Is\nU61WCAQCaE1GJI2GSCKGjIwowujwKM88/Qyr1wyQK+bp6uqitXMVyZzCi68fYHZqCp/TSnd7Mz5/\nkKWlJIcPHSUWSWG12Uhn0lSrVURRQkDCpDcSWVqmVqui0dmud9kAACAASURBVIlMzE7y2qED5KtV\nbHY7wUCQnu4+fvmbZ8lUyjh9HuwOOzpBQqczkEylOX/2HLFogrpgA5WqDKpELl+kqamBSqVMPldA\nlET02hoNjX7Wb9zI3377n5jPFTl1ZZSDR4+QL8QJttgZXN/OzMQ5Pvbu3aRDk3z/n/+RI28dw9ng\nRTSq7Ni9nb6hISRRw/j4KE0NfoZWtVFOzWIVsujFPFs29dHd28D6DYOcOnUCnWRg//4j7Nl9F4sL\nK1yfnONffvAjtFotqXgctSbz2qsvsXpggGgs9Y6V5Z0QKc2AqKpq9u37A8DfALv5T4Ls+bwe9ROf\n+iChxUVu27uXZ559ljqHCZ/DRTpXZt+bR/E01lMqyOgEA36fk+XZMOF0jo7BVTS0tKOTJZ577lka\n673otCIT48P0dnfj9jipPAt5yohIXGaY4LYg2266haXlCNFohI989MOMXr3CiaNv0tneQSGbZ+r6\ndeZCIRwOB6sGVnPl8ijLK8vcduteDh44hMNqZWF2mgcfeYSZ+Tl6enq4Pj5JPBFHQKRSKzM40IPJ\nZGN6ZpZAnR+zwci5ixeo1GSam1vIZjJoJA06USJ9LIWDAMssM8c8m25bz/zUDJVqBQCr1Ubf6lVo\nBZGp8Un0ej2h0Bif/vgfkkvEcBgdnLg6RWQlicPupFpTSceXMZuN2OwmJK2ETtJQ5/YRWo6QrRRR\nRJVVqwa5cOESWq2J6ckx+ro6seh0NAWDmJ16JAEy6RwSBk6du4bJZMDmtCKrMg5HHU899TSbt+5A\n0qi0t7dw4q2juJwuBK2Oeo+eYqlKNJ5laHAd569cZnFuFrfLwp333EYolcVhtHL2rbOgGAlHYpit\nOkrVHG293Xi9bm699Tb+7r//HZmVNC6nmXwhxSc/+n6e/Oz/4Mv8BQV0vMZxhv51PU898zy5bIXw\nfIyhwY1YbRZOnzmNXq+jUChSq5TwB9wsLy1R3xCgIdDI5WvXWZoe/k9zHfuB52+wv9EAv1JV9XVB\nEM4CTwmC8GHehuwBqKp6TRCEp4ARbkD2Hv2PFAUgk83y5snTPPTQ/WhNBgaHVlHndnHxzAWsFjvd\nnR3IiCzPzKOoeRLxGO+6+05mV5L4mzq5fm2EhYlx+ntaMJk0VMpFtm4cpMXvYXVfF4lnc1xinimW\neJAHmW9Y5tiRw2zeeRPv/cP/gs2kJ7xop6wKXJ2YwKzV4q3zk89naetsp6YoJBIJOjs7cLs83L5n\nL8lEkqGBfiqVCj09PTz7wvN0NrdgtWno7h3k7NlzLC2HmZ89j9GkZ3z8Kh6Hn7aODvKlPMdPnMDl\ncHPzjp28dewoBvTMcgEdOurwcuHMBUQUXG43qwYHGJ0YJ5fJ4jKZSMeX8dX5+e43/ppiaoWiRsO5\nC6MgaLBazKTSSXxuD3mNhMVqoVqVqVZrCAaV5eVlTEYz88uL1PvqGblylYH+Pq4OX+ae++4ltbRC\nOhEnkkqSnk1RKRdZs24DP/vZb9i+bTsjI8No4gImkx2N0U5zewtmi4bzF87S09+Bv85NMV/CaDBx\ndWKOqevTfObTf0pkcYm5iWvcecfthJeX2L/vDcYmw2jQYbc70UopTBqZe2/fy+sHDzE5fI3vPvc0\neouFX/3iCT7x0c/gc1m5Nn6Vl17fz2P8ApEan+UbJNHQmqyxspJg65addLaVOXbkBBq9Hp1GS6FQ\nBGBwaBV2hwWf3wNUCAZ8LCwus/QfCef/ibKoqjoNDP0vnse5cbr8r/Z8DfjaO/wNIIroDGbOnD3P\nI/ffS3dPJ8lYBqfXj16rZf3QWiLRJPPXo1QUFafLzOlLF+hdtxmfz8vBF2fQaGps2ryeo0cOoFBl\n3bYN9DbUIRTzBDBxlDBe3EgITIyP8+3vfhN0GoxWB3oJVg32M7cQ4cTRo/idbq5euUBToIHZ2RkW\nF+MYTFZcfi/Pv/YyLoePSjHP6v4+Ll2+QqDex46tW5mfm+HOO24lky1SKhdoaOxlaHAt2Vya1156\ngU2bNhCNxzEZjaweHGRycpozZ85gtdjooI0U57mFXURZoXWwGYvDhMvlAkmDXLrGSniZwZ07GNGK\n+HxWHBYjmUiJalXGZLWQloukMylEFXK5DIIE8VgCi9lCoVBEchnR6kysRFeIrkSp99YjyioT165h\n1OsZvnyNXCJOe0szi4uLmPVWdHoj+XyZ/lVDnDt/CYQqXocHj6+OI28cwWiUuHnXB+jp7WBsbIJc\nOk9razvjU7NYbC6amyUO7D/AzMQMolhCI0q4HE7MFhta1UypKlJDpbUjiF4tI4kKX/7C59FqJdwu\nB7l8kXA4hNVh4+LlK6zduJp0dpmf8SxW9EyyhIKHf/qnH6A3SeTzRfbvP0BjQxuxWBSv14OSiFPI\n5Tlz/ixup4Pbb7+VYL0Pp81JsKmZaxf+XUft/2/8TuSGff8H3//q1l3bMRv0dDQ3Y9Dp0emNdPX2\nMT03y/Clq4xPjBOOLVOo1JAMRurqGwkG6qBaRM6mGRjo5+zJY/S0t7Bxw2rue897UBWRQjxDcX8K\nP40skUZFpdxd4u5770IQRD7+6KdJJ9Kk4kn27t3Lz3/yGH6/C40k4vXXIddK3H3PfSwtx+jq6sbu\ncFGsZIlnEuh1JuLJFN3d3RQKWarVGvlsmYmJUfr7etCLIolYHK2oxWH3EAzWYzFbyGUybN20mYaG\nBkRRwOGyMz55HQnoooM66rgkXOb8+bMshMLMziwgCFosJieCIrN37068bgvdXb2cPnMZo8GKKAhk\n86UbpJyKiqoqaDUCVrMDr8dzA/eUylKpyFQVBV9TAyaDEY0kotdpQZYxGwwUiwWMJiPVsoyigs6g\nIxxZQac3MbkwTUmWae/oJJvLUSiWGezrIh2NEQqFSS5GGBpYz4FDb1CpltCoKq3NrSyFlynLClu3\nbGVicha9zoTZZEVRDUxen8bn9SMIZfQ6kaMHDzI5Mcq2HRt45rkXGBocQCMpLMzNsLC0QC6fp1yu\nUZpXuYW9TDNPHwOI6wVQNZw/fxGrxUGxVEJUNZRLJSqVIoViGq1OS02pUShUOX3qEhNTs1y5dplY\nOPyOcsN+J9Jdevt71Z/85sc8/+yzOAxGBrp7yJfLvPDaq7jdHmrFEtl4iovD46TlGjt27aK/YxUH\nD+zDbNBwy84t/Obxx9myeQ01uYzeYMAabGf0/BncKOzesY2fPvcCZZudkZFpVEVgcP0q4skcN++9\njdv27sbrcZDN5Hnil79hYXaSmYlR3HVOivksBslFKJQmnc3g8jj46Cf/AH+dh6eefJkLZy+gKgJD\nq/pYWV4ikUjQ1dmJJEoY9ToURSWdzrKyEsXnd1EulqkpMlarjZVEnFQihdVmoaW1jWqxRCgUQlBE\nECXiqTgOp5saNZLJFHJFQa8TcdvMvOuu2xgfvVHv4fP4cdhsRLMZKpUqlUqVbC7PSjhMY1ML46PD\n7J7bRpEqRUrkKRLblsNtNyFXK9gsFiQgk8/T0tJCrlDg0hMX6aSfEmWipFghRh/9uHAhIXKo8RBm\ns5W7776LH//w+/i8Xh665w5iiRQXLo0RTWWxmgxoRB0Li4sEg/V43U5C4TAKKrVajaKiIigCFr0B\nrVpBVAr86Wc+xfTCFJ2DA0zNRNmzdy8/+/mP+G9f+jwnTpxg/8HDnDx1DhAxm8zItRo93X1Ua2UO\n7z+Ow+GgUi1TU1QkJBSlQl3Ah9NlxWKzMnx1nGCggchylFK1SLGUI7P0znpK/k6cLD/4wfe/+tnP\nfIL6xgZe+e1r6HV6LEYrgwOD1NUHWZhboK2jl0BbF/3rN+HzBTDpdRzZf5BN61cTT6zQ39mOoNRQ\nlCqKaOSNg0fILoX4g4fvArGC1eVjbCZMKlHAZNBTruTR6LQ8+ulH0esE5EoBRVXwNzRw6NBh+nr7\nMVhsmIxmEtEskeUYQ2uGUJEZWttPR2crfo8Du91ILp1ldnqeVf2r6O7q5eyZ85TKFWLxFaZmZvD7\nA3R2d5FOJJEkCVlRKBSKaLVaBAHsdgcGvQGtKFIpV0hls+iMetweL5FYBEEjUN8QYGhdH0aDnuXF\nCMlUgQ2bt3D16ijh8DJ2l4OpqXmqssJiKITf72F2dhKrxU5LZydzo/NADS06nHi5ohulzleH2Wqj\nXL7hRKhVatRklWyhQN1EIwXKXGEMFQ1adDzCAxzjTcIsElxdx+rB1Tz3/EsYjFZQa3hdTpxOFzqD\ngbn5Zaq1GvlCAa/Ph0YrotQErHYnS4kYWqMJm9vGF77wZxw/eoT65nrWDK4lFlumraMJSWPgsV+9\nyJFTF/A1tnDH3r24zSYkSSCRTDAfioCiY/fuPZSKRd448gZ7btlDeHkJvV5DRS7S0lzHxk3rUBQV\ni8XByOgYAgLLkSVsNiOCBlZmZ0BVfn9q8AuFArHlZVwOO7v33srL+/cRCoXZ//oBpsYmaW/vRJEM\nSAYLeoMFs9lKtpCjvaeFpvZmpkIh0uksilBDQeDMmQuoxQKf/dgHUaoJzDY9FpuDpcUwoggupwVB\nqBFs8PH1v/4SR48cQK8TePHFF7E7bfQO9vGhj36EZLKI3mAllUljtRqQNDWC9QEunL3I0nyIoN/B\nXbfv4gPvf5DPPvpxjh45wqlTp5ErKol4itvvupUt2zYRjoRIxKNIGi3VqowoSITDyxQKeVpb2zAb\njOg0GuLRCM0tjZjtZpLpGDMz01QqRTZtXkdNLYNUoqWrHrPbTiyV5vWDb9DS0Ukim+LC1SvMzy2g\n1GrE4jFy+SybN2/A7/dy5fJldJhYYJ40KZYI43K5GJ+cJh5NEgpFKZZVjCYnyUwRuaZhmThjXEdC\nS5hlsqT5Dt/BhpU8Obo6ushm8tRqAgISu3bu4dCh4zQ0tjI5M40o1ajIZQSNSjwVJZ1LsxSJMDY5\ngclqoamjidtv3YUoynzpb/4SNAJnLl3k4JGjhBbC+N1euho93H/HTr74mY+hk8vMTE9z+OBBNm3a\nhMNhp6mpiVdffYVQKMTdd93H5fPnqZRyVOQiu3fvQNDWsFrNpFMpZmcWKORLhJdClCpZNm5ZTVND\nkN133fGO5fR34mT57ve++9Xu3jbisQT/8oMfUecJMD4yw9kLVxmdmsPm8pMty1y5eIVUZJm+gR6M\nRh2DgwN0dHayf9/r6KnQ1tqCKIqEl1f45Cf+gEpmEZfdRqxs5Dv/+gRSrcJ77t9DLr1Ea2MQoZBH\nqCrIpRpT0yFCs3Ns3rCe1asH0Bo0WG02/L4ApUyWjRs2sBJPEUvG+cpffR6DRsTr8lHMV4jH4xw/\n8RaPPPwQJ0+fpKbU0Bn0RMLLaDVaoisrTE/PUSxVyORyJFIpFFXB4bCRSiSRRIF0IoHeZGY+HGL9\nxg0gCmxYu4ZEPE5jQwPDVy7xnvc9BFoJj8vH5NgUxXKF3r5ellbC1AXr6etpJxFPsX37DkBFIwhU\nCzn6ujpwXLEjocGEDgkRtVuhp7eXWDyGw+5AK+mJRKNEYzEEScW/4GOZGLUbubM4sSNgYIUodfgI\na1aYnp1HqSkI4g2GtAzML4YJLSzhr/NSSBUBAUHQUpJB0hrQ6DUE6n088t4HsRjNmM0S0zPXWb92\nA28dO05jUws6oxmH08rA0ACrejpIxpdoa+/iH777jyxH4pw8ewGr1cPszAylaomqXCGViVHKlanW\nFCxWK5VyFZvJw9GjJ8gXbnR9y2RjdHd3Uh+oR681cub0ZZbCK5Ryyd+feha5KmPRWjl7+hxuq/1G\nyntlEQktsixQ/UcRMwbmmUFAZmU2RFGs8O73PkQ+n+eWW29j5NwZ8jWVE2eP87m/+FM6muqZHZfI\n56p8+av/QO/gEAa5hEtVsKQzbFs/iIzAfCzPqctXmAjtJ9AQQIeIQWegVK0Q8Hkx6vS8sf8Nfvnk\n87S2dVLX2MxffOGrfOB972Zs+CCnT50GVSSZSjI6OobJbKB5xkcDLRziDWKk0bXqef/7HuQXj/8M\nnU5PTVXo7+ujPvC2R8lgRqszUVMFgsEmTp48Sy6fIzwXZXBoHfNzUQSsVPICZr2D2XSYuoUAy0TY\n9+N9dNFJ/+2DjF46Q319Pc8//zImo4Wejjpq5QqSpCN/W4lyKYuiNyAIAnpZIJVM4fcFCM3PEwzW\no9HrCTY24HE6ie1eoa4U4Pr1EXbv3oMo6LlweZh4OMWGmxtoa2/mZ48/hQgIItRmBCrUuB6a5QO8\nh33h1zBhoEQNGQ0uLLyX9zDGNXRTAoU749x08xZUpYpUq2DSW/iTP3mUr3zxK0RXosTiGWLRFT70\nwffz+m9f45lfv0qpqCOeVjAbXCwv3Yhz53MZ7r77diIrCyyvrBBsqrtB6r88jtHmRJbBZNBRU2qY\nLWYEUUQUNIyPTWIwmdHpjaSWp9+RnP5OGPhWq0XduWMHA4Od6Aw6br39Pj756J/gdDhQNHq6D/QT\nxMvT/IoaVZxbXNREAbvTxtoN6/D6fYRmZxi+eIZVna3Y7VZcLheJWIzHfvhT+rr7MWpVOusD9Lc1\n0hSsJzw3DVoNRZ2Zy7MRwpkqGoPETTfdxIYN67E5rCSzOao1mc997ivEohVESUCnV9EoCvMzUzhc\nNmS5wuDgKnp6ejDozJw5c4YN+9aTIskJLrDIIqJfolypoDdqaW1t5drwNe6+5x6OHzuORpCoFEt4\nvV68Pi+TszOU385XEhHRaLSooki1UkGnF2npaGLi2iiaBQO7uJlLDJMgjdgjMdjeTjIVY2J8Gp+v\nAa2+SntTE4uLYbKlIusGB6mqKoV8HqveyFIixujoKIVyFUnS4AsEEAVYDs2zecNGpuZDrFvXTyDQ\nyNnT15iYmaJWKqJFRGeSKFcV5OoNxpt+Qf924+4KdkyY0JEkiYcmkhT5F77HZS6gR8sKS7y+/WU+\n9uinaGls4pe//CV//md/hllr5+Zb9lAsFGhpb6NSLmG1miiVSvi8QSZmFink89TkIlCjXCoiaUV8\nHi+xWIyd22/C6Xbx8ouv3HCXl6uUy2XSuSR2mxGzQU8mm6M+2Eo6mUXQSKjA4vVL//mdv/5vDbvD\nrrqCPpqCHjasGSS0mGJ8fgaXz0NjsIXRfxlHoUSBNH68lPeoJJNFNAYjCFX27N6Fw+PF7TDx6jNP\nkV6JsXnLNq5du4bTpGNx9Crvvf92DDotTU0NxBI5KtksaCXmUnlOXJ3gejiF1ihSKZbwB/385V/8\nOY2N9ZRklQ999HN43C00tQVpDLoRyzLf+dZ3Wb9lLcGAj7aOFlxOD5WywMpyhGf/4RmC+EiRxoKV\npoebAZFQeAmNRsPI6CgmkxFqAnqdnnKxhF6rI5fPU6lWcbpcb7dhKKIiIGl1qKqCIteQtCKrVvVh\nf9nKVa4wwDre4jhStx6NLODxWsnlslRLKrlqFp/DRTQRRRUFPA4Pi8tLGHUGLBotGqMOvz9AqVLG\nYnNwefgqBp0WpVLBabdh97oxGTXIskIyIbMYmUWDjmwyhaTXYdDrUZQaNUVBv2IAqlgwUo8fKwba\naKWIwBkus4UN3McdVFAREdn3pVe4MjzLxNh1PvC+D/DaKy9RSBWoyjKt7a2MXR+lzu+nb7CX8bFR\nEqkStaqCikKtXEYQVBS5iCSJyBWBUlnm1ptv4eSZUxQreUQdaCQ9Go3EHXfeRiSyhN/nQSsamJkO\nMXF9ElUuIWl0TI2+M2X5nTDwVUVh3dAADoeNYFszW3ZsY/WGrTQ0dzM2OkGeDEus0EYbWrQYzC4+\n/YVv0rD+HqJ5E+NXR8ln0yQyaQY2b0S02Ni//zD33vMQi7NLfPIjH8ah19HY2MgvnnuRx194DZ3H\nT0Yx8fy+U4RX8vj8Pm7efgstrR1oJRNP/eZ5VFUgUyjw3e99g/e//w42relk1+Z1eD1ubrvnTlwO\nF6dPn0epSiTjWbLpDD997Ke4cNJGE2WK5Eii1dbI5+IshmaZnb7OmqF+7nnXHZhsZmRFRqmpZPJ5\nJI0WX2OQQHMDuWKRmiCApKNULFAoJlGUKqoscPH8FUYZxYCGOaYIcKMRlIxCMpVBkQUKuRKiIlEs\nV9HptEQXF1FrNQRZpL+nD0EvIen0LEaWiSeTXLxwjtamJuSKjFxTWIpFWVpYYGRkjGy+QCg0y2D/\nIAoyOrMeQRJRaio6vRGdTkuZPHmy6NHio44qCqOMEsDJ1/g893M3aZL8mMd4k+NsWreGiWvD5FMJ\nnn/6aRLRBLl8jlwhw9zcDKICy3NhpJrCH37w/eRyaUrZLLV8iWIuj0aUKBTy3H//A4iSgM1mZd/h\nA9x9/93s3rsLQSPS2ORgzZoeXnjuZWKRFM8+9Qr7973Bzp07qUkVHH4rx84ef8dy+jth4H/zm9/8\nakuDh4FV/bg8DZz8+CSB0y2YTps4NHuA5t0tuHscjEsjuLc2MD+zTM7iZynnoqWxj6BP4ProKRqb\nA5hsVuYXIyiKwKkTJwiHFqmqYLEYsTh9WNz1JIs1ltJ5Xjp4jGJVQmc043I6seoNnHnrDIoiMj55\nnbnIEu3dHdiNRhKxCNFYgs//+ZdwOHzsP/gG8ZUo5ZLC4sIyvT0DfOvr36Ctsxlzl5bAbT48rQ7a\nNzQhCjUGh/oYHRvjnvveRX19PQaDkUsXL4MsoKAiRSRqOQ2mFQczs4u4sl4qmTJCWqWaq9LQ28S6\ndYNEI1GoQdaY5o6Ht3Fh6SSWAQfJfAmpCuVKFQSJcrWGJClUqxWSyRRWm4PGpiZyuRKR6ArZfJ6m\nphauT07idLjI5W6A1kXpRuBOBYL+ADt27kKrNXLlyjAet4dCvkhdwI/VZkFRoSqXqVYrrL9lPaJL\nYDw7yoxpBrlFJWZP4H23n1fcL3HT4ztwfcqJ+1Ynur0gVCus6R/graNH2LFzG9E34xiyWtryLeQS\nGWQ72GxOcoU8z77wHENDA2glAb1Bgz/gJnk5wfbiLgynLMxl5jHWG0mlU0xOjJPOJnA6jQiCSiDQ\nSCFbZTkSw2axUSmWeOvNg7i8Jl597RU+9PFHmR4e/v2hu3z961/76u137aGjs4/zw5M4TzVRpMDj\n/BgXZixtZmx2A7GlCKloHAGVspyhqbGd828eZuNgI5VyhpGxMdau24DT6ia2nKCYL2N3uJgKLxFK\nZ0gWZB5/+gVmwyvoXU4Wwsu87z0Ps3PbBjpa/JBPk1wKodeLDKxbTTQaY6C/H5fTidvh5rnnXmNh\neomFhTmMFg2bN2xGURVSyQz5fJ650CRbt23EajGTTKQ5ePAInd1t+AM+YrEV6uvree7ZF+js7OXI\noaNs3byNkbExEEW6sl0kiaEioUFHDYUcCcrkkKhR1x4gm88wPzVPb1cnDT4P54/8lj94932cPX0K\nFQ2IoNEYyBTyyGoZkerbb38Der2epUgUBZFyuYoqqIiCRD5fQJZlSqUKxVKFWlXG6XJRzBeIxRIs\nLCyzsLBEuVqit6cfvV5HIFjH2OhVCqUbbckRFbxeHy1NjVhMAu+6bScGScJidJBKpnC63Lz4wis0\nt7bRXF9Pd3MzAXeAv/r857nz7ju5eOUyu8O7aKGV0xxHADRuHcVqiWKpgNVioqOtFbvLwaXLl1iz\nZh3Xr86QJ89VrpIjS0FIYbNb2bZ9C8VcgW2bt1Mr18jnq4yOjINSoySXcNosVHMxvvJnf4wqwelL\n17h+6ervT5xF0mgxOdxcGJvA5PSiQcMLPIcLBxpUFLVMLpulramJjWsHsFmh1ytxx1oP+uo8bx48\niN/XQDFXRSnIDJ+9zNjwBIIookpQrEGkqHDi2hgOf4B0Oc9SNMxNe3byi1/+FKWa4/Kpo+jJsWVN\nJ11NXupdJlrrvLzy7Ascev0gLzz7GpfOD7N27Tr6+ropFfMceeswyWScYrnA1WuX+MTHPkI5nyMW\nSbC0lMDqcKIxmciVinj8Xnq7+qhV4LWXfku1XOHlV17B7XKQz2UZZZRGAlTIIlElT4Y6XGxggJ1s\nZ/vWrYiqhnsfuJ/IcphiIcWn/+SjKOUsf/TehygnY6hClVI1hyyX2HXLdrq6OnE4HICEXFXRam9k\nFGh1WgRBQ+HtcmJBkDCbTdRqCrVajVg0yp49e+js6UKnM5BO5XjogQcZGb3G+PgYpVKBUrlIS2sD\nLpcDvV6HgIzL7qSjuZlsMs701Ainzx7HaNSzf/8Rgr5mjp+8wDe/9j1++sPHeeY3LyIrIrFEksXF\nEFFWGGMMuFFiXlVl8qU0K9EwPm+AA/sPoRF0WE02rl4ZwYiZGiAi0UQdmzavBknl3LlzhENRFFnL\niVOXmBybxqDR4HSbCdS5sJq03HHLLprcdoqxED/43t+/Yzn9nTDw6wJ16t3vfQRfYwuKqGXf514l\nTwo9oANK64p0t/USX14gHQ2zccMGIokEp89fQbTYWb9hI8VilHvuuYcnHv81i+EkGlmD2arB4TUT\nW0nT0NRAOhPH5bIBInNz8/QNDNLf00MhFkVfLuCy6NCpNTQGI55gkIJg4me/eRZFkoiES6xevZZU\nOsn5i2e44847OHT0MJIoUqtU8Hm8NNYH6erqYeL6JDarlXB4kVQuzrp1g1j1WqqywJHDp+ns7uXk\nydM0NDWQzSVJJ1JsXNiMCpzlAlUUilS4k23MMsk0i9g7vJTLBRRVQqcVkOQSTQ1+6n0uvD4fmUKJ\nfSfOYXY4aG5s4eqZS2jNWiRBR75QQCPp0OgUlsJRGuobyBUKVCslAAwGPaVSGYPRhAgk01Gamhto\namng0vkRirkKDpsVjdFAaDHEwFAP7e0tKEClqlDM5PB4bBw7cYydm7YxOTrJYmQJJCiXqzQ1tlPI\nV8jLJWo1mcZAHbVihZVUlIZGL7fv2c3CV0KsYTNf51voMZKuW2H9mrXMzYcALWpNpFqtIgjg9rgI\nnVpARkGHjjIZOrc1sOddD/BP3/4ukiqgNxrRas3I5Qo6JNr7mtl+8ya+9jffos7lYeemHgqFBFt3\n7uULf/X13590l2/+/d9/VetyEAg0IFZVJvKXsXfph1I6UAAAIABJREFUKfrLuAedtDY2cebgIR68\nYw+NViOdwQBeqwGb3U6uIqPRSxSKeRZCi9hsVkZHRtBIEi6XFVFUWb12DRMTE2QzGWoKWCwm4isJ\nXG4Xr776EsVCibnZEP2rBvF4nKjUcLrs/OrXTyOLWiS9ienJMNF4lHg8gqKqzM/OYjGLWM16+nq7\n8bgdrERXyGVzpJNpkqkERqMZAfB6vSBpyGeKJDJF2roGCS/HeeShhxjoayOXWcG3zcxvp19GGzCS\nIEnrQBPXTSP419fRt36AqYkpDCYLkl5LVa5RKJVJyRouXB1jKRIln82zectGZufmmJ1exGAwUyqV\nsVktVOUi1fkS7qQLm2whm8ih9+jo7GqnUqmQzWZobGogm00jiDIPPXwfVblIoK6R6+PXqQ8G+Ngf\nf4yLV0fx+/30dPfx5hNv0XKlH/M1I9nJDCHTEj2relmcDzMzPUs2UmZ9ZiO35vdyZuksOp8eUQs+\nn4Ndt9zE3MIs6VSGjo5Ozp67yIf+6Y/4dfZJmgYaKBiz7Ni+g3y+xM033cK5s+fRaLXI1RpyTWV+\nYRZb0IJirZIS4hTEHLffehe/efJp1gytYeO6tbiO2llOzaLN1hCyZUKxCcILi4g6C6rRwuRcCH+g\nkfaeIQ7s2/f7Y7N85x//8au33X0vbrODl596juVwiJa2RhChpbGJ+eGrfPx9D3L6zdfZtXU1qpxH\no1Vp6uhlZG4Fq92BwWLBX+fDZjFh1GhRpRo2h5VSpUS1VmHnjh2kU1nyuRKNTQ2E5pdQZBmjQUdd\nMMiqdesxmPREVyJYTCam5xY5c2WaWKbI/NISJpODfD6Fy+2ht7ufgL+OBr8Xg96Iw+kitBi+0Qbb\nbqNarWIwmxmfGKetqY0L5y+Ty5fwePxcnw1x7fo8qmTl6rVrXL1wilaPk3qbiY7WJh546BHqfH5C\nMxNoNUbisQxL4WUG16xCEGuEInMgqrhcPvKFPBaLBbUm47Qa2LXrFq6OjNE/uIq52TlURSGdS3Pv\nfe9i5Ow1OmkjTgIJkfV71xAM1jMzMwUqKCoEAgEMRuONNJy2ZmRZIhxewF/n4fhbx6ipCrlchrq6\nOuRrNcKEiDBDgjlwK5hsRqanJynly3yk9DHOcZHzXMSIGcVeYykWxe2xYzQb0epsuDxuRq5NYDLZ\neX3fPgQE0skk/X29OG1ehkfGGR6+RrVaA/VG79F8PsOuXduoqWU2bF6NqtR44P6HmZyYpVapMb+w\nQHxlmcXYLHewgSBOQkxy5707eNeumzl36Tyh5RW83gbS6QzDozNEl+Z/f7KOfcF61eTx4bW4WJyZ\npaG9Aa1W4Z77H+DYG4exVnLYlCLbNg1hMChUVQWbu44vf/cn5A31qLJK56oO7rvnLp59+nEqhSLt\n7Z0cevMoTo+Dzu5OmoMt6HUWrly5xsTEMHW+IHqDhMEoIddUFFFDNrrIBx+4l2o2TyDQyl99+4cY\nbFYuXj5Lnb+dvp4OajWV0EKYfC5NwGXFGwyQzqRpbGlElivkcjmisQSNTW28cegoLquZqqqQzmUx\n6kygMyJoPEg6G6JWpsOhMnr8AF989GOs2b6Bz/63b7EQWeHh++7m0PELiGhJ57Ns3bYejRYy5SzB\nxjbq3A387J//GZ3RgtNkoq3ew7HTl4jnM5icNqqVCg31LXjcbqanp2hf6GCca/TRT4wEM/ZpOjt7\nSMRjtLa0kc/niUVTCJJKVS5QXx8kk66ysHid/p4e4isp9Fbr27iqMoyAHw8SKZrx4fnTelYKWUav\njDHUt45nfvQSVpwAyFRQ/SqugJ+mZj9Wq5WzZ8fQSDUqRZVquYzRpCEbTWAw6nC6Hawsp9Dqb3QN\nqykyWr2eUjGHXCszuLqP9esHyeSyXLxwBY1gZGkhhSRCRSmjE1XkuSx9BFkgzOf4r/y0+Z956K7d\n5HQaQmWR1195g1KhiFZvYmVx/D8vziIIgkMQhGcEQRgTBGFUEIQtgiC4BEE4IAjC9bdn579Z/wVB\nECYFQRgXBOG2/9336zUaDFotyUyEQIMdBIWp2RA/+slP6O5pYeeWtaxe24ciChw7eZGWnk1876cv\nIxgCVEsyqzcN8avHHqO9tZ1gYxcf/MNP8saBMwgFDeQFZq7PUygWMZpM+Lxe3E4PgiJw4fRlhoen\nScZz+Nw+FsIJHK4ggtbKD3/+BOlUmEohTnNDKw88cDeCTqS+MYjJqMfl8pDJlTAYTJRLZfKZLJVi\nBY2gwetwUcxlMVtNrFq/kcbmTtav20bf4Dqa6xtQslE05ShKJszU9CxadwPfe/IF9h0+zfqOBj50\nz14WZ+d55IE76O2qZ/v6VSTmF7h68RJSVccv//UXPPajx5BMNtBqWEzGOHT2Ijq3C7PTit/nxen2\n4HH6WJyPQk1DPUF2cQtlZHz46Wzrx+F0ksxkWFpZxOl2oNUp1GolFFmhqb6DZCJKd0sHG9cNsX7d\nKjatGWL9qnbWdbroporAAl/kA3ya97Jzw2aW5+Ks6l/L/Q8+xE1sw4ETDRpENEhaDfl0ls1rd3D+\n5DBqWUYpKkiqjIhMsZDDbDah12rp6xugKoDeaKCmqKxevQZVkXF5PEiSiMVg5uTR8zzx06fxu5oY\nHFiHVi9RqOaRazLlMijYuEKEQW7m63yfosXDUyfPI5k9HN3/JpWKjMFmRydJ70QFbsj1OzlZBEH4\nOXBMVdUfC4KgA0zAF4HEv6nBd6qq+j8he7/m/6vBPwj8h5A9i9WqfvUbf8vPf/ETXE4v8/sjpImz\nhc04MKHcvcy7tq5GpwF3QzsGfxOf+cu/IS9D36o+fvjD/4FYKVNTVQ4eO4IvGGBpIcZf/9VfYzSI\nuBq8CIrCxg3bsJis/OqJn6EzGpBELRPXxxiKDDHFLDacQIVUS5Kbt99MLL5MWa4iHDAxTwQNKmUq\nlBtvGMYDvT3Mzc2j0Wq4Zc8uJqevk0qlsJotqKgUimXMFh+hxRiJRBqz0UhLi5+Ra8NUqxVMFi1y\nSQZFRStpeffebdSyMbRGCweOnycha/A5rTQH/TQF/cynUiwvr1AolEgkEuSrNSrVMls3bUIvajh8\n+SQOi5Y9O3fitLvY/9uTKFUoFIsY9BKZfBab1YrFZkdVVBaWFti2bQszMzO43E7sFj3VShVUPcNX\nJ8nlUrS1NaMVRJaPR4gS4x5u4XbWsf58B+mSDtQaP3rsCV7efwyH1YXJYmUpuoLZbqcl0Mry8jLR\nWBQRkWpVplyu4HA4icaT+Nw2EAVy2Sx2m51sKk19IEgkGUVnMJHLZqhWKqjKDXhHvpShs72dns4+\nxscnMTuszM3PI5fK9HZ1c3V8CqvJTLVSxWK1UioV8Xs9LC6FqakqglAl4PWSz5WoyVBRSwgoRBZm\n/3NOFkEQ7MBO4CcAqqpWVFVNcQOm9/O3l/0cuO/t+/8Xsqeq6gzwPyF7/+6oVCocPvAGfX2DuAIe\nmmnAiolxRphjkWihjOoKcGEuwkw8wa+ffxa7y4Lfa+Ubf/cVwtNT6I1GDDod2zdsplapEkvHQVvD\n4XWxEAoRTcR48sknOXXqFA89/DDrNqyhvjWIRqdDQMCDGy82NAisGhpkJRFnam6Gufl5EiRw4cCG\nFTMmMoUM/av6KVcVCuUKLo+bJ598EkWtYTQZCTQEyRbyWM12KuUyiqri9nhQUbh86SKlYgGzxUyh\nnKd/dT/3PHA/kl7Psy/+Fkmjo1KBTFVPrQbz4SjLyQxVjYmXX3gBnUbEZTNz05ZNyHKZjRs3ICBx\nbXgMh8nCs795kofvv4eB3i561vdjq3NSlivky2UQJMLLK3jcThYX56ivD1AsFUgm48hyhYmJMXr7\nu2lpbQbA4bARjcSIJ5O4sNJHN+10sZHbWcqIfORTf84//POTvLL/HIJkoqoIzIfC+L0BCukyV69e\nYWFhgXQmg91uo7e3lS2b11Kt5nHaDfjrvMiyjKTRUKspaI06VpIJVAX8Xhcmkxavx8kDD91La3sz\n995/FzfdfDOh0DIL8yGuT17H7rCw987b2HX7LaDUyOYy2N1WinIWRVAIRSMgSui1erQaI9F4mlyx\nTDKXIRpfxmA0/u9U4J0rC9AKRIHHBEG4KAjCj9+mvPxHkL2Ff7P/34XsCYJw7u2LYrHCyVMnWb16\niH56KZOnkXqWCbMYifLEbw+REvSMLszx/j94hC9/4b/ypT/7NEZBobW5iUypTCSawGV309+9isd/\n/StauzqZm5/DZrVis1rRGzWMjIzx6quv4g24aGxupLu7izgxRECHgBcPkaUFlhZmcbhc+IMBbmIH\nU0xRQ6GFZoKBACaLkfDSDc9YTVVpaGqiUCoTT8QZGR0lnymxEl4hHA5TVcv09HXz0LvvxWI34XBb\n6F/Vz4at21hc/n+oe88gOa4rTfvJ8t62t9XeoA2AbtiGB0hK9N5biaJIaWc00kiakWa+FTUjszMj\niaQsJVIkJVGi6EUQNAAIR8I2gAbae++qq7u8r8ys3B/N2NjYiJ3hxjc/hvdX5c3IzMjIe+rce+57\nnuNlbGwYRRbRWp2E4iLhdJZIXCKajKIxGRiemeW3f34ZtysPl82By2IhFY9RWlhEJpNhdmERQa2m\nwOrm+Psn+NnPfkVufh7lFSV84bFH0FoMON25ZDLp1UV0JEhVtYex8VEud3cjqMBoNHLDDTeh163u\nfKfSEaKxOKFYFKfTzl3cSiN1zLHE9TzAXZ/7GqGowMWeUQxmJxaLjaJyDyazg5npeTSoyGahvq6e\nW2++hfn5ecYmxlj0zVNaXsS27ZvIZFI89ugjGPUGEok4Go0OlVZDFhgeGqatbfXPvqfrMuPjE7jd\nBTz3wh9Ip1Ko1Vl2d2wjHIjyzrvvMDI5QWFxDrn5DlrXNrJjx2ZcOQ4S8QhrW1rQaTXIWQWXy41a\nK3DDzVdz3/0PUFxW+n8Ozf9r+yQSfQ2wHvgrRVHOCYLwFKtc4//VFEVRBEH4f4bsAb8BcLpdSjQR\nQiWo6DxzjlrquZKrMaJlOx28bXyf/PxylkNBHnr4y6jVCj19XegFLRpZIKesFIPTRmFhAcFwCJs7\nD5VOTygUoig3l3RWIqvRY3QZsYh6dIKGpSUfebnFRCMpLLhIEsFLkALy0OmM2Bx61GoFlVbHBS7g\nwsEyAXayl/PRS/h9QcKRMA7HavSrsrKKUNBLcWEeUgaWoiuYLAZ0puzHOSF+jh25SH1tERYtlJQV\nMzI5xVW7r+QPv38Jp9PJ3t27mB3rI5WJkiWBSi1SVOimZU0rx46ewKxV0KeSjA700rZ1M3IsSl3H\ndp478we2b95AXUM9P/vl8+h0Or73g5/ykyd/TDiU4so9e+jqOofDZSGdkigtLaa6qgRRkyXXnYdJ\nZ0Sj1hKNJDEaLeh1FlrWNjE2Pk7SH6NveJAkIsssrH47NDhMLuKxODJJNBo1/uUgdpsVn28RT1kl\nPt8SKllhaKCfwb5+LGYTkqjgWwqRSi0R9MfwLXt5+te/xr+yQkNDPbPz82jUq9xig07H6bNnMap1\nLC2tYDU6efsvB8lx5zE3N0d+QQnDY1NkMlmc1nzOf9TFzHg/JZUefItL9PX2YrVbueYzn+Htt9+n\nsKCIHLeFFf8SOp2GUydOEwoFaWxq+sRj9pMYyxwwpyjKuY+PX2PVWJYEQShUFGXx/y9kL5VK4/eH\nsFpsjI+OYnnIQFFpNe/uf5uqwkK217bRee4ib+5/i2BkGTEZJx2HV/7yOmI6QSAe4Kc/+wUuVw73\nffExIhkRk07N0sICZFU4ujw0cS130sFbPMfMPcsc/aCTaz/7WRrq6jgd+Iim5kaSYpKp6UmqciqZ\nmZmmzFNCNBrnsn2QK/ZdQ9vmrfQPDVM10UAmk8SR6yAai1JoK2RuYZ6ifDc6vZp0Sia/pJCZ6XmQ\nonz5i/dgs6rZ+Y9fY3x8lILCPA68fZbX3zpET/cIZpONRDzN/gPvYtCs6shuu+sGzp47x6ZNm3jh\nt7/DbnGgz4oY9QpNtaWoxRjNa2p5+c9/wlNRwZnTncRTSWRZTX5eGeFwkEce+Wua1jQzNjaCp6KE\nrgsrgIyCTFYGLTo8pR5CgSDnfnuOK7mGTrpZZIHa2yrwlJdQX19Db08fpSslVFFGCeW8xOuEIwkU\nJUs6nsRsNWOx2rjyqt34A0s0NlUhXkoRDITRqvWAgkorgAgqQYPBIBCNJ7CY3AQDfr70pS+RVdK8\n8+5BJEkmk0qTXEihQsHHCvk40RRJkEmTQQ2oCYTimCyr7yFJEI1HMBitiHGJmcl5DEY7dlsOnZ2d\n6PU6wpEQ06NetuzaRkNjE2+9+Rc0Oh3+leVPbCz/4TRMURQvMCsIQt3HXXtZZYLtBx74uO8B4K2P\nf+8H7hQEQS8IQgVQA3T++w/JkpNvo6KyFKNWTyyQ4KXnX6SlqoYiu4naPBt3X72P+269iUAoTigh\n8/Krb5CWs8gaLfFUlqeefIZNm7YzPDqKFI+iAQwmC/biEvLZyBBL/JHXWUsbs5OLiMnVObrTqeex\nxx6ktLgAm81KQVEeqVQcp9tJLJnEZrLQUFfHwPAQB49/yMDQFOFYmpnpaaYnJ6jylBMNB9Cp1eh1\nJuZmF1CpwWax4rA70Chw9d4OdmxuwaAXCMeixJISzzz/4mpkx2wiIyURxSTtG9sIJeIUeao4cOAA\nJSXFpDMZioqKSWfS6MxW1rZv4p4HHuLqa67GrNdy1RV72LNnJ7n5ufgWl0knV1NngyE/oUAYJSuw\n4g9y7PhJcnLdlFUUYTQaiUSTLM0vc+KDjzh86AMcOBnkMjvZQRqJ0bFpJFmmpqaeu+9+kELKmWKJ\nF/gzegxkxASCGtQ6BYkkCTGGP7DEvn17CQejJJNp1Bo9glpNJB5HZ9SjVkNaTIKQJSunySopzCYD\nL7/8Z1599Q10Og1mk5F9+65CjRo9Gq5mLxqSWOQgj3/lAa7ZtQmT2YBap0av1aBVq5EyKbQaNU6r\nhdamBpLJJIoMgWAQJQsVFeUgZLn/kQeIxMIcP3YMENiyaSu5uXmf2Fg+aabkXwF//DgSNgE8xKqh\n/adA9vQ6HS6XlWQ6TnG5h+nROfZ1bMOczbAw1I1S6sDhcFNRUMDffuVr+CMJtJpVab/BpKekuJyp\niVlkWaCitJyCPAddXRepXLMGe1kd8bcdrNDHP/FNvsGjRANhdu3Yg8Ekk0oGKCpoxW63MvXee1it\nZkL+IDqDltzCApamFrDZzdxx323865O/xOUux7/oo7q8in17H8DnW2JpaZELFy4QCIRobKwhGg2j\n0wo4zBZyDKX86he/5ItfvJvlYIRAROTk/sOIag1ul42S4hKmZiaQJAk0Ius3bWRmbo5kIo3T5eKD\nQ4cJBSOoUJNbWsVv/vhn6sqKyMvLwWDQsbAS5cTpN1dJmUeOodULdGxrZ3JqDEHQs//Am5SVlpLj\nzqVjawcTk0O4XA4EWUvA52drx2bUGgjNBthEMxb0WLGQUURuvPEW/vVffgxZDXrMzDOHAycJkkik\n0JDFbDNQVlHB1MwkXq+fZDLDwuIyoqigIJDOiJjMZrbv6GBoaJD5+XkaGxowmc0c/eBDLFYLNquD\nSDSKoBJwOOwcOnQQFWoEJM5yHBcyX7rnRmLLM2QSfsxmNcFoGlnWYLUayKQlsrJMOhXD4/EwPbfI\nSihCPBzHZDQxPzePlBF5e/9+qqprSMaTBFb8nDz9ES6n4xMby3+JTckcl0PZvGMd/mSc6roWQoth\ntJkY+5rqULJRcvILkRSJ3r4RLvVPENPIiIoeo81CIp0k5I2gNurQG4zIsojeKGAzm3G37GBJyGXh\nhyMU4udZfsTN3ISpw4LWbGJxZpBfPvU9VCgsB2PMLgUZHR4lHFnB5/ciqLXk2fPp6e6nsLSIz3/h\nUV576yhnPzzJlrZWBnq7UasFqqorkbJZRobHyHW6WVhcQFFpqK+uI99lYsU7zNNPP8mlQS8/feZP\nzHu9GDQKxYVlnO/qpKy8lIqKCuKxOAa9gfPnO0FRE41Eqa6qYnp2ig3t7Zw9fw4hC/luJ5lEEpvd\nSm1jC90DvShkMVgMZFIZEBWyskJOfh6CKoPJaAJFzbmzZ3j8O98mEU/hXQwyMTWLVqshEAySPp7g\nCvbwF95FBsQmkaL8AgIrfsKhOBXT5cwyT4AAAqAvEujY1kooGketNRD0hdnQtpkPDh0mlZHJijIZ\nScSgN5DKpIAsDoeZqsoqfMtLZBUYnZjGaXcRiYUR5Cwtra34fD4KnQ68pwYoxkGQeb7BI4S/NINB\nr6VuUwd/870nSAk24kmJWCIGWchIInrN6p6J3ZWLf8WPTqMlI2Woq6uhoKCAlBjn1OkPSaUTbN+6\nA4vFweDACGN9Fz89mZJ5bofy3x69i8vDQxTXrqHnQi8xv4/b9u2iuCiHWCzGuZMfcusN17GwsMCl\n4WG6pwKojRbUNjND/UPUrm9ESksYtToEReRrX/0Kfz7azbg/izo4ya9/8C2K8wpQayzc87mHiSXj\nqLNRdm9q5fY7buGRL36JXVfeTDye5t333iO3MAdUAmatDkmE3r5ubrv9Vn71m99jMpqoKSujurqa\nN954gx07dlBQVMzbb7+PDjXbdu7g5LnTVFdUMTI0iNWsJSc3F18gjUqjJ7jspaI8H41Oy+T0FM1r\nmzl75jQCKvLzCrHb7KASmBqdRZJS7Nqzg96+S8hqAbJq6qsbuNzVDYqEwWDBYNFQUOLCZDQQ8kco\nLCylu7uXWNzPLbfcSjgcRqPR0NJYj1qn4/KlMQ4fPEnblvVksxJDQ4NodTpCy362bO7g+LETCN7V\nqYMGDTIiOo9A45r1nDl9DoNRS8f2DSz7pvBU11BZVUM8HOcPv3uZvPwCAoEV0ikRjVqLgkJOrpOF\n+TniqThupwuX24Xf76cwL4+UJFJVUUPnXzrRoiZMgCJ07NpTRI5BxY7duzh/8QJFJcU4zSpyi4s4\nMzzPzI9NTBIiQIgxxhBzJEo8xSwteHHbnISCIdKSSDKdQpZFZDGJM8/Fnr07MRi0pFNw6eIQoVAI\n//zop0dI+bOnfvL4ddvX0dTSQmF5MZFolMGxcTQ6I5cHRxifXaSyrAiLQQA5g86aQ8/QBEa7E++S\nl9wCF2WlJeg0ehbmFxCAeDTMvi3refimfWxtrqC+0oNWpUElQMeu7fxl/wHycvO4/8H7kbNZ9uzb\nw5uvv05hsYct23eQFdTojSYcZjtDI2PkFxehV2tYmJvDU16O0Wjk/MVLXHfdDZhMNk6f7kSWIZuR\nmfN6Uam0LHm9uPNdNLS20jc4gZhOI2gVEvEge/bsZnZujquuuoLJqXGqa2poamxk7949TE5NYrfb\nyUpZtDotJpOByYkZ3C4XZeUVXO7pRaXWg6BgsTnYuWsbVosRi8FBNquQSCdoaW2iubmJw4c+JBSK\nkU6laWlqIJ6SePPN91BpbNhsVi5f6sbpcpJOr0p1gsEIyUSMdDxKCTnEiZFBxFmUQyojIQgCsiSy\nsDhPnrOIzs7LbNy0CYfFztDIJBaLBZ1Oh1qtEAxFyGSSWK1mxIzEzh3bmZufI5VO0dLSSiydIR6J\nEPItYQwoGEgjkcKMlu9+90vUlLvxLs6S1ejoGRrnwfsfRK+GotJivvvyr/ARp4wSFlggoYqzdfNW\nnHYHweAyNpuZaCJCOp1i164dtKxtpm19GzabDa3aSCohMdA/SF1dFXNT458eIeXPnnri8U315Zw9\n18m2nbuYmJymbs1aJBmOne2ksKSUohwnOo0ak83Jye4x7PlFrASDFBYXc9ett1KaV8T7b7+HLENp\neRmZrMA9t96ISZXh3WMfsm79ZrQqDQIyJrOJsZkZbr7lVmqrqxmZnOL5F15genySPfuuIBpPUFhY\ngJjO0nXuIja7g2wW2ta2k+N04fFUMjE1Q2VFLadOnSMcjqMgEI0l0OtXy0YYDRYy6RR33X0bb+1/\nm4yYZdvWNsYnB7n3/nv5w+9/T05OLvPzc6xvW88Hhw/hdLjp6e0hx+0mk0rT3NpEMp1gYW6JaDzF\n+ta19HT3gqyQTqdAyZJIp/AuLDI6Msrg4CRzC3O43U6iiTCRYJyJiVnIqln0ejl/vpOJiRkSCREp\nKxDzh9DrdFRVVLK8tIyiVigtLmbJt0hxvICNrMOOAye5CB4dgWCAZDJNNBYhGg2R+Di5rq9/hKOH\njpFMJfH7VwCFnNwctDodrhw3s/Oz5OQ50Wq1pFIpGuobEEWRiXkfRo0KbVakNGDBTJoEIhXU8l7f\nW+zcuo64mCa/rAaTu4ynfvo0NVVVqLQGil5vJUKGBeaJEubeR+9nqLuf0bExLHY76UyKkpIiEokE\nwXCInr7LGDR6+nr60GmMXLrQQyweYtfuDi6dP//pMZYnfvLjx7du2UBDYzMr3hXqa2vp7urnzNku\nOrZ2EIuHUGl0qA0Ofvyr54nIKrLZLMlkgvnxGS6e7sLkdKI16BCzGRRBRkpluHy5l4SUZcEfZeeW\n7ciShG95GYfNQmNtDbWVpagEFR+ePMvIxAIVpRWkMxkMeiNZRaDzbCdD/YP4FldIpdM0N7ZytvMi\ngWCEqal5lpaWUatUJEWRZDxGVpKR1BKxeBRFWq0FGQgGCQRD1NfVEYuHqSyrZHxojIUFH0kxhdlm\nYWJ0FI+nnNm5RXJzCpiamcVitXCx7yKplEg0lkAQBHzLPtLJNNdcew0zM1MkkjEMFj2FBfnEIjGM\nBh0tzc1s37YFRRZxO/PRqDQE/EFS8QztmzcTCoRx2d3Ew3GSqRSQwWTWEQoG0AhZFryz6HVqNCE1\n5dTSzQB2XPQme1bLFuoFHA4bd9x5Kyq1ivk5L+mkhEqrRpJWyZZ6nQ7fkpdUKomclTBbjOTn55NM\npqiuqWF52UcgGESvknHoVGQCyzwav4cGSqijBi9BQrkZLly4zBX7PsPBI8d44fVDpNQGKurXsP/w\nSf4y9CEWzHiZo43NnAt14fP7ycgSoYAfrV6nwu3KAAAgAElEQVTD3PwChfmF1NTWctMNN6A1aFjT\ntJYjR44TS8awO6xkswozE2OfHm6YRqth+zVXk1XrSCZTTI4McevtNxCJBsl1mFAJLt4/tQpUCMtZ\n3Co1UhaSyTQpOYMkwMX+y4hShsLCfFwuF3//zW9z750PcPpsL7t2bSMupvEuLVBeXIw/HKLAnUs0\nHuOVl1+nt3+A4MIyU5Eodqed2fl5HnnkIRa8U9gcRq7+zPX0Dw3x0p9eIZZMEEvEUQsCKo0atVqN\nGI2RSiUxW02oBIV1a2uwm610nu+mre1aUmIaUUyAkCWZTmIym7jn3jvxhXxcONfJjo5tLHm9FJTk\nU1blYV37Jl559XXuue8+0pk4B987AujYun49773/HkeOHkGtVlNeWYrD7SLflUNbQyNvHDhIf888\nl7tGceQqFOd7CEWCrCz70BkMnD/dxRX7drBpw0aOHvmQE50XUeQ4swvDLK3M4ymvZ9OWvfh8PjY8\n2MbQ0CyJixkuhM9z1+23YTTpefHFl4hFJQ4cOIwkgygrGE0qJFFCURSMJhOpdArJK3I7t3CYw+SR\nR8oZZ2kxyuK8F1FOE18I8STfYpkJMkTo5EP0mFlDMVdRw4+DA4wGIiS0bk5eHGDL1i28cfRDPhqc\n4qOLA2SKtMRLErTmr8ORl0PgvYvIskg8nmDr1o1kswp2f4Cy8hJOnzlL57nTmM020mmZvNwCvP3d\nWK0mxsfHP/E4/S/hWX7+s6ce39SxiQcfeYxQJElthQezUYdeyXLljm0cOnyUpKywFFhGktM01Dag\nUqlIZTIUlRVT01hLLBVHQIXVYub7//Q4Rp0Bqz2P06cuEIss0zc2yKkzp8kkkmxct45UJsVyMMLL\nr73F8PAoy14f/lCYLFlEMUEyncDnWyAeTtLfP0ggGCMajmK2WiguLiYnz4WkiGjVAmadlr27tpER\nU2zfuY3CgnysFgs5uXmcPXcOp9OORq/GarfQdfkypaWlpDIZJsfH2btrH6XF5Xzw3lFcdhsDl3oY\nGRhCKwj09/TS093J1q2b0GoMXOw8jyRJCAjE43FuuulakrEYF06cQi8rlJeXk4hHyMtzolFp6Ni+\nnY8++oiq6gqqqipIpWUsNiO9PZdpbV1HZ9c57HY9VWWlrGtupnntBmQ5y+WuHi5fHmBichIxnUGj\nUbFpwwZefuXPVFaWr+q5VCrSUpKMFKOgIJd4Mk5WzJJMJslmJbbFt/EB72PESA11CE0qxIxIUXEx\nZqOBbfMdxFkhFw0+xpHIkCZLO61oUbH+8Z3onUX86pnfs3vvVZzp7uGhx76MqMDYxDQGrYmhsUFq\nGhvJpEVycnJYs6aWoYFBrr3mehLxBGdPn6egoAC9XssVV36G6ck5MmmReDyOp9IDWQGjwYjft/jp\nmYY9+cRPHt+8qY0Fb4B4KoNBJ7BhbQsR/wqKmMFmd9E/MkpzawOuHCcWvYXTZzox2cwYjDoCoRBa\nlQpZEvnCQ/dRX1mJRq3lb776bWLJBIWlLtKSiN3p4K8f/TKqjIgkqPjRT3+OwWhm964dTE9PkkGi\nqtpDQVkhefm5PHT/5xgfmcDhyMPlyqXcU4xGp6K3r4uiokJUaoFENIrDakWUMlz12Svp6uljZGiC\nlaUA9Y11rG1r58MTx9FqVbjdbooK84nEYgiKQGvzWt55+xBSKosigW9hDqNWj5RJYjLoyHG6SKdj\n9A8MUl/TRE9/L+ta17GwOE+O283czDCL8wuU5+bj0utJzY+jSi/ytcceYPBSF+f6h0kmkmRlhYpK\nD3NLs+Tl5TE2NsX5rsvUVZejV2sYHRxi3+6reOPt95ib8RKPpxClLE6XmZwcJwa9kanpedKZBF7v\nEtFEBElK48w1EI0FKC0tIZPJoiigElSrAZZYHJEMldTQxSXmgkvU1HkwmgwoQPdUPysss4UWyshh\nG9t5naOcYgAt+Vj35fPGgUNIssLUvJdIWubSxS56L/cQD8eJJsLc//nPU9vQhFaj5fVXXkWvUbOm\nvoFIOEzv5T60Wj0qjZpg0M/kxBTpRIZsViAWj6MoWfbu28Olrm6SsdCnKPkr16m0t7exoWMrfYM9\naIUsn3/oYb7+1b/h8w8/zPO/fZGEKFFRX4WigoXJJeYX5mjftB7f8jKZFISiQX74w++yYf0a8pxO\n5leCPPrFb+PINWM0gcpkJh5KUeep5Nvf+Brf+5efsLi8yBV7dpFOppmd81LdXE/3wGWa61s4feIU\n19/wGSpLPPz4Rz/nrbcOkpNjxVNdycjQIFlR5pFHH+XZ3zyDwWjAbrHS0NTIwlKIqZFxBCR0BiNL\nwRBqtUB5cR5LvmX8fj/bdnRQUebh6PtHSEsKWTGDUQ1bWmrQChKKIpPJggoBR2kBnT0jZAUzVfWV\nhPxBBnqHUbJZ8nIN2Nw5fP7Gmzn8xz/ymW0tNLe3MOELkFJZ+M5Pf4uUVaHXm7E6zExODOM0Oin3\nlHGh5yJqdNTU1qJT6xgeHEJR6wgEl7n3wXt468CbJKNRCnPyQRaY9y+TX5hLIh7n5ltuIh6PoiKB\nx1MBgoFf/OIF5IwMioJapSLjlTCgJkmSHHJRN+rRqFWEQiEElRplGtw4gUXaqOQGruFf+S0rxGil\njRPO02jMFmSyGLUmkok4gpDFpNWybv1acooL2f/2YQxmJ7F4DJMaItEwOq0aSUmTSmbQqPUYjFo0\neoGC/ELCK1GSaRGN2QiSAIg4HBb6z5/+9ISOn376V48nUnFWwiFEWUav0+POKSQSz3D0xEkyUhZZ\nzICwCp7WqTUYzRasNjMWi5lMMoXZbmFudpbt23cwMjpCMBxgeGSIjo513Hv37WzeuI1nf/Msjtw8\nTp3vYmR0iFtuvJZYLM7s7CLhUAxByHD44GGa19QRCnipKM3BU1rMD37wI+ob17A4P00ynaK8rILC\nvELOnjxJWhRx5LpXS41nM2zbuonJ4YsIUgRFJZOIy6xv20Iinmbz1j0srwSoqa1lcGCQRCiBTq1B\nTsYR0mEq7RJx3yRGlUQmHqLIbqCuqYGCsgpmF5c5dfI0KhXMzk4jZTMIKsim08TmJhk4/SGPfvFu\nusfHiGmNlDaupX+4l3AohpxVI8oKZcXleBcXmJ6ZoKAwn5qGWuZm54nGo6RTGYLhAAaDnpWVJZSs\nxDVXXIVWo6WspBQ1agJRHwajgVQqydTUJEaViQNvHeDqz1zD6MgU0XAIrU5DJBImt8yN2qmlbddG\nVliGrEzAF0TQajEabdir8kk6E4Q1EZbzYhzJucSSIYZoV7Ng96/ms2SSiLJISWkhkpxh88YNtG/Y\nyIenTjFwaIRQJIVqRcAU0ZC1y2g1RkQ5A0oap9NGNBahqtKDlEnTsW0z3b296Cw2BI2ZeEpCQiYY\nCpGJfjIw+H8JFJI/EEBn0JNMpxDUao6fOMkLv32Bsx+dI+qPkoiG2L1jK4gyDpsbrVaD0WgkFouR\niITwLc6h1ajJZuHuex7kwPtHWFhY4J//+f/j/rtvpygnj8cefpTS4gJWfNN89qrd3HPHXWQlgVMn\nT5HMJAlEQswv+Pji5z/PmspC/uqhW6gudqElRvv6NUyOTaLR6bnhxhuZmJjAu7RAMBbBH/AjpTN0\nbNrC4sIyS3PTxMNL/OvjX+cfv/7XJGJxBgeHkBSJ7t7zZFUydqeDYDSEiEJCSqHWqtDr9Nz3wOf4\nu3/4DilF4K+++S1SKg0VdfXcduudxMIJtm3ZzKaNG6mureSaaz+LwWggPz8fa56bjdfsZUUwklff\nzoWhOf7b1/+Rf/6nfyIjpgiFgywtLoAgEo8FaWpqYM2aJrp7BlCrVUTjERxuMwDbt3ew7F1ASqSY\nnZ2lZ6ifE+fOEAqFUAkabrz+Rq7YexXehQD9/aOYLDbSooinqhin04mclamqqmTdunVs37mLc+c7\nMRh1qBNJCnRJivQieQYZoxhCp6QpKiomldUQyciEYkl83mWsDgft7W2YdDp2dmzFYTbRWFfBzh3b\nGR4bQxY0SEA7LehII+PHQBqFNLKc4KabbmLd+nZuuu5GsmKWxXkfsXCId957A7fLSSQSJ5sVUSkC\nLpvrE4/T/xKe5Znf/Prxr37ta2QFFeFIFDUqKkpKiUWiZNJpbr/1BjQqgURGpG9oEL1RhyIIJJJx\nystLKM0vIpJMEI0mEGXQaNRs2dxOyB/E4bDgW1zh6AenMBi03H3XzZgsRn737EucOP4hf/eP38Du\nsGKyWVjftoHK0jzyLSpMagWdRkM6k6Knf4q+/nEUOcvl3m7uu/dO/P5l1HodbreLooIizn50Bp3O\nwuT4MPfddh1lxXlcvDyMP5DEZDdz7fV7WdNQSUGeC5vdSjKZZGh8GAGZLVu2kJVlXLl5mNwFKEYH\nE94IRqeLQk8tV1xzE0JWzaWeC8zPz2K1WVheWaShqpaCgiIEvY7zA32gd9E9OsP8UoR0QuaZZ57m\niSd+xtv792M06bDaNMjZJMUlpRSXVtLdO0JZeRE2m5m6+iqWfSF8S14kKcOTP/k3IskUikaF2W5j\ncXGJda0tnDp5hpMnzpLjyiUcD5BXlIvOqEer09JYvwav18viwjxTM9NYHHbSokih04VNTHP73jbW\nN9exp2Mzk4M9bN7czpJvGd+KHxQoLCymcU0DTqsJnVbL3Pwci3OLTI4OYtCqGRudYHxmtWCTLqQl\nwgpaYjRRSMIZx5cIs661BZVKw+zUHEveZbKSgEFnwB9YZvfOHbz08msIaDDoNehVKjQqLcGVuU/P\nmqW8vFSx2534Y2GKSgopystjYniKSCTMnn07cDjMRCMxMopARiXhD/oZHRyjsCAXk0lPka2QY8dP\nUVZdQUaVRcxksJj1/P3ffZ26qgruuOMezKYcEokIP/r5v3H+Qh/P/fr3NDRWE0+EMFjMfP/7P6D7\n0gWaq3Ix6lTotCZMJhOiLPCjp/7AhcvD9PVe5o477uDIkQ+QJJnGxnpMdhMhf4TLnb3ozBay2TRF\nuWbuv/MWyirX8Pj/+DGSmOab3/gyGgVefuV1yivqeP75F2hqaaKq3sPUxDS9l3qxGazotDoykozH\n48FmtzGztIgoSYQCIdo31mEyrurfzEYz6qyKUx+dp76hAYNBx8j4DBarlarKarq7e8ik4qyEV9Aa\n9KCBjWubGB4Z4brrbuN3z72EWmdmeXmK9vVrycvNofNsNyoV2KwWnG47gVASp8uBw2Glp+cSWTlN\ndUUjly/3YTKaaN1YRyqeYk1DE1JaZGpqgngqxcDQGPW1jUzPTPDVb32bZ5/8Ef/9vttQxRdIqFVk\nZBGTWkBvtfPakfMU1q7lnUNHsbvchL1LJCIhNEYrGUlCLUloNSp279tFVlBx9uw5kpEQ6iUZFQqf\nYy8ZFil6fB2vnL1Ey5o2bCY3Tz7xJHa3g3g8hUFnICOJuF1OklKWtAI2iwEdadKpNFND/Z8ebZje\noFfWb2ono8hodRocNivdZ3tZ39ZKLBah3FNGYCWGyW5F7zBjtRlJxUJEolHElMz8+DzLSyvIShqj\n3YzOpMOW48Ko1dJatwYAfzhKuceDw+Hg7LnzpCIJ5hdn8HhK0BuN/O3ffpOK0nwW5kYxahRsVhcn\nz11E0Bo4ePg0g8OTzM7MUFJSQjar0He5D6fdxfTCFI889ggfvH+ItCygQo3eZESjglh4he//6xN8\n8+a/p5JirudKKqnn4F99wIfHTxEO+TE6tMRjQfZO7mUGLyNMrNIWKyClhvL6Zhrqqjn6l9cJh718\n7sH7SMQjqBDJpDSIGRXTU1M4TtmYYRkZhSQpqIJwyE9BkZvW9jVIUgpZUmhqbObMqQv0Xe5HVqkp\nKs6jtKQU95sOhphghmkSJNCWaNi9ZR89XefYvHktv37m56zb2sGa+vUcPnwMBIG9V+5mfHSUTCrJ\n5x66j4mJMc51XkJW1MzOrNaO9FR4ePiWq3n2v3+Df/7uP5BVRJw5ZqIrXhwOB0MBhW//6NfYcj0Y\njHqkRJQt7etYicXo6bqEWaVi6+atvP7+QW6/+06aqzz8/mc/Zu/GNhSS2PQgZyLUrd1Id0jizPk+\npmcjlJSWMDQ6hNFgoX3DRj468RFmh4N77rmLV197kWwmxvqGcsS0yBv7j36KKPoKTM5NYrWZKCgp\norevH5VBx6XuPnz+ENF4kkXvLCvLixx+733eeOkNvAvL6HQmhkcmsbsdNLVU0FBfyYbmZuRUBr3e\nSDAQ46U/v84rb75F25Z2ZucX+PlPf0MyEqa/twubUcNwXw9GlYr9L73KN77+D0zProDKQjIlMzA6\nyYFDx1kJ+FlaXCA3183kxASyDBqDgaSUBgFSkQCpyDwmVjBnlyixK2gyUUoLC5GlBCY0fIlHKaWc\ndtq56YYbcTsdNK6ppaSkhLVr19PKOupp+Fi4KKBIKqS0FnOuB6OrhGA0TG1lDYqc5b0D75IV1Zgs\nDs52XkBvsiGj5jG+yCJzCCioVbBrz26mpudZmPERXomzZeM2Xn3pdUb7hrAZ9WQzUWo81aSSIu9w\niCkm0aPHhpM77rqH3tF+LDYjzzz9C1YCPmw2O4c/+ACzxYJapeL40Y8IBqIE/CH6+4ZYWQ6RVWRi\n8RCxpJ+W1nrmZiZ46qdPcNeDt7M0P0sqGQVJIL+4Hq27DI0ll9r6VjQagQ1b2/j+D75Dfo6V2tI8\nOrZvZd8VuykucPLNr3+NA2+/w3PP/pq6imIMhNCnI5QV5rFz7xWoBIkatxUlFsNisTA5NUUsHkWr\n13Dw0HukMimCoQB/fP7XFJlkGkoMVBfZuOeWKz7xOP0v4Vm0Op3SvLkVu9vOwoIXk9aEGE2RFiXy\nct2YzEYsWpms1sC5s93kOvIwOXWUVFRy6fJlyj1FVOQ7kDMKJ46fRjAYqGmqx2q2MzYyjtGiZ92m\ndRh1ViaHpunrPotOI1BSXMD6lhZSSZHRsRlySkoZmRhibmaCu2+7k5fefBNFpcFisnH1lZ/ltTde\nxx8IUZRfTE5+PhabkZUlLw2eQgyqBFdfuR1BFNHrTNjzPHzhb75FRqVB06fHyzw2rDhwE6qIIWdF\nZJWMw23h+mtv5veP/5EoAQyYKaSEzV/YxpHT51EKyhCEFPdfu5OLJ9+nrKiMRCxJfeMann72OcxG\nF8FQEN2kFjcWBFSMM0nd9ho6L1yivKgEjVaP2+UiJoZYml4kx+bgkYc/x7Mv/o5INE0knsS5YqcS\nD/U0oMXI0e3Huf7Gq4l5fdRXlrMcWuHo8TOYTE4udXWTiMdobGrkwoVLmAwGSkpLmZmZZN36VuwO\nK3n5Ll597S9YjRbE6DLP/Nt3OfCXF9m6fSuC2sRvnnsVQedgOZ5GQks6GWXPNXu5bu9OfvnD7/Ol\nRx6mc2Ke+269he9/+5v8yxO/ZNtVN2LVC9S61Dx233XYDDoEnQV/PIksJhFlNaIxj9cPdXHoxDHy\nC10kkinICrS1t9PfN4RJneTpH3+LVGyJnIJiJEliw677Pz2exWDQ4ymvZHHGR0f7Vmo9HhKxOG63\nG0UDDqee22+9krq1daDXo7cZyGQhHA2xcWsbdpuJsbEZOi/1Iap06AxG4tEYAwP9uNx2iotKePn5\nl+m71MX4eC/lnlKsVgslxUWEAiHiqRSj41NMjU9isVlx5Rby0mtvUVxYQnF+KfMLSxx47xCxWIK7\n77qDmroq2ta3cvzIEVxuOxabmZ079qAStGh1OiRBYnDkEpGon/YNmzFg5FquYxM7mGSWUGiFutpa\nNm/YzI4tO/At+LBip4JqXuJFOlhPJDBPamUcfWCYZ77/DxTaHQioScSSHDp8jKefeYFwMM6e3bvI\nJNIECOAjiIcKbucWErHVWpImm420JDPnW8HrDVFSWopKreGnv3iOaCxNUpRw5tixY2aGAQwo5GLl\n2qv3Mjs1wo13Xo+sU/Ph8U58wQjnLp/j8489wE+f+h9oSbF1w3pyc3JQkKmrrycUSnDpwgDHj50k\nLyefeDxKWWUd33nqeU51L/GnA+f44dMv46poonNgGK3RQTAURkHg5KEjJKNxnnv+d4iCQE6Ohc9c\ncwWbt23joYceorS8BAkNi1GJqGLGJxsIaJx89Z+eonvcj6O4ju/98AmOnTjG7bfdjKeykmxWxmmz\n0N13geXgAiuhFZ78zbPUtWwmq7FzuuuTy13+Q8/ycTrxy/9bVyXw34Hff9zvAaaA2xVFCX58zbeA\nzwMy8NeKohz8956h1mqUktJKVEBSjnHlZ/cRC6Xo6RvAlWtl+6Y1XLGjg/0nLmB2V3Lm799FQMGG\nnTlmaPlCIx+8c5C2DZuYmp7HZDNiMWlYXg4SDMQx6PWIUpyC/ALqa2tWN8eiQdw2Fx8cOg4qPag0\nlHnyceTaGB9ZRae6C/LoHxjFaLETDga57eZbGBsbY/jtEUJE2MYOLnOBbXfUszg5SHVpLvW11WzY\nupVkVsP53nF6B6YoK6/mxInjXOo8jd5q5eabbuHAO++Rn1tIe3s7ExPjDA2PYrPaMRt0FOc6iR3z\n8gjXUUgz3+MZwu0pWlpaGO0bQKs10TvQz1e+8mVefPFPpNMSFrMFtVbAv+zH7rBTU12HzaFjbnaR\n7p5eAKwWB8gZNrRtYqCvDzkRQlErNKxrpn5NKxcvfMjV113H5Mw0WZVA2/p1DPUPc/Ddo2gEI1qH\njrrqUu648bNUlJbx/Asv0dM7wsjYJDIKdZ4GhofHsdusBIMr3HTvrRw7eozF2RnWr1vL/OI8mzZt\nZmx8nPMXurj5ur0k0nC5ZwC/b4n7732Ijz78CAEZnVZFIh0jx+nCYbVz6kIXdrsNMSmhQUM6FkTQ\nKazfvIWxqXmEvgxqVERJo0WPuhoq6j10nV/NaHfl5mAw6bBb7TgsdlYWVwMf4WiUvq7O/xzPoijK\nsKIoaxVFWQu0AQngTVahFUcURakBjnx8zMeQvTuBNcBngF8KgvDvYv80KhUICg63lZy8XEbGxrnU\ncwm1SoXd6mBx3k8olEEruNh67Z008Vm0mAkQYIEFFueXyc0tYHh4HIPBQCaVIpHKoDdYiMWTWB1m\niktLkIUsBz84wvDoOIJaw8DoGGqtAdRq8gryCIcDZBUJt8uJUaNi2beEp6yE2goP+/buxm61MDk+\nQSGF5OLmEt0kSBAJJ9m54wpuuPke6po3oDHlcPDYGea8frSoeOVPL+Jd9PLYV/6aG26+DjQ6shhI\npbO88dY7lJZVkUrFCIV85BXkMj7cx1bqKMaBEx1f5csYXVYOvH+IqTkvwVAIq83GwMAADzxwHwWF\neYhSmrDfR01dDQ6nk+6+Xs6cPU13fxcVnhL27tpGKhahtaUZNWkykUVSvhnuuelKNjTVcPrkcU6f\nPEM4HOaeu+5mbWsLF89eZP8b7yGJ4F1axLs4x203XkeOw0Y6vVoHs6SkhIKCAm64/nqsbiuCDqLp\nJGqDnpdefIW1LWt54KHPMTIxiayIaHRqZCVLU1MdkVACk8nMFfv2oRJUdF3oxGAyks5CKCqSV1hK\ncUUVG7ftRVRkqmo9eKo91Le2IGpNxGUNisaE05lHGJkFYqRRSBAnlkoxPDxKfeMaSovKqK1pwKC1\n0NGxi56+CUIJGa8viM5g/Y9M4H+1/6c1iyAIVwLfURSlQxCEYWDX/0Z3Oa4oSt3HXgVFUX748TUH\ngccVRTnzf7uvUa9TmjvWotKrsdkcWEwW4pEEvT1DVJZVE1paxJBrZ9sNX2DClk/lw7lkOcgI5xik\nlzU3NTN4qRdBo8PlcqMzC6DW0tszSGvrWkLROWxOOygQWAlTkFuIoM4S9gUpKihhfGKUSCpCS2Mj\nObkOmhsaePbpZ6lf00IWFZd7BnjwgQc4c+YM/b1jrF9op4IK3uFdYsT47L3bMaqztK5tIZmK89r+\nd/EGo1RUVHDtvn3MLMwSjEXQaDSotBoOH74IshFJCmMymFlaXmDt2noMqgxbtnQweuE0DfstfJGH\nGGMZD1tZ7FXYfe11mFBRWlSMLMukxRTtbRs5ePAw6XSKgnw7JWUVjIxMICsqjBYFSRS59frrWVle\n5s03PyDPZadjXS0J3zQdaxuQVPDRxT6Gl1Ls3HsFPX3dRJJRNm7eQEVZPWJG4bnnfgeCiNtpZOvG\nJm679UYOHz9P1/lLjAxP48otJCOlqWqoZGxsimVfiHgihlVtJJleLUhUVFSIf8VPYV4hoVAUq01D\nRUUVw6OTuPNd3Hbz9Yz199O4bh3P/uFFSgvKWPTOk07LRCNBHA4t115/JZIoMDo4S9eFLtatXcfA\n4CCxSAS7z02cBAXkICGRacqyprWR8eERxJSEqEAqFkWvMxBLihjMWvzBWRrrW+g8ceQ/P3QsCMJz\nQJeiKD8XBCGkKIrj434BCCqK4hAE4efAWUVRXvz43G+B9xRFee3/uNcjwCMAdpulrbm9kSSgt5hR\npyARjZGORTEoCnffeSu/e+l1ovn1lF73IOLXCikjgYtLSMzwlmc/9eUe+ocHMDssbNzQxqUzfWSk\nDBqLhpxiJyBQUppPU/1GDrzxJsU5VsYmpvEHomj0JnR6DZ6SQnKddurqm/nw9DnSqRS33nMHf3rh\nJWYnZlnT2kg8lUQ8leZGbuYVXmWaaZp3NTM7N0c6JWPQ68gigSwjyAp79+4mlYhx7OgHlDY2c/Pd\nX+AHjz9BvtNJKrHAunUN+JZXsJptrITmKMnPI+ud5tfnH2cZLwkc5LKOp77yAuOzPhxWKyP9Q/gW\nFikoySOwvEqTNNkNdGzdxdTkDEgieXk2bHYTy8t+ZElhYmKKxZUAjY11bGurY3tTNfpkimXvMoGE\nyMXxFd7v7MRgMWCxGtnXsY1ASqTz7Bl27O6gurqS6uJcZEnF4UPHqa+vJZmQeea3vyeV/p/UvXeU\nXHeV7/upOqdyTp2zOkkd1MqtZFuWZEtOwki2sI3AgMEYBsMQZuDywGYIwwWDAQ85zjhHYUuWbFm2\nrNTKrZZa3a3Oubu6uivnOufUuX/IM2LAqlsAACAASURBVMN7f9zrtx5vLdh/1Ql/nbX32rv2b38/\n+xo4RAHsDhsmox60KguzIeaD85gsJkwmI+lMlmv+JiJLMqJGxGwxIit5UPOYTEYUWUXU60ilUqDR\noqoy2XSGvCJjt1hIJpPorSY0goCYF0inU4g6PUzmCROkgkpy5FCqVXJyHlQwWyzIOQlZzqERrg3c\n5vMquWwGi9WKf6z3fQXL+9azvEd2uQP42v/z2f9XyF5ZabFaU78Y9Dr8swv0XjjFyoYKbHYX227a\nRuTLSUSSeHpncR3p5/LXFkhYKlhp8HL18CGUNyXSY0m0aFjkryXQECYYWcDr9eL1uSAPHq8Lk9HM\nb3/1ByyKFns8yF2bNvLumXM4z1YwS4To1SCf5qM8+YHnmQvO8fnPf4V77ruHZ57byx137ab3ajcN\nTYuxtZs40vsO7dWryZ9SqCgvZWxsjEKfj+KyYirKy/jTH/9A+5p2Tp0+S1PTYtZsWM8N22/hR4//\njkKvD6OQZNP6daxa3kJgZoIL57u47uYdaDQqmkwTVz8bwlVYhMVbwCvHDvLGlw5TwiImmCDIHLpy\ngfLSUvxjU2y8YSOFlV7+vO8tPJ4CAv4peoZS7Nh2C6gioGLQm1nRVkrt4jp6h0coKChBFw9y+ugx\nVq3ZSDabZUXLUgwOCx1njvP0yy9Q39iMy2XiofvvZnDgKjaDgSNnzhGYTzA0cZTJqVni2TRNLa10\ndl3AqrcTi0bp75/BbDHQ1ryM2oZFxONJ6hrqmZ2fIZdKk0ymmV0IkcxJzIQCuDwuHFYzgZlreLn9\n+/bzwAOfJBSOIkkyOkHEYXOi0ajo8way6TQms4lEMnFthXcqTc6Vw2N3k9GmqaqqYmxsEimXRacT\nScSjaLUa8nkVFJBkCQC3y42s5N63z/6/EX9t51pWmXvv+q8G2ZPzKv/wuS9w4dIVLl/qIR+Oce/u\nm4j456gsL0FPmJ3cxTizdPEmn1n9TR773X7aPnYbQ3kNChJRQjTSQAE+hsIDVFYVEo8nWAgo5Mlj\nEHWIeiP5rIxRUPnSJz9KLpfi/OkYMUYoo54wWp7nZbJZmbvuvpt7P3Q3JlHkM5/5NP/y3e+TS2cI\nxiNYzDpy6QyZRJaq8ipEQY9RZ0AlTyadIhDw8/DnH+bPr+3D7XZxrrMLvV6kpKKPhgo3yWSUyJyf\n69ru4J2DL7C4porlpXZe+v1vcVVWsevuu/jZky+Sk3JMh6JIgsh3+S5f4evYcSEhsWJFE0ajlns+\nfB/z4Qj7Dhzm3vs+zHNPP8/CQohPfGwPF06fI5+HfB6i8Syp9DR5VWV+fh55nZVAeJbtd93L3FwA\nRa/n4plzFFSWUFxexpL6OlJxia9+9bMMjw1iNlsR9A50OgeXug8TjycR9SIGgwGPx0FdfT1jA+Ok\nsjJ37drFmbOnsFiNjE5MkEsrzMz40RpFpGQcvcmEy1uOURT5t998lUTIj1Ej88a+17jr7rv5zne+\nRUPDIjq7LuFyOWhpbuLAvgPojXo8Xg9V1eX4p2eoXLyEwf4BJEVG1AmIOhFZUt7rrqkIgpa8LGM0\nmSjwFWAwGpiaHCcSXmDr1q1EolEKCwqYHul9XwHwvsswjUbzHPCmqqp/fO/6h0DwLyj6blVV/0mj\n0TQBz/DfFP23gbr/HTvM6XKqd9y9i3hGYnYhwtaNK9h183UM9fWiySks+ngtEfyY8NFNgF9u+h1m\nRzH5QAiL0cKpdy7QSg0GTAwyyPX3bSCWDOGfn2NoaByr1YnP58HqtTPYM8o/7r6FpRUOLAaRUCrD\n2c+N8h8cIY+JehbRWdjN+g034LaZ+NMffs+RM2cZ8wd48smn+c63v8sLzzzLn1/eS0v9EkZHRokn\n4uQUiVvv2MapjlNEIiGiyQgfuvfDuGxufv+bP2Ax21nV1kRNlYOiAh/To7NY5QQ2nYQ2l6GhsgZ9\nVSN/fPVNojkBQdAzM37t7Gd2zo90PsVaNvIWxyjFh+mOPJUlpXR1DmAwuZmNRNAk42QzWURRIK9k\nyCsatIIeURDJZLKIqordrqe0tASrxc7CzDgep5FgPMG6rbdxvKOD0soyysqKCE5Os3z5ekR9lkUN\nVQwOTvPS83uZmQoiZRWUXAad3kQmF2FRwyJKyyrpOHkWJS/RurQFq9XEsXffoaSsgmgkRSqVRdGL\n2ETYeN1mjl7oIye4KPYYMAtpHtizg4H+Ic6cOc9cIMDCwgJ3797JCy++SElhMRWl1Vzpu4JOJzI3\n6+funTv586uvk5MlTEYDoVCEPXs+zOuvH8Rmt6HXGQnOXaNNyrKMwWREFDQIokggEGBJ42KGxocp\nLSmlp/PUX68Mew8EvhV48C9uf5+/EmRPRSWUTPLoI49w8OA+Tp7vQKvLcfOWmwnPzDHKOAXYmWOU\nagrJZxWS80Ei8wEkKYsNE6XUUEsN5VTSefkcVpsZr7eY4uIq5ubmEA15in0FzJnGaWpZgkmbRpXS\nFJUVsIoSnuMkTgrJkcPrczHUc5W2FUuR8zKBmQlyiQRffvhBXnz6j7SvWctvfvEL+oHt61YjBxdQ\nXBaGxgdoaF5CLB7BbXMg5o38289+hc/nI5dNc/nKFURtEw6rC6sNvKoBYzKDr6IMY1kJYTnF8PQQ\nH9z9MR7/3s9wugvRhQPImRxJtLzKPpqpQkFCTNsJzYTZetM29u47gJpNIUkJWttaKS0pZ3RsgtHB\nUdLZDLIio+RlFCCR0zLmn2X1qnLCQ1k8Dg+fvn83P/jhd1i5ZTv+UIQXn+/AZtKBqqW3b4B4JkVR\naRWRcIJMNk02K0EeNFoZi92DipZUOs6ytmZOnDzGle4uMukUS5obKS4u51THaXxuO/GsFlWb59jJ\nM+hFM2rSTySlkBDhe9/9OQaDGZPdzLrrNvHuW29wpX+AispqSguKiSViSHKOmqpKgoF5zl44D7o8\nq1cu48zp82xc3/5fW5cjkRkgg1ano9BbTCqWJB6NYzDpKassp7yynN6+PkwmK9FI4v2EwLU4+Fs4\nwXe6Xepzr75AJByipakBs9PKA5/+LC0tS/n0xx8gVxFjgEu00MJVhvkOP8GJG5ksUeIs/lQzSX+a\naCxGfV0db731FlklSfu6dnr6+/AV+KgrL2Fqxk9v7xVaaqv44sfuBSXD3gOHOHVpgKxgwea0YrCY\nmZmexe0poGJRJV/5wsN4lnrooZ9X2MsYYwwxzDrW0k4jMgOEmKCNm0ji4giX4LN6picnserMhENh\npmemMZpM6AU9wcAc4mSGe7kVNxJbWEmACMk/mRkOLFBRu4RTHZ2cOHyK6UgMt9eERquSTkmsbF1K\nMholmcqSVTXYHHZSuTQnj7/N+vZVOF0FdF/uQdTpSSQS2CxW6mrr6OzsJJ3OsHXrZmZmpkkkEszM\nzrJ71y5OHDrAhqVNrGlr4k8H3mB4ah7RYMblcREJBli7di3733wTWVEw68zkpDw6QY9WK6Az6AhH\nIuhEcHsdLK5fzPnO82i1WlAV1q5ZQ2NjLc8+9e/85le/5Atf/1eSsQiyrJLHhIAW0ahFBWT0SBmw\nOCxk5TirltbS191Da9NSTh49QlNTM/5gkGQySWGxj96+y/gKCrjl5ls403Ge0qJKjh4/CagUFfso\nKnKgIBGJxEiEUyQTWcLxGHabDZ+vAEEQGR0dRRAEInOjfz/irx8+9qNHv/39f6GmvBSnw4GSV1mI\nJzj4+j5mpqfwdBRTwxLMuDBh5zUOUkwh93EvFRRzsaCTyfFpJqbGGZsYRRVUjFYDyVwai9WCu8DD\ndddtIhIOU1FeTUZWOHOmi6rGZs71XsHkLGB8ahqryYjN4WbaP4soQFFZEW8dPMBzfS/gpYTDvIkO\ngVoqmWICMyIFONnDRxhkhhkWKKOGl5Mv45+eRZFlJqbGMZkMtDS3kpMkwrE4+oiWGmqwYucKA1TR\nxpvlFxmfC5JMK+zb9yZ6s5lUJo0iZzGZdDhsRpKJBBqthrrFzQyOzTI5PUMwOMueD99NyO9neGiK\nfB6SiRQOm5Ply1t5483XKSouwOGwkkjGGRkaxWyxIkkyo0MjpDIpAvMBkqk0t+68iwNvvEU6e40o\nefO2Wzl6/BhbbtxCTWUV27ZvQyfoiMfjmC1W0sk0kbk5dt29i2QywfTMFB++7z4gTzIZx+n1UlLi\n4tbtm3BarQiaHD/49peoqyljaGSMTGQCozZNebEDo1ahzGNAzqVwO52MT0zjdLro7x2kproKq83M\nxPQkcl5mcmKCuvrFbN2yldOnzmAyOug8dwlBp0dRsmSlOFNT07Q2NTM2MkZrWxt9/X0Igoa2pW3M\nTM8RCkVIpZOsX7+e4YGev58RfZvLpc6GZ8hncwiCQCqX4+m9z9Fx7Ag7d+zg4G3H+Bgfo59+QOQs\n52ikETdWtGQ5vOcQkkZLOBImmU5id7uZmhjF6/XRtnw59Y0NGEQbr72yFx3Q0XEaUWMim0uwpLmC\nRCJFNBhHzmXRmO0UFBeRy8SZGp9k44a1HH/2ApXUUUsZq1mOjMQEI5znBF/hnznLcW7mVp7nBQ5z\nGkuzmealS8loNYRCYVwuF0feOYLVbieRkTCMSfgwspa16JFoZRXJxwUi6QzPPPs83uJC+gaHWNfW\njJzL0dfbzdKWZla2ryESivPU83vJKAbcFhO2Ah011WUEpgP4JxeQJQm9zkgmmyUtRamsqqK0uIT+\nwX6WL1vJkbffxeX2MDg8TOOiWvI6DVOzU5QVFhKYm2Pthuswmy1o1RynT10hEovgtFuIRKK4vXbC\noSAuh5d4MomIjltu2U42m8Trc/Hk00/zoXvu5plnn+L+++9HMBkYGuikpqyU3s5BWpt83LBuOSWl\n1Xz9u7/iEx++jaIiN1o1z8l3O7AaNCRkE68fG2EmkiGaipCMRrjrg3cQT0bIZGOIgp6K8kWcPtXJ\n7IwfnSAiSxLk8yRTaRSy3H33B9n32gGCsyGKS4qJpBYQDSIlhSU4nS7Gx2aIxdK4HDZ8BT7Onnjz\nr9s6/v/TCgu8ZKMLyFojoayW+WQKV0ENBuM59u3fSz9TfIN/QURPggwrWYoTKwoSE0yiMRopK3EQ\nPDuHmFXZunYVnXqBYDJFLifT1rqc06c6KSoqYqi3l4aaekZHx1EEsHl8pHJ+BDFFaVkVkkaHwaQj\nFsmw8YbrUKQkJvJ4MNJFF1e4yJf4Bw5wkdu5m8OcpIxSXmY/u7mfehYzt2GUZDzC4XM9eGqqyeRl\nKqrKKSwoJhaPMTs2RSHVzBPiIv340eM/OI8WkarKBgJzMywqKkROy7i9NqpryigqKSEWi1DX0EAy\nEWP7LbfjDwwxODiJ2+4jmk7jK3ASDMxQV9vIwNg8j37lK/z690/S1z/IshXNhKIh1l23msGhfjZt\nXkVRiY9YJMmN169jdjZAOBhh7dplXOq6xNX+CSSNhM5sIJHNoRV1xGIpMln5GodgZAKtrPD62+8g\nkUdLFqPVgMvrpKm1iedeeIZ//ubXmJtyk9cV8r0f7iHtHyAe8mPUCzz8hYdwWk2Q9mPRa7nzzh0Y\nbTZEo5sX33wQJC3kkrgcBt46dACj0YHHZ+ezn/0HvvbPX0fARDZ/bU1gLBqjoa6ezPwCSijCzPQQ\na9qXMzY6ybK2Zox6HRark1AozP7XDpLJq6gaGbPVRVaKv28//dvILA6H+vvn/p20y8drpy5z5UIf\n0e5zLF1cTJHHzNNPv8iqlRtQUMnkcly/eQMrm5q5eO48VYtqONHRQTwUJh2OUO6y01RfiquqjsMn\nTxNLS3R19lJYXEQyHaGttZV3Dx3FbrRTVlOMalRRNRqMgo5IOExNbRMDfVeJhRdoX92EkkqwqKKV\nt09cZC6WoKyiEH9gkg1r21GyEhabkVAohMtTxNG3T5IIB7nzzpuwmHRcf/PNvP7OSS519ZCIRJib\nC1BcWEZZRSU11dW89NxTLF+2htNnOykoL0NJp4kl4uRzEosbapmeHKOoxIXdbmVZ23LKKut57LHH\nqKyuZm5ujgc/uYcXX3gVWREQBZFoYIRHvvsoz+17i3BWRJOexyzqGR0cIhKJsKixEchTVV2JVhAQ\nBR2/+81vKSkpI5fKklOyfPKT93HgjdeQzwtESZMijQETtbe0os8LrFqzgpdeegGNaAF9jva169mw\nfi2//tkTJKILPPjpB+nu7sbjcTExNk1zYy3BTJ6HPnEPiaGzhMNzeItLsXiqEPQOerpOU1VdidlZ\nwLe+/UM0gplIJMX5ixfYsWMzsXicrs4+opEcetECokg8GUenB60so+ZFNAJo5Czo8rhTKbyFXoI6\nHfOhGPHQAvd+aDdHjp8gEFygprKekZExbti0gdmZWSYnJpmbeH+s47+JqWONVsvjj/2Ic0feotIi\nsLmpEtLRaylW0bLpus0YRCNSJkVbSyNSKsc3vvEN9GYT/QMDJGJR6iuqWbuslUVVxTS3LOXGrbfR\n2XkFo9GCNp8nNh/E63bTO9TPktYmFGTkvERaSiNJWZKpJJlMjujCHFo5zvWrW1heU0KBDsaGh5mY\nmUfOQz4vkkrmEA12HD4vqWyWgsJK+nrGCMUSbNiyCW9FBTd/YBexeJoCVyHJSJKBwWFWrlyFnM+x\nMD/HSy89Tw6Fvr5uPF4XAf884WiEeDxM69Il2BwuSsuraFu+mrLyajy+Yh57/Gc4XB56LvfQ03WJ\nP+89QNuypVSWFjLcd5UCj4+n/vAHHv3aP+K1i7Quruc7X3sYmzZDc20toWCMM2cv8Nq+A/x576sc\nOXwcq8nKoqoqigrd3Hb7LTz9pz+yckkzW7mRNso5w1vs5WX2fOaTzMcj7N+/H41Gy9333sdPvv8/\n2bC6jc1r15KPpghHo5w/dwmdaEKrMXP0WAfz8wvMzM7wg+/9iFA8j9bsQxZsKHk9Wr2N67fvIqV1\n8Kdn3wBjEePTUSZmZ6ltrGRwsJ/PPvQFbBYfOsGMLEMiKVFUWkUukaDM62bx4kWIgoCokSg1Z7lx\nXRMPfvQuDNks2vgCLlGirNBLIp6hqKSKuVAYQTRQVFRC75VekonU+/bTv4lgsVotZEUTZ949w9CR\no/SeOISWMJlslExOYmxojPHBEQREGuvruHThIu0bNtI71M/8wgJ3bruN6mI7JUUWtt6xBX8uzze/\n+ziC0c7MfIDFS5eQzaTQCAJ2rwO3101KzqKzmMhl03hcDja0r8VlsmEU8ly/qpUbVzdTZLXQ3tzE\nxMQYzqJCVDnL8GA/HocXOZfjlb37CIWjxGJJhgeGqS4rpnpRKRqtlq989REWghlS8Rx6nZ6qygq8\nXi9bt95IVo5hMGtx2i2sW78KKR1DBxgMBgoLfVy+0sWZU6eYnA3z/Mv7KCit5rmX9zE9O8mSJUuo\nrqylrGwR5y/28tSTT7MQnqOwxINgsHL7rbcRnhqj1Kjhm198mJErZ/nIPR/gvnt3kUpl8LoLaF7S\nQkV5NTOTUzjsNpqbF6MlSzIVZe3KVaxbvR4DDi7SyzhBfs9+Hv3X/8BideC0u5gPBHn90JuMzcxQ\nvmgR+945RFP7WtpXbyQaSdJ5oYfX97+NKhoJxxKUFZdx4p1jFNc0s3L9rdS3bMRTVIXd4+IPTz5L\nKJLh4vke/BPzxCJxstkca9qX095+HR/d8yALgTiSrCApaTRaSCeSuPQWpscHOdtxFDQSGkVCm/BT\nW+1DMCnUFnrYsX45H/3Ado4c3I9GqyMaj5N/r5J65pnnUVRYtuL/mFD+y/4mumE/+elPHt111234\nPHauXLnMxOgsi2prEbUawsF5wtE4kpinsqKEOb8fp8tGOBnAajHT09VFQ3Ex6WSQbbd/kLmYzBtH\nz9Jx5gJlpUVYTQI+jwObw05RURGBGT/9/YOsXL0Uj9uDHE2Tj8bZuWkD65Y3UuRw4rGIiHKc0MI8\nOkcJY6E0wUiKeCqMRqtBqxMYGplAr7MQT8h0XrhEXlVxeu2Mjc8wNjpLJqXy+utv0N19ASmTQZMX\nmAnMkldVNFqZdWvX4Ha4iAcTBAMRigoLmZgaZcWKpbQ0L0WnM7EQCaCoAvFInImJQT5y731M+yco\nLC1hYnSa5kVlRCJR8qg8/IXP8NobhwgFwqxb3say+jJ+8+PHGJmO8+yBE1zoHcLu9ZFKpejruUJ9\ndRVr121gfGKS4eFRqhctprPrMpLGxptHz3F24TJllPM0+5kijuTOkIv5uWnLVlxeD/65aT72iY/y\n7DNP43U42bd3H3qHm0BgmsryEqZmAkhSkpHhadpbl+Lz6bA49KiqFlFnxGw14bJ6+PXv/0hX9wCy\noiWVTJBOJ9BoYGRwigtd/ajWMpJ6H1pRRZKSGCwWTIpCQ5HAnVva2fGhD/HumYsgSWxtX0XbshU0\nVFdy/M0D3Hz9CjDqGYukmJmbp7qiimQiS15WyGaTrFqxHFmWmBr/O6Lo/+Cxxx5VjQaWLVtBVWUN\nHo8Lf2CWYCiI1WansaGJVStWsOXGG3lt36vkZImS0jJcDjuZZJzK8iJWL17O2Kifr3/zh/QNzZDJ\nJPEVODGYBGb8sxQUFRGL5aioamHF6nZu3LSZCydOYlVlqp02imwGItNzxOZDFBV4SKVSON2lPPvq\nQU5f7ieRl6mpr+L6669Dp9HQvnIVl7qvIGq0KJLMzjt3MjAwxpbNmzh8+E0qKsqRZBWjUaC9fRWb\nb9pKb28vU+NjNDY0kklJ2Awuenr6KCorZPLEJEUZF2VXq+i62ItQbiISXUCWJVLJBNKITM+pbur6\n6jnedQRDTMt9k/eSSYaZnRthy5038tY7b5JLpTm4dx9usx2zXiSrNZBVRdDqSaSTBPwzLGmsZ3hs\nCEUFKaeQlSQC80GMFguxWIJsNoe1xIi2Vo/WZyDrTJJLhMlFY5w5e4b5yCzLLy3F8yszDacX0fv6\nVfrsQ/QN9mPWa1m+bCm9+/tZHl1NIDaPciJNujRK+/IWWlqWcvToMf7wH0/T3TPATGCOhVCAdCLC\nXGAeWVIIhhZIJBPINjueqjWogo+8NIdRE8Nu0OI1K2zZ0EpNgY28oqF3eJz5SJqFcJDTnZfwejyU\nlfgwubyItkL2vX0Svd6KzmBkYX6BRCJGUUEBgfkA84H5902k/JsowzRaLTdt/wDxlMSbb7+FhMyO\nnTvYeddurt90M1W1NZRWlpGTJZoaG/F6PaTjaaYnZ7j5lm185BOfIpwJ89axt0hlI5SX2/B6reh0\nGkwWI1W1i4glgux++GFueujzVK5YzRO/+D1lZZX0XTrPbbfcRDwWRdQqGHUq2VQWndnJyHycrqEp\nymoqeeD++/DPzpBKpUgkM7z++kHWr2unaXEjghbm/LMkE3GeefpJdt65g0wmSU5KgEblZMcZhkdH\nWNLYSGx+HpvJQcepi5zoOMvUvJ9jx4/RRgsbWc8lukmRYco/QSg0T3NzLblcBh1G9Bg4wSkUcnyY\n2/l3nmCWizzJ91lUaOU3P/kB3/nXb7N28xYee+K3qFYvz792gCtX++m61MnV7ivcd89uDBYDhcWF\niDqBUCSCokBOUglFE2RyefSiEbPJzMZ1aygr9KGVM4hKFpPZhMFkRFEUWljCPH6ypCijGI2gYdcH\n76BpSR011eXYMQIqhRQiozI8tsDhd85w/8c/ycr1a9GIOi50XaawoJTaRY0szEVQshLpZAqdoANF\npb6gGEs2izkVxRiN8bl7drHEbeQ7X/wkJ48eQW+yU1paysjQCEaDlVjWznzczHd+8jxn+iP89MlX\n+cWTLxEKpZCB2dl5ZEWmqroCNALxWAyT2fS+/fRvonUcDkew270EAgHWrNuAqJURRQGPx0cuq2Iy\nmUjls6ipBC6XG1GrZXxyGpPdwKnT57h45gpjQ/1MTs7jcBag02mpqCohEgmRlKI0NDbT0nALiqOO\nP3X0skTQo9UbOXj4AD//6Y/R5CUElx2jAYSUkXQ2x+W+fq5M+NHbnFSUVxGcnmHLxhtxOH0cOnQM\nk97I/pf38olPfQpRoyWdSlBa7CQcyTI1MUoum6Kg1I1Jr0fKwsnj54AMd9x2C6WlZSh5DaFYBEmF\nbbfezuzeSUIssJTlHOYd0rE4i2prqFlUhUYVuDI5gAktIHAfu8kSRyDJj/gqGcaJD0uoziJOXhmk\nd2KST/3TV/nNC08zHY6CNsqy1hYudvXyyiuvIBi0mE16NKkUgk6PaNChZPKIog5Bo0OrhUQiSXWJ\nl57Oy2RSSfQmM5KSRasTKfIV8/LQXmIE+DD3UkkFocgMb7/zFts2r+dS1wVMmLjKZdy4MOHAapO5\ncHWGwtJivvjVr7Fl8zZOnXyGc52XMRkt5NMQj6fxelwEAn5EvZbLpzuorE8zOTtPhUNLoaDl4d13\nEh2foKx4EWf6pkj2zOLxFSIIOqKBaQSdHp3Zylud3aBK6HUqcl4ARYPRYKatrZUL5zvIphWMxmvE\n//drfxOtY5PFota3tKGz6MlIabZv3k735W6WrVyJ3W7DaNKTSmcRtOCwGBno60FVYXpqit7uHiwm\nE4NTcxT6fDisJjBrGRsaYfnKVpK5OC5PCTWNyxlwXcdsxsTd1SpjR58kEZwjn81ww/U3MD46SrHH\nSU/3eVa3tOKfC/KrJ18lqxW5/6GP8+RTrwJadGYz2byCVpExG4yk0mlqKiroPn+ODevbEQ16Xn/j\nIMXFxSyuqcDhtnOi4wKyLFBcXE40GkHUaYhFY5QVF6EVdQwODONacKOiECOBQo71t63E7nQQTyVQ\nAfUVLee5gIiAFoU7uZUN1GBgFiuFzPzByEP/+A1qamooKS3FarFw5OhRXA4nH7rrQ/zxD39ErzMg\n5zXIqkz1ojIyaQmH2cnI+CQpOY9gEMkrYDDokeQMN6xuI5UMcfFyL3pLAbm8gNNp5UtfeojenRfZ\nzwGizLKGZcyuvbbeAfJcf/31JB7K8mv+SIgoEjkqmotoXVaH2eHGZndz8LWDKKqWhbkFvC438VgU\nWZHxFjnIqhmsehsWo4U8eqZm8q+0ZgAAIABJREFU59HnEnz8thsZ6TnHno/twVKymBu23055XSsY\nzSjRCDcuqWDl2uX89De/Ia9zkdGCXjBgsTkRRA0B/xyqqhKJRLDZbdx+y3YOHniduemxvx9umLfA\npzqKvdjcdmamp1m76noC835UReG6629E0IroLUZMBiPkc5ge1iMikCbDJbowfcZAx/mL2MxG7CYT\nOr2A2WIjEJrF4XFQVFbJ+m338MTBWcJhhVsXJQmPvI3FZGRhNsipjtPYrDZaVragSil8bi8vPfcK\nFmsZea3Mpq2bOH6ih6SSp6CxnG9+7av86ac/JxyYZ3L22p/w9lWrySQDHD95nJaWJkbHRqmvraK5\nuZmTx8+i01mZnZtDJ2rJSRl27tzF8y88j9FggTwoah4pm0Yn6tl60yYaF9fRcfoUeVWlq/MipZXl\n+Aoc5HN6lHSOnt4eljdW8fF7d6K12njwK48gZ/L4fIWk00mqqqpJS2FQNCSjGbLpHKF0GpNoQMqm\nyMsZSoq92N0+5LzI1SMT6NHjxIMHD7o7YfuGFSwsBHAVl/Ds3jeQVYnrN66lpqYM/9w0oZkwHUeP\nE5iaoa6xhfGZCW7cfB2f+9xDHDp0mGefeo5IKInT6cZqE/npTx/nZ7/4BR0nOiGXR29VqGuoJx6P\nM3x1gOtuuJ6cIl8j/V8dYmZqhkRSJg/o5AxSOoXdpCWVjpBZMPARHiCMxGGOo6+O4cjO8sGtm6go\nKSCg1TCd0SIpBk50XCCezhAOBpFyMgDxYBCdxcRNN9/E/pee+fs5Z8mrKjdtv4Wa8nI2rVtH/+Bl\nioq8dHV18eKLz3Jg/2sc3P86kUiEhVAMGQEBE3lgLRtoXraM3XffidFqRNFrUTRaLnZ20nOxj5KC\ncuS0jJCLsGOVl6X2KYT0MKIWFCmPw+XCaDFj97qYnpmjoKSSw0fPUlm3DEWrkiGFyeZE1dqoqq3l\n3Vdf4re/fIKC8gLu23MXPqeV0gIfA0ODjE77ueGGrUxP+ykpKqFtxWqeeuo57rzzLgJz82SzWQJz\nAZS8ylNPPUU6LbF4yRKyskw0HsfhcKI3CTz7wjMcPX6cgaFB3n77MIXFRTjMVkRVw9KWJs6ev4Cc\nV3i74zyXJoI88LmvIkl5NBoN6XQSjVagv7+fTErBbnNisRqQ5QxmLejzOZx5GZecZmlDBXptnjt3\n3kEzS2ihhTLK0SDg8XqZnp9nZiFEV1cXDz64h+9/73+w4/abMOlEqkorWNLchJrX4HIVc67zHNU1\n5QwMXiGbSyLqYG37ahwOC8lUknAoys4P3kPH8XOsXtGG02SiylmGkspjEqxoFZH+rkscf/sI2bTE\n6NAIRYUFaAWJXR+8nWg6RU5vIKIYiShmPsonMaDndfaTJ4M+G+Gju2+jwGmkra2RZW0ttDQ103G8\ng6KCYlxOJ1o06PQiFouJWz/wAQxmM+c7L75vP/2b6IY98uijj17suYrDbOFz//Ap2tetJB7NMj01\ng8tlQ6OVWbx4McdPdNDY2Mj0O36mmSZDhkGGcG114nJYWdLSSk6jogoi08OjVJZXMjY2wXwoxMC5\nc7jNAkurrUwOj5FX9PT3XqWj4wQ2p4W62kVUlZXQ2tTCuY4L6HR6tPo8q9a38eL+N6lavJb7P3I3\nbRXF3HbHNiaj89RUFLKitQWfz0Xf1W6Wr1jH2PgoRr2euoZ6kpks27dt49mnXyCXk5GkHLfediug\nMj4xgc1mZ25u7homNqsQS8RIZiI0NNYhinrMNivRSIQ1K1Yx2D+A3e5gYmIWm9OGoNPg8NjpHRpF\nzkqsbG0hGIoQj8WQpBxSLkc0lqKlpYmAf5Y7dmxDk4shhxdY3VBJmV1PQ1szV4aGaFmxmti+NDLX\ndtfbsOHZ6kKjE9m+/WaOHD7EylVNKDmZp/79SQyiATktc+78ZcILUYKhBXbt/gAV5W42bVpHXs6T\nTeWw2+1kshIjgyOUV5QRCcaxWE0IKKAmSAamGR67ysT0MEVuG/UVZcRiCYZGp/jQnnuZX5jH53Jz\n7NhR0mmJ9rUr8S8skExlGMj20EYjVxjChIjDEafUInPd9s3M5FS01nIe+c5PSWdVsmmZ2ekpFFlB\nkhXWrFnDyY4TgIAkK2QT74+i/zcRLD9+/MePep0+isvL0Ft0tCxpYnhinPHJcbzeayBtWcmjVUU8\ndhe9HZ2MMchVBnHjw3uTF1mS6O3rZWZqjhs2bqKqoZGUJKM3mEnFs0zN+hns6+PixUuksgl0Ipit\nZrRaI1VV9fj9Qaw2FzlZYWBkipSkYHMY8BSU0tq2int37+DGNUvR6gQGrlymusBH//AkOqeTWDjI\ndatX8vyLzzA5MYrDaUeSsvQN9hCLp5mZDZCXVCQ5xfkL77Jhww3EYhly+TxKHhRZpri4kMqqMrzu\nAiRZYXxiDINOoKW5lSvdfczOBXC7XQQXFhgeHqK5qQmzTUSXTeOxWxgcH0YURARZIp/LUFZSRE1p\nOYMDfQgaFZtZzz89/GkmB65ytuMYu+66k7wg0HHpIrPT0xQMlZBBpJFKnBgo/mgJscgCwdl5+i5d\n4cZN19O2pJWhoXEuXxrg1Zf3QUZmZmaclavbiKcifPD2W2lsaMbvDxJPpogl0ly63EMylSQwN4MW\nmaqGalxOA6vrKrBr02y5YRMbV7cjZyXUvEx5aTGiRqaprppUwo+cjrLjttuZmJ0jEAqTiEbZvn0L\nE93TnOEqVXipRsN1t9XxiYc+wWw0zb53O9l74Bj1S9qY9s+9dxgpks5lMJuMXO7uxmazQV4lHoug\nSum/n6ljg8GoVlTWkFbSFC8q4QM7dhAOZpmdmmZouAeNJo/b46HrfA9mk4WGumqEvJaklEXRgd1i\nor6mCb3RgKAT6ezqIp1I4fP6mJmZoqDASyQUJJ2JIysSRqOJfE4hGk0yPTOLyWgmHkvidFpY0tRA\nV/cVclkZn8/JilXLWNu+gR077uRS92VWrVrPxz71WVqam1m7YQ2P//xXLPj9pOIhvv3IV/nWt76F\nzWqjaUkzi1tauXyhm3NnOsnLEE8F+fgDe4iEExw7cpp4MkUum/2v76AgoRd02BxWEvEIRcVFDA+N\nsHnLZq5e7SMZT5DPq7S2tjI7O8vihgqmRjv54Q9/xp6PfZntt95BZGaG0yeOkUemsbSI3Z96gJ/8\n4he4HW5qKkrJzoyzqqGG0M/mOc5ZfsTL/DPfJb/Lgae8gjKvA5tJSyabpbZ+Md1dffzp93/CbrdQ\nVlTC0OQsbW2rmRwZJpqKggIq4HR6UNUc27dto+/qAL0vXyXEHOtYyzlO4W1x4vXYaFuxkhKPj59/\n+9v88rFvMhNOce7yVS5cvExjpRu3w8BCKIpotrFz191c7O6lZeVGvvT17yJnZaorqxmZHCWZSeK2\nuvEYYe2SYj59z62kNAJGVxHRvIOPfPzz2JxOQvEIeUVFzskkMwlAxet2k85mUHKgKArx0PhfVSn5\nj8ADXPsu3cDHADN/JcieyWJmPr5A24o2rC4rv/7576iuqmN0eBBfsRutXoMsS6DNk0onGRkZRqtq\niSTj+Iq82HXFvPLi8wh6PdV11axfv57zZy5yqesiKjLLlrewqKaC6akpsjmZVDLD5PwoVVUVXBNz\nQkGhh9nAHIgqBV4PglYkHI+gqiqHDh5CFIxU1dZy6O13KPT6uPX2O+i7OkRFSQV93Zdx2/U88s1v\nsXzZcoqKClFVlaH+IY688w55BfQ6HcUlZezb9yYCArFkDNCgCCAIAlqNBikroxUFNl1/Awf2v4bV\n4kAQBAb6+9mwYQNnT58hl5W4fPky8XicTCpOXY0Xg6jQUunj1OsvoibCNLqdNC9ejNVsIJuYYm5u\nHNQ8DkVlvvcSDQ4DDuw8zJcIEuEj3M+3Rx9nS/tqbly/Fo/dweUrV/jtC6/SPzCC01fEnbdv58Xn\n9pLPi8z6A0RjUbSiQE6R0Kg6pif86EQdzz6zFyl/DQKhRWSEQZxYqKmtZllbE88+9RypcJyq0gpO\nnDjG0vZNvPPuMWoalmByGFm6rIXmxc2MByI88q3H2L7jTj7/5a8hCCa0aBgZGQKNilGvJ50KUdOy\nklUbV+NPSLgrygmnRB7+2v+Fzeklkb6mgszm0qSSSRRFYvWaNZw9cwaAoqIyMtn3Pxv2foiUpcAJ\nYImqqun3JMMHgCVA6C80+C5VVf/5Pcjes/y3Bv8wUP+/kxa7Czxq63Xt1NbW0HXuIsn5NBargNVl\nfm/P4yIGe4aIhGOYjBbsFgMmg5munm4aFy9mYWaaeCKNy+WioKSAz/zDp/ni576IIqvoTTb0ZjNu\nmw273cGiRXVc6e4lHvPj8Trxz83gcjlBKyDqdSzMBzELFmKJHFpdjta2ZQyO+snLWqxWE9/79iOc\nPXOCYCTO1dEQI/3d5KUwxaVeFEnEZrMyMT5BfW0dx090sHzZMgo8PoLhKFqtkaPHj6EqedK5DHqr\nETRaTBYzgk4kE41RV1NDaUEh4YV5xmamcThtuFxOTnYcp7S4nJLiYlauXMX09DTDYyPkIgE+fd8H\nyUSmmB0ao8ikJzY7wQ0bV6PzFjOiaDnZN04uLXDszYP86UffIhmbZ+gBP8u4gQ7G+TMHkK8DORPh\n9ltv449/eAq7u5xUWkYVtcQycZIRPwa9i7ygA8CovzajJaBFoygIWgFJURCEa1uc8zMyAmYSLLCT\nW+jZ0ENNZTUnT3Rg1YpYkNmydgmTC0nePt3JPR/5JG++cYACtwO9RmDYHyMjKegtZnJ5GU0uR1bJ\nQV5FlSWKCjxUVJSiN4gkojH0GoGdd97BL3//LIFQltKqUvyzs2SySSLRCJs2baC0tBSr1cqhQ4do\nalrCsWPHaW1t5fD+V/86reP3guU0sBSIAX8GfgY8wV8JsuctLFA//qUvIafSrF7RwuNP/OzaElKH\nhcBCkAf23M87h44wPTNGabmHqck5GuvbCIXmyebSeDw+otEYsiwhZXKIokA6Cf7QLFV1pRg0RoaH\nxlG1UFpVTXwhQllZEWaTiVAohMfjQRS1mM1mjr99hlg8irPASkV1JQ31i5mbC9Ld209lXR2Fbjvb\nN2/l97/5dyYDIVLpCN4CO8GgnyJPETt33s1vf/k7MhmJ9lXLuNx9muVt7YyM+AkEr42SqCgUFbnx\nBwNYfSa+/MWH+cDWW9l8+y5y6QyfuP8TPPGTJ1CkLBpNnlQ6zuoVy8jlVXSiyOXubrxeL8lEhnw2\nzuIqO1/81B6unj2LUVAo8HjZtPkWZmIhtHYz3RMh/ry/g6nRcRZXl1JRWkjyf2Y5yzAx8iywgG2l\nnrqGWmamEoSDKTSCxPz8AlabmTwKUlbGaBCJxxMkkymysRiLW1uIx2IYLQbi0Rgmux4pHMVhdlIx\n1EQnl8gBClk+sGczTpeNBf8wdQVOxi5doarEzcobbyesGPkf33sMRTCiQUs4EkQUtVRU1OCfmUaL\niiTLmEURnSbNrVs3QjpJTs6yEInyLz96gp17HmDthvVc6uolOB9D1IskklHI5/F43NjsDvwz8wiC\nQDA8j9NpJ5+XcToc9F08/9cpw1RVndZoNI8BE0AaOKSq6iGNRlOoqurse6/5gcL3fv9ncP2nTb13\n7/9mfwnZs9sdpGIxhoeu4rSLRILz2L027DYLu+/6EBa9ianxaURBQ1XJIuILOVKpBD6fj4udl5jz\npxD1MqJeYOXSFvQaLVIiy4lzc6BoSEhJzA4DZaWlRGJxbti8nmgsy+ysH63BgtHhpqqiApPOwKnj\nnaxYtwy9VSAUCPLK3r0UDJdhwMg3LnyZbWzl8rlLlJdU47TG8HiLsLiMrGxfjhkLI0MjOJw25LkA\nC/MBTEY7NoedVe2V7H/9DVRNDi0qsXgcm8GKDoU7btqKXs3xi1/8hM996ms89uMnyElRCuwejCY9\nuzfvIhIMMjo5zVwgxNYt25CkHK+88jINi2qxu1yIFit9/jHuuv3DXLx4gcz5E9y5+37mokka7bVc\neewpMto86kKQju4+0rVZ9txzD/0j46wv38jLf36VmakE83MRBEEkHAyjNxuwu+yIWnDbfYxPjRIO\nh6irb6C4qIhINIRNa6eufhHnzp/DbrdTt7iRqqJyRkanyZ/LYtBbSOcUzpy7xIOf/zirakq5cuR1\nSo9baWcbv37+ReaB4tVVjE5MgVbFZjEDKvH4PFtuupH9rx3Ea7eSSwRpX9ZAi9dCJphE1RvZ9tCn\nkGWF4pIyTp48xdLWFSQSfci5HKqUp7a2moGhIYLzQRRVy4qVK/GfmCUWj+G020kkkv+nEPhvn30f\nmcUFvAzsBiLAi8BLwL/9J5HyvffCqqq63i+R8i/N7nCo62/dzOc/+xBFBU4SqSQ/ePzHyJkcuZTC\nh/fcz+FDbzO/sEAsGiUWTRAMz7FmzUr+V3vnHSVHdef7T3XOYXLOozCSRiONNMp5FBCSEIhoMMJa\nzGL72Qb7mSUZm13Aa2Njdr0LBoMNMksSQUiAEEogFNCgODmnntQznXOqrvfHzNvlvA3WOweepH3z\nOadP171d3ef37a5v1723bv1udnYO3V2DSEIUt9dNeqqFFIWAa2SY7kE3Q94IS9cswjbQjVFnREyI\nJCSord2EJJMTCASQy+UU5OYTdHuJRMI0dTTg8o9RPaOK1tZunLv9SEgUksNj/C21hRshKWNaRTHN\nbc2sWruWeCzByaN1mE1a5s2Zze5336GqchYVMypRavW88cbbiCJYU/XEYyLxeILS8jJiMTelBTk8\n/eRveOjxX/Cjex/g5lu+iVKtor+nh8KCAlwuBzJRwul1sWjRYlpbW8nMzMRmG0St0qKWB/jOXdso\nKc7jjZ3vUlU9l8KphbiccQbtdt7Z/SFqjYHf/fbXeP1euju72bf3EI2dHaxbu5bmljb6h8cIOIPI\nZTLEZIyklACVApksQTwSRY4StUaJTqslnkgQDoUxpxhxOJwsXLSAkpIizp05iyIeZqy/j5KcYtqH\nhgmKMkJREbPJjNaiJ1uR5O9+fDfum0dIkMnv2MkwPpyZfiKxMFPKyxgaHiQUDlFTPZvzTW3oNXp0\niGgjQ1y3ZglJ9wj3/PB7uGIxZGlFvPjeJ9R39GMbGGFw0I7JaMHpHEVIxrjqqg0cPXqUcDiMLxgh\nGotjMOrIz89FIYwvBOUdG/zKmmE3ABskSfqrifLtwEJgDV9RM8xoNUrza5eSk2rlnu/fzaB9hF89\n/RRWvYWG082odCaCsTCiCKtW1tLf30884icS9nLzLTcQCcf49OhxlDolSlmSJVOnYJAn6ej38OGx\nC6BLkp2XTsQXIhyKYLGmMqdmPl1dXVRVVZFMJonFEhjURswmHbYxOxqDDkVUJBZL8N5je5ChQI6E\nSIJ+8wBLF6+ky9ZFcX4Rfl8QtUqDx+0lFvEBcfKzM5hSPhWF1sSp0+do7+pk1owZmMxqBGQYjKm0\n9LZxZN9ekrEo4WCEpgvnmVU9hU8+qeOB+3/L0pXVBINB6k6eJhIKkJmVikajwWAwMDA4SDwqodGb\nmVtVwrRpVkw6C27XMDULlvHyv7xHV9cQtWtXs3XL1bS1N+Gwhei0D7D/8HG0ChOBhA+zAgb6e0nP\nLiIakphROYW2tgZEMUYoKePmm65l965dbFp3DZ+fPYHb7SYnJxeLxcLp06eZNn0qmZnplJQUkWJJ\nZ0phJm5bH3/6p9+zZssWXnl7D74YaHR6pKQJlTaOEPWzqGcWdbTgI4oSA6E0L8UlRTQ2NFBUWIDH\n50KBAoXagF6vJ0UZJUdw8vh99yAIMXyJOOnTKwjIU3jkl88Tj4qkpuVy5NAnhEMxpk4v5ezpE1hM\nFox6A06Xk3UbN+MPBKg7/TkyASKhMHPnzufQh29/ZWZZAPwRmM94M+wl4DRQwFeUZM9oNUl3/+hu\nTp2so6qqirq605jNWnR6Mw1Nrej0GtLSs7mqdgPb77iVJ371SyKBIMNDA4hJkbL8fDpb2lCb9LS0\n1HPLprWUZGay8/XDuCVIy03B43EhCGDQ6zGZrKjMWsK+CEO9I4hIdPf2YDWYqV2/Ep3BxPSKmZw7\ne5qujn563+llJUsxY2AR1RTV5/Pn11+lxzaewaVmbjWv/MtrSIKKsN/NskXzyMpMx+UNceSzOkLR\nOEaTlv6uXtavX093dzehcJgVtUv5+797hLGBQbLSMvFFveRn5THq8nHjN/6Kjs5WppSXg0xGUWEh\nMimM1ZJKe3sHlZWzefnNt0mEA2zZtIoUs5JN61czdfps7HYfI3YnP/7Jg1y1aStuX4Avzp4j6o8h\nUyoZHB7i108+xcM/fQx51I3JqKOyah6fHD/J/Jp5ZOdnsGBRDV2dNpwjQ4wOD3K+vhHHmAMxIbJ+\n/TqOHT+OIAjIdWoi4QgmrQ6TTs/M2TOZXppPf/sFem0jNDYNoNGmEIx6UWh1WK1pJEUBsTVMhCgy\nZLhwUDK7EJVWwQ033MDf/+LvWbduA+fOXkAmE/A67ZgsKnQRF7tffhYxGiRzSiVfdPYRDCl59sVd\ntPf0YlYo8YV9+INeNAo5sWic5atXcPDAQVavWU1d3WmGh+wYjKbxq/laFU6Hi4R/7KubGyYIwqOM\nN8MSwDnGh5ENwJsTpuljfOjYNbH/Q8COif3vkSRp33/1+UazQZo+bwZutweP0wuSDIPBSCAcZMas\n6Wj0ckZGnaxcuJKH77sPURJ55qU/0tLZjiwp0vb7BuYxBQNGdMjR35sgPSubf/z9q8yYO4Nrr9vC\nztffJCoACjVDNhvrV65gSnEpbV3dnGk8iysYIBGMse36bUQicTQ6Ax6nC4VCw6GDh9FqtajVWlKt\nZvRqJYuXLCIS9SOJSTQaDU63i1ffeo2aOdVUV1YRjcZ58aVXkORqpk2fiZiMYeuzYbePsHrVai40\n1DNv4Twef/Rh1HIFJ9JOkkBkGYtQoeOlZ97k3b3v4HZ7ycvLwz7qwGsbo6ysGIQkBr2OVls7m6+6\nlox0Kwa9koYLrbS0dBAKJegfGEGvUhGTYhiMRtaur8XeP8axk58TRca8RYu4cOECsqgHlVqO2xvB\nYk7BaNJSs2AOGVkmXn9rL0IihlKQodabUYpK1Go1KpWKhsYG5DJAkJGdPb7OzPu7P0CmUmA1aLlh\ny1U8/9LL3LDtVl577V1UBhVu7xh6gxm5TI6YFIlG4+h0OkKhEFq1GlEMsmz5co4ePUVKajYWg4Kk\nOML3v/8tTte1MtA/RmlOKrNnlTEcDHHgxDmUMhN1dU2kp6UhxEP4w0H8Xjdmox5/KEhSEjEaTWRm\nZuJ0uVm8cAnHj51EoVLQ12/DbDLiHOy+ciZSmq0myZpvJT+3iJy0HEbtHnp6etEYlBSV5lJSXohO\na2S4385jP3uCQNiFPxFDbzZx8OABur7VTAdnKaOAKeSRuNfPgNvP/o8PsuO2a5BiCWJJAWdCotU2\nQuv5C9x98w0EQz4CsiQhZHTa7WjkStbXbqS+oQGZlMTr8lFcUsrePR8xv3opA4M2OvvaqaqcSUaK\nmbysdHRGA1q9jp7eHvwhD8V5RSgEBXJBRlNXL0hKDh0+hJiIYbJYmT59GsFgkLS0dOobLzC1vITV\nq9bwyh2vo8fAdm7keV7EvyJM7br1tLa0U14+haOfnGCwZwC5QkClVlJWWkLNkjns/+gzRobtqDVK\nYnGQxCRyuYxFCxZRWpLLyy//kXgigZQUUKn0xJMSSYUag9nKpvWrcI31c83WLXR2D/PHF18hKzsF\nn3+Iu++6g0A0TF5GGqFAlGG7i2ee/gP+4Pi1i5KiIlauWY1Bo2Xnzp3ExATEJGJJAbVSgV4tJ0IC\np9ODXK7CbDaj1iaZN38+ra3tVEyrZP/+QwCIokQiIaLXgk4tp7y8FId9BBkR7v3Bdvp6WglE9Lyx\n5zMkKY5FpyQ9v4RRZ5gRuwOZCEkpgSTGEWMRKmdVEE5EOHvuDClWK0lRIB6TkIiRlGQoFEqi0SgW\ni5WR4SESQdeVkwpJAjJzslCpVLS2tuN3BkiSJC0lg0Q8wsljp7hqwyY+/vhTLpy7npUbllJdOYu1\n69Zxy0038fq3XmWUAUJECRHA4bRz6MQ5KqZMI8ugov50M7OmzSTXkkZTUwvVpSVUFecTigexlpZh\nyi/m5Xff54Zrb2Lvu7tpaWpEQCTVlM7bb7yOwZDB0SOfIgoJUIjMmDkVs06HXmuis7eHU3Ufcf0N\n1xMPRzDotCiQ8Pl8ZGdn8+mhzygvLiQWD+Pw+FEqFeTl5RIIBDCbLYy5HLg9PkZxMkontaxCIoHL\n46TuWB1KpZYXnnkJtUpLVBZDIWqIRJKcbujisxN1aDVmRECbUFBYnMXQoI1oKMpHH71HIGxnzZr1\nlBZNJRSKsu/wIYzmFDLT87CPunCMDCEXkpw6+TmeQIJoVEFLUxdLl81CIZcztSSfgx/uY+XSVcRN\nJiLxABqtnMrKStwuF8/9/jl0ShXJuIjapCcuRlBpjUTDcYI+H5oULVk5aej1BkgmMZi0pKYauP/+\nH3P/fT8niYhSrkIuV6LRyDHoBcSwmwd//G2OHn6PgqICMiwmFmz+Br1jPv7w6l6co07S09LwhW2o\nFWYUcYlwJIAn6CY9PQO9Qs/Usim888F7bN26mWAgTF3dGWKxGDNnVdDa1kY4HOamG29i15uvYzRo\ncV/kgNhlYRZkYDSaGeq343EGMGj0yGVRBAVEY0mysnP544svsGXrNVxoaOLH3/seqUYDSY2GF1/9\nM6+yk3VsoJdOugmRVGnZeOP17Lj9m3SeP8c0mQlJjGJUKSjVqdh01RoiCS+C1kxabjFv7/uYgqw0\nulouYDRpMaaaUSjAPugiFIRweJhIXE6MKNu330ZbVxelpSVoTSamlReSnZ5GY2ML9lEHfb1DSFKC\n2VWzcLq8eKIRxIAXk0GPxZKC3mDFnGqhy9aH0ailcvYs/vDCC8ymmnzcPMtzVDCdW65fzWfH6+hq\n7sRsSicRjyJI4+uYkEiy7EenAAAVWklEQVTg9/kwGzJIzzQSjYZxe/y01DvQ6/SYLalUFhYgV8SY\nV1XN2XPn+eEPfsCGjet45NEn6bH1olTL0Ft0CDItnmCcw4dPEIkHiSZ8NNbXY7cNsenaVaysrYWk\niFwexzFoY93mbWjVeoKKALUrV9DU2MacuVUgi9E7MkZbUzNSEtCr2HjjLfhGx+hoqMfuHGPlmi04\nXE5kKjXGjDTCMRDQkZSUmDMMJKIuVMoM7n/ocW66eiEKKcasmTPo6rEz5vEgVyRZt3ED9RcaycrO\nZWhoEE9gFJIiq1YswetyMjw8ymvvvkucOB/sO8CsGbNwOb0UFBTS1NxMKBQgJyeHPXvfYX5NDfUX\n6i/6ML08mmGpFqlqURVqpY5USyanXj6BHBk55BIjgR4Tflzo0JNPCbce3cbsyhk88csnSQpw5xO3\nsYtdjDCGEw+au9SkWTPJTEvFolZT9YNyTnOYHKx8zhFqf7sYQ2o201av5WSvjYP7j1AzcxaNzU04\nXGMEIwFcXjdj/X7GBscQZHEMljQyc6yYzVa6u7upqprL3Kq5xMNeDEYtfQMDDI8FOHjwOHK5kso5\ns6iYWcHnJz8j1WrG5xyjvLwUfyCCwz2GXJEkzWph5sxKImF4/r6dzGYOVkwc5yiK2QpioSSCXE00\nGkXoSRJl/K4+CYlYRgyTMQ2FAmKxMPkFBcRDQWz9g8gEOUlJZOniBYy5XCxZvIwjR45wy23X43G7\nCURCZOVnEveF2b17L5uu3ko8Bh8d+RCSMdJTUwh6AiRlUf7nT76PUg4ep4f+YTdPP/3P6NQGVCoN\nAb93fAWBeJxbv3ELx46foiC/EG80wNU3XMumtZv55g3fwDkwxMKFCxDkEie+OM7mbdt453cfkkI2\nShTIiKJDxE8fWlJw4mL731zLtds2EvZH+c73foTN4eXu73wfEHj9tTeJd4okSZBPHvnk417rpLO1\nG4fDhTnNgsmiIRwOYzFa6e3tRSaXo1ap2LFjB8/+/vckRRGjwUgoHMI/NnLl9FmUaqVkTDchl6vI\nysxhyelFjDGGhIQZCwc4SA1z6GMILUYcc+xYLHruuedeJAEKtmQRxAeoeJaXOFp8mLKiMrZs3szR\nwwcpfr+AB7mHT3iXFATCvwmSXlJO3tz5rP/GdirKZiAGQ7hdLq7evI6kFMPnC/DnP71Ddko6CxdX\nIldr0enVOBxO0lJyOHr0GIFAkNW1K6mYWoRSAYePnmNgyEN7Ry8ypYLi0jwK87I5f+4s8ViI6tlz\nMKdYiMQDTJteTkZKKuFwmGRCybm7GjnAcaqpxIiWvZl7WbZ0OfbBEfyOMQKdTkQSrGENnXTRZ+1F\np9UiqbT4YiJKnRopHkEh0yBKEiADSYZSqUauVqJQqpAp/KxdupiCkjwikoRnzE9fzwgNjS2olWoU\nahldnc2UFBYQ8QXJLs7l23feQVtLE92d/aSlZdE30IfDPUZaahYAx48fZcXyFRw9dhKN3EQ0HkGu\nhG3bb+Ku2+/kkft/xqmTdSCokCtkbL5mA0dPfkrP8QFyyEFJBA0BMhH4Nt9GIJtX+JDeRW30D/Wh\nlKlIT80mNTOHQCDEwICNWCxOti2Ldlq4g9v5nDpkC+U0tzSzYf1Gzp49i0YDwyNjGI1G1q6t5aN9\nH5CZlcuYw8HKFSt47733UKtVbN26lT89+89XTp9FqVQyc+Z0QsEEiaSInSHO04oJPT/hXr7NN/Hg\nxEOEV9mFOzlCLBjmuWee5e+eeJyTnGAmZdTTjITIupXrEMQ469etYc/uXfiw8Bi/xYDIWqpRp+mY\ntmgeK9Zexa+ffIamji72fLgPo8lEW3szBoOWZEJCroDrtm3GaEmSnV+Ea8zBjGnTiUUl6s/WU1ZW\nQvmU6Yw5hzl2cD81S9bQ2TaEXmsEQWC0bwjHwCDl5cXoNEoyM/Po6etlZe0SBm096BRqtFoNMpWc\nuczEQwAtKtKxUpKfg2d0mIG2FnJNekIMs5mr0BEni0Lmrc4k3WrC7hd459BxYjJQyEUi0SgymYJ4\nPA6SCoVKhaDQIajU3PeT77CkagY22yDv7DuA1mhGY0pjcMSD3qhDKSaprKjGZFbikI0SiUTZ9eZ7\nLF6whE8O7SEeDxGKu1i4fB4nTh1h3rxlLF+5lIGhQQSZnFAkghSJMG9ZDW1nLnDfhf+BXNCg0CuJ\nq7SIcYkjJ45RXpjPjOPlaMjkGO+ym5cZ5AxqDOziE0qYSr+qj9tuvQPXqIcpU6bzwh93ojcYEEXw\nej2EJhJljGFnmCG0Tj077rydcFjEbDYzMNCPQqFEo9bw9tu7WF27CikpR6lSUd/QQFFREWJSxOv1\nXvRxelmYRSaToTcq6R/yYEq1EiJGEqilFhVqbIyiRoUCAS8hLBmZmNI0eMbc7Ni+nc1sopIqhhnF\njZNYQM+N267l4QcfZtniNTQf7WSYfuZQjIAWXWo6zz37CulphZy5UI81NQUlYDCqGPX4iYugFhRI\ngoJBn52a/KnoExBWqsjLSmf7Hd/jxpu+yYcf7sGamk5D/RekWqyo5TK8XiehSJhwPIIYSZCRlY7D\n42H9+rU01J+noDiPUDCKQmnEkp1LJOhBIZeRwMtpTjKbKjpop7pmMedPn2bL5qsJ957nrr6NjCIn\nHTMqkgT0EfTqODMr5tLQ04M9LuFyjKDUKnC5xigrLcOoTSEUFvEFQohimH988lk822/nuRdeIBQO\nsf3W2/j86Efj/T+SxKIxzp49S8WMcpwOL06nkx7DAAcOfgoCKFVyVEoDWeY8LAtSCYRCnG1owWIx\nU5xfRFtLP76Qj08/+wSd1oReoyZp1oJRzq8ffZiQ04NcLuep3/wGHVpUjPI4P8VNgAbsfMC7hEig\noI/O7nZi8ThiQuKL8/XIFDJGRkYAicqqmUhHQYOaIcaIECXoCiOTVLy/+w3iYoKAP4BcLUMV1KJX\npzBqG6OxqQWVRk9aejrDIzauv/5aTn7++V84Ov+Ny8IsgiBDpy9kyea1yI0CRz2vI4REZjw2HUfc\nje22ERpp5Vauw0AKyRTwjAzS092PRqtmP4dp5Cy5FBMnyYJFi5g9p5J//Kd/IhQPMpUiYgj4cfMW\n+1k7uo5QKEp1dTWpqamMOpzkZmSj0uqJuez0dtgI+UMIYoLa5asJeZ0cOPIps+dWU1k1n9179rDt\nhpu58fprUOr1LPl4EVmkENoVopBsztPCNKaiRMRut+NmjLcPvslfswMXIV7iTbbzLf7Ey9zK9XgI\noHzRgPppJdHSEL4eB28882dmMIsP6vazmqnMeG0dQlMbUiSIwz7Ilp3riCCnB5G5VPHZ8gY8HgX+\ngJdpM6aRdywbG334CAMyxKlJNOocXv7TTlQyDcFogj88/wfS0nKIRMKIXVGi+CgiB88JN6GiMPl5\nOchVShLDcQoKCzjfcJ7C3Dyam1pQ69T09PUzc+Z0Zs+ezeiok5FRF1HJx93f+WtefPElBKWZFKOV\nu757Jy0NDZQXlwBgNpsYmDaA3uhH95iBJ/7wNP/wzD9z/mf99A0MkJNTgDCoR6HW0N/fy8BQH6tW\nrcDnDFB38iQelwYzKZzgOCYszGY29mw7h48cIBj2kUwmKQrl4g8FSbgTqNHQxyA33nQj+z4+NH5m\nCoV59bXXKMwvuujj9LK4U/K555//+ZAvhNaaQ15BPpvXrObUyZMMD9s5c/Yc2Z0FtNONnUF2sIOO\nRZ1olUoS8TgZOemkdurYxApUGGihl3t/+33Kp5bzwb73mTWzgp79HfTSTwml5FPIUdUJisvLsWak\nkxTk7HlvL85RF87hQbZuWINr1E5hTh5u1yiOUTvI5JRNmUpaegZOV4BH//YxiooKqF1XS3tXL+KJ\nJJmkU8T4/TGppNBJB1FCFFOEgIQSBfs5QA1LaaSdDrpZwDzOcYZu+nHm+hFFiWVLl+DzetnRvp1u\nehlljDAJYtkKSioq6egd4Ppbv0XiZR0qclGRzUM8Qc2GhciVCubNr0apktPW1Eo187lAI0rUFM0t\nxGCWE4uG6epsRaOWERNF4nERp9OJIiqRiRU5Msooxp3lw2TQYTQbSctIJSc3m7T0VIoLi2iqb6Ri\nxiw0Gj0qtZKG+gv4AkHm18xj6pQSDhw4iEKuJByOEgj42Lh2LTKSHD92EovFyvz58/ns06N43C7a\n2tv4+c8e5Ru372DEPsTGqzZx/MQXGHQp9PX2IwAalZx586o4deIEa1YtZ2CgnynOqfQzQAZpePHh\nlnkYGOxlx45v0dPbw0LvAmTIWccGOukmpo1y6os61CoNiUSC4tJCqqvn0drSSiTgv3JuK77/gQd/\nvvvjD3nzlTfRJZPkZKXiGgug0WjoH+zj1NBJ8ikghgsb/XweO0FxaT7ugBejVcuKpiqqKKeLQbwk\nWHDHPLQmLaWlxfi9Xnr2tqNEyQCDBAnRaekiHIuSk1+AWmsgHonT3tDCU798mJLcFE5+dphYQqS/\np4+srCxa2zrIystDoZDz4E8fRVAoqFlQzdDQGOkZeQj7ZYziIEYIHUqaaUKNgoXU0EU3rbQSQ0KB\ngXOcx4gRM0ZaaUePnja60JQYGOwfYmRkhPKyUtLr0skmBzNmlrCGl0Z3seuDj/GEkvz53Y/Akcdz\nvMWrvI8KA7fedwu2wS7y8nKoqKikZt9ibDhxEsJACm6dj0hIpLO9h9oVtYwOjyJKIJMpkMskVvoX\nEyZMAB96tATTfLS0NOPyePB6vVRWzmJweJDR4VEC/gBiMkl//zB5ebm0tbdhNJjoaW+nu7ONRCSG\nXmPE6fURDvipmD6F9DQru3a9T31DMx9/eJBoTEShUpCWkkrd8RMIkpz01Aw2bryGfR8dwmYbIBEP\nk4xHcbtdKGVKbL299HR3snTxEs401qNAgZ8AShRYS63IBBlffHGaZctW8EnzJ3TRgxc/YzhQGpSk\npqUQCocpKy+nuameytlVjIwM43M5rxyzPPb4Yz/vGhqkqCCLYXs/s6pmotGo6B20UVReTvHpCmTE\nGWWUKGGEaRCNBwmHXFRNn0rTyfOsYBXv8gk+gtRsn8sP/ubHRBPQ2dZH6Rcl6FCjJYkZLanXFKLR\np5CTlY5jdBC3x4M/HmPr1lU4htpZtXIVWbklNJ+pZ2PNbAZsdk439XLw4GFi0Qgbr17PmbPnOHGm\nmfrzzdhGepFIUE4RZvQokHDgRIkaM0YySWU5yznPBeRAIbkMYiOEg9WspIke3KphlFotYkikq7MH\n5agcBQpmMQsVCqp+Vok1PR2jJZ3z9c04Q2PY8dHPEHOpwmEe4eixOq67/jo6e7pRfabnLQ7wEA+x\ngeUUPmjmh9/9Lvs+/IiRUSeilCQSFZGEGOVTyrD19mNCTRqZnKUeUSugUOkQExIGnZ6mpkbEYBJB\nkpGRkUVfbx/BhJ/BoQFKyspo62gjGIoST0IgFMIX8JGbk4/VaqLf1ofFamL+onl8sPcDxGScqVMK\n8Hl9mM0mqqrn09tnx273cnD/EZKJOIlEiEQ8TiAQQCZXEo+L5ObnE47F6ejspMI/lTZaKKMID15u\n+e7N9HR0/OvtBXc6/5pWmvHg4BquZjRviEAkQiIZJz0lFceYi56OPmLhKNHwFXRmeeIXv/h5akkJ\nucWl6NRacjKz2ffxAebMm8sjj/yU9Q+vpsHUjVPjotV7FqVZg95qYN6c2WzbvJGrf7CGo9MbOelq\noGBFDhvXLee6zddQnFOAY9TFR+IRNKsFtv/DrQwXjzK1Yi47X9pJV0sLt9y8jfk180kkoiyqmYta\noUJCya7XdzEjN4NsgwxrRirtfTYiooRKa8Du9ODyRqgon47LMUbA4sew0MiF7DPM/9sqBkuGCOaF\nic+I0qZuRTZNxmfip5QsKEeVp0ReIbDwuvlMq7BwzU+WcaDxBJLJgkpKkoiJCIJAoCJK2Y4y9qv2\n01TSjEatZ3pJITl5WchVMuRlSrwKN9oMLQv/agln6i7Q3deHKMZ56tdPMjhzkA5fB9MfKeR48WG2\nbr6Gp371O8JhkWAgRDAUIinGMBsM9PR0UjA/m6ZoO8I0OYFkiPLyqTjG3CxYWINtoIdZldOwWlNI\nSUmhz9aHNcWCTm9g1arVnK47Q052Dk63i6LCQnR6A6UlpXR0tGFNMeH1eli8eDGdHU309/cxZUoR\nlZWz0OmMBAIBCgtK+Pzk5wT8YQSSBMN+klKC4txMcrOyMJrMuH0hnI4xrNYUBGSIpbDlxi24tV6s\nRWbOnTmHXqWhYto0mhubaUptQp6mJGmQ0ahqYsbMSnr7+ohFo6Snp2Pr60VvMWBKMeN1jF45CSsE\nQfADbZc6jq+INMBxqYP4Cvj/SUehJEnpf+mDLovRMKDtYi4KXQkIgnD6v4OWSR3/nssiI+Ukk1wJ\nTJplkkkuksvFLH+xc3UF8d9Fy6SO/4PLooM/ySRXApfLmWWSSS57Js0yySQXySU3iyAIGwRBaBME\noXMiS8xliyAI+YIgHBEEoVkQhCZBEH44UZ8iCMIBQRA6Jp6tX3rPAxPa2gRBWH/pov/3CIIgFwTh\nnCAI70+UrzgdgiBYBEF4SxCEVkEQWgRBWPS16ZAk6ZI9ADnQBZQAKuAC4zmVL2lc/0W82cDciW0j\n0M54zudfAfdP1N8P/HJiu2JCkxoontAqv9Q6vqTnR4ynrXp/onzF6QBeBu6c2FYBlq9Lx6UWugjY\n/6XyA8ADl/oH+L+I/z1gLeOzD7In6rIZv8j67/QA+4FFlzruiVjyGM/ptvpLZrmidABmoIeJgaov\n1X8tOi51MywXsH2p/B/mRb4cEQShCJgDnAL+q7zPl6u+p4H7gOSX6q40HcXAGPCniebkC4Ig6Pma\ndFxqs1yRCIJgYDz/8z2SJPm+/Jo0/pd1WY/HC4KwCRiVJOnMf7bPlaCD8elac4FnJUmaAwQZb3b9\nK1+ljkttlkEg/0vlvIm6yxZBEJSMG+VfJEl6Z6LaPpHvmYnn0Yn6y1XfEmCLIAi9wOvAakEQXuHK\n0zEADEiSdGqi/Bbj5vladFxqs3wBlAuCUCwIggq4GdhziWP6TxEEQQBeBFokSXrqSy/tAbZPbG9n\nvC/zv+tvFgRBLQhCMVAO1P2/ivc/Q5KkByRJypMkqYjx7/ywJEm3ceXpGAFsgiBMnahaAzTzdem4\nDDppGxkfVeoCHrrU8fyFWJcyfkqvB85PPDYCqYx3ljsYX+ks5UvveWhCWxtw1aXW8B9oWsm/dfCv\nOB1AFeOJ6usZX2jL+nXpmJzuMskkF8mlboZNMskVw6RZJpnkIpk0yySTXCSTZplkkotk0iyTTHKR\nTJplkkkukkmzTDLJRfK/AMm2/mm2xe2TAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "w, y = pca(training_data,40)\n", + "test_pca = w.dot((test_data - np.tile(mean(training_data, axis=1),(2052,1))).T)\n", + "positive = 0\n", + "total = test_pca.shape[1]\n", + "temp = np.zeros(total)\n", + "labels = np.zeros(total)\n", + "for i in range(2):\n", + " model = multivariate_normal(mean(y[:,i*2500 : (i+1)*2500],axis=1), cov(y[:,i*2500 : (i+1)*2500]), allow_singular=True)\n", + " probability = np.apply_along_axis(model.pdf, 0, test_pca)\n", + " for j in range(len(probability)):\n", + " if probability[j] > temp[j]:\n", + " labels[j] = i\n", + " temp[j] = probability[j]\n", + "pool_idx = np.where(labels == 0)[0]\n", + "im = plt.imread('ekalismall2.png')\n", + "for i in pool_idx:\n", + " im[math.floor(i/38)*16:math.ceil(i/38)*16,(i%38)*16:((i%38)+1)*16, 1] = 255\n", + "plt.imshow(im)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.pdf b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.pdf new file mode 100644 index 0000000..a5bfb34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.zip b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.zip new file mode 100644 index 0000000..8babe84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/homework3.zip differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n1.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n1.png new file mode 100644 index 0000000..a24e752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n1.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n2.png new file mode 100644 index 0000000..c9b1f4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n3.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n3.png new file mode 100644 index 0000000..538ef08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n3.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n4.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n4.png new file mode 100644 index 0000000..404e593 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n4.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n5.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n5.png new file mode 100644 index 0000000..f68a945 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/n5.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg1.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg1.png new file mode 100644 index 0000000..c6ee38e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg1.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg2.png new file mode 100644 index 0000000..36e8fd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg3.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg3.png new file mode 100644 index 0000000..4a854fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/negative/train_neg3.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p1.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p1.png new file mode 100644 index 0000000..c9b2841 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p1.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p10.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p10.png new file mode 100644 index 0000000..5b1106a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p10.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p11.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p11.png new file mode 100644 index 0000000..6bae6e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p11.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p12.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p12.png new file mode 100644 index 0000000..d85260a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p12.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p2.png new file mode 100644 index 0000000..98f3050 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p3.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p3.png new file mode 100644 index 0000000..1f688de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p3.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p4.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p4.png new file mode 100644 index 0000000..1622338 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p4.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p5.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p5.png new file mode 100644 index 0000000..50d46cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p5.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p6.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p6.png new file mode 100644 index 0000000..43d2f45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p6.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p7.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p7.png new file mode 100644 index 0000000..611c12e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p7.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p8.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p8.png new file mode 100644 index 0000000..d4b7d24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p8.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p9.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p9.png new file mode 100644 index 0000000..4ed95b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/positive/p9.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/0.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/0.png new file mode 100644 index 0000000..8efe541 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/0.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1.png new file mode 100644 index 0000000..3021ace Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/10.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/10.png new file mode 100644 index 0000000..4ebd24e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/10.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/100.png new file mode 100644 index 0000000..35d5050 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1000.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1000.png new file mode 100644 index 0000000..b1ed2e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1000.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1001.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1001.png new file mode 100644 index 0000000..4f7ba5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1001.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1002.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1002.png new file mode 100644 index 0000000..6ef7c36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1002.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1003.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1003.png new file mode 100644 index 0000000..9e4fe34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1003.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1004.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1004.png new file mode 100644 index 0000000..cbabdc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1004.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1005.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1005.png new file mode 100644 index 0000000..8b955b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1005.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1006.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1006.png new file mode 100644 index 0000000..9479847 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1006.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1007.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1007.png new file mode 100644 index 0000000..02eb8c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1007.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1008.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1008.png new file mode 100644 index 0000000..493dc9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1008.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1009.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1009.png new file mode 100644 index 0000000..30dbdb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1009.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/101.png new file mode 100644 index 0000000..3f9462a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1010.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1010.png new file mode 100644 index 0000000..3e91778 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1010.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1011.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1011.png new file mode 100644 index 0000000..4bc6b63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1011.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1012.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1012.png new file mode 100644 index 0000000..9182b31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1012.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1013.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1013.png new file mode 100644 index 0000000..6a5146c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1013.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1014.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1014.png new file mode 100644 index 0000000..73fdb8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1014.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1015.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1015.png new file mode 100644 index 0000000..49c3b34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1015.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1016.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1016.png new file mode 100644 index 0000000..c138eda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1016.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1017.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1017.png new file mode 100644 index 0000000..204ef57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1017.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1018.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1018.png new file mode 100644 index 0000000..0ce1b92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1018.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1019.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1019.png new file mode 100644 index 0000000..d5ca2c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1019.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/102.png new file mode 100644 index 0000000..79b7249 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1020.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1020.png new file mode 100644 index 0000000..ec61d37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1020.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1021.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1021.png new file mode 100644 index 0000000..29ec340 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1021.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1022.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1022.png new file mode 100644 index 0000000..69e2fec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1022.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1023.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1023.png new file mode 100644 index 0000000..092b919 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1023.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1024.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1024.png new file mode 100644 index 0000000..461d927 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1024.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1025.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1025.png new file mode 100644 index 0000000..d63a75e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1025.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1026.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1026.png new file mode 100644 index 0000000..1efbee8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1026.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1027.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1027.png new file mode 100644 index 0000000..3698d6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1027.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1028.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1028.png new file mode 100644 index 0000000..208aeaa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1028.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1029.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1029.png new file mode 100644 index 0000000..58d15fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1029.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/103.png new file mode 100644 index 0000000..ed1c5d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1030.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1030.png new file mode 100644 index 0000000..25aabb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1030.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1031.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1031.png new file mode 100644 index 0000000..ebab623 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1031.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1032.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1032.png new file mode 100644 index 0000000..cc7ed5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1032.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1033.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1033.png new file mode 100644 index 0000000..a683c39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1033.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1034.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1034.png new file mode 100644 index 0000000..4c732da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1034.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1035.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1035.png new file mode 100644 index 0000000..300168b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1035.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1036.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1036.png new file mode 100644 index 0000000..323ded9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1036.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1037.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1037.png new file mode 100644 index 0000000..8b19971 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1037.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1038.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1038.png new file mode 100644 index 0000000..2cf4382 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1038.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1039.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1039.png new file mode 100644 index 0000000..756dbcd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1039.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/104.png new file mode 100644 index 0000000..3413c9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1040.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1040.png new file mode 100644 index 0000000..f6e7b25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1040.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1041.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1041.png new file mode 100644 index 0000000..467cfd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1041.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1042.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1042.png new file mode 100644 index 0000000..910e00b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1042.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1043.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1043.png new file mode 100644 index 0000000..15c1b44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1043.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1044.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1044.png new file mode 100644 index 0000000..10b2ad3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1044.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1045.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1045.png new file mode 100644 index 0000000..3c18f1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1045.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1046.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1046.png new file mode 100644 index 0000000..41d7e97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1046.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1047.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1047.png new file mode 100644 index 0000000..afb3485 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1047.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1048.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1048.png new file mode 100644 index 0000000..e06ff0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1048.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1049.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1049.png new file mode 100644 index 0000000..b5d2567 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1049.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/105.png new file mode 100644 index 0000000..57897d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1050.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1050.png new file mode 100644 index 0000000..9d43a3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1050.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1051.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1051.png new file mode 100644 index 0000000..3684201 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1051.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1052.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1052.png new file mode 100644 index 0000000..857a8e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1052.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1053.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1053.png new file mode 100644 index 0000000..b01fe8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1053.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1054.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1054.png new file mode 100644 index 0000000..becc8ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1054.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1055.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1055.png new file mode 100644 index 0000000..ac0bec4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1055.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1056.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1056.png new file mode 100644 index 0000000..9d8009e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1056.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1057.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1057.png new file mode 100644 index 0000000..f5202cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1057.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1058.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1058.png new file mode 100644 index 0000000..788de05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1058.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1059.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1059.png new file mode 100644 index 0000000..01aab76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1059.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/106.png new file mode 100644 index 0000000..8c8f5f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1060.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1060.png new file mode 100644 index 0000000..e7474f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1060.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1061.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1061.png new file mode 100644 index 0000000..ab1ca92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1061.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1062.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1062.png new file mode 100644 index 0000000..9e9c41f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1062.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1063.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1063.png new file mode 100644 index 0000000..463bf73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1063.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1064.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1064.png new file mode 100644 index 0000000..a9a58eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1064.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1065.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1065.png new file mode 100644 index 0000000..b3332cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1065.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1066.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1066.png new file mode 100644 index 0000000..7f85787 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1066.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1067.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1067.png new file mode 100644 index 0000000..ee94cdd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1067.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1068.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1068.png new file mode 100644 index 0000000..0e441f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1068.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1069.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1069.png new file mode 100644 index 0000000..8c39957 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1069.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/107.png new file mode 100644 index 0000000..f3da1a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1070.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1070.png new file mode 100644 index 0000000..d84a51b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1070.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1071.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1071.png new file mode 100644 index 0000000..f20fc3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1071.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1072.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1072.png new file mode 100644 index 0000000..dc00911 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1072.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1073.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1073.png new file mode 100644 index 0000000..ebd2aa1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1073.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1074.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1074.png new file mode 100644 index 0000000..e9331b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1074.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1075.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1075.png new file mode 100644 index 0000000..b25047f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1075.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1076.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1076.png new file mode 100644 index 0000000..af1ab34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1076.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1077.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1077.png new file mode 100644 index 0000000..e7a178c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1077.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1078.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1078.png new file mode 100644 index 0000000..1c0fdf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1078.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1079.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1079.png new file mode 100644 index 0000000..3378e57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1079.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/108.png new file mode 100644 index 0000000..3845c9d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1080.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1080.png new file mode 100644 index 0000000..9994770 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1080.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1081.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1081.png new file mode 100644 index 0000000..3eb4cf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1081.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1082.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1082.png new file mode 100644 index 0000000..0ab0097 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1082.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1083.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1083.png new file mode 100644 index 0000000..5175180 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1083.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1084.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1084.png new file mode 100644 index 0000000..47e3fea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1084.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1085.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1085.png new file mode 100644 index 0000000..4329753 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1085.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1086.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1086.png new file mode 100644 index 0000000..04e9a2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1086.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1087.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1087.png new file mode 100644 index 0000000..35278bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1087.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1088.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1088.png new file mode 100644 index 0000000..0898596 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1088.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1089.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1089.png new file mode 100644 index 0000000..a954d2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1089.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/109.png new file mode 100644 index 0000000..8310ec2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1090.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1090.png new file mode 100644 index 0000000..639dbb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1090.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1091.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1091.png new file mode 100644 index 0000000..13e7b89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1091.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1092.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1092.png new file mode 100644 index 0000000..31a96ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1092.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1093.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1093.png new file mode 100644 index 0000000..95bc419 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1093.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1094.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1094.png new file mode 100644 index 0000000..2e2a32d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1094.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1095.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1095.png new file mode 100644 index 0000000..03c85b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1095.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1096.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1096.png new file mode 100644 index 0000000..01b4702 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1096.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1097.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1097.png new file mode 100644 index 0000000..f591228 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1097.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1098.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1098.png new file mode 100644 index 0000000..5fce1c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1098.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1099.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1099.png new file mode 100644 index 0000000..3a430a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1099.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/11.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/11.png new file mode 100644 index 0000000..462ca09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/11.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/110.png new file mode 100644 index 0000000..4f236a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1100.png new file mode 100644 index 0000000..a6fa6d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1101.png new file mode 100644 index 0000000..fb5472c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1102.png new file mode 100644 index 0000000..9e018fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1103.png new file mode 100644 index 0000000..fe2ef8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1104.png new file mode 100644 index 0000000..eb6f0fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1105.png new file mode 100644 index 0000000..315e2f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1106.png new file mode 100644 index 0000000..8a44c17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1107.png new file mode 100644 index 0000000..02c3f3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1108.png new file mode 100644 index 0000000..1cada38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1109.png new file mode 100644 index 0000000..ffe40a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/111.png new file mode 100644 index 0000000..a0928cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1110.png new file mode 100644 index 0000000..f0dc2fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1111.png new file mode 100644 index 0000000..5268931 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1112.png new file mode 100644 index 0000000..c49892b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1113.png new file mode 100644 index 0000000..74659a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1114.png new file mode 100644 index 0000000..f30eb79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1115.png new file mode 100644 index 0000000..0fffd26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1116.png new file mode 100644 index 0000000..74e0c9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1117.png new file mode 100644 index 0000000..c68eaba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1118.png new file mode 100644 index 0000000..f0867b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1119.png new file mode 100644 index 0000000..5e9906b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/112.png new file mode 100644 index 0000000..014d675 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1120.png new file mode 100644 index 0000000..04b665f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1121.png new file mode 100644 index 0000000..107753b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1122.png new file mode 100644 index 0000000..705ddd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1123.png new file mode 100644 index 0000000..b33e7a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1124.png new file mode 100644 index 0000000..5dc9909 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1125.png new file mode 100644 index 0000000..5964470 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1126.png new file mode 100644 index 0000000..13a2810 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1127.png new file mode 100644 index 0000000..9526250 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1128.png new file mode 100644 index 0000000..353b3d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1129.png new file mode 100644 index 0000000..5ed07fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/113.png new file mode 100644 index 0000000..40aff3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1130.png new file mode 100644 index 0000000..881b4c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1131.png new file mode 100644 index 0000000..1d8bd6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1132.png new file mode 100644 index 0000000..59dc864 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1133.png new file mode 100644 index 0000000..677bc31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1134.png new file mode 100644 index 0000000..9f9a99e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1135.png new file mode 100644 index 0000000..c129f56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1136.png new file mode 100644 index 0000000..3c96713 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1137.png new file mode 100644 index 0000000..4f74c6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1138.png new file mode 100644 index 0000000..ab0c7b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1139.png new file mode 100644 index 0000000..7e95b15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/114.png new file mode 100644 index 0000000..dc27aee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1140.png new file mode 100644 index 0000000..bdd6199 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1141.png new file mode 100644 index 0000000..8560d19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1142.png new file mode 100644 index 0000000..5413086 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1143.png new file mode 100644 index 0000000..230dd4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1144.png new file mode 100644 index 0000000..38a09fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1145.png new file mode 100644 index 0000000..3708378 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1146.png new file mode 100644 index 0000000..3dababb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1147.png new file mode 100644 index 0000000..ac6e956 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1148.png new file mode 100644 index 0000000..09c603e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1149.png new file mode 100644 index 0000000..6538220 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/115.png new file mode 100644 index 0000000..e977f35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1150.png new file mode 100644 index 0000000..d6e43ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1151.png new file mode 100644 index 0000000..499e4a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1152.png new file mode 100644 index 0000000..8eb4b56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1153.png new file mode 100644 index 0000000..30cbe7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1154.png new file mode 100644 index 0000000..68fc571 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1155.png new file mode 100644 index 0000000..15cc4fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1156.png new file mode 100644 index 0000000..3fb7866 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1157.png new file mode 100644 index 0000000..691a3ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1158.png new file mode 100644 index 0000000..2a11f10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1159.png new file mode 100644 index 0000000..aaedb77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/116.png new file mode 100644 index 0000000..0ec44ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1160.png new file mode 100644 index 0000000..8424786 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1161.png new file mode 100644 index 0000000..3d366d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1162.png new file mode 100644 index 0000000..ff61f51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1163.png new file mode 100644 index 0000000..56171a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1164.png new file mode 100644 index 0000000..0a5ee6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1165.png new file mode 100644 index 0000000..99b395f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1166.png new file mode 100644 index 0000000..e7efabd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1167.png new file mode 100644 index 0000000..e569988 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1168.png new file mode 100644 index 0000000..b3551b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1169.png new file mode 100644 index 0000000..4347cc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/117.png new file mode 100644 index 0000000..660e708 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1170.png new file mode 100644 index 0000000..ae63b2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1171.png new file mode 100644 index 0000000..59a9d8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1172.png new file mode 100644 index 0000000..3688d23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1173.png new file mode 100644 index 0000000..db6ee8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1174.png new file mode 100644 index 0000000..7c278cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1175.png new file mode 100644 index 0000000..16f7ae2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1176.png new file mode 100644 index 0000000..dbb1090 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1177.png new file mode 100644 index 0000000..27f84f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1178.png new file mode 100644 index 0000000..ed515e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1179.png new file mode 100644 index 0000000..5c75944 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/118.png new file mode 100644 index 0000000..f84ad8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1180.png new file mode 100644 index 0000000..1e7cb26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1181.png new file mode 100644 index 0000000..7a670fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1182.png new file mode 100644 index 0000000..6fe79dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1183.png new file mode 100644 index 0000000..6c4e3b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1184.png new file mode 100644 index 0000000..a721e3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1185.png new file mode 100644 index 0000000..004ea39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1186.png new file mode 100644 index 0000000..fac7f8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1187.png new file mode 100644 index 0000000..c3b618c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1188.png new file mode 100644 index 0000000..341a103 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1189.png new file mode 100644 index 0000000..f5180ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/119.png new file mode 100644 index 0000000..dedce3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1190.png new file mode 100644 index 0000000..b366519 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1191.png new file mode 100644 index 0000000..8415d85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1192.png new file mode 100644 index 0000000..ed9281a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1193.png new file mode 100644 index 0000000..67cb26e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1194.png new file mode 100644 index 0000000..4111e7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1195.png new file mode 100644 index 0000000..acfd0cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1196.png new file mode 100644 index 0000000..54fc9e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1197.png new file mode 100644 index 0000000..60a3673 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1198.png new file mode 100644 index 0000000..de1c908 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1199.png new file mode 100644 index 0000000..e4759b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/12.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/12.png new file mode 100644 index 0000000..ab3b660 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/12.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/120.png new file mode 100644 index 0000000..5a1cb6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1200.png new file mode 100644 index 0000000..7d8d29d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1201.png new file mode 100644 index 0000000..e687fb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1202.png new file mode 100644 index 0000000..71a6efd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1203.png new file mode 100644 index 0000000..74b9964 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1204.png new file mode 100644 index 0000000..41cc995 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1205.png new file mode 100644 index 0000000..813c794 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1206.png new file mode 100644 index 0000000..14395f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1207.png new file mode 100644 index 0000000..f3d7b0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1208.png new file mode 100644 index 0000000..9a7322a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1209.png new file mode 100644 index 0000000..345fd5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/121.png new file mode 100644 index 0000000..213fffe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1210.png new file mode 100644 index 0000000..0bbdeb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1211.png new file mode 100644 index 0000000..f4c4c40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1212.png new file mode 100644 index 0000000..8e32240 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1213.png new file mode 100644 index 0000000..4d8b66c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1214.png new file mode 100644 index 0000000..a5bdf25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1215.png new file mode 100644 index 0000000..3a81862 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1216.png new file mode 100644 index 0000000..c55f831 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1217.png new file mode 100644 index 0000000..f2e2c37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1218.png new file mode 100644 index 0000000..15a2430 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1219.png new file mode 100644 index 0000000..bdbcc54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/122.png new file mode 100644 index 0000000..1e3b043 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1220.png new file mode 100644 index 0000000..2b49752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1221.png new file mode 100644 index 0000000..7282eeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1222.png new file mode 100644 index 0000000..24addbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1223.png new file mode 100644 index 0000000..3bc82c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1224.png new file mode 100644 index 0000000..c321af2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1225.png new file mode 100644 index 0000000..4f1e761 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1226.png new file mode 100644 index 0000000..9f383fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1227.png new file mode 100644 index 0000000..8af16b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1228.png new file mode 100644 index 0000000..65b58e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1229.png new file mode 100644 index 0000000..b93de3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/123.png new file mode 100644 index 0000000..c410e6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1230.png new file mode 100644 index 0000000..a82a81a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1231.png new file mode 100644 index 0000000..4a3f333 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1232.png new file mode 100644 index 0000000..7178765 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1233.png new file mode 100644 index 0000000..d122370 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1234.png new file mode 100644 index 0000000..6465e8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1235.png new file mode 100644 index 0000000..2de5a6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1236.png new file mode 100644 index 0000000..8bd01b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1237.png new file mode 100644 index 0000000..eeed414 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1238.png new file mode 100644 index 0000000..ac74c26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1239.png new file mode 100644 index 0000000..cae3a26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/124.png new file mode 100644 index 0000000..c35bc6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1240.png new file mode 100644 index 0000000..0c4bd20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1241.png new file mode 100644 index 0000000..cd196eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1242.png new file mode 100644 index 0000000..158bd0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1243.png new file mode 100644 index 0000000..793314d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1244.png new file mode 100644 index 0000000..be8ee9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1245.png new file mode 100644 index 0000000..00a6e97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1246.png new file mode 100644 index 0000000..eccdcd2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1247.png new file mode 100644 index 0000000..f6bb94a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1248.png new file mode 100644 index 0000000..58f72aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1249.png new file mode 100644 index 0000000..368b8c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/125.png new file mode 100644 index 0000000..388588e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1250.png new file mode 100644 index 0000000..8253467 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1251.png new file mode 100644 index 0000000..0c1968f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1252.png new file mode 100644 index 0000000..b021db9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1253.png new file mode 100644 index 0000000..6bb540c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1254.png new file mode 100644 index 0000000..2336f2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1255.png new file mode 100644 index 0000000..4e29df4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1256.png new file mode 100644 index 0000000..101208e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1257.png new file mode 100644 index 0000000..858f179 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1258.png new file mode 100644 index 0000000..f95b845 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1259.png new file mode 100644 index 0000000..886a29d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/126.png new file mode 100644 index 0000000..9babc87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1260.png new file mode 100644 index 0000000..cb4bdc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1261.png new file mode 100644 index 0000000..e86e64d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1262.png new file mode 100644 index 0000000..67fe0e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1263.png new file mode 100644 index 0000000..4bc4735 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1264.png new file mode 100644 index 0000000..deb8eed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1265.png new file mode 100644 index 0000000..3d63e0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1266.png new file mode 100644 index 0000000..ffc1078 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1267.png new file mode 100644 index 0000000..bbfabb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1268.png new file mode 100644 index 0000000..6c72edf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1269.png new file mode 100644 index 0000000..46a953c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/127.png new file mode 100644 index 0000000..c06064b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1270.png new file mode 100644 index 0000000..6eccab1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1271.png new file mode 100644 index 0000000..2b66381 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1272.png new file mode 100644 index 0000000..ff694ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1273.png new file mode 100644 index 0000000..9537310 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1274.png new file mode 100644 index 0000000..b179bf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1275.png new file mode 100644 index 0000000..a342051 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1276.png new file mode 100644 index 0000000..782cabe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1277.png new file mode 100644 index 0000000..3bfecfe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1278.png new file mode 100644 index 0000000..92f5638 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1279.png new file mode 100644 index 0000000..a1dd8eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/128.png new file mode 100644 index 0000000..9bb2952 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1280.png new file mode 100644 index 0000000..16161ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1281.png new file mode 100644 index 0000000..25f4889 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1282.png new file mode 100644 index 0000000..2f9d8cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1283.png new file mode 100644 index 0000000..2d6971b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1284.png new file mode 100644 index 0000000..e48200d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1285.png new file mode 100644 index 0000000..2873ae4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1286.png new file mode 100644 index 0000000..2978816 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1287.png new file mode 100644 index 0000000..4f93932 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1288.png new file mode 100644 index 0000000..01b882c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1289.png new file mode 100644 index 0000000..feee48a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/129.png new file mode 100644 index 0000000..a5d07e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1290.png new file mode 100644 index 0000000..1a25a01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1291.png new file mode 100644 index 0000000..e211396 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1292.png new file mode 100644 index 0000000..e2bf75b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1293.png new file mode 100644 index 0000000..b35577e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1294.png new file mode 100644 index 0000000..9520141 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1295.png new file mode 100644 index 0000000..1980c6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1296.png new file mode 100644 index 0000000..ba7fd6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1297.png new file mode 100644 index 0000000..8a6ac06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1298.png new file mode 100644 index 0000000..5981979 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1299.png new file mode 100644 index 0000000..9d24e64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/13.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/13.png new file mode 100644 index 0000000..cbd81f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/13.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/130.png new file mode 100644 index 0000000..c74d395 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1300.png new file mode 100644 index 0000000..189f474 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1301.png new file mode 100644 index 0000000..2149fee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1302.png new file mode 100644 index 0000000..ae493e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1303.png new file mode 100644 index 0000000..83870ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1304.png new file mode 100644 index 0000000..f362103 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1305.png new file mode 100644 index 0000000..7724ec5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1306.png new file mode 100644 index 0000000..e22d4b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1307.png new file mode 100644 index 0000000..e491ad0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1308.png new file mode 100644 index 0000000..aaaef3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1309.png new file mode 100644 index 0000000..ac61b14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/131.png new file mode 100644 index 0000000..07bd51b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1310.png new file mode 100644 index 0000000..91aeae2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1311.png new file mode 100644 index 0000000..b5468fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1312.png new file mode 100644 index 0000000..8cbea4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1313.png new file mode 100644 index 0000000..4506a93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1314.png new file mode 100644 index 0000000..c0b60db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1315.png new file mode 100644 index 0000000..3c958ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1316.png new file mode 100644 index 0000000..f2804cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1317.png new file mode 100644 index 0000000..f3d77ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1318.png new file mode 100644 index 0000000..00257c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1319.png new file mode 100644 index 0000000..aee74b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/132.png new file mode 100644 index 0000000..ea1391c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1320.png new file mode 100644 index 0000000..e914e42 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1321.png new file mode 100644 index 0000000..a7f7eca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1322.png new file mode 100644 index 0000000..7942a8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1323.png new file mode 100644 index 0000000..fd22ca6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1324.png new file mode 100644 index 0000000..ca8dd21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1325.png new file mode 100644 index 0000000..afb928a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1326.png new file mode 100644 index 0000000..d53fbcb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1327.png new file mode 100644 index 0000000..72dbc7d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1328.png new file mode 100644 index 0000000..fae2e8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1329.png new file mode 100644 index 0000000..6310306 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/133.png new file mode 100644 index 0000000..dfb4a8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1330.png new file mode 100644 index 0000000..27aab3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1331.png new file mode 100644 index 0000000..b362a8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1332.png new file mode 100644 index 0000000..86f46cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1333.png new file mode 100644 index 0000000..d91f3a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1334.png new file mode 100644 index 0000000..dce9436 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1335.png new file mode 100644 index 0000000..2761c6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1336.png new file mode 100644 index 0000000..059c0b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1337.png new file mode 100644 index 0000000..bcbb92c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1338.png new file mode 100644 index 0000000..1ece20e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1339.png new file mode 100644 index 0000000..3357e09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/134.png new file mode 100644 index 0000000..589ce98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1340.png new file mode 100644 index 0000000..03f8afd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1341.png new file mode 100644 index 0000000..6b147aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1342.png new file mode 100644 index 0000000..c0792e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1343.png new file mode 100644 index 0000000..64231dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1344.png new file mode 100644 index 0000000..59d9f5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1345.png new file mode 100644 index 0000000..278d3dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1346.png new file mode 100644 index 0000000..a2d2936 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1347.png new file mode 100644 index 0000000..d3acd1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1348.png new file mode 100644 index 0000000..7f7d095 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1349.png new file mode 100644 index 0000000..d0c1d5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/135.png new file mode 100644 index 0000000..c1af78b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1350.png new file mode 100644 index 0000000..f4cba99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1351.png new file mode 100644 index 0000000..dce169f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1352.png new file mode 100644 index 0000000..81d9d47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1353.png new file mode 100644 index 0000000..bdb7060 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1354.png new file mode 100644 index 0000000..8aa1d33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1355.png new file mode 100644 index 0000000..2ada4ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1356.png new file mode 100644 index 0000000..061993d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1357.png new file mode 100644 index 0000000..accb6a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1358.png new file mode 100644 index 0000000..ecbef0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1359.png new file mode 100644 index 0000000..0f0e839 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/136.png new file mode 100644 index 0000000..541744d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1360.png new file mode 100644 index 0000000..b0f08b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1361.png new file mode 100644 index 0000000..503272d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1362.png new file mode 100644 index 0000000..bbeed35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1363.png new file mode 100644 index 0000000..efe5ab0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1364.png new file mode 100644 index 0000000..55a3635 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1365.png new file mode 100644 index 0000000..b133cb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1366.png new file mode 100644 index 0000000..35a3fdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1367.png new file mode 100644 index 0000000..653e6d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1368.png new file mode 100644 index 0000000..90c71c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1369.png new file mode 100644 index 0000000..7fa971c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/137.png new file mode 100644 index 0000000..dafc631 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1370.png new file mode 100644 index 0000000..e4afcf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1371.png new file mode 100644 index 0000000..ba98f7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1372.png new file mode 100644 index 0000000..aa7fd6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1373.png new file mode 100644 index 0000000..163dfff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1374.png new file mode 100644 index 0000000..a842ccb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1375.png new file mode 100644 index 0000000..febaa76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1376.png new file mode 100644 index 0000000..efd2e3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1377.png new file mode 100644 index 0000000..d28eded Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1378.png new file mode 100644 index 0000000..09cbabb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1379.png new file mode 100644 index 0000000..c18307d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/138.png new file mode 100644 index 0000000..79b6627 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1380.png new file mode 100644 index 0000000..1e02231 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1381.png new file mode 100644 index 0000000..2678b74 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1382.png new file mode 100644 index 0000000..00b40b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1383.png new file mode 100644 index 0000000..47538da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1384.png new file mode 100644 index 0000000..d80fd8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1385.png new file mode 100644 index 0000000..00f99ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1386.png new file mode 100644 index 0000000..657c3fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1387.png new file mode 100644 index 0000000..3e0e0f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1388.png new file mode 100644 index 0000000..9a36b2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1389.png new file mode 100644 index 0000000..870ef59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/139.png new file mode 100644 index 0000000..b709bbe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1390.png new file mode 100644 index 0000000..d055b5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1391.png new file mode 100644 index 0000000..f105086 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1392.png new file mode 100644 index 0000000..c7de7d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1393.png new file mode 100644 index 0000000..8289533 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1394.png new file mode 100644 index 0000000..fcf0896 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1395.png new file mode 100644 index 0000000..f926c5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1396.png new file mode 100644 index 0000000..67d6bbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1397.png new file mode 100644 index 0000000..f9ba3c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1398.png new file mode 100644 index 0000000..1af5879 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1399.png new file mode 100644 index 0000000..dca68cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/14.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/14.png new file mode 100644 index 0000000..f8f2227 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/14.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/140.png new file mode 100644 index 0000000..c9896f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1400.png new file mode 100644 index 0000000..3ebf8cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1401.png new file mode 100644 index 0000000..5c01e71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1402.png new file mode 100644 index 0000000..10e5cce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1403.png new file mode 100644 index 0000000..dd6d2b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1404.png new file mode 100644 index 0000000..9a872d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1405.png new file mode 100644 index 0000000..5905b4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1406.png new file mode 100644 index 0000000..f8ad22a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1407.png new file mode 100644 index 0000000..b92efb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1408.png new file mode 100644 index 0000000..4a0dafe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1409.png new file mode 100644 index 0000000..6c93e9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/141.png new file mode 100644 index 0000000..3594d38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1410.png new file mode 100644 index 0000000..023a278 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1411.png new file mode 100644 index 0000000..3edc7a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1412.png new file mode 100644 index 0000000..2ebd1ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1413.png new file mode 100644 index 0000000..892c217 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1414.png new file mode 100644 index 0000000..a6a4956 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1415.png new file mode 100644 index 0000000..b3f767d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1416.png new file mode 100644 index 0000000..f11f113 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1417.png new file mode 100644 index 0000000..8ebcd93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1418.png new file mode 100644 index 0000000..58347d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1419.png new file mode 100644 index 0000000..e57902f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/142.png new file mode 100644 index 0000000..848b6be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1420.png new file mode 100644 index 0000000..c2212e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1421.png new file mode 100644 index 0000000..526a501 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1422.png new file mode 100644 index 0000000..608c770 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1423.png new file mode 100644 index 0000000..b6eecec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1424.png new file mode 100644 index 0000000..5b27b8c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1425.png new file mode 100644 index 0000000..db2aad3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1426.png new file mode 100644 index 0000000..b81f879 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1427.png new file mode 100644 index 0000000..c1fe29e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1428.png new file mode 100644 index 0000000..1e89302 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1429.png new file mode 100644 index 0000000..6cfab3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/143.png new file mode 100644 index 0000000..b91afb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1430.png new file mode 100644 index 0000000..e0ad7ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1431.png new file mode 100644 index 0000000..9cc4321 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1432.png new file mode 100644 index 0000000..8eee76d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1433.png new file mode 100644 index 0000000..250e67f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1434.png new file mode 100644 index 0000000..0b92a4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1435.png new file mode 100644 index 0000000..adea9b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1436.png new file mode 100644 index 0000000..541a5b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1437.png new file mode 100644 index 0000000..5e8017a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1438.png new file mode 100644 index 0000000..e8f6bb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1439.png new file mode 100644 index 0000000..ea57d61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/144.png new file mode 100644 index 0000000..7895bfa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1440.png new file mode 100644 index 0000000..17b9cc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1441.png new file mode 100644 index 0000000..d1bc5e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1442.png new file mode 100644 index 0000000..546f090 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1443.png new file mode 100644 index 0000000..8dffa47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1444.png new file mode 100644 index 0000000..83c2989 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1445.png new file mode 100644 index 0000000..b4e1c57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1446.png new file mode 100644 index 0000000..8ad30ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1447.png new file mode 100644 index 0000000..090dc03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1448.png new file mode 100644 index 0000000..33bd85b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1449.png new file mode 100644 index 0000000..11d25b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/145.png new file mode 100644 index 0000000..7ba5980 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1450.png new file mode 100644 index 0000000..e0504c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1451.png new file mode 100644 index 0000000..382154f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1452.png new file mode 100644 index 0000000..6bc1091 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1453.png new file mode 100644 index 0000000..cbe49c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1454.png new file mode 100644 index 0000000..edd193c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1455.png new file mode 100644 index 0000000..4c5f48b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1456.png new file mode 100644 index 0000000..03ecb6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1457.png new file mode 100644 index 0000000..35fd787 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1458.png new file mode 100644 index 0000000..b9f27e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1459.png new file mode 100644 index 0000000..caf81c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/146.png new file mode 100644 index 0000000..3c40993 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1460.png new file mode 100644 index 0000000..b423786 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1461.png new file mode 100644 index 0000000..b4d8dda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1462.png new file mode 100644 index 0000000..830a870 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1463.png new file mode 100644 index 0000000..721acba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1464.png new file mode 100644 index 0000000..d0d0a59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1465.png new file mode 100644 index 0000000..3095cd2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1466.png new file mode 100644 index 0000000..b0022b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1467.png new file mode 100644 index 0000000..e2ffce2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1468.png new file mode 100644 index 0000000..dc49649 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1469.png new file mode 100644 index 0000000..5dbf099 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/147.png new file mode 100644 index 0000000..59d484b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1470.png new file mode 100644 index 0000000..046b73d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1471.png new file mode 100644 index 0000000..c177bb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1472.png new file mode 100644 index 0000000..91af047 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1473.png new file mode 100644 index 0000000..560a83f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1474.png new file mode 100644 index 0000000..c91089b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1475.png new file mode 100644 index 0000000..dc655c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1476.png new file mode 100644 index 0000000..81964b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1477.png new file mode 100644 index 0000000..0b54d21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1478.png new file mode 100644 index 0000000..27e0e04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1479.png new file mode 100644 index 0000000..76a84e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/148.png new file mode 100644 index 0000000..20844a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1480.png new file mode 100644 index 0000000..625b759 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1481.png new file mode 100644 index 0000000..e9bffed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1482.png new file mode 100644 index 0000000..ca624b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1483.png new file mode 100644 index 0000000..89fd598 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1484.png new file mode 100644 index 0000000..5c14e95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1485.png new file mode 100644 index 0000000..ee639ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1486.png new file mode 100644 index 0000000..a38f3c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1487.png new file mode 100644 index 0000000..51050dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1488.png new file mode 100644 index 0000000..03eed24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1489.png new file mode 100644 index 0000000..cf43562 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/149.png new file mode 100644 index 0000000..ed009d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1490.png new file mode 100644 index 0000000..dd164f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1491.png new file mode 100644 index 0000000..7a4ed5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1492.png new file mode 100644 index 0000000..81c4b7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1493.png new file mode 100644 index 0000000..d107b2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1494.png new file mode 100644 index 0000000..9bff1e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1495.png new file mode 100644 index 0000000..01c55f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1496.png new file mode 100644 index 0000000..345ef69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1497.png new file mode 100644 index 0000000..686231b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1498.png new file mode 100644 index 0000000..e703e67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1499.png new file mode 100644 index 0000000..1b57a20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/15.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/15.png new file mode 100644 index 0000000..5ca88a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/15.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/150.png new file mode 100644 index 0000000..cc90700 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1500.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1500.png new file mode 100644 index 0000000..766c35e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1500.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1501.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1501.png new file mode 100644 index 0000000..ec780f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1501.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1502.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1502.png new file mode 100644 index 0000000..3b0c867 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1502.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1503.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1503.png new file mode 100644 index 0000000..eb98695 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1503.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1504.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1504.png new file mode 100644 index 0000000..7f71a3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1504.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1505.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1505.png new file mode 100644 index 0000000..87fc708 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1505.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1506.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1506.png new file mode 100644 index 0000000..6aeb4c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1506.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1507.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1507.png new file mode 100644 index 0000000..0d9d4f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1507.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1508.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1508.png new file mode 100644 index 0000000..c9636a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1508.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1509.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1509.png new file mode 100644 index 0000000..16b2168 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1509.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/151.png new file mode 100644 index 0000000..92cb707 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1510.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1510.png new file mode 100644 index 0000000..46f3d61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1510.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1511.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1511.png new file mode 100644 index 0000000..22d4d66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1511.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1512.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1512.png new file mode 100644 index 0000000..12fd6b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1512.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1513.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1513.png new file mode 100644 index 0000000..b956a18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1513.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1514.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1514.png new file mode 100644 index 0000000..b3e2efc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1514.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1515.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1515.png new file mode 100644 index 0000000..4f341a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1515.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1516.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1516.png new file mode 100644 index 0000000..4c61f6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1516.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1517.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1517.png new file mode 100644 index 0000000..4a2efe1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1517.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1518.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1518.png new file mode 100644 index 0000000..1d5d0d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1518.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1519.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1519.png new file mode 100644 index 0000000..ddcec3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1519.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/152.png new file mode 100644 index 0000000..14c53f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1520.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1520.png new file mode 100644 index 0000000..e96e346 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1520.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1521.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1521.png new file mode 100644 index 0000000..c043374 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1521.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1522.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1522.png new file mode 100644 index 0000000..153745a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1522.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1523.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1523.png new file mode 100644 index 0000000..1a20c32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1523.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1524.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1524.png new file mode 100644 index 0000000..12336c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1524.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1525.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1525.png new file mode 100644 index 0000000..e6e84a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1525.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1526.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1526.png new file mode 100644 index 0000000..9d125a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1526.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1527.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1527.png new file mode 100644 index 0000000..2a243ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1527.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1528.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1528.png new file mode 100644 index 0000000..eb0b77e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1528.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1529.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1529.png new file mode 100644 index 0000000..9400b3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1529.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/153.png new file mode 100644 index 0000000..7254124 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1530.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1530.png new file mode 100644 index 0000000..3d9658d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1530.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1531.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1531.png new file mode 100644 index 0000000..a356126 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1531.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1532.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1532.png new file mode 100644 index 0000000..8f3e71d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1532.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1533.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1533.png new file mode 100644 index 0000000..5ef6e5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1533.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1534.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1534.png new file mode 100644 index 0000000..fa49fb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1534.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1535.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1535.png new file mode 100644 index 0000000..71f295f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1535.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1536.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1536.png new file mode 100644 index 0000000..ff2f58b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1536.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1537.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1537.png new file mode 100644 index 0000000..f8c8806 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1537.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1538.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1538.png new file mode 100644 index 0000000..0cab8cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1538.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1539.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1539.png new file mode 100644 index 0000000..0324171 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1539.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/154.png new file mode 100644 index 0000000..800500e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1540.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1540.png new file mode 100644 index 0000000..77f446c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1540.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1541.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1541.png new file mode 100644 index 0000000..32fc851 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1541.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1542.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1542.png new file mode 100644 index 0000000..f650cb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1542.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1543.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1543.png new file mode 100644 index 0000000..dc4dde6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1543.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1544.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1544.png new file mode 100644 index 0000000..86aa71a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1544.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1545.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1545.png new file mode 100644 index 0000000..066e772 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1545.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1546.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1546.png new file mode 100644 index 0000000..25fa2c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1546.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1547.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1547.png new file mode 100644 index 0000000..cf76ca5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1547.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1548.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1548.png new file mode 100644 index 0000000..a97bca4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1548.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1549.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1549.png new file mode 100644 index 0000000..61c38f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1549.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/155.png new file mode 100644 index 0000000..bb3b9bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1550.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1550.png new file mode 100644 index 0000000..a08e937 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1550.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1551.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1551.png new file mode 100644 index 0000000..ecc8376 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1551.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1552.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1552.png new file mode 100644 index 0000000..8f8963d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1552.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1553.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1553.png new file mode 100644 index 0000000..5d84bc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1553.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1554.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1554.png new file mode 100644 index 0000000..af3cc73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1554.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1555.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1555.png new file mode 100644 index 0000000..89a2b2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1555.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1556.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1556.png new file mode 100644 index 0000000..34d4cad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1556.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1557.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1557.png new file mode 100644 index 0000000..0518f61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1557.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1558.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1558.png new file mode 100644 index 0000000..321d6c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1558.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1559.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1559.png new file mode 100644 index 0000000..77a3b13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1559.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/156.png new file mode 100644 index 0000000..27ad083 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1560.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1560.png new file mode 100644 index 0000000..830622a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1560.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1561.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1561.png new file mode 100644 index 0000000..a85ae56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1561.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1562.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1562.png new file mode 100644 index 0000000..c33557e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1562.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1563.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1563.png new file mode 100644 index 0000000..17f19ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1563.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1564.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1564.png new file mode 100644 index 0000000..d216996 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1564.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1565.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1565.png new file mode 100644 index 0000000..f55d2f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1565.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1566.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1566.png new file mode 100644 index 0000000..58f00f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1566.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1567.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1567.png new file mode 100644 index 0000000..49c0516 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1567.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1568.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1568.png new file mode 100644 index 0000000..9541641 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1568.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1569.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1569.png new file mode 100644 index 0000000..0e95e2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1569.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/157.png new file mode 100644 index 0000000..444b36c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1570.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1570.png new file mode 100644 index 0000000..efa94ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1570.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1571.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1571.png new file mode 100644 index 0000000..f59768b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1571.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1572.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1572.png new file mode 100644 index 0000000..d0a28da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1572.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1573.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1573.png new file mode 100644 index 0000000..2ae9b9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1573.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1574.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1574.png new file mode 100644 index 0000000..e74d516 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1574.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1575.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1575.png new file mode 100644 index 0000000..fc1693d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1575.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1576.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1576.png new file mode 100644 index 0000000..b65a289 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1576.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1577.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1577.png new file mode 100644 index 0000000..3a3968b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1577.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1578.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1578.png new file mode 100644 index 0000000..0ad65d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1578.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1579.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1579.png new file mode 100644 index 0000000..b36f47d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1579.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/158.png new file mode 100644 index 0000000..677f281 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1580.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1580.png new file mode 100644 index 0000000..44621ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1580.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1581.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1581.png new file mode 100644 index 0000000..aa4f720 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1581.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1582.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1582.png new file mode 100644 index 0000000..58721b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1582.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1583.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1583.png new file mode 100644 index 0000000..1944300 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1583.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1584.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1584.png new file mode 100644 index 0000000..8576b8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1584.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1585.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1585.png new file mode 100644 index 0000000..5d539c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1585.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1586.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1586.png new file mode 100644 index 0000000..d0c0633 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1586.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1587.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1587.png new file mode 100644 index 0000000..fc62206 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1587.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1588.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1588.png new file mode 100644 index 0000000..a2d869b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1588.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1589.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1589.png new file mode 100644 index 0000000..24b78d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1589.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/159.png new file mode 100644 index 0000000..3f7db29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1590.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1590.png new file mode 100644 index 0000000..7ea8784 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1590.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1591.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1591.png new file mode 100644 index 0000000..2cd7c3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1591.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1592.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1592.png new file mode 100644 index 0000000..ce7e1d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1592.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1593.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1593.png new file mode 100644 index 0000000..fe4d76b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1593.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1594.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1594.png new file mode 100644 index 0000000..953a44c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1594.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1595.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1595.png new file mode 100644 index 0000000..42aedab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1595.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1596.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1596.png new file mode 100644 index 0000000..fbea856 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1596.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1597.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1597.png new file mode 100644 index 0000000..cbe62cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1597.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1598.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1598.png new file mode 100644 index 0000000..b617a64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1598.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1599.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1599.png new file mode 100644 index 0000000..f95ad2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1599.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/16.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/16.png new file mode 100644 index 0000000..ccc2233 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/16.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/160.png new file mode 100644 index 0000000..be1cd79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1600.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1600.png new file mode 100644 index 0000000..32ccbdd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1600.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1601.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1601.png new file mode 100644 index 0000000..6483f0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1601.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1602.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1602.png new file mode 100644 index 0000000..23fb591 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1602.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1603.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1603.png new file mode 100644 index 0000000..77bd0d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1603.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1604.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1604.png new file mode 100644 index 0000000..9ba8a57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1604.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1605.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1605.png new file mode 100644 index 0000000..1f855bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1605.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1606.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1606.png new file mode 100644 index 0000000..26aebae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1606.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1607.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1607.png new file mode 100644 index 0000000..ab95108 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1607.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1608.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1608.png new file mode 100644 index 0000000..bb77c71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1608.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1609.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1609.png new file mode 100644 index 0000000..252120a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1609.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/161.png new file mode 100644 index 0000000..a19ba72 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1610.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1610.png new file mode 100644 index 0000000..afb0c81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1610.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1611.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1611.png new file mode 100644 index 0000000..ce4c09c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1611.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1612.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1612.png new file mode 100644 index 0000000..40df595 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1612.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1613.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1613.png new file mode 100644 index 0000000..c4bbc3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1613.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1614.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1614.png new file mode 100644 index 0000000..7156249 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1614.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1615.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1615.png new file mode 100644 index 0000000..824bf29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1615.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1616.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1616.png new file mode 100644 index 0000000..d436d6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1616.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1617.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1617.png new file mode 100644 index 0000000..8e93dd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1617.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1618.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1618.png new file mode 100644 index 0000000..ae507d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1618.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1619.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1619.png new file mode 100644 index 0000000..1dace27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1619.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/162.png new file mode 100644 index 0000000..e41535d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1620.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1620.png new file mode 100644 index 0000000..39c5c81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1620.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1621.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1621.png new file mode 100644 index 0000000..2d43c98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1621.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1622.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1622.png new file mode 100644 index 0000000..0478e39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1622.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1623.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1623.png new file mode 100644 index 0000000..4f55257 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1623.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1624.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1624.png new file mode 100644 index 0000000..957740a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1624.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1625.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1625.png new file mode 100644 index 0000000..6db6d95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1625.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1626.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1626.png new file mode 100644 index 0000000..a444db1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1626.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1627.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1627.png new file mode 100644 index 0000000..d28cd27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1627.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1628.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1628.png new file mode 100644 index 0000000..0778523 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1628.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1629.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1629.png new file mode 100644 index 0000000..aee9278 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1629.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/163.png new file mode 100644 index 0000000..b4d2499 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1630.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1630.png new file mode 100644 index 0000000..adb41f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1630.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1631.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1631.png new file mode 100644 index 0000000..7c177b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1631.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1632.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1632.png new file mode 100644 index 0000000..4ac1c18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1632.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1633.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1633.png new file mode 100644 index 0000000..208abfa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1633.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1634.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1634.png new file mode 100644 index 0000000..b679aba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1634.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1635.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1635.png new file mode 100644 index 0000000..c2dd1e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1635.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1636.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1636.png new file mode 100644 index 0000000..6d808f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1636.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1637.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1637.png new file mode 100644 index 0000000..dc7feb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1637.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1638.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1638.png new file mode 100644 index 0000000..7f0cd45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1638.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1639.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1639.png new file mode 100644 index 0000000..af88d5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1639.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/164.png new file mode 100644 index 0000000..6c83f4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1640.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1640.png new file mode 100644 index 0000000..5ec78ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1640.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1641.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1641.png new file mode 100644 index 0000000..3116cb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1641.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1642.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1642.png new file mode 100644 index 0000000..be13a61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1642.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1643.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1643.png new file mode 100644 index 0000000..bfd9f6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1643.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1644.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1644.png new file mode 100644 index 0000000..ad2a2b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1644.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1645.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1645.png new file mode 100644 index 0000000..c314f6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1645.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1646.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1646.png new file mode 100644 index 0000000..f7ec350 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1646.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1647.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1647.png new file mode 100644 index 0000000..0acd5ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1647.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1648.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1648.png new file mode 100644 index 0000000..2c573ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1648.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1649.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1649.png new file mode 100644 index 0000000..99d8e6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1649.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/165.png new file mode 100644 index 0000000..ad6ee38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1650.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1650.png new file mode 100644 index 0000000..667ba34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1650.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1651.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1651.png new file mode 100644 index 0000000..2661419 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1651.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1652.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1652.png new file mode 100644 index 0000000..0dfe6de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1652.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1653.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1653.png new file mode 100644 index 0000000..bda2ab0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1653.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1654.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1654.png new file mode 100644 index 0000000..bd58255 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1654.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1655.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1655.png new file mode 100644 index 0000000..587b4c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1655.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1656.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1656.png new file mode 100644 index 0000000..3d7c28f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1656.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1657.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1657.png new file mode 100644 index 0000000..b6ba95d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1657.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1658.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1658.png new file mode 100644 index 0000000..7f24c5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1658.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1659.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1659.png new file mode 100644 index 0000000..52ca1b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1659.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/166.png new file mode 100644 index 0000000..4c102f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1660.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1660.png new file mode 100644 index 0000000..f98976b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1660.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1661.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1661.png new file mode 100644 index 0000000..0de1f08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1661.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1662.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1662.png new file mode 100644 index 0000000..2eed8de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1662.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1663.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1663.png new file mode 100644 index 0000000..9fc2ba0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1663.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1664.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1664.png new file mode 100644 index 0000000..c7e2090 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1664.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1665.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1665.png new file mode 100644 index 0000000..a563bfa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1665.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1666.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1666.png new file mode 100644 index 0000000..db1aacf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1666.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1667.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1667.png new file mode 100644 index 0000000..702d3f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1667.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1668.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1668.png new file mode 100644 index 0000000..573daa7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1668.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1669.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1669.png new file mode 100644 index 0000000..17cf8e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1669.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/167.png new file mode 100644 index 0000000..356eb63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1670.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1670.png new file mode 100644 index 0000000..ed58f9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1670.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1671.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1671.png new file mode 100644 index 0000000..d6d0b15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1671.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1672.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1672.png new file mode 100644 index 0000000..ecef633 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1672.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1673.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1673.png new file mode 100644 index 0000000..d0a6246 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1673.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1674.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1674.png new file mode 100644 index 0000000..f52df82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1674.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1675.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1675.png new file mode 100644 index 0000000..a106816 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1675.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1676.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1676.png new file mode 100644 index 0000000..fd23bed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1676.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1677.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1677.png new file mode 100644 index 0000000..a79cbd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1677.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1678.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1678.png new file mode 100644 index 0000000..9a3da14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1678.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1679.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1679.png new file mode 100644 index 0000000..3380adb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1679.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/168.png new file mode 100644 index 0000000..4bdd163 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1680.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1680.png new file mode 100644 index 0000000..bc71270 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1680.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1681.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1681.png new file mode 100644 index 0000000..67564f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1681.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1682.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1682.png new file mode 100644 index 0000000..807703c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1682.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1683.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1683.png new file mode 100644 index 0000000..281a2cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1683.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1684.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1684.png new file mode 100644 index 0000000..bd92aa6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1684.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1685.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1685.png new file mode 100644 index 0000000..c765826 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1685.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1686.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1686.png new file mode 100644 index 0000000..82ea797 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1686.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1687.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1687.png new file mode 100644 index 0000000..81f2b9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1687.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1688.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1688.png new file mode 100644 index 0000000..821f1ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1688.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1689.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1689.png new file mode 100644 index 0000000..c0e4458 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1689.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/169.png new file mode 100644 index 0000000..840a8e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1690.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1690.png new file mode 100644 index 0000000..20c632f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1690.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1691.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1691.png new file mode 100644 index 0000000..ae44056 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1691.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1692.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1692.png new file mode 100644 index 0000000..db5f1cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1692.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1693.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1693.png new file mode 100644 index 0000000..92ad9e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1693.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1694.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1694.png new file mode 100644 index 0000000..20d9225 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1694.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1695.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1695.png new file mode 100644 index 0000000..7b6b1ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1695.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1696.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1696.png new file mode 100644 index 0000000..9bf5af9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1696.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1697.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1697.png new file mode 100644 index 0000000..88b034f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1697.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1698.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1698.png new file mode 100644 index 0000000..bfcd033 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1698.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1699.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1699.png new file mode 100644 index 0000000..1e9427f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1699.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/17.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/17.png new file mode 100644 index 0000000..eeee15c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/17.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/170.png new file mode 100644 index 0000000..d06b1d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1700.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1700.png new file mode 100644 index 0000000..b836689 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1700.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1701.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1701.png new file mode 100644 index 0000000..a749638 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1701.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1702.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1702.png new file mode 100644 index 0000000..4b43bc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1702.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1703.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1703.png new file mode 100644 index 0000000..8d2b2a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1703.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1704.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1704.png new file mode 100644 index 0000000..be3ad52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1704.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1705.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1705.png new file mode 100644 index 0000000..325d8de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1705.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1706.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1706.png new file mode 100644 index 0000000..b855c3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1706.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1707.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1707.png new file mode 100644 index 0000000..8ae915b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1707.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1708.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1708.png new file mode 100644 index 0000000..d40dbc2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1708.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1709.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1709.png new file mode 100644 index 0000000..87e2a70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1709.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/171.png new file mode 100644 index 0000000..1079dc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1710.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1710.png new file mode 100644 index 0000000..64dbbaf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1710.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1711.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1711.png new file mode 100644 index 0000000..d1935bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1711.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1712.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1712.png new file mode 100644 index 0000000..b4a2ca8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1712.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1713.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1713.png new file mode 100644 index 0000000..ccd7817 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1713.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1714.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1714.png new file mode 100644 index 0000000..49ea765 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1714.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1715.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1715.png new file mode 100644 index 0000000..4bf6fbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1715.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1716.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1716.png new file mode 100644 index 0000000..75d7a8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1716.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1717.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1717.png new file mode 100644 index 0000000..82ce06a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1717.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1718.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1718.png new file mode 100644 index 0000000..327db28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1718.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1719.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1719.png new file mode 100644 index 0000000..49b46fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1719.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/172.png new file mode 100644 index 0000000..ccad6fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1720.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1720.png new file mode 100644 index 0000000..bd366ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1720.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1721.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1721.png new file mode 100644 index 0000000..87f130e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1721.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1722.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1722.png new file mode 100644 index 0000000..c659c9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1722.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1723.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1723.png new file mode 100644 index 0000000..216b07b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1723.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1724.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1724.png new file mode 100644 index 0000000..6f36d75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1724.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1725.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1725.png new file mode 100644 index 0000000..a98261c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1725.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1726.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1726.png new file mode 100644 index 0000000..5028e5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1726.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1727.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1727.png new file mode 100644 index 0000000..a7d946d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1727.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1728.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1728.png new file mode 100644 index 0000000..aa597ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1728.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1729.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1729.png new file mode 100644 index 0000000..57e5ef6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1729.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/173.png new file mode 100644 index 0000000..c0b7eba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1730.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1730.png new file mode 100644 index 0000000..3e8aadc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1730.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1731.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1731.png new file mode 100644 index 0000000..c0a414e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1731.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1732.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1732.png new file mode 100644 index 0000000..46c03ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1732.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1733.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1733.png new file mode 100644 index 0000000..368f6cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1733.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1734.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1734.png new file mode 100644 index 0000000..0e802b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1734.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1735.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1735.png new file mode 100644 index 0000000..725d9b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1735.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1736.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1736.png new file mode 100644 index 0000000..cbc9533 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1736.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1737.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1737.png new file mode 100644 index 0000000..98e63f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1737.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1738.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1738.png new file mode 100644 index 0000000..50ffb47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1738.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1739.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1739.png new file mode 100644 index 0000000..87f8177 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1739.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/174.png new file mode 100644 index 0000000..a904008 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1740.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1740.png new file mode 100644 index 0000000..828245f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1740.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1741.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1741.png new file mode 100644 index 0000000..3e406ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1741.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1742.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1742.png new file mode 100644 index 0000000..3fccd34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1742.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1743.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1743.png new file mode 100644 index 0000000..acae418 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1743.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1744.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1744.png new file mode 100644 index 0000000..2e6b57b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1744.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1745.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1745.png new file mode 100644 index 0000000..ca6e3f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1745.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1746.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1746.png new file mode 100644 index 0000000..5e7fd59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1746.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1747.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1747.png new file mode 100644 index 0000000..ab56c90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1747.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1748.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1748.png new file mode 100644 index 0000000..d9eaf1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1748.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1749.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1749.png new file mode 100644 index 0000000..15fdd82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1749.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/175.png new file mode 100644 index 0000000..05efeff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1750.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1750.png new file mode 100644 index 0000000..7bfe2f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1750.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1751.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1751.png new file mode 100644 index 0000000..52b3e9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1751.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1752.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1752.png new file mode 100644 index 0000000..06dc3fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1752.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1753.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1753.png new file mode 100644 index 0000000..6f18a5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1753.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1754.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1754.png new file mode 100644 index 0000000..6ae16fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1754.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1755.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1755.png new file mode 100644 index 0000000..c47da7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1755.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1756.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1756.png new file mode 100644 index 0000000..d6c7456 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1756.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1757.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1757.png new file mode 100644 index 0000000..a1e972f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1757.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1758.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1758.png new file mode 100644 index 0000000..279b907 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1758.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1759.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1759.png new file mode 100644 index 0000000..1dfd361 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1759.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/176.png new file mode 100644 index 0000000..2eaa5c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1760.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1760.png new file mode 100644 index 0000000..55dcb1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1760.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1761.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1761.png new file mode 100644 index 0000000..b1b504d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1761.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1762.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1762.png new file mode 100644 index 0000000..069b55c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1762.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1763.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1763.png new file mode 100644 index 0000000..7be6e73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1763.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1764.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1764.png new file mode 100644 index 0000000..6b57662 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1764.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1765.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1765.png new file mode 100644 index 0000000..1c0516b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1765.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1766.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1766.png new file mode 100644 index 0000000..905f44b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1766.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1767.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1767.png new file mode 100644 index 0000000..ee3736e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1767.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1768.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1768.png new file mode 100644 index 0000000..ed77143 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1768.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1769.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1769.png new file mode 100644 index 0000000..3670bd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1769.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/177.png new file mode 100644 index 0000000..be108a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1770.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1770.png new file mode 100644 index 0000000..ce411f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1770.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1771.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1771.png new file mode 100644 index 0000000..9701c7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1771.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1772.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1772.png new file mode 100644 index 0000000..3a17e01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1772.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1773.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1773.png new file mode 100644 index 0000000..65b1afd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1773.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1774.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1774.png new file mode 100644 index 0000000..f089d50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1774.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1775.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1775.png new file mode 100644 index 0000000..6e3995c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1775.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1776.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1776.png new file mode 100644 index 0000000..d352def Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1776.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1777.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1777.png new file mode 100644 index 0000000..a0906d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1777.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1778.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1778.png new file mode 100644 index 0000000..316e883 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1778.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1779.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1779.png new file mode 100644 index 0000000..6e31e95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1779.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/178.png new file mode 100644 index 0000000..90854a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1780.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1780.png new file mode 100644 index 0000000..79a2899 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1780.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1781.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1781.png new file mode 100644 index 0000000..ca643c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1781.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1782.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1782.png new file mode 100644 index 0000000..4426bc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1782.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1783.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1783.png new file mode 100644 index 0000000..ce529c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1783.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1784.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1784.png new file mode 100644 index 0000000..221c604 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1784.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1785.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1785.png new file mode 100644 index 0000000..dfa6887 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1785.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1786.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1786.png new file mode 100644 index 0000000..75f9097 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1786.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1787.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1787.png new file mode 100644 index 0000000..3f85bd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1787.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1788.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1788.png new file mode 100644 index 0000000..773e553 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1788.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1789.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1789.png new file mode 100644 index 0000000..58af020 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1789.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/179.png new file mode 100644 index 0000000..b915c47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1790.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1790.png new file mode 100644 index 0000000..9779871 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1790.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1791.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1791.png new file mode 100644 index 0000000..f4d1b78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1791.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1792.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1792.png new file mode 100644 index 0000000..0f05e12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1792.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1793.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1793.png new file mode 100644 index 0000000..5cbb6cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1793.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1794.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1794.png new file mode 100644 index 0000000..1af76b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1794.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1795.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1795.png new file mode 100644 index 0000000..e5df7c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1795.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1796.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1796.png new file mode 100644 index 0000000..91f07d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1796.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1797.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1797.png new file mode 100644 index 0000000..970d2bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1797.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1798.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1798.png new file mode 100644 index 0000000..ee9db0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1798.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1799.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1799.png new file mode 100644 index 0000000..3bf5dc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1799.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/18.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/18.png new file mode 100644 index 0000000..32dd06c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/18.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/180.png new file mode 100644 index 0000000..afabae6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1800.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1800.png new file mode 100644 index 0000000..a4a5e91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1800.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1801.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1801.png new file mode 100644 index 0000000..e72d7e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1801.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1802.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1802.png new file mode 100644 index 0000000..3f62e09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1802.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1803.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1803.png new file mode 100644 index 0000000..152d6ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1803.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1804.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1804.png new file mode 100644 index 0000000..c1f7253 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1804.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1805.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1805.png new file mode 100644 index 0000000..2e1f222 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1805.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1806.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1806.png new file mode 100644 index 0000000..c97d322 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1806.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1807.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1807.png new file mode 100644 index 0000000..dc87cc6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1807.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1808.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1808.png new file mode 100644 index 0000000..112e097 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1808.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1809.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1809.png new file mode 100644 index 0000000..a5edd39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1809.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/181.png new file mode 100644 index 0000000..523bd70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1810.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1810.png new file mode 100644 index 0000000..8a47994 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1810.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1811.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1811.png new file mode 100644 index 0000000..6db8b23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1811.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1812.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1812.png new file mode 100644 index 0000000..ea1f8e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1812.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1813.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1813.png new file mode 100644 index 0000000..34c4e8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1813.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1814.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1814.png new file mode 100644 index 0000000..b225153 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1814.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1815.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1815.png new file mode 100644 index 0000000..28dbe77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1815.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1816.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1816.png new file mode 100644 index 0000000..a53b60f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1816.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1817.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1817.png new file mode 100644 index 0000000..58418dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1817.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1818.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1818.png new file mode 100644 index 0000000..37e79e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1818.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1819.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1819.png new file mode 100644 index 0000000..5deb7eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1819.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/182.png new file mode 100644 index 0000000..7ecb13f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1820.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1820.png new file mode 100644 index 0000000..c680ad6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1820.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1821.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1821.png new file mode 100644 index 0000000..c6692a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1821.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1822.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1822.png new file mode 100644 index 0000000..0fe1d8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1822.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1823.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1823.png new file mode 100644 index 0000000..8dd0b3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1823.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1824.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1824.png new file mode 100644 index 0000000..eb5845f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1824.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1825.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1825.png new file mode 100644 index 0000000..98197f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1825.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1826.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1826.png new file mode 100644 index 0000000..8604618 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1826.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1827.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1827.png new file mode 100644 index 0000000..e53c779 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1827.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1828.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1828.png new file mode 100644 index 0000000..55cfa6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1828.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1829.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1829.png new file mode 100644 index 0000000..0bbab46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1829.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/183.png new file mode 100644 index 0000000..48cfb22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1830.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1830.png new file mode 100644 index 0000000..329ec8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1830.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1831.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1831.png new file mode 100644 index 0000000..f2c83c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1831.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1832.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1832.png new file mode 100644 index 0000000..b11484f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1832.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1833.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1833.png new file mode 100644 index 0000000..b6eeac0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1833.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1834.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1834.png new file mode 100644 index 0000000..ff3fcf1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1834.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1835.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1835.png new file mode 100644 index 0000000..e5fb97f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1835.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1836.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1836.png new file mode 100644 index 0000000..8fd67c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1836.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1837.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1837.png new file mode 100644 index 0000000..34b637c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1837.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1838.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1838.png new file mode 100644 index 0000000..d5dad67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1838.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1839.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1839.png new file mode 100644 index 0000000..e369ca1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1839.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/184.png new file mode 100644 index 0000000..ac699a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1840.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1840.png new file mode 100644 index 0000000..ea09777 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1840.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1841.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1841.png new file mode 100644 index 0000000..d2d8c75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1841.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1842.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1842.png new file mode 100644 index 0000000..c82809f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1842.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1843.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1843.png new file mode 100644 index 0000000..2ed7359 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1843.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1844.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1844.png new file mode 100644 index 0000000..2cb1bca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1844.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1845.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1845.png new file mode 100644 index 0000000..60fb748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1845.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1846.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1846.png new file mode 100644 index 0000000..ca48e48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1846.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1847.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1847.png new file mode 100644 index 0000000..0d2b0e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1847.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1848.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1848.png new file mode 100644 index 0000000..bc8dc36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1848.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1849.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1849.png new file mode 100644 index 0000000..81c4c58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1849.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/185.png new file mode 100644 index 0000000..8228879 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1850.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1850.png new file mode 100644 index 0000000..1e57d44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1850.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1851.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1851.png new file mode 100644 index 0000000..8f5bfc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1851.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1852.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1852.png new file mode 100644 index 0000000..6f4a0e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1852.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1853.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1853.png new file mode 100644 index 0000000..3188fc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1853.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1854.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1854.png new file mode 100644 index 0000000..1e9310b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1854.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1855.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1855.png new file mode 100644 index 0000000..c6896fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1855.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1856.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1856.png new file mode 100644 index 0000000..d786bc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1856.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1857.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1857.png new file mode 100644 index 0000000..f968b54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1857.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1858.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1858.png new file mode 100644 index 0000000..46c5feb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1858.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1859.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1859.png new file mode 100644 index 0000000..90e5669 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1859.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/186.png new file mode 100644 index 0000000..92e9a8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1860.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1860.png new file mode 100644 index 0000000..aa1fc9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1860.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1861.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1861.png new file mode 100644 index 0000000..360efb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1861.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1862.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1862.png new file mode 100644 index 0000000..88921a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1862.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1863.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1863.png new file mode 100644 index 0000000..e3a8dff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1863.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1864.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1864.png new file mode 100644 index 0000000..db228e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1864.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1865.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1865.png new file mode 100644 index 0000000..38196bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1865.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1866.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1866.png new file mode 100644 index 0000000..0e1c1d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1866.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1867.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1867.png new file mode 100644 index 0000000..6a205c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1867.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1868.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1868.png new file mode 100644 index 0000000..3dbb642 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1868.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1869.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1869.png new file mode 100644 index 0000000..02d3aef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1869.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/187.png new file mode 100644 index 0000000..dfb3133 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1870.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1870.png new file mode 100644 index 0000000..0fdab45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1870.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1871.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1871.png new file mode 100644 index 0000000..891f077 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1871.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1872.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1872.png new file mode 100644 index 0000000..86fbe33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1872.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1873.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1873.png new file mode 100644 index 0000000..ebb4f0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1873.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1874.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1874.png new file mode 100644 index 0000000..0a94eb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1874.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1875.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1875.png new file mode 100644 index 0000000..3fb7488 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1875.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1876.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1876.png new file mode 100644 index 0000000..133603e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1876.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1877.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1877.png new file mode 100644 index 0000000..317b5eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1877.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1878.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1878.png new file mode 100644 index 0000000..628d486 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1878.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1879.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1879.png new file mode 100644 index 0000000..0a73a9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1879.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/188.png new file mode 100644 index 0000000..db25617 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1880.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1880.png new file mode 100644 index 0000000..4bcfc7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1880.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1881.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1881.png new file mode 100644 index 0000000..fd2b835 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1881.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1882.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1882.png new file mode 100644 index 0000000..f21651d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1882.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1883.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1883.png new file mode 100644 index 0000000..bf0e4aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1883.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1884.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1884.png new file mode 100644 index 0000000..bc2e0bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1884.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1885.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1885.png new file mode 100644 index 0000000..5a08acc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1885.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1886.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1886.png new file mode 100644 index 0000000..9f1062e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1886.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1887.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1887.png new file mode 100644 index 0000000..caf2349 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1887.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1888.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1888.png new file mode 100644 index 0000000..5c70457 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1888.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1889.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1889.png new file mode 100644 index 0000000..5e1efb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1889.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/189.png new file mode 100644 index 0000000..58c0a4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1890.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1890.png new file mode 100644 index 0000000..40870d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1890.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1891.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1891.png new file mode 100644 index 0000000..74be6cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1891.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1892.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1892.png new file mode 100644 index 0000000..1023559 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1892.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1893.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1893.png new file mode 100644 index 0000000..c113d13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1893.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1894.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1894.png new file mode 100644 index 0000000..c0591b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1894.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1895.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1895.png new file mode 100644 index 0000000..ae2bb4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1895.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1896.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1896.png new file mode 100644 index 0000000..eb83160 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1896.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1897.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1897.png new file mode 100644 index 0000000..626efb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1897.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1898.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1898.png new file mode 100644 index 0000000..e562523 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1898.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1899.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1899.png new file mode 100644 index 0000000..2770dc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1899.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/19.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/19.png new file mode 100644 index 0000000..20f6c25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/19.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/190.png new file mode 100644 index 0000000..a8b1678 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1900.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1900.png new file mode 100644 index 0000000..34ad65f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1900.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1901.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1901.png new file mode 100644 index 0000000..1b0ac00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1901.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1902.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1902.png new file mode 100644 index 0000000..971eb25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1902.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1903.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1903.png new file mode 100644 index 0000000..f629dce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1903.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1904.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1904.png new file mode 100644 index 0000000..341a087 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1904.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1905.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1905.png new file mode 100644 index 0000000..02e8926 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1905.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1906.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1906.png new file mode 100644 index 0000000..26b6b6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1906.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1907.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1907.png new file mode 100644 index 0000000..d621f2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1907.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1908.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1908.png new file mode 100644 index 0000000..9f3d119 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1908.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1909.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1909.png new file mode 100644 index 0000000..320cfd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1909.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/191.png new file mode 100644 index 0000000..a40ae43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1910.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1910.png new file mode 100644 index 0000000..8bdb5c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1910.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1911.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1911.png new file mode 100644 index 0000000..b36178c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1911.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1912.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1912.png new file mode 100644 index 0000000..47c47eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1912.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1913.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1913.png new file mode 100644 index 0000000..7f01d35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1913.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1914.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1914.png new file mode 100644 index 0000000..97311e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1914.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1915.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1915.png new file mode 100644 index 0000000..12136ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1915.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1916.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1916.png new file mode 100644 index 0000000..47c4ddd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1916.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1917.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1917.png new file mode 100644 index 0000000..64074c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1917.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1918.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1918.png new file mode 100644 index 0000000..11fb16c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1918.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1919.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1919.png new file mode 100644 index 0000000..c29d837 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1919.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/192.png new file mode 100644 index 0000000..5d2af17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1920.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1920.png new file mode 100644 index 0000000..992d981 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1920.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1921.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1921.png new file mode 100644 index 0000000..53382d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1921.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1922.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1922.png new file mode 100644 index 0000000..bdd7ee7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1922.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1923.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1923.png new file mode 100644 index 0000000..e0658a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1923.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1924.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1924.png new file mode 100644 index 0000000..9dc9dae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1924.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1925.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1925.png new file mode 100644 index 0000000..48ab9cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1925.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1926.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1926.png new file mode 100644 index 0000000..6a7febb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1926.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1927.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1927.png new file mode 100644 index 0000000..84e95be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1927.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1928.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1928.png new file mode 100644 index 0000000..371e6fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1928.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1929.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1929.png new file mode 100644 index 0000000..85a8544 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1929.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/193.png new file mode 100644 index 0000000..af37a38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1930.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1930.png new file mode 100644 index 0000000..d514f37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1930.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1931.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1931.png new file mode 100644 index 0000000..0bb4d8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1931.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1932.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1932.png new file mode 100644 index 0000000..68f7da0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1932.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1933.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1933.png new file mode 100644 index 0000000..d9a2b3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1933.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1934.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1934.png new file mode 100644 index 0000000..86be3d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1934.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1935.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1935.png new file mode 100644 index 0000000..bebf657 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1935.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1936.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1936.png new file mode 100644 index 0000000..09415f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1936.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1937.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1937.png new file mode 100644 index 0000000..96946d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1937.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1938.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1938.png new file mode 100644 index 0000000..873bf4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1938.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1939.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1939.png new file mode 100644 index 0000000..a463332 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1939.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/194.png new file mode 100644 index 0000000..05a8363 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1940.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1940.png new file mode 100644 index 0000000..d446f23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1940.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1941.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1941.png new file mode 100644 index 0000000..c12f7f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1941.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1942.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1942.png new file mode 100644 index 0000000..b3bc30c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1942.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1943.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1943.png new file mode 100644 index 0000000..d1f8b94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1943.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1944.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1944.png new file mode 100644 index 0000000..f293ccf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1944.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1945.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1945.png new file mode 100644 index 0000000..123ef58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1945.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1946.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1946.png new file mode 100644 index 0000000..6d14922 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1946.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1947.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1947.png new file mode 100644 index 0000000..145f683 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1947.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1948.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1948.png new file mode 100644 index 0000000..516cf68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1948.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1949.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1949.png new file mode 100644 index 0000000..cd8a71a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1949.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/195.png new file mode 100644 index 0000000..1a99ac0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1950.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1950.png new file mode 100644 index 0000000..fc6911a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1950.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1951.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1951.png new file mode 100644 index 0000000..5299a9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1951.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1952.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1952.png new file mode 100644 index 0000000..77e6c68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1952.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1953.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1953.png new file mode 100644 index 0000000..73a5fe6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1953.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1954.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1954.png new file mode 100644 index 0000000..4621003 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1954.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1955.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1955.png new file mode 100644 index 0000000..ef2fc99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1955.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1956.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1956.png new file mode 100644 index 0000000..7ed361d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1956.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1957.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1957.png new file mode 100644 index 0000000..ad3b4e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1957.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1958.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1958.png new file mode 100644 index 0000000..e83e650 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1958.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1959.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1959.png new file mode 100644 index 0000000..85a7215 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1959.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/196.png new file mode 100644 index 0000000..aa5c3de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1960.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1960.png new file mode 100644 index 0000000..413c841 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1960.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1961.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1961.png new file mode 100644 index 0000000..e7c1f39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1961.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1962.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1962.png new file mode 100644 index 0000000..95ac17e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1962.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1963.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1963.png new file mode 100644 index 0000000..4c0d03e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1963.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1964.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1964.png new file mode 100644 index 0000000..2f16f51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1964.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1965.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1965.png new file mode 100644 index 0000000..72c33bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1965.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1966.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1966.png new file mode 100644 index 0000000..0125f97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1966.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1967.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1967.png new file mode 100644 index 0000000..509bfd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1967.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1968.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1968.png new file mode 100644 index 0000000..e178c9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1968.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1969.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1969.png new file mode 100644 index 0000000..27b1155 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1969.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/197.png new file mode 100644 index 0000000..ffed2de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1970.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1970.png new file mode 100644 index 0000000..0ee7448 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1970.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1971.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1971.png new file mode 100644 index 0000000..36ae751 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1971.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1972.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1972.png new file mode 100644 index 0000000..cfb2789 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1972.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1973.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1973.png new file mode 100644 index 0000000..7072d7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1973.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1974.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1974.png new file mode 100644 index 0000000..4d6a970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1974.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1975.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1975.png new file mode 100644 index 0000000..1ac6a70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1975.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1976.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1976.png new file mode 100644 index 0000000..0ef6a4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1976.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1977.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1977.png new file mode 100644 index 0000000..0289dc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1977.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1978.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1978.png new file mode 100644 index 0000000..43bde8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1978.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1979.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1979.png new file mode 100644 index 0000000..9720fa5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1979.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/198.png new file mode 100644 index 0000000..5fbcfde Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1980.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1980.png new file mode 100644 index 0000000..7340c04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1980.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1981.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1981.png new file mode 100644 index 0000000..f978d24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1981.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1982.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1982.png new file mode 100644 index 0000000..7b462f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1982.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1983.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1983.png new file mode 100644 index 0000000..407d835 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1983.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1984.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1984.png new file mode 100644 index 0000000..adcb1a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1984.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1985.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1985.png new file mode 100644 index 0000000..e254880 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1985.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1986.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1986.png new file mode 100644 index 0000000..5c02573 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1986.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1987.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1987.png new file mode 100644 index 0000000..4869f0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1987.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1988.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1988.png new file mode 100644 index 0000000..607e21e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1988.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1989.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1989.png new file mode 100644 index 0000000..94191c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1989.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/199.png new file mode 100644 index 0000000..8ab47e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1990.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1990.png new file mode 100644 index 0000000..21a1101 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1990.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1991.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1991.png new file mode 100644 index 0000000..76880f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1991.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1992.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1992.png new file mode 100644 index 0000000..f18f7e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1992.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1993.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1993.png new file mode 100644 index 0000000..f656c9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1993.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1994.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1994.png new file mode 100644 index 0000000..093efc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1994.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1995.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1995.png new file mode 100644 index 0000000..f72d4f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1995.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1996.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1996.png new file mode 100644 index 0000000..348c2ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1996.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1997.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1997.png new file mode 100644 index 0000000..1fd4be5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1997.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1998.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1998.png new file mode 100644 index 0000000..9d62882 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1998.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1999.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1999.png new file mode 100644 index 0000000..4c3bacb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/1999.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2.png new file mode 100644 index 0000000..49a154a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/20.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/20.png new file mode 100644 index 0000000..1dea1b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/20.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/200.png new file mode 100644 index 0000000..85eec55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2000.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2000.png new file mode 100644 index 0000000..ec4596a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2000.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2001.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2001.png new file mode 100644 index 0000000..6143fed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2001.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2002.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2002.png new file mode 100644 index 0000000..8968c7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2002.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2003.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2003.png new file mode 100644 index 0000000..cc9f747 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2003.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2004.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2004.png new file mode 100644 index 0000000..c1af56c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2004.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2005.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2005.png new file mode 100644 index 0000000..6969055 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2005.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2006.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2006.png new file mode 100644 index 0000000..760d5e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2006.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2007.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2007.png new file mode 100644 index 0000000..d1004fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2007.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2008.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2008.png new file mode 100644 index 0000000..23cc018 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2008.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2009.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2009.png new file mode 100644 index 0000000..269df18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2009.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/201.png new file mode 100644 index 0000000..83ff3df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2010.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2010.png new file mode 100644 index 0000000..c0826b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2010.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2011.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2011.png new file mode 100644 index 0000000..d01ac4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2011.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2012.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2012.png new file mode 100644 index 0000000..c4e456d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2012.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2013.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2013.png new file mode 100644 index 0000000..5038b03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2013.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2014.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2014.png new file mode 100644 index 0000000..84ab8d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2014.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2015.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2015.png new file mode 100644 index 0000000..c135237 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2015.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2016.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2016.png new file mode 100644 index 0000000..e681e9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2016.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2017.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2017.png new file mode 100644 index 0000000..20f5ecf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2017.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2018.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2018.png new file mode 100644 index 0000000..ff8fe4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2018.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2019.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2019.png new file mode 100644 index 0000000..5dad64e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2019.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/202.png new file mode 100644 index 0000000..2a680ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2020.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2020.png new file mode 100644 index 0000000..d772a8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2020.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2021.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2021.png new file mode 100644 index 0000000..dd85bd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2021.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2022.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2022.png new file mode 100644 index 0000000..b23b484 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2022.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2023.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2023.png new file mode 100644 index 0000000..d2053f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2023.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2024.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2024.png new file mode 100644 index 0000000..a44dd21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2024.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2025.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2025.png new file mode 100644 index 0000000..fc1dfb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2025.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2026.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2026.png new file mode 100644 index 0000000..74cc204 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2026.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2027.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2027.png new file mode 100644 index 0000000..296c2c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2027.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2028.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2028.png new file mode 100644 index 0000000..1639494 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2028.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2029.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2029.png new file mode 100644 index 0000000..0b7e987 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2029.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/203.png new file mode 100644 index 0000000..e8e7db0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2030.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2030.png new file mode 100644 index 0000000..631ac1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2030.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2031.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2031.png new file mode 100644 index 0000000..4b48c13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2031.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2032.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2032.png new file mode 100644 index 0000000..5cf3b92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2032.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2033.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2033.png new file mode 100644 index 0000000..600057b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2033.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2034.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2034.png new file mode 100644 index 0000000..224157a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2034.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2035.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2035.png new file mode 100644 index 0000000..ef618fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2035.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2036.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2036.png new file mode 100644 index 0000000..9c3727a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2036.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2037.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2037.png new file mode 100644 index 0000000..777c9d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2037.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2038.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2038.png new file mode 100644 index 0000000..eec53bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2038.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2039.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2039.png new file mode 100644 index 0000000..1ba08e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2039.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/204.png new file mode 100644 index 0000000..a0471bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2040.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2040.png new file mode 100644 index 0000000..ad5e6c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2040.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2041.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2041.png new file mode 100644 index 0000000..e18bc02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2041.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2042.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2042.png new file mode 100644 index 0000000..4179760 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2042.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2043.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2043.png new file mode 100644 index 0000000..ae497ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2043.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2044.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2044.png new file mode 100644 index 0000000..e003363 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2044.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2045.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2045.png new file mode 100644 index 0000000..03c2443 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2045.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2046.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2046.png new file mode 100644 index 0000000..67a268a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2046.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2047.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2047.png new file mode 100644 index 0000000..c2ad525 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2047.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2048.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2048.png new file mode 100644 index 0000000..d7cd2ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2048.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2049.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2049.png new file mode 100644 index 0000000..83703d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2049.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/205.png new file mode 100644 index 0000000..268d1bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2050.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2050.png new file mode 100644 index 0000000..c7c70c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2050.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2051.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2051.png new file mode 100644 index 0000000..91deff1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2051.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2052.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2052.png new file mode 100644 index 0000000..7a39f59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2052.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2053.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2053.png new file mode 100644 index 0000000..5376809 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2053.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2054.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2054.png new file mode 100644 index 0000000..e822e6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2054.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2055.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2055.png new file mode 100644 index 0000000..c952ad6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2055.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2056.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2056.png new file mode 100644 index 0000000..1b95daa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2056.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2057.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2057.png new file mode 100644 index 0000000..8400e7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2057.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2058.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2058.png new file mode 100644 index 0000000..b755acd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2058.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2059.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2059.png new file mode 100644 index 0000000..2efe271 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2059.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/206.png new file mode 100644 index 0000000..05e8cef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2060.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2060.png new file mode 100644 index 0000000..7a51452 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2060.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2061.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2061.png new file mode 100644 index 0000000..e782034 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2061.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2062.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2062.png new file mode 100644 index 0000000..d74c5ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2062.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2063.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2063.png new file mode 100644 index 0000000..b429a11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2063.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2064.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2064.png new file mode 100644 index 0000000..4e052fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2064.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2065.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2065.png new file mode 100644 index 0000000..0886cd4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2065.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2066.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2066.png new file mode 100644 index 0000000..5c07334 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2066.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2067.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2067.png new file mode 100644 index 0000000..20341ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2067.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2068.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2068.png new file mode 100644 index 0000000..96bca1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2068.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2069.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2069.png new file mode 100644 index 0000000..302b904 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2069.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/207.png new file mode 100644 index 0000000..d076ba4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2070.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2070.png new file mode 100644 index 0000000..e7748f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2070.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2071.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2071.png new file mode 100644 index 0000000..053b373 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2071.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2072.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2072.png new file mode 100644 index 0000000..92875aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2072.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2073.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2073.png new file mode 100644 index 0000000..55e3214 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2073.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2074.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2074.png new file mode 100644 index 0000000..9063e49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2074.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2075.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2075.png new file mode 100644 index 0000000..4aae90f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2075.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2076.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2076.png new file mode 100644 index 0000000..03fa565 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2076.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2077.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2077.png new file mode 100644 index 0000000..04b3314 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2077.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2078.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2078.png new file mode 100644 index 0000000..f041011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2078.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2079.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2079.png new file mode 100644 index 0000000..6902ed1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2079.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/208.png new file mode 100644 index 0000000..9c45369 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2080.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2080.png new file mode 100644 index 0000000..540376d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2080.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2081.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2081.png new file mode 100644 index 0000000..ff48f4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2081.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2082.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2082.png new file mode 100644 index 0000000..4bd54fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2082.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2083.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2083.png new file mode 100644 index 0000000..42a077a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2083.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2084.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2084.png new file mode 100644 index 0000000..3453f04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2084.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2085.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2085.png new file mode 100644 index 0000000..829ef6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2085.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2086.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2086.png new file mode 100644 index 0000000..ff48502 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2086.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2087.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2087.png new file mode 100644 index 0000000..d243cc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2087.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2088.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2088.png new file mode 100644 index 0000000..18d20e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2088.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2089.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2089.png new file mode 100644 index 0000000..412dce8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2089.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/209.png new file mode 100644 index 0000000..082e9f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2090.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2090.png new file mode 100644 index 0000000..f1cb550 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2090.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2091.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2091.png new file mode 100644 index 0000000..a9dc0f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2091.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2092.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2092.png new file mode 100644 index 0000000..56ae05e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2092.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2093.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2093.png new file mode 100644 index 0000000..b2e47d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2093.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2094.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2094.png new file mode 100644 index 0000000..9f4cdc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2094.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2095.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2095.png new file mode 100644 index 0000000..6a51748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2095.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2096.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2096.png new file mode 100644 index 0000000..4d35e57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2096.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2097.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2097.png new file mode 100644 index 0000000..17a0c47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2097.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2098.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2098.png new file mode 100644 index 0000000..c07c0a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2098.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2099.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2099.png new file mode 100644 index 0000000..2e248d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2099.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/21.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/21.png new file mode 100644 index 0000000..d47b5b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/21.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/210.png new file mode 100644 index 0000000..e7ae518 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2100.png new file mode 100644 index 0000000..696ba18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2101.png new file mode 100644 index 0000000..551103d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2102.png new file mode 100644 index 0000000..7ec029b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2103.png new file mode 100644 index 0000000..55ed96a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2104.png new file mode 100644 index 0000000..4b079e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2105.png new file mode 100644 index 0000000..3c174c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2106.png new file mode 100644 index 0000000..2dc4d5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2107.png new file mode 100644 index 0000000..56eccb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2108.png new file mode 100644 index 0000000..6f07411 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2109.png new file mode 100644 index 0000000..c779377 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/211.png new file mode 100644 index 0000000..5870911 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2110.png new file mode 100644 index 0000000..73b7e06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2111.png new file mode 100644 index 0000000..332be38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2112.png new file mode 100644 index 0000000..f7707ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2113.png new file mode 100644 index 0000000..e4287c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2114.png new file mode 100644 index 0000000..e0d3bff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2115.png new file mode 100644 index 0000000..23eb906 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2116.png new file mode 100644 index 0000000..ebc590e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2117.png new file mode 100644 index 0000000..1626f19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2118.png new file mode 100644 index 0000000..786fc82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2119.png new file mode 100644 index 0000000..b32cf0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/212.png new file mode 100644 index 0000000..a9dc6c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2120.png new file mode 100644 index 0000000..df9ff01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2121.png new file mode 100644 index 0000000..c6df192 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2122.png new file mode 100644 index 0000000..a8aba5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2123.png new file mode 100644 index 0000000..5d40c21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2124.png new file mode 100644 index 0000000..04a4631 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2125.png new file mode 100644 index 0000000..8cca353 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2126.png new file mode 100644 index 0000000..de2114a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2127.png new file mode 100644 index 0000000..adf9b51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2128.png new file mode 100644 index 0000000..d229452 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2129.png new file mode 100644 index 0000000..9f7110a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/213.png new file mode 100644 index 0000000..9def687 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2130.png new file mode 100644 index 0000000..3b3f0fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2131.png new file mode 100644 index 0000000..112b8b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2132.png new file mode 100644 index 0000000..2038be9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2133.png new file mode 100644 index 0000000..45fd0aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2134.png new file mode 100644 index 0000000..d9bd7a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2135.png new file mode 100644 index 0000000..375db8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2136.png new file mode 100644 index 0000000..8d8a387 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2137.png new file mode 100644 index 0000000..4ec0ea4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2138.png new file mode 100644 index 0000000..a19a6bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2139.png new file mode 100644 index 0000000..831d31b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/214.png new file mode 100644 index 0000000..8a2e531 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2140.png new file mode 100644 index 0000000..7544ea4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2141.png new file mode 100644 index 0000000..56aa431 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2142.png new file mode 100644 index 0000000..5cedc26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2143.png new file mode 100644 index 0000000..45fb3d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2144.png new file mode 100644 index 0000000..b0e8119 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2145.png new file mode 100644 index 0000000..17ecb46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2146.png new file mode 100644 index 0000000..6c3842b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2147.png new file mode 100644 index 0000000..de006e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2148.png new file mode 100644 index 0000000..5e0b6b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2149.png new file mode 100644 index 0000000..f6e1399 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/215.png new file mode 100644 index 0000000..bd09126 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2150.png new file mode 100644 index 0000000..0537907 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2151.png new file mode 100644 index 0000000..7000f20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2152.png new file mode 100644 index 0000000..f870eb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2153.png new file mode 100644 index 0000000..b0a0a5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2154.png new file mode 100644 index 0000000..5768c61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2155.png new file mode 100644 index 0000000..a9526c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2156.png new file mode 100644 index 0000000..04f810b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2157.png new file mode 100644 index 0000000..4fb4493 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2158.png new file mode 100644 index 0000000..c144463 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2159.png new file mode 100644 index 0000000..8edaaed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/216.png new file mode 100644 index 0000000..4259bd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2160.png new file mode 100644 index 0000000..3831a88 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2161.png new file mode 100644 index 0000000..0520438 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2162.png new file mode 100644 index 0000000..106dee4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2163.png new file mode 100644 index 0000000..42a1cf8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2164.png new file mode 100644 index 0000000..7a0b148 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2165.png new file mode 100644 index 0000000..406f05f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2166.png new file mode 100644 index 0000000..010a5a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2167.png new file mode 100644 index 0000000..004fccc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2168.png new file mode 100644 index 0000000..9d954f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2169.png new file mode 100644 index 0000000..57b637a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/217.png new file mode 100644 index 0000000..12a248e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2170.png new file mode 100644 index 0000000..4995244 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2171.png new file mode 100644 index 0000000..56db4ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2172.png new file mode 100644 index 0000000..f4ddbb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2173.png new file mode 100644 index 0000000..422ee6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2174.png new file mode 100644 index 0000000..0be55ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2175.png new file mode 100644 index 0000000..ca5092f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2176.png new file mode 100644 index 0000000..6c5494d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2177.png new file mode 100644 index 0000000..d96b2a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2178.png new file mode 100644 index 0000000..b49dcdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2179.png new file mode 100644 index 0000000..d0f3c1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/218.png new file mode 100644 index 0000000..3325818 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2180.png new file mode 100644 index 0000000..e21f8da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2181.png new file mode 100644 index 0000000..21a4bd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2182.png new file mode 100644 index 0000000..5329753 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2183.png new file mode 100644 index 0000000..6cc32f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2184.png new file mode 100644 index 0000000..b5c6af4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2185.png new file mode 100644 index 0000000..25785e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2186.png new file mode 100644 index 0000000..ea29d4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2187.png new file mode 100644 index 0000000..d82d6bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2188.png new file mode 100644 index 0000000..22a0f2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2189.png new file mode 100644 index 0000000..785e526 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/219.png new file mode 100644 index 0000000..4494161 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2190.png new file mode 100644 index 0000000..8c0f9ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2191.png new file mode 100644 index 0000000..b0e3e6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2192.png new file mode 100644 index 0000000..c92daff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2193.png new file mode 100644 index 0000000..22ec5b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2194.png new file mode 100644 index 0000000..bd8b2ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2195.png new file mode 100644 index 0000000..e0ac6c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2196.png new file mode 100644 index 0000000..bcf412d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2197.png new file mode 100644 index 0000000..b683a51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2198.png new file mode 100644 index 0000000..9321ecb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2199.png new file mode 100644 index 0000000..9229973 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/22.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/22.png new file mode 100644 index 0000000..9a1d86c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/22.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/220.png new file mode 100644 index 0000000..e1e6496 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2200.png new file mode 100644 index 0000000..dbba51b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2201.png new file mode 100644 index 0000000..b66cd89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2202.png new file mode 100644 index 0000000..2db9931 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2203.png new file mode 100644 index 0000000..5236f33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2204.png new file mode 100644 index 0000000..d78d458 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2205.png new file mode 100644 index 0000000..5cf5d3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2206.png new file mode 100644 index 0000000..30794d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2207.png new file mode 100644 index 0000000..dfa151a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2208.png new file mode 100644 index 0000000..7341bb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2209.png new file mode 100644 index 0000000..16d54e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/221.png new file mode 100644 index 0000000..8f2a23e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2210.png new file mode 100644 index 0000000..39f9044 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2211.png new file mode 100644 index 0000000..a3ea506 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2212.png new file mode 100644 index 0000000..aaf6b53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2213.png new file mode 100644 index 0000000..e380e82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2214.png new file mode 100644 index 0000000..1713678 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2215.png new file mode 100644 index 0000000..d282527 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2216.png new file mode 100644 index 0000000..3f2b472 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2217.png new file mode 100644 index 0000000..0338ff3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2218.png new file mode 100644 index 0000000..e759d5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2219.png new file mode 100644 index 0000000..9c1ad84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/222.png new file mode 100644 index 0000000..d51cc7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2220.png new file mode 100644 index 0000000..65023f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2221.png new file mode 100644 index 0000000..36c8e23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2222.png new file mode 100644 index 0000000..49d5484 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2223.png new file mode 100644 index 0000000..f0f8ef4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2224.png new file mode 100644 index 0000000..d5a8203 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2225.png new file mode 100644 index 0000000..65fe073 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2226.png new file mode 100644 index 0000000..69bc995 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2227.png new file mode 100644 index 0000000..99f69ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2228.png new file mode 100644 index 0000000..261500e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2229.png new file mode 100644 index 0000000..9b3b289 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/223.png new file mode 100644 index 0000000..45b635f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2230.png new file mode 100644 index 0000000..77c7809 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2231.png new file mode 100644 index 0000000..f584a3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2232.png new file mode 100644 index 0000000..98a515e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2233.png new file mode 100644 index 0000000..559beca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2234.png new file mode 100644 index 0000000..dc6fd94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2235.png new file mode 100644 index 0000000..e946f79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2236.png new file mode 100644 index 0000000..ecf8834 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2237.png new file mode 100644 index 0000000..28ce1e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2238.png new file mode 100644 index 0000000..14c235a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2239.png new file mode 100644 index 0000000..814c809 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/224.png new file mode 100644 index 0000000..a5ab5af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2240.png new file mode 100644 index 0000000..a356ccd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2241.png new file mode 100644 index 0000000..eda27e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2242.png new file mode 100644 index 0000000..6ec98fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2243.png new file mode 100644 index 0000000..26f7cab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2244.png new file mode 100644 index 0000000..4c118ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2245.png new file mode 100644 index 0000000..ca8e01b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2246.png new file mode 100644 index 0000000..9eab334 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2247.png new file mode 100644 index 0000000..ac28220 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2248.png new file mode 100644 index 0000000..76483e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2249.png new file mode 100644 index 0000000..288d484 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/225.png new file mode 100644 index 0000000..ca461b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2250.png new file mode 100644 index 0000000..f0b3118 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2251.png new file mode 100644 index 0000000..276565a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2252.png new file mode 100644 index 0000000..a0e64a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2253.png new file mode 100644 index 0000000..59eae77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2254.png new file mode 100644 index 0000000..de364d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2255.png new file mode 100644 index 0000000..14756ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2256.png new file mode 100644 index 0000000..ec27c09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2257.png new file mode 100644 index 0000000..d957cad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2258.png new file mode 100644 index 0000000..409b8f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2259.png new file mode 100644 index 0000000..6a42604 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/226.png new file mode 100644 index 0000000..714213b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2260.png new file mode 100644 index 0000000..2871d72 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2261.png new file mode 100644 index 0000000..53d8625 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2262.png new file mode 100644 index 0000000..ec57de4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2263.png new file mode 100644 index 0000000..9208f75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2264.png new file mode 100644 index 0000000..7320f39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2265.png new file mode 100644 index 0000000..e92ff3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2266.png new file mode 100644 index 0000000..5612fc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2267.png new file mode 100644 index 0000000..cbce045 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2268.png new file mode 100644 index 0000000..bb82a24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2269.png new file mode 100644 index 0000000..9140cb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/227.png new file mode 100644 index 0000000..7d98483 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2270.png new file mode 100644 index 0000000..5a62bb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2271.png new file mode 100644 index 0000000..64e1338 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2272.png new file mode 100644 index 0000000..c2fecef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2273.png new file mode 100644 index 0000000..8c4a74f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2274.png new file mode 100644 index 0000000..aed517b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2275.png new file mode 100644 index 0000000..166ad52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2276.png new file mode 100644 index 0000000..9432cb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2277.png new file mode 100644 index 0000000..917462e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2278.png new file mode 100644 index 0000000..bfe866b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2279.png new file mode 100644 index 0000000..afc43c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/228.png new file mode 100644 index 0000000..55d8494 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2280.png new file mode 100644 index 0000000..28fb809 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2281.png new file mode 100644 index 0000000..ca077fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2282.png new file mode 100644 index 0000000..5a95f54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2283.png new file mode 100644 index 0000000..9a9261d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2284.png new file mode 100644 index 0000000..748f23a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2285.png new file mode 100644 index 0000000..2d51907 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2286.png new file mode 100644 index 0000000..442aa17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2287.png new file mode 100644 index 0000000..3cf05a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2288.png new file mode 100644 index 0000000..6728e84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2289.png new file mode 100644 index 0000000..48de99d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/229.png new file mode 100644 index 0000000..f39f453 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2290.png new file mode 100644 index 0000000..dc54f2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2291.png new file mode 100644 index 0000000..1080c73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2292.png new file mode 100644 index 0000000..0c5a288 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2293.png new file mode 100644 index 0000000..5f55d39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2294.png new file mode 100644 index 0000000..996b5b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2295.png new file mode 100644 index 0000000..683800c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2296.png new file mode 100644 index 0000000..3627e9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2297.png new file mode 100644 index 0000000..b4972fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2298.png new file mode 100644 index 0000000..2e26ace Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2299.png new file mode 100644 index 0000000..cd1f9fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/23.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/23.png new file mode 100644 index 0000000..d00f235 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/23.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/230.png new file mode 100644 index 0000000..bb2d42b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2300.png new file mode 100644 index 0000000..82e9417 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2301.png new file mode 100644 index 0000000..409b541 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2302.png new file mode 100644 index 0000000..51148a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2303.png new file mode 100644 index 0000000..07e048e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2304.png new file mode 100644 index 0000000..da4da1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2305.png new file mode 100644 index 0000000..18c2bc6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2306.png new file mode 100644 index 0000000..2ba55c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2307.png new file mode 100644 index 0000000..34fac13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2308.png new file mode 100644 index 0000000..75801d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2309.png new file mode 100644 index 0000000..e6ffb50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/231.png new file mode 100644 index 0000000..bf11a87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2310.png new file mode 100644 index 0000000..5ad1346 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2311.png new file mode 100644 index 0000000..02fc64c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2312.png new file mode 100644 index 0000000..609613b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2313.png new file mode 100644 index 0000000..1e8ca02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2314.png new file mode 100644 index 0000000..72130f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2315.png new file mode 100644 index 0000000..5075d51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2316.png new file mode 100644 index 0000000..0b1669d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2317.png new file mode 100644 index 0000000..1ac255a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2318.png new file mode 100644 index 0000000..2ce4de1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2319.png new file mode 100644 index 0000000..21849af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/232.png new file mode 100644 index 0000000..221b6bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2320.png new file mode 100644 index 0000000..a738ce7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2321.png new file mode 100644 index 0000000..b1bcb09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2322.png new file mode 100644 index 0000000..9bc632e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2323.png new file mode 100644 index 0000000..9ee6b82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2324.png new file mode 100644 index 0000000..770fe77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2325.png new file mode 100644 index 0000000..bb66681 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2326.png new file mode 100644 index 0000000..946a40a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2327.png new file mode 100644 index 0000000..cac65e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2328.png new file mode 100644 index 0000000..7874af3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2329.png new file mode 100644 index 0000000..0fb4170 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/233.png new file mode 100644 index 0000000..8387dc2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2330.png new file mode 100644 index 0000000..9a0f980 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2331.png new file mode 100644 index 0000000..2794e13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2332.png new file mode 100644 index 0000000..dedf4a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2333.png new file mode 100644 index 0000000..f922c14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2334.png new file mode 100644 index 0000000..99d83d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2335.png new file mode 100644 index 0000000..f4f4866 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2336.png new file mode 100644 index 0000000..07c1170 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2337.png new file mode 100644 index 0000000..6c1fc9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2338.png new file mode 100644 index 0000000..46165ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2339.png new file mode 100644 index 0000000..6d0fc00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/234.png new file mode 100644 index 0000000..e7bc055 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2340.png new file mode 100644 index 0000000..dea447c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2341.png new file mode 100644 index 0000000..a61389f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2342.png new file mode 100644 index 0000000..b35255d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2343.png new file mode 100644 index 0000000..5dbf9ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2344.png new file mode 100644 index 0000000..3d6eb12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2345.png new file mode 100644 index 0000000..ed8ed15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2346.png new file mode 100644 index 0000000..614a926 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2347.png new file mode 100644 index 0000000..e111b63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2348.png new file mode 100644 index 0000000..6383ece Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2349.png new file mode 100644 index 0000000..e9e8273 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/235.png new file mode 100644 index 0000000..4869b31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2350.png new file mode 100644 index 0000000..16d07b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2351.png new file mode 100644 index 0000000..31778a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2352.png new file mode 100644 index 0000000..67026cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2353.png new file mode 100644 index 0000000..9031700 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2354.png new file mode 100644 index 0000000..83e256b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2355.png new file mode 100644 index 0000000..cfafca3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2356.png new file mode 100644 index 0000000..cd0cf0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2357.png new file mode 100644 index 0000000..a954f69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2358.png new file mode 100644 index 0000000..db472ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2359.png new file mode 100644 index 0000000..2763370 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/236.png new file mode 100644 index 0000000..fa44869 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2360.png new file mode 100644 index 0000000..9af95b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2361.png new file mode 100644 index 0000000..a6d7fc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2362.png new file mode 100644 index 0000000..395e44c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2363.png new file mode 100644 index 0000000..9bc527d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2364.png new file mode 100644 index 0000000..d698e57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2365.png new file mode 100644 index 0000000..092910a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2366.png new file mode 100644 index 0000000..d221939 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2367.png new file mode 100644 index 0000000..f05e61c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2368.png new file mode 100644 index 0000000..28248d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2369.png new file mode 100644 index 0000000..a201a4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/237.png new file mode 100644 index 0000000..258ce4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2370.png new file mode 100644 index 0000000..60ab18a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2371.png new file mode 100644 index 0000000..fd30fee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2372.png new file mode 100644 index 0000000..3740031 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2373.png new file mode 100644 index 0000000..0ea2586 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2374.png new file mode 100644 index 0000000..1a3ed83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2375.png new file mode 100644 index 0000000..0b418b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2376.png new file mode 100644 index 0000000..6628ba5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2377.png new file mode 100644 index 0000000..2049fd5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2378.png new file mode 100644 index 0000000..6b36075 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2379.png new file mode 100644 index 0000000..ff87fbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/238.png new file mode 100644 index 0000000..2e820af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2380.png new file mode 100644 index 0000000..0753231 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2381.png new file mode 100644 index 0000000..6aa89de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2382.png new file mode 100644 index 0000000..a0702c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2383.png new file mode 100644 index 0000000..4bb84f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2384.png new file mode 100644 index 0000000..70f5555 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2385.png new file mode 100644 index 0000000..9688cee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2386.png new file mode 100644 index 0000000..143a079 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2387.png new file mode 100644 index 0000000..a1b11b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2388.png new file mode 100644 index 0000000..9937214 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2389.png new file mode 100644 index 0000000..6c58c7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/239.png new file mode 100644 index 0000000..8568099 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2390.png new file mode 100644 index 0000000..71ba7d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2391.png new file mode 100644 index 0000000..613c278 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2392.png new file mode 100644 index 0000000..5f22bb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2393.png new file mode 100644 index 0000000..accb1cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2394.png new file mode 100644 index 0000000..060d59f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2395.png new file mode 100644 index 0000000..9531b3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2396.png new file mode 100644 index 0000000..c7d0f26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2397.png new file mode 100644 index 0000000..1cf821f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2398.png new file mode 100644 index 0000000..d73f139 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2399.png new file mode 100644 index 0000000..e2b2f69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/24.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/24.png new file mode 100644 index 0000000..62fed0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/24.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/240.png new file mode 100644 index 0000000..6a6b0e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2400.png new file mode 100644 index 0000000..cd106fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2401.png new file mode 100644 index 0000000..a755dc6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2402.png new file mode 100644 index 0000000..90edd4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2403.png new file mode 100644 index 0000000..927e686 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2404.png new file mode 100644 index 0000000..1735e77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2405.png new file mode 100644 index 0000000..d98c86d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2406.png new file mode 100644 index 0000000..bf5469f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2407.png new file mode 100644 index 0000000..f949b35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2408.png new file mode 100644 index 0000000..48c4ff8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2409.png new file mode 100644 index 0000000..bb481f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/241.png new file mode 100644 index 0000000..77ed269 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2410.png new file mode 100644 index 0000000..ee83be7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2411.png new file mode 100644 index 0000000..90f8623 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2412.png new file mode 100644 index 0000000..5cf52cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2413.png new file mode 100644 index 0000000..e54782e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2414.png new file mode 100644 index 0000000..6db74af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2415.png new file mode 100644 index 0000000..f095211 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2416.png new file mode 100644 index 0000000..c3be45d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2417.png new file mode 100644 index 0000000..47cc145 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2418.png new file mode 100644 index 0000000..ee56c0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2419.png new file mode 100644 index 0000000..1283479 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/242.png new file mode 100644 index 0000000..5f8a51b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2420.png new file mode 100644 index 0000000..d762d04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2421.png new file mode 100644 index 0000000..dcd7fba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2422.png new file mode 100644 index 0000000..be125f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2423.png new file mode 100644 index 0000000..4e1f02a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2424.png new file mode 100644 index 0000000..54b594a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2425.png new file mode 100644 index 0000000..b07e166 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2426.png new file mode 100644 index 0000000..61215b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2427.png new file mode 100644 index 0000000..29bb8dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2428.png new file mode 100644 index 0000000..aeb3817 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2429.png new file mode 100644 index 0000000..db838a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/243.png new file mode 100644 index 0000000..8de44df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2430.png new file mode 100644 index 0000000..e5bc8e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2431.png new file mode 100644 index 0000000..5508402 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2432.png new file mode 100644 index 0000000..36fd79c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2433.png new file mode 100644 index 0000000..d49fb9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2434.png new file mode 100644 index 0000000..899ed48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2435.png new file mode 100644 index 0000000..044c5d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2436.png new file mode 100644 index 0000000..6b56ce3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2437.png new file mode 100644 index 0000000..aaeede5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2438.png new file mode 100644 index 0000000..7ef84ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2439.png new file mode 100644 index 0000000..23ad511 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/244.png new file mode 100644 index 0000000..2920c49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2440.png new file mode 100644 index 0000000..6fbae0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2441.png new file mode 100644 index 0000000..f6e1a7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2442.png new file mode 100644 index 0000000..9e4ac15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2443.png new file mode 100644 index 0000000..db55c70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2444.png new file mode 100644 index 0000000..fbabc1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2445.png new file mode 100644 index 0000000..5b6920e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2446.png new file mode 100644 index 0000000..6efb44d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2447.png new file mode 100644 index 0000000..2dedfb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2448.png new file mode 100644 index 0000000..1f9c657 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2449.png new file mode 100644 index 0000000..de1a5f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/245.png new file mode 100644 index 0000000..f9dd7b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2450.png new file mode 100644 index 0000000..ead7a0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2451.png new file mode 100644 index 0000000..7ca942a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2452.png new file mode 100644 index 0000000..10f2a98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2453.png new file mode 100644 index 0000000..7ee9c98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2454.png new file mode 100644 index 0000000..5158fce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2455.png new file mode 100644 index 0000000..b971765 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2456.png new file mode 100644 index 0000000..8c591f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2457.png new file mode 100644 index 0000000..ea90300 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2458.png new file mode 100644 index 0000000..0ba20d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2459.png new file mode 100644 index 0000000..db45e48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/246.png new file mode 100644 index 0000000..293adb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2460.png new file mode 100644 index 0000000..3c470e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2461.png new file mode 100644 index 0000000..06dc64f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2462.png new file mode 100644 index 0000000..78d77b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2463.png new file mode 100644 index 0000000..5096c04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2464.png new file mode 100644 index 0000000..c8cc8ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2465.png new file mode 100644 index 0000000..041156d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2466.png new file mode 100644 index 0000000..c20dc40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2467.png new file mode 100644 index 0000000..f6b7281 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2468.png new file mode 100644 index 0000000..21edc0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2469.png new file mode 100644 index 0000000..d999468 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/247.png new file mode 100644 index 0000000..63dd12d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2470.png new file mode 100644 index 0000000..a13677d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2471.png new file mode 100644 index 0000000..a835af7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2472.png new file mode 100644 index 0000000..b7850a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2473.png new file mode 100644 index 0000000..ef87545 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2474.png new file mode 100644 index 0000000..5378ddc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2475.png new file mode 100644 index 0000000..d207543 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2476.png new file mode 100644 index 0000000..b0f1da6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2477.png new file mode 100644 index 0000000..636d53f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2478.png new file mode 100644 index 0000000..116a9f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2479.png new file mode 100644 index 0000000..109b54c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/248.png new file mode 100644 index 0000000..e517282 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2480.png new file mode 100644 index 0000000..9723bbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2481.png new file mode 100644 index 0000000..fb52011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2482.png new file mode 100644 index 0000000..27bad95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2483.png new file mode 100644 index 0000000..61dc80e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2484.png new file mode 100644 index 0000000..5477ff2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2485.png new file mode 100644 index 0000000..008ffc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2486.png new file mode 100644 index 0000000..7887d8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2487.png new file mode 100644 index 0000000..036aa1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2488.png new file mode 100644 index 0000000..81722b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2489.png new file mode 100644 index 0000000..2877017 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/249.png new file mode 100644 index 0000000..f954079 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2490.png new file mode 100644 index 0000000..ef307c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2491.png new file mode 100644 index 0000000..c1fd619 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2492.png new file mode 100644 index 0000000..2e779a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2493.png new file mode 100644 index 0000000..37e2305 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2494.png new file mode 100644 index 0000000..f89042e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2495.png new file mode 100644 index 0000000..cffdfa9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2496.png new file mode 100644 index 0000000..9be55e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2497.png new file mode 100644 index 0000000..78f4b24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2498.png new file mode 100644 index 0000000..53b3a2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2499.png new file mode 100644 index 0000000..f2a3012 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/2499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/25.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/25.png new file mode 100644 index 0000000..411521b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/25.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/250.png new file mode 100644 index 0000000..efacaa5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/251.png new file mode 100644 index 0000000..238915f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/252.png new file mode 100644 index 0000000..d2a07ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/253.png new file mode 100644 index 0000000..c601b3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/254.png new file mode 100644 index 0000000..50835a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/255.png new file mode 100644 index 0000000..e8e19a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/256.png new file mode 100644 index 0000000..e38322d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/257.png new file mode 100644 index 0000000..dd2710c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/258.png new file mode 100644 index 0000000..5e71173 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/259.png new file mode 100644 index 0000000..4290f01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/26.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/26.png new file mode 100644 index 0000000..efde2e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/26.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/260.png new file mode 100644 index 0000000..816feaf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/261.png new file mode 100644 index 0000000..0fada55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/262.png new file mode 100644 index 0000000..b78df31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/263.png new file mode 100644 index 0000000..4a3531a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/264.png new file mode 100644 index 0000000..dae63ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/265.png new file mode 100644 index 0000000..874c973 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/266.png new file mode 100644 index 0000000..43bcb71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/267.png new file mode 100644 index 0000000..970220b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/268.png new file mode 100644 index 0000000..e6aa779 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/269.png new file mode 100644 index 0000000..43e3112 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/27.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/27.png new file mode 100644 index 0000000..11ef6e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/27.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/270.png new file mode 100644 index 0000000..f8291b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/271.png new file mode 100644 index 0000000..a1e770f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/272.png new file mode 100644 index 0000000..7f91b5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/273.png new file mode 100644 index 0000000..e6508ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/274.png new file mode 100644 index 0000000..e039f7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/275.png new file mode 100644 index 0000000..356b9d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/276.png new file mode 100644 index 0000000..6c1b53c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/277.png new file mode 100644 index 0000000..3edcca6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/278.png new file mode 100644 index 0000000..a980b50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/279.png new file mode 100644 index 0000000..265ed45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/28.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/28.png new file mode 100644 index 0000000..91591f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/28.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/280.png new file mode 100644 index 0000000..118dc93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/281.png new file mode 100644 index 0000000..43bd29e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/282.png new file mode 100644 index 0000000..163fe55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/283.png new file mode 100644 index 0000000..99a697e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/284.png new file mode 100644 index 0000000..abe35de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/285.png new file mode 100644 index 0000000..1e41105 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/286.png new file mode 100644 index 0000000..460a9e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/287.png new file mode 100644 index 0000000..aa6b230 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/288.png new file mode 100644 index 0000000..ab5b331 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/289.png new file mode 100644 index 0000000..e49c97e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/29.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/29.png new file mode 100644 index 0000000..b5ba0f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/29.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/290.png new file mode 100644 index 0000000..080a557 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/291.png new file mode 100644 index 0000000..95a4c34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/292.png new file mode 100644 index 0000000..b5cef8c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/293.png new file mode 100644 index 0000000..fc953af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/294.png new file mode 100644 index 0000000..26ffe67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/295.png new file mode 100644 index 0000000..27d5d23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/296.png new file mode 100644 index 0000000..2f03688 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/297.png new file mode 100644 index 0000000..073ad36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/298.png new file mode 100644 index 0000000..c95ea47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/299.png new file mode 100644 index 0000000..cf77795 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/3.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/3.png new file mode 100644 index 0000000..ca9390f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/3.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/30.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/30.png new file mode 100644 index 0000000..0754425 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/30.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/300.png new file mode 100644 index 0000000..5d8d981 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/301.png new file mode 100644 index 0000000..d4eaa29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/302.png new file mode 100644 index 0000000..7d66819 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/303.png new file mode 100644 index 0000000..edc41bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/304.png new file mode 100644 index 0000000..0d71e9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/305.png new file mode 100644 index 0000000..7d7947a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/306.png new file mode 100644 index 0000000..78477e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/307.png new file mode 100644 index 0000000..9d2010a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/308.png new file mode 100644 index 0000000..b42223e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/309.png new file mode 100644 index 0000000..f411534 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/31.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/31.png new file mode 100644 index 0000000..bb79acd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/31.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/310.png new file mode 100644 index 0000000..cb77bcb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/311.png new file mode 100644 index 0000000..4ca881f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/312.png new file mode 100644 index 0000000..8e4e970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/313.png new file mode 100644 index 0000000..e426854 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/314.png new file mode 100644 index 0000000..27769a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/315.png new file mode 100644 index 0000000..6b9e626 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/316.png new file mode 100644 index 0000000..42f1745 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/317.png new file mode 100644 index 0000000..eb93bb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/318.png new file mode 100644 index 0000000..9a5f263 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/319.png new file mode 100644 index 0000000..db221fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/32.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/32.png new file mode 100644 index 0000000..b707121 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/32.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/320.png new file mode 100644 index 0000000..a44ef6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/321.png new file mode 100644 index 0000000..7757aca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/322.png new file mode 100644 index 0000000..458ba8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/323.png new file mode 100644 index 0000000..90c16a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/324.png new file mode 100644 index 0000000..49303b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/325.png new file mode 100644 index 0000000..ed67eae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/326.png new file mode 100644 index 0000000..0e53503 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/327.png new file mode 100644 index 0000000..df9ddbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/328.png new file mode 100644 index 0000000..b7640ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/329.png new file mode 100644 index 0000000..c8de25e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/33.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/33.png new file mode 100644 index 0000000..3710c96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/33.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/330.png new file mode 100644 index 0000000..b7d2680 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/331.png new file mode 100644 index 0000000..2e3e642 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/332.png new file mode 100644 index 0000000..1877b17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/333.png new file mode 100644 index 0000000..f446749 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/334.png new file mode 100644 index 0000000..24bf592 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/335.png new file mode 100644 index 0000000..cc02a11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/336.png new file mode 100644 index 0000000..bf569b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/337.png new file mode 100644 index 0000000..acab646 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/338.png new file mode 100644 index 0000000..2d3f4d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/339.png new file mode 100644 index 0000000..ac7d925 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/34.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/34.png new file mode 100644 index 0000000..7e21d54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/34.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/340.png new file mode 100644 index 0000000..1e367a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/341.png new file mode 100644 index 0000000..6da192c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/342.png new file mode 100644 index 0000000..416536b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/343.png new file mode 100644 index 0000000..6e2ca94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/344.png new file mode 100644 index 0000000..48da527 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/345.png new file mode 100644 index 0000000..fe374ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/346.png new file mode 100644 index 0000000..7efe726 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/347.png new file mode 100644 index 0000000..da18b5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/348.png new file mode 100644 index 0000000..bb5075f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/349.png new file mode 100644 index 0000000..ddf4b00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/35.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/35.png new file mode 100644 index 0000000..8de6a9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/35.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/350.png new file mode 100644 index 0000000..b55ca16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/351.png new file mode 100644 index 0000000..56124bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/352.png new file mode 100644 index 0000000..bb1abdd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/353.png new file mode 100644 index 0000000..1fd79a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/354.png new file mode 100644 index 0000000..e17d813 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/355.png new file mode 100644 index 0000000..b67bb48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/356.png new file mode 100644 index 0000000..05d3292 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/357.png new file mode 100644 index 0000000..a728c8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/358.png new file mode 100644 index 0000000..a34ea5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/359.png new file mode 100644 index 0000000..59d1004 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/36.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/36.png new file mode 100644 index 0000000..0be25a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/36.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/360.png new file mode 100644 index 0000000..ffc5534 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/361.png new file mode 100644 index 0000000..f57aaf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/362.png new file mode 100644 index 0000000..0f3bd10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/363.png new file mode 100644 index 0000000..2936ca0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/364.png new file mode 100644 index 0000000..f2b7023 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/365.png new file mode 100644 index 0000000..58f5fcc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/366.png new file mode 100644 index 0000000..1226a98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/367.png new file mode 100644 index 0000000..5024f1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/368.png new file mode 100644 index 0000000..8bf356c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/369.png new file mode 100644 index 0000000..ef66a90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/37.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/37.png new file mode 100644 index 0000000..a7eb09a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/37.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/370.png new file mode 100644 index 0000000..71d33c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/371.png new file mode 100644 index 0000000..fb70661 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/372.png new file mode 100644 index 0000000..bf1538b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/373.png new file mode 100644 index 0000000..12204ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/374.png new file mode 100644 index 0000000..5b6d74b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/375.png new file mode 100644 index 0000000..d94bc3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/376.png new file mode 100644 index 0000000..491c002 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/377.png new file mode 100644 index 0000000..bad33e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/378.png new file mode 100644 index 0000000..756a7e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/379.png new file mode 100644 index 0000000..47e7af9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/38.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/38.png new file mode 100644 index 0000000..23aed6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/38.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/380.png new file mode 100644 index 0000000..802248f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/381.png new file mode 100644 index 0000000..21b17fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/382.png new file mode 100644 index 0000000..e18e6b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/383.png new file mode 100644 index 0000000..e548596 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/384.png new file mode 100644 index 0000000..f45c79b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/385.png new file mode 100644 index 0000000..e1c774f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/386.png new file mode 100644 index 0000000..2be616f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/387.png new file mode 100644 index 0000000..bba625f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/388.png new file mode 100644 index 0000000..a7cdee6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/389.png new file mode 100644 index 0000000..433bfbd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/39.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/39.png new file mode 100644 index 0000000..0b72a50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/39.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/390.png new file mode 100644 index 0000000..f05bdf3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/391.png new file mode 100644 index 0000000..cf504ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/392.png new file mode 100644 index 0000000..391728d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/393.png new file mode 100644 index 0000000..6b7e5a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/394.png new file mode 100644 index 0000000..f891948 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/395.png new file mode 100644 index 0000000..8a28c26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/396.png new file mode 100644 index 0000000..a8000ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/397.png new file mode 100644 index 0000000..965b836 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/398.png new file mode 100644 index 0000000..dbf2781 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/399.png new file mode 100644 index 0000000..74b49f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/4.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/4.png new file mode 100644 index 0000000..4d1391d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/4.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/40.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/40.png new file mode 100644 index 0000000..5f37ddc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/40.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/400.png new file mode 100644 index 0000000..45c13f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/401.png new file mode 100644 index 0000000..fd1431e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/402.png new file mode 100644 index 0000000..21a5978 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/403.png new file mode 100644 index 0000000..4c506d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/404.png new file mode 100644 index 0000000..07c63bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/405.png new file mode 100644 index 0000000..e8172b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/406.png new file mode 100644 index 0000000..60d6037 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/407.png new file mode 100644 index 0000000..658eab3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/408.png new file mode 100644 index 0000000..2d4ac69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/409.png new file mode 100644 index 0000000..cb5abfb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/41.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/41.png new file mode 100644 index 0000000..9ba8b76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/41.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/410.png new file mode 100644 index 0000000..f67d1ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/411.png new file mode 100644 index 0000000..df80ecc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/412.png new file mode 100644 index 0000000..cccba50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/413.png new file mode 100644 index 0000000..3d78213 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/414.png new file mode 100644 index 0000000..6a6c832 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/415.png new file mode 100644 index 0000000..37e06dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/416.png new file mode 100644 index 0000000..5a27f27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/417.png new file mode 100644 index 0000000..4e47117 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/418.png new file mode 100644 index 0000000..3da6d58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/419.png new file mode 100644 index 0000000..640d199 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/42.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/42.png new file mode 100644 index 0000000..ca52fc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/42.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/420.png new file mode 100644 index 0000000..cfd2c23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/421.png new file mode 100644 index 0000000..9409b64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/422.png new file mode 100644 index 0000000..a30468d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/423.png new file mode 100644 index 0000000..3418a0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/424.png new file mode 100644 index 0000000..7b83a69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/425.png new file mode 100644 index 0000000..5e74734 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/426.png new file mode 100644 index 0000000..8bde814 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/427.png new file mode 100644 index 0000000..1107871 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/428.png new file mode 100644 index 0000000..611f867 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/429.png new file mode 100644 index 0000000..b7ad335 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/43.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/43.png new file mode 100644 index 0000000..45fa6a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/43.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/430.png new file mode 100644 index 0000000..4e92441 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/431.png new file mode 100644 index 0000000..fb08a61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/432.png new file mode 100644 index 0000000..f2835d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/433.png new file mode 100644 index 0000000..a44ef5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/434.png new file mode 100644 index 0000000..517b78a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/435.png new file mode 100644 index 0000000..45d8b61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/436.png new file mode 100644 index 0000000..aa814ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/437.png new file mode 100644 index 0000000..4ecfb08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/438.png new file mode 100644 index 0000000..f139c3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/439.png new file mode 100644 index 0000000..cdb0a00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/44.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/44.png new file mode 100644 index 0000000..5104e9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/44.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/440.png new file mode 100644 index 0000000..5b81afe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/441.png new file mode 100644 index 0000000..23ab375 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/442.png new file mode 100644 index 0000000..a40b595 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/443.png new file mode 100644 index 0000000..610e2ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/444.png new file mode 100644 index 0000000..2095271 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/445.png new file mode 100644 index 0000000..b04c5f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/446.png new file mode 100644 index 0000000..a9176e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/447.png new file mode 100644 index 0000000..6079510 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/448.png new file mode 100644 index 0000000..37c246e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/449.png new file mode 100644 index 0000000..fa9d9b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/45.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/45.png new file mode 100644 index 0000000..b975112 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/45.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/450.png new file mode 100644 index 0000000..dadb62a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/451.png new file mode 100644 index 0000000..1293986 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/452.png new file mode 100644 index 0000000..8ac576e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/453.png new file mode 100644 index 0000000..327202c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/454.png new file mode 100644 index 0000000..9446d9d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/455.png new file mode 100644 index 0000000..a08415f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/456.png new file mode 100644 index 0000000..3fcfc85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/457.png new file mode 100644 index 0000000..ac20d2a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/458.png new file mode 100644 index 0000000..17cf3b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/459.png new file mode 100644 index 0000000..9a67862 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/46.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/46.png new file mode 100644 index 0000000..4b50137 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/46.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/460.png new file mode 100644 index 0000000..3c0e8f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/461.png new file mode 100644 index 0000000..78c64a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/462.png new file mode 100644 index 0000000..4f6a741 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/463.png new file mode 100644 index 0000000..d8f379c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/464.png new file mode 100644 index 0000000..ca5674f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/465.png new file mode 100644 index 0000000..6c8fbbe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/466.png new file mode 100644 index 0000000..ced6ad3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/467.png new file mode 100644 index 0000000..c27fbeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/468.png new file mode 100644 index 0000000..96f8e4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/469.png new file mode 100644 index 0000000..2341191 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/47.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/47.png new file mode 100644 index 0000000..6acd323 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/47.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/470.png new file mode 100644 index 0000000..70f2649 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/471.png new file mode 100644 index 0000000..4f0ecbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/472.png new file mode 100644 index 0000000..29b051a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/473.png new file mode 100644 index 0000000..45be820 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/474.png new file mode 100644 index 0000000..a9186a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/475.png new file mode 100644 index 0000000..33e89f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/476.png new file mode 100644 index 0000000..cef299f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/477.png new file mode 100644 index 0000000..3eb3414 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/478.png new file mode 100644 index 0000000..9147889 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/479.png new file mode 100644 index 0000000..98b883e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/48.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/48.png new file mode 100644 index 0000000..19d0e70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/48.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/480.png new file mode 100644 index 0000000..3f06e05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/481.png new file mode 100644 index 0000000..eb0fb8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/482.png new file mode 100644 index 0000000..849d7bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/483.png new file mode 100644 index 0000000..d22318e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/484.png new file mode 100644 index 0000000..e2ceb01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/485.png new file mode 100644 index 0000000..d9436f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/486.png new file mode 100644 index 0000000..402e6a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/487.png new file mode 100644 index 0000000..00606b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/488.png new file mode 100644 index 0000000..e4c5cb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/489.png new file mode 100644 index 0000000..f81852a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/49.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/49.png new file mode 100644 index 0000000..fbb0123 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/49.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/490.png new file mode 100644 index 0000000..7893ffc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/491.png new file mode 100644 index 0000000..d463ebb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/492.png new file mode 100644 index 0000000..decbd6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/493.png new file mode 100644 index 0000000..57e8983 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/494.png new file mode 100644 index 0000000..aeb70c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/495.png new file mode 100644 index 0000000..8b3b07c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/496.png new file mode 100644 index 0000000..f8c6355 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/497.png new file mode 100644 index 0000000..9c8c402 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/498.png new file mode 100644 index 0000000..8c4f021 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/499.png new file mode 100644 index 0000000..7440c28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/5.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/5.png new file mode 100644 index 0000000..8be00b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/5.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/50.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/50.png new file mode 100644 index 0000000..67e8f83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/50.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/500.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/500.png new file mode 100644 index 0000000..65a0141 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/500.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/501.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/501.png new file mode 100644 index 0000000..9d658ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/501.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/502.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/502.png new file mode 100644 index 0000000..0d0cb21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/502.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/503.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/503.png new file mode 100644 index 0000000..dd695ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/503.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/504.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/504.png new file mode 100644 index 0000000..8eefd52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/504.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/505.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/505.png new file mode 100644 index 0000000..98e8aea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/505.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/506.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/506.png new file mode 100644 index 0000000..ea7c41d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/506.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/507.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/507.png new file mode 100644 index 0000000..102fc7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/507.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/508.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/508.png new file mode 100644 index 0000000..1281e69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/508.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/509.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/509.png new file mode 100644 index 0000000..647a8b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/509.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/51.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/51.png new file mode 100644 index 0000000..2c59a93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/51.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/510.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/510.png new file mode 100644 index 0000000..8894815 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/510.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/511.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/511.png new file mode 100644 index 0000000..866998d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/511.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/512.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/512.png new file mode 100644 index 0000000..b91bd96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/512.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/513.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/513.png new file mode 100644 index 0000000..c9fb566 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/513.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/514.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/514.png new file mode 100644 index 0000000..92a34c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/514.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/515.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/515.png new file mode 100644 index 0000000..4773e8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/515.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/516.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/516.png new file mode 100644 index 0000000..d61939b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/516.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/517.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/517.png new file mode 100644 index 0000000..9a28b15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/517.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/518.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/518.png new file mode 100644 index 0000000..f1d0d7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/518.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/519.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/519.png new file mode 100644 index 0000000..c576242 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/519.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/52.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/52.png new file mode 100644 index 0000000..7fa6aa0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/52.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/520.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/520.png new file mode 100644 index 0000000..e311a07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/520.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/521.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/521.png new file mode 100644 index 0000000..1f9ddd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/521.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/522.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/522.png new file mode 100644 index 0000000..3c77859 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/522.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/523.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/523.png new file mode 100644 index 0000000..61a7e2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/523.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/524.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/524.png new file mode 100644 index 0000000..ea324d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/524.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/525.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/525.png new file mode 100644 index 0000000..1caab1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/525.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/526.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/526.png new file mode 100644 index 0000000..dda63f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/526.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/527.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/527.png new file mode 100644 index 0000000..6447784 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/527.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/528.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/528.png new file mode 100644 index 0000000..c7a9098 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/528.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/529.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/529.png new file mode 100644 index 0000000..94e939c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/529.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/53.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/53.png new file mode 100644 index 0000000..bf6451b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/53.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/530.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/530.png new file mode 100644 index 0000000..a6befee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/530.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/531.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/531.png new file mode 100644 index 0000000..bcb1ed7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/531.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/532.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/532.png new file mode 100644 index 0000000..6cd4db5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/532.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/533.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/533.png new file mode 100644 index 0000000..3e59608 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/533.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/534.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/534.png new file mode 100644 index 0000000..c32eae8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/534.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/535.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/535.png new file mode 100644 index 0000000..d97ffe2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/535.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/536.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/536.png new file mode 100644 index 0000000..e85def8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/536.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/537.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/537.png new file mode 100644 index 0000000..69fbe3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/537.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/538.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/538.png new file mode 100644 index 0000000..431f651 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/538.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/539.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/539.png new file mode 100644 index 0000000..471dd18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/539.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/54.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/54.png new file mode 100644 index 0000000..710ecb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/54.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/540.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/540.png new file mode 100644 index 0000000..b711e87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/540.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/541.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/541.png new file mode 100644 index 0000000..6688996 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/541.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/542.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/542.png new file mode 100644 index 0000000..23b4474 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/542.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/543.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/543.png new file mode 100644 index 0000000..38cf0a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/543.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/544.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/544.png new file mode 100644 index 0000000..7d50216 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/544.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/545.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/545.png new file mode 100644 index 0000000..8ac337e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/545.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/546.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/546.png new file mode 100644 index 0000000..9206838 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/546.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/547.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/547.png new file mode 100644 index 0000000..c76fcb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/547.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/548.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/548.png new file mode 100644 index 0000000..6f82fd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/548.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/549.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/549.png new file mode 100644 index 0000000..4178347 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/549.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/55.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/55.png new file mode 100644 index 0000000..e671e0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/55.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/550.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/550.png new file mode 100644 index 0000000..ec5639a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/550.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/551.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/551.png new file mode 100644 index 0000000..1f63a0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/551.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/552.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/552.png new file mode 100644 index 0000000..ff284d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/552.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/553.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/553.png new file mode 100644 index 0000000..6edb216 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/553.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/554.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/554.png new file mode 100644 index 0000000..a6aca92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/554.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/555.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/555.png new file mode 100644 index 0000000..f91b816 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/555.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/556.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/556.png new file mode 100644 index 0000000..36ae4e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/556.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/557.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/557.png new file mode 100644 index 0000000..7801459 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/557.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/558.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/558.png new file mode 100644 index 0000000..6f7545d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/558.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/559.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/559.png new file mode 100644 index 0000000..80bb808 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/559.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/56.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/56.png new file mode 100644 index 0000000..0e210cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/56.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/560.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/560.png new file mode 100644 index 0000000..c1f8f6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/560.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/561.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/561.png new file mode 100644 index 0000000..7f32f84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/561.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/562.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/562.png new file mode 100644 index 0000000..acbbe52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/562.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/563.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/563.png new file mode 100644 index 0000000..13e5181 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/563.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/564.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/564.png new file mode 100644 index 0000000..4d5e263 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/564.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/565.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/565.png new file mode 100644 index 0000000..f91eadd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/565.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/566.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/566.png new file mode 100644 index 0000000..5022e36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/566.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/567.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/567.png new file mode 100644 index 0000000..bf2c183 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/567.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/568.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/568.png new file mode 100644 index 0000000..599b7c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/568.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/569.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/569.png new file mode 100644 index 0000000..bb28b84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/569.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/57.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/57.png new file mode 100644 index 0000000..e26115f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/57.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/570.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/570.png new file mode 100644 index 0000000..1dc8024 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/570.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/571.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/571.png new file mode 100644 index 0000000..6011eb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/571.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/572.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/572.png new file mode 100644 index 0000000..efeacf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/572.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/573.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/573.png new file mode 100644 index 0000000..9ce1a68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/573.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/574.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/574.png new file mode 100644 index 0000000..961d222 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/574.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/575.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/575.png new file mode 100644 index 0000000..6e4b241 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/575.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/576.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/576.png new file mode 100644 index 0000000..f51b041 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/576.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/577.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/577.png new file mode 100644 index 0000000..a97eb6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/577.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/578.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/578.png new file mode 100644 index 0000000..e483f03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/578.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/579.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/579.png new file mode 100644 index 0000000..332164a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/579.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/58.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/58.png new file mode 100644 index 0000000..f29078a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/58.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/580.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/580.png new file mode 100644 index 0000000..a369fb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/580.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/581.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/581.png new file mode 100644 index 0000000..54a14e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/581.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/582.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/582.png new file mode 100644 index 0000000..c7e198d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/582.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/583.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/583.png new file mode 100644 index 0000000..c807d18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/583.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/584.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/584.png new file mode 100644 index 0000000..5509ad9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/584.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/585.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/585.png new file mode 100644 index 0000000..1de1e7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/585.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/586.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/586.png new file mode 100644 index 0000000..407d771 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/586.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/587.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/587.png new file mode 100644 index 0000000..2270357 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/587.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/588.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/588.png new file mode 100644 index 0000000..f295336 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/588.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/589.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/589.png new file mode 100644 index 0000000..77c5237 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/589.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/59.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/59.png new file mode 100644 index 0000000..52da20e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/59.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/590.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/590.png new file mode 100644 index 0000000..29a19d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/590.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/591.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/591.png new file mode 100644 index 0000000..de667f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/591.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/592.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/592.png new file mode 100644 index 0000000..4119afd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/592.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/593.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/593.png new file mode 100644 index 0000000..323eb37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/593.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/594.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/594.png new file mode 100644 index 0000000..e1fec23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/594.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/595.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/595.png new file mode 100644 index 0000000..1272807 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/595.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/596.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/596.png new file mode 100644 index 0000000..741bf6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/596.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/597.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/597.png new file mode 100644 index 0000000..b8c851b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/597.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/598.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/598.png new file mode 100644 index 0000000..7f18d0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/598.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/599.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/599.png new file mode 100644 index 0000000..c0b1406 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/599.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/6.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/6.png new file mode 100644 index 0000000..29ea4eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/6.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/60.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/60.png new file mode 100644 index 0000000..b6c632f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/60.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/600.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/600.png new file mode 100644 index 0000000..b672521 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/600.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/601.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/601.png new file mode 100644 index 0000000..89fe3f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/601.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/602.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/602.png new file mode 100644 index 0000000..4dde4ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/602.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/603.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/603.png new file mode 100644 index 0000000..4241ea0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/603.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/604.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/604.png new file mode 100644 index 0000000..1915691 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/604.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/605.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/605.png new file mode 100644 index 0000000..22d1145 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/605.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/606.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/606.png new file mode 100644 index 0000000..7aba23b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/606.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/607.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/607.png new file mode 100644 index 0000000..c83ddfa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/607.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/608.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/608.png new file mode 100644 index 0000000..a66dca5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/608.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/609.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/609.png new file mode 100644 index 0000000..04caeff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/609.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/61.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/61.png new file mode 100644 index 0000000..c68def6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/61.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/610.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/610.png new file mode 100644 index 0000000..b1c93e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/610.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/611.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/611.png new file mode 100644 index 0000000..b3c70e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/611.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/612.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/612.png new file mode 100644 index 0000000..b228cd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/612.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/613.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/613.png new file mode 100644 index 0000000..84e06e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/613.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/614.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/614.png new file mode 100644 index 0000000..452f2da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/614.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/615.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/615.png new file mode 100644 index 0000000..168d372 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/615.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/616.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/616.png new file mode 100644 index 0000000..a1f6c94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/616.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/617.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/617.png new file mode 100644 index 0000000..3336d36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/617.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/618.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/618.png new file mode 100644 index 0000000..1dc24f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/618.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/619.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/619.png new file mode 100644 index 0000000..f18f98a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/619.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/62.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/62.png new file mode 100644 index 0000000..efd04fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/62.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/620.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/620.png new file mode 100644 index 0000000..95807a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/620.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/621.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/621.png new file mode 100644 index 0000000..a54ddbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/621.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/622.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/622.png new file mode 100644 index 0000000..86c5867 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/622.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/623.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/623.png new file mode 100644 index 0000000..cd93bab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/623.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/624.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/624.png new file mode 100644 index 0000000..8131490 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/624.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/625.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/625.png new file mode 100644 index 0000000..ba36503 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/625.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/626.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/626.png new file mode 100644 index 0000000..89e583a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/626.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/627.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/627.png new file mode 100644 index 0000000..b191f73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/627.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/628.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/628.png new file mode 100644 index 0000000..329519d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/628.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/629.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/629.png new file mode 100644 index 0000000..6df0b60 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/629.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/63.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/63.png new file mode 100644 index 0000000..cd4fa0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/63.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/630.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/630.png new file mode 100644 index 0000000..8b836d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/630.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/631.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/631.png new file mode 100644 index 0000000..a1112a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/631.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/632.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/632.png new file mode 100644 index 0000000..7cbaeff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/632.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/633.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/633.png new file mode 100644 index 0000000..d859011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/633.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/634.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/634.png new file mode 100644 index 0000000..c93141a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/634.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/635.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/635.png new file mode 100644 index 0000000..d6d3a4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/635.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/636.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/636.png new file mode 100644 index 0000000..3d8e14c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/636.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/637.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/637.png new file mode 100644 index 0000000..23bd0a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/637.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/638.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/638.png new file mode 100644 index 0000000..c11c520 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/638.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/639.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/639.png new file mode 100644 index 0000000..d6c4f3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/639.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/64.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/64.png new file mode 100644 index 0000000..e57a42b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/64.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/640.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/640.png new file mode 100644 index 0000000..b9ff61f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/640.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/641.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/641.png new file mode 100644 index 0000000..ea089af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/641.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/642.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/642.png new file mode 100644 index 0000000..e1c6afd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/642.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/643.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/643.png new file mode 100644 index 0000000..97d478a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/643.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/644.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/644.png new file mode 100644 index 0000000..b5ce64f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/644.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/645.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/645.png new file mode 100644 index 0000000..814ef35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/645.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/646.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/646.png new file mode 100644 index 0000000..ca94232 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/646.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/647.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/647.png new file mode 100644 index 0000000..8ffb68b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/647.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/648.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/648.png new file mode 100644 index 0000000..6fe19ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/648.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/649.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/649.png new file mode 100644 index 0000000..fa46f92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/649.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/65.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/65.png new file mode 100644 index 0000000..100245b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/65.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/650.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/650.png new file mode 100644 index 0000000..07bc857 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/650.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/651.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/651.png new file mode 100644 index 0000000..a0ab69e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/651.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/652.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/652.png new file mode 100644 index 0000000..a2a7f2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/652.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/653.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/653.png new file mode 100644 index 0000000..5fea47f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/653.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/654.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/654.png new file mode 100644 index 0000000..cd2a71d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/654.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/655.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/655.png new file mode 100644 index 0000000..303cf71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/655.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/656.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/656.png new file mode 100644 index 0000000..c22aeed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/656.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/657.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/657.png new file mode 100644 index 0000000..801d441 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/657.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/658.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/658.png new file mode 100644 index 0000000..c575499 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/658.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/659.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/659.png new file mode 100644 index 0000000..8360286 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/659.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/66.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/66.png new file mode 100644 index 0000000..3a3e0a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/66.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/660.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/660.png new file mode 100644 index 0000000..a66ec9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/660.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/661.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/661.png new file mode 100644 index 0000000..6175a06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/661.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/662.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/662.png new file mode 100644 index 0000000..72758d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/662.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/663.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/663.png new file mode 100644 index 0000000..a92822f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/663.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/664.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/664.png new file mode 100644 index 0000000..57db608 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/664.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/665.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/665.png new file mode 100644 index 0000000..5a0bbe4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/665.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/666.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/666.png new file mode 100644 index 0000000..d40ef4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/666.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/667.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/667.png new file mode 100644 index 0000000..a25814c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/667.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/668.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/668.png new file mode 100644 index 0000000..6acfaf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/668.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/669.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/669.png new file mode 100644 index 0000000..942b932 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/669.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/67.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/67.png new file mode 100644 index 0000000..84d51dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/67.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/670.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/670.png new file mode 100644 index 0000000..0080e62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/670.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/671.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/671.png new file mode 100644 index 0000000..fd12bbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/671.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/672.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/672.png new file mode 100644 index 0000000..865aad8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/672.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/673.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/673.png new file mode 100644 index 0000000..72be4b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/673.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/674.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/674.png new file mode 100644 index 0000000..1a1f356 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/674.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/675.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/675.png new file mode 100644 index 0000000..11f5869 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/675.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/676.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/676.png new file mode 100644 index 0000000..f6be343 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/676.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/677.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/677.png new file mode 100644 index 0000000..36a6720 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/677.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/678.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/678.png new file mode 100644 index 0000000..d4bb05e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/678.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/679.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/679.png new file mode 100644 index 0000000..90ffe8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/679.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/68.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/68.png new file mode 100644 index 0000000..45cf38d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/68.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/680.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/680.png new file mode 100644 index 0000000..bac45f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/680.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/681.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/681.png new file mode 100644 index 0000000..1f686da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/681.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/682.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/682.png new file mode 100644 index 0000000..ff04210 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/682.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/683.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/683.png new file mode 100644 index 0000000..e20f21a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/683.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/684.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/684.png new file mode 100644 index 0000000..91a571e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/684.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/685.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/685.png new file mode 100644 index 0000000..cf125e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/685.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/686.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/686.png new file mode 100644 index 0000000..a6d028f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/686.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/687.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/687.png new file mode 100644 index 0000000..72baa39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/687.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/688.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/688.png new file mode 100644 index 0000000..c90069c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/688.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/689.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/689.png new file mode 100644 index 0000000..ff8800e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/689.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/69.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/69.png new file mode 100644 index 0000000..ec206a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/69.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/690.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/690.png new file mode 100644 index 0000000..2ad3d3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/690.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/691.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/691.png new file mode 100644 index 0000000..a283d1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/691.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/692.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/692.png new file mode 100644 index 0000000..943ac40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/692.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/693.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/693.png new file mode 100644 index 0000000..d93933c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/693.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/694.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/694.png new file mode 100644 index 0000000..1397e44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/694.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/695.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/695.png new file mode 100644 index 0000000..82968eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/695.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/696.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/696.png new file mode 100644 index 0000000..c4a1915 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/696.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/697.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/697.png new file mode 100644 index 0000000..a1c9a5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/697.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/698.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/698.png new file mode 100644 index 0000000..8f2cf67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/698.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/699.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/699.png new file mode 100644 index 0000000..64fe5a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/699.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/7.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/7.png new file mode 100644 index 0000000..d2e6143 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/7.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/70.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/70.png new file mode 100644 index 0000000..8d9a497 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/70.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/700.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/700.png new file mode 100644 index 0000000..11bf97e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/700.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/701.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/701.png new file mode 100644 index 0000000..f760176 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/701.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/702.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/702.png new file mode 100644 index 0000000..cba1da3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/702.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/703.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/703.png new file mode 100644 index 0000000..c1a22d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/703.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/704.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/704.png new file mode 100644 index 0000000..bbda218 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/704.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/705.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/705.png new file mode 100644 index 0000000..2e918a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/705.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/706.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/706.png new file mode 100644 index 0000000..49c9b0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/706.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/707.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/707.png new file mode 100644 index 0000000..6ed0475 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/707.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/708.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/708.png new file mode 100644 index 0000000..bc4f160 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/708.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/709.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/709.png new file mode 100644 index 0000000..ca9f853 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/709.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/71.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/71.png new file mode 100644 index 0000000..b8dcdc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/71.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/710.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/710.png new file mode 100644 index 0000000..5551fc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/710.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/711.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/711.png new file mode 100644 index 0000000..dbe1ade Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/711.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/712.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/712.png new file mode 100644 index 0000000..b96970d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/712.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/713.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/713.png new file mode 100644 index 0000000..e67ecfe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/713.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/714.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/714.png new file mode 100644 index 0000000..e1308c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/714.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/715.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/715.png new file mode 100644 index 0000000..1c9e296 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/715.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/716.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/716.png new file mode 100644 index 0000000..5939b3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/716.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/717.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/717.png new file mode 100644 index 0000000..c49eae9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/717.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/718.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/718.png new file mode 100644 index 0000000..8a5af07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/718.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/719.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/719.png new file mode 100644 index 0000000..96318c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/719.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/72.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/72.png new file mode 100644 index 0000000..0f425a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/72.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/720.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/720.png new file mode 100644 index 0000000..bbe57c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/720.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/721.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/721.png new file mode 100644 index 0000000..ac134a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/721.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/722.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/722.png new file mode 100644 index 0000000..02b2a1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/722.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/723.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/723.png new file mode 100644 index 0000000..3b98c99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/723.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/724.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/724.png new file mode 100644 index 0000000..f16d554 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/724.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/725.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/725.png new file mode 100644 index 0000000..24c5600 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/725.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/726.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/726.png new file mode 100644 index 0000000..c142c6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/726.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/727.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/727.png new file mode 100644 index 0000000..45862bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/727.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/728.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/728.png new file mode 100644 index 0000000..7d52d31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/728.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/729.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/729.png new file mode 100644 index 0000000..e638e4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/729.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/73.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/73.png new file mode 100644 index 0000000..2884ca8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/73.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/730.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/730.png new file mode 100644 index 0000000..4e80468 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/730.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/731.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/731.png new file mode 100644 index 0000000..793e3a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/731.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/732.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/732.png new file mode 100644 index 0000000..4abc5cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/732.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/733.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/733.png new file mode 100644 index 0000000..e063aec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/733.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/734.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/734.png new file mode 100644 index 0000000..a41e411 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/734.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/735.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/735.png new file mode 100644 index 0000000..5842ea5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/735.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/736.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/736.png new file mode 100644 index 0000000..d724b85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/736.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/737.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/737.png new file mode 100644 index 0000000..e1402bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/737.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/738.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/738.png new file mode 100644 index 0000000..27572a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/738.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/739.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/739.png new file mode 100644 index 0000000..0f1870d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/739.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/74.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/74.png new file mode 100644 index 0000000..c085893 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/74.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/740.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/740.png new file mode 100644 index 0000000..e49ce63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/740.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/741.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/741.png new file mode 100644 index 0000000..90992f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/741.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/742.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/742.png new file mode 100644 index 0000000..1416bf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/742.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/743.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/743.png new file mode 100644 index 0000000..a382c28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/743.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/744.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/744.png new file mode 100644 index 0000000..a0a82b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/744.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/745.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/745.png new file mode 100644 index 0000000..55a8cdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/745.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/746.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/746.png new file mode 100644 index 0000000..ef57b16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/746.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/747.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/747.png new file mode 100644 index 0000000..d8e4bcb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/747.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/748.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/748.png new file mode 100644 index 0000000..cb6db61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/748.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/749.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/749.png new file mode 100644 index 0000000..5b1b44a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/749.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/75.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/75.png new file mode 100644 index 0000000..0d7378d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/75.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/750.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/750.png new file mode 100644 index 0000000..551d28e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/750.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/751.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/751.png new file mode 100644 index 0000000..15df03c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/751.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/752.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/752.png new file mode 100644 index 0000000..72ff1cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/752.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/753.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/753.png new file mode 100644 index 0000000..4e31844 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/753.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/754.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/754.png new file mode 100644 index 0000000..a99a4e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/754.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/755.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/755.png new file mode 100644 index 0000000..21e5b82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/755.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/756.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/756.png new file mode 100644 index 0000000..8eacee4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/756.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/757.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/757.png new file mode 100644 index 0000000..2559339 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/757.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/758.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/758.png new file mode 100644 index 0000000..a4a31aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/758.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/759.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/759.png new file mode 100644 index 0000000..8f5633b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/759.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/76.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/76.png new file mode 100644 index 0000000..1c7e346 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/76.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/760.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/760.png new file mode 100644 index 0000000..10f3f2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/760.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/761.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/761.png new file mode 100644 index 0000000..fc64f1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/761.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/762.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/762.png new file mode 100644 index 0000000..c1bdd0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/762.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/763.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/763.png new file mode 100644 index 0000000..8a76b98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/763.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/764.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/764.png new file mode 100644 index 0000000..d6a4318 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/764.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/765.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/765.png new file mode 100644 index 0000000..ec52d06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/765.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/766.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/766.png new file mode 100644 index 0000000..0f7e109 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/766.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/767.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/767.png new file mode 100644 index 0000000..f6fd071 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/767.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/768.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/768.png new file mode 100644 index 0000000..178b8d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/768.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/769.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/769.png new file mode 100644 index 0000000..795ad82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/769.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/77.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/77.png new file mode 100644 index 0000000..0d5e48c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/77.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/770.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/770.png new file mode 100644 index 0000000..e1c9f69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/770.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/771.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/771.png new file mode 100644 index 0000000..077d40b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/771.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/772.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/772.png new file mode 100644 index 0000000..d8e93a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/772.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/773.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/773.png new file mode 100644 index 0000000..5c45d63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/773.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/774.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/774.png new file mode 100644 index 0000000..a5dee16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/774.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/775.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/775.png new file mode 100644 index 0000000..0d97612 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/775.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/776.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/776.png new file mode 100644 index 0000000..ac0605f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/776.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/777.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/777.png new file mode 100644 index 0000000..0a243b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/777.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/778.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/778.png new file mode 100644 index 0000000..eeba2af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/778.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/779.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/779.png new file mode 100644 index 0000000..283ffc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/779.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/78.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/78.png new file mode 100644 index 0000000..018f17a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/78.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/780.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/780.png new file mode 100644 index 0000000..c82bf57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/780.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/781.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/781.png new file mode 100644 index 0000000..6d28d09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/781.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/782.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/782.png new file mode 100644 index 0000000..aa8c530 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/782.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/783.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/783.png new file mode 100644 index 0000000..6e86838 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/783.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/784.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/784.png new file mode 100644 index 0000000..2a0f0fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/784.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/785.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/785.png new file mode 100644 index 0000000..997732e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/785.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/786.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/786.png new file mode 100644 index 0000000..af802e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/786.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/787.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/787.png new file mode 100644 index 0000000..631bc9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/787.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/788.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/788.png new file mode 100644 index 0000000..8a76605 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/788.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/789.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/789.png new file mode 100644 index 0000000..5b88011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/789.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/79.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/79.png new file mode 100644 index 0000000..1188f0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/79.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/790.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/790.png new file mode 100644 index 0000000..cd434c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/790.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/791.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/791.png new file mode 100644 index 0000000..8322e70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/791.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/792.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/792.png new file mode 100644 index 0000000..4f47615 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/792.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/793.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/793.png new file mode 100644 index 0000000..36c900a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/793.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/794.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/794.png new file mode 100644 index 0000000..d3720a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/794.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/795.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/795.png new file mode 100644 index 0000000..9efcf16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/795.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/796.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/796.png new file mode 100644 index 0000000..0897b5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/796.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/797.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/797.png new file mode 100644 index 0000000..19aae90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/797.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/798.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/798.png new file mode 100644 index 0000000..d36b78f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/798.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/799.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/799.png new file mode 100644 index 0000000..3e56e99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/799.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/8.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/8.png new file mode 100644 index 0000000..6f71011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/8.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/80.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/80.png new file mode 100644 index 0000000..da52cdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/80.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/800.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/800.png new file mode 100644 index 0000000..002f665 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/800.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/801.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/801.png new file mode 100644 index 0000000..467c05b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/801.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/802.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/802.png new file mode 100644 index 0000000..29baa23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/802.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/803.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/803.png new file mode 100644 index 0000000..f00491c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/803.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/804.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/804.png new file mode 100644 index 0000000..660b1f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/804.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/805.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/805.png new file mode 100644 index 0000000..23c8cdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/805.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/806.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/806.png new file mode 100644 index 0000000..6755a1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/806.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/807.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/807.png new file mode 100644 index 0000000..57a9809 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/807.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/808.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/808.png new file mode 100644 index 0000000..b9eabb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/808.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/809.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/809.png new file mode 100644 index 0000000..2d627e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/809.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/81.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/81.png new file mode 100644 index 0000000..681bf61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/81.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/810.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/810.png new file mode 100644 index 0000000..9a14c8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/810.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/811.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/811.png new file mode 100644 index 0000000..fcf7c3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/811.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/812.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/812.png new file mode 100644 index 0000000..a388e9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/812.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/813.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/813.png new file mode 100644 index 0000000..6a57d9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/813.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/814.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/814.png new file mode 100644 index 0000000..cce4e57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/814.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/815.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/815.png new file mode 100644 index 0000000..9606df6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/815.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/816.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/816.png new file mode 100644 index 0000000..9575bd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/816.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/817.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/817.png new file mode 100644 index 0000000..c5c3d19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/817.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/818.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/818.png new file mode 100644 index 0000000..fba3dde Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/818.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/819.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/819.png new file mode 100644 index 0000000..ce208b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/819.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/82.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/82.png new file mode 100644 index 0000000..098f2c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/82.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/820.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/820.png new file mode 100644 index 0000000..e3ee6fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/820.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/821.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/821.png new file mode 100644 index 0000000..d82daf6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/821.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/822.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/822.png new file mode 100644 index 0000000..467e86e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/822.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/823.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/823.png new file mode 100644 index 0000000..16931c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/823.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/824.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/824.png new file mode 100644 index 0000000..8ea5837 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/824.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/825.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/825.png new file mode 100644 index 0000000..4e4060d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/825.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/826.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/826.png new file mode 100644 index 0000000..27190ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/826.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/827.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/827.png new file mode 100644 index 0000000..def616e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/827.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/828.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/828.png new file mode 100644 index 0000000..6b18c52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/828.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/829.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/829.png new file mode 100644 index 0000000..88217d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/829.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/83.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/83.png new file mode 100644 index 0000000..a5676df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/83.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/830.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/830.png new file mode 100644 index 0000000..35e1eae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/830.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/831.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/831.png new file mode 100644 index 0000000..36db517 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/831.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/832.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/832.png new file mode 100644 index 0000000..ee8cdbe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/832.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/833.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/833.png new file mode 100644 index 0000000..7126ac0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/833.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/834.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/834.png new file mode 100644 index 0000000..a02b0c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/834.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/835.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/835.png new file mode 100644 index 0000000..22ecf89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/835.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/836.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/836.png new file mode 100644 index 0000000..407e2c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/836.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/837.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/837.png new file mode 100644 index 0000000..3f6f3c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/837.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/838.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/838.png new file mode 100644 index 0000000..f1355a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/838.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/839.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/839.png new file mode 100644 index 0000000..6cd37a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/839.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/84.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/84.png new file mode 100644 index 0000000..c355725 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/84.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/840.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/840.png new file mode 100644 index 0000000..36e9e69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/840.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/841.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/841.png new file mode 100644 index 0000000..7147ac7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/841.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/842.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/842.png new file mode 100644 index 0000000..2fd656c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/842.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/843.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/843.png new file mode 100644 index 0000000..6502fba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/843.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/844.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/844.png new file mode 100644 index 0000000..c2cf2d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/844.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/845.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/845.png new file mode 100644 index 0000000..d763c46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/845.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/846.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/846.png new file mode 100644 index 0000000..436d380 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/846.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/847.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/847.png new file mode 100644 index 0000000..4c2413f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/847.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/848.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/848.png new file mode 100644 index 0000000..551d140 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/848.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/849.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/849.png new file mode 100644 index 0000000..992afa6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/849.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/85.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/85.png new file mode 100644 index 0000000..639f01c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/85.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/850.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/850.png new file mode 100644 index 0000000..29fcd99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/850.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/851.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/851.png new file mode 100644 index 0000000..c151669 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/851.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/852.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/852.png new file mode 100644 index 0000000..c617417 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/852.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/853.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/853.png new file mode 100644 index 0000000..b8187f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/853.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/854.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/854.png new file mode 100644 index 0000000..96c1bb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/854.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/855.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/855.png new file mode 100644 index 0000000..279bdcb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/855.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/856.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/856.png new file mode 100644 index 0000000..1cd5eea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/856.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/857.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/857.png new file mode 100644 index 0000000..cd59b09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/857.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/858.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/858.png new file mode 100644 index 0000000..dcd4413 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/858.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/859.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/859.png new file mode 100644 index 0000000..ffcfa99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/859.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/86.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/86.png new file mode 100644 index 0000000..866a39b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/86.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/860.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/860.png new file mode 100644 index 0000000..67ac13d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/860.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/861.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/861.png new file mode 100644 index 0000000..75e56f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/861.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/862.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/862.png new file mode 100644 index 0000000..48fa4c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/862.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/863.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/863.png new file mode 100644 index 0000000..b4d8a1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/863.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/864.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/864.png new file mode 100644 index 0000000..3ee1cb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/864.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/865.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/865.png new file mode 100644 index 0000000..de7ea49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/865.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/866.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/866.png new file mode 100644 index 0000000..9c81124 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/866.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/867.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/867.png new file mode 100644 index 0000000..776beb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/867.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/868.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/868.png new file mode 100644 index 0000000..e7d37fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/868.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/869.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/869.png new file mode 100644 index 0000000..bd0008c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/869.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/87.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/87.png new file mode 100644 index 0000000..d32f62d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/87.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/870.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/870.png new file mode 100644 index 0000000..5f3b1e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/870.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/871.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/871.png new file mode 100644 index 0000000..e069a0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/871.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/872.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/872.png new file mode 100644 index 0000000..dba0968 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/872.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/873.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/873.png new file mode 100644 index 0000000..8056e16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/873.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/874.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/874.png new file mode 100644 index 0000000..df33557 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/874.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/875.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/875.png new file mode 100644 index 0000000..51a7b86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/875.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/876.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/876.png new file mode 100644 index 0000000..b8b3d5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/876.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/877.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/877.png new file mode 100644 index 0000000..f84bd7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/877.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/878.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/878.png new file mode 100644 index 0000000..64de97a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/878.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/879.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/879.png new file mode 100644 index 0000000..0b046f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/879.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/88.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/88.png new file mode 100644 index 0000000..de97495 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/88.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/880.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/880.png new file mode 100644 index 0000000..4e72817 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/880.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/881.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/881.png new file mode 100644 index 0000000..67da7fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/881.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/882.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/882.png new file mode 100644 index 0000000..40a2de4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/882.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/883.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/883.png new file mode 100644 index 0000000..ff6c550 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/883.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/884.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/884.png new file mode 100644 index 0000000..94e2829 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/884.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/885.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/885.png new file mode 100644 index 0000000..a0b7983 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/885.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/886.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/886.png new file mode 100644 index 0000000..b9e1282 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/886.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/887.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/887.png new file mode 100644 index 0000000..97a7de9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/887.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/888.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/888.png new file mode 100644 index 0000000..f752b2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/888.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/889.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/889.png new file mode 100644 index 0000000..2fa6964 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/889.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/89.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/89.png new file mode 100644 index 0000000..aad35d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/89.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/890.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/890.png new file mode 100644 index 0000000..fc4550e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/890.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/891.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/891.png new file mode 100644 index 0000000..479fa34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/891.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/892.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/892.png new file mode 100644 index 0000000..1070748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/892.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/893.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/893.png new file mode 100644 index 0000000..5c07cb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/893.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/894.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/894.png new file mode 100644 index 0000000..4e47387 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/894.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/895.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/895.png new file mode 100644 index 0000000..539e537 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/895.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/896.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/896.png new file mode 100644 index 0000000..853d4e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/896.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/897.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/897.png new file mode 100644 index 0000000..435b699 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/897.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/898.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/898.png new file mode 100644 index 0000000..6b15ffc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/898.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/899.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/899.png new file mode 100644 index 0000000..c5e9663 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/899.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/9.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/9.png new file mode 100644 index 0000000..0338f53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/9.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/90.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/90.png new file mode 100644 index 0000000..358d9dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/90.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/900.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/900.png new file mode 100644 index 0000000..49c49ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/900.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/901.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/901.png new file mode 100644 index 0000000..6cfeac4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/901.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/902.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/902.png new file mode 100644 index 0000000..1b3ca49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/902.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/903.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/903.png new file mode 100644 index 0000000..01d6c8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/903.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/904.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/904.png new file mode 100644 index 0000000..be2eab0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/904.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/905.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/905.png new file mode 100644 index 0000000..15fc851 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/905.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/906.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/906.png new file mode 100644 index 0000000..713441f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/906.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/907.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/907.png new file mode 100644 index 0000000..b7d6ca5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/907.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/908.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/908.png new file mode 100644 index 0000000..8ad2a09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/908.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/909.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/909.png new file mode 100644 index 0000000..064a12c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/909.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/91.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/91.png new file mode 100644 index 0000000..95ffaa0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/91.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/910.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/910.png new file mode 100644 index 0000000..e52a01f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/910.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/911.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/911.png new file mode 100644 index 0000000..df35968 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/911.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/912.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/912.png new file mode 100644 index 0000000..09a0056 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/912.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/913.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/913.png new file mode 100644 index 0000000..40eaf4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/913.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/914.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/914.png new file mode 100644 index 0000000..0131565 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/914.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/915.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/915.png new file mode 100644 index 0000000..783f113 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/915.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/916.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/916.png new file mode 100644 index 0000000..d6241c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/916.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/917.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/917.png new file mode 100644 index 0000000..96dd8d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/917.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/918.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/918.png new file mode 100644 index 0000000..3151e28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/918.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/919.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/919.png new file mode 100644 index 0000000..4a89fdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/919.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/92.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/92.png new file mode 100644 index 0000000..bea6e35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/92.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/920.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/920.png new file mode 100644 index 0000000..ce8fdac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/920.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/921.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/921.png new file mode 100644 index 0000000..97d5bee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/921.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/922.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/922.png new file mode 100644 index 0000000..6367b67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/922.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/923.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/923.png new file mode 100644 index 0000000..bbf8587 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/923.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/924.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/924.png new file mode 100644 index 0000000..12f903c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/924.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/925.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/925.png new file mode 100644 index 0000000..e3d961f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/925.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/926.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/926.png new file mode 100644 index 0000000..89289dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/926.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/927.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/927.png new file mode 100644 index 0000000..a981e65 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/927.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/928.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/928.png new file mode 100644 index 0000000..2e35a2a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/928.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/929.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/929.png new file mode 100644 index 0000000..e159374 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/929.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/93.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/93.png new file mode 100644 index 0000000..e719d17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/93.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/930.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/930.png new file mode 100644 index 0000000..15c7818 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/930.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/931.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/931.png new file mode 100644 index 0000000..3088299 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/931.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/932.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/932.png new file mode 100644 index 0000000..86ca8b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/932.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/933.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/933.png new file mode 100644 index 0000000..26f076a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/933.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/934.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/934.png new file mode 100644 index 0000000..3dc07f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/934.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/935.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/935.png new file mode 100644 index 0000000..246adbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/935.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/936.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/936.png new file mode 100644 index 0000000..690533e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/936.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/937.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/937.png new file mode 100644 index 0000000..899ca28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/937.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/938.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/938.png new file mode 100644 index 0000000..33f7219 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/938.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/939.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/939.png new file mode 100644 index 0000000..350386c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/939.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/94.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/94.png new file mode 100644 index 0000000..13cbcdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/94.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/940.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/940.png new file mode 100644 index 0000000..0526549 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/940.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/941.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/941.png new file mode 100644 index 0000000..3d88192 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/941.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/942.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/942.png new file mode 100644 index 0000000..15494fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/942.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/943.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/943.png new file mode 100644 index 0000000..6e9c607 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/943.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/944.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/944.png new file mode 100644 index 0000000..16a4a4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/944.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/945.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/945.png new file mode 100644 index 0000000..483a8f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/945.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/946.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/946.png new file mode 100644 index 0000000..70a0cf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/946.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/947.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/947.png new file mode 100644 index 0000000..fb41a21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/947.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/948.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/948.png new file mode 100644 index 0000000..e222185 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/948.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/949.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/949.png new file mode 100644 index 0000000..8a336ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/949.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/95.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/95.png new file mode 100644 index 0000000..68417f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/95.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/950.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/950.png new file mode 100644 index 0000000..d3dd27a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/950.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/951.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/951.png new file mode 100644 index 0000000..8197f6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/951.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/952.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/952.png new file mode 100644 index 0000000..d7233e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/952.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/953.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/953.png new file mode 100644 index 0000000..ecdf989 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/953.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/954.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/954.png new file mode 100644 index 0000000..4f53528 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/954.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/955.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/955.png new file mode 100644 index 0000000..1966813 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/955.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/956.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/956.png new file mode 100644 index 0000000..e7fc091 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/956.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/957.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/957.png new file mode 100644 index 0000000..a4bea75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/957.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/958.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/958.png new file mode 100644 index 0000000..f7dc505 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/958.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/959.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/959.png new file mode 100644 index 0000000..ad9ce5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/959.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/96.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/96.png new file mode 100644 index 0000000..aa8d263 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/96.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/960.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/960.png new file mode 100644 index 0000000..c3ee24b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/960.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/961.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/961.png new file mode 100644 index 0000000..c76b682 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/961.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/962.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/962.png new file mode 100644 index 0000000..6b833e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/962.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/963.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/963.png new file mode 100644 index 0000000..484705d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/963.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/964.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/964.png new file mode 100644 index 0000000..12b5d36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/964.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/965.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/965.png new file mode 100644 index 0000000..091119d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/965.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/966.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/966.png new file mode 100644 index 0000000..6897b61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/966.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/967.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/967.png new file mode 100644 index 0000000..409a1b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/967.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/968.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/968.png new file mode 100644 index 0000000..a0b1a04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/968.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/969.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/969.png new file mode 100644 index 0000000..31067ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/969.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/97.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/97.png new file mode 100644 index 0000000..e2dbe32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/97.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/970.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/970.png new file mode 100644 index 0000000..f22960b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/970.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/971.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/971.png new file mode 100644 index 0000000..9d619a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/971.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/972.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/972.png new file mode 100644 index 0000000..cad6b49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/972.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/973.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/973.png new file mode 100644 index 0000000..7df4bca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/973.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/974.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/974.png new file mode 100644 index 0000000..fe84f88 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/974.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/975.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/975.png new file mode 100644 index 0000000..0308fe9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/975.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/976.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/976.png new file mode 100644 index 0000000..8cd9e5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/976.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/977.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/977.png new file mode 100644 index 0000000..8bc7e75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/977.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/978.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/978.png new file mode 100644 index 0000000..bda52e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/978.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/979.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/979.png new file mode 100644 index 0000000..11bdd0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/979.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/98.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/98.png new file mode 100644 index 0000000..2a930d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/98.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/980.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/980.png new file mode 100644 index 0000000..c4ae511 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/980.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/981.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/981.png new file mode 100644 index 0000000..be02360 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/981.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/982.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/982.png new file mode 100644 index 0000000..7a24c86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/982.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/983.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/983.png new file mode 100644 index 0000000..103f453 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/983.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/984.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/984.png new file mode 100644 index 0000000..c5604a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/984.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/985.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/985.png new file mode 100644 index 0000000..2bf84a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/985.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/986.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/986.png new file mode 100644 index 0000000..d62cec2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/986.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/987.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/987.png new file mode 100644 index 0000000..152e0e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/987.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/988.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/988.png new file mode 100644 index 0000000..64c8714 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/988.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/989.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/989.png new file mode 100644 index 0000000..3456096 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/989.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/99.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/99.png new file mode 100644 index 0000000..de81d26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/99.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/990.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/990.png new file mode 100644 index 0000000..19b19c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/990.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/991.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/991.png new file mode 100644 index 0000000..d6820e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/991.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/992.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/992.png new file mode 100644 index 0000000..dbaa36a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/992.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/993.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/993.png new file mode 100644 index 0000000..b3c9df7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/993.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/994.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/994.png new file mode 100644 index 0000000..ad2b048 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/994.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/995.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/995.png new file mode 100644 index 0000000..607c067 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/995.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/996.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/996.png new file mode 100644 index 0000000..be983cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/996.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/997.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/997.png new file mode 100644 index 0000000..c7787fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/997.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/998.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/998.png new file mode 100644 index 0000000..a46cb66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/998.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/999.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/999.png new file mode 100644 index 0000000..56aba11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/neg/999.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/0.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/0.png new file mode 100644 index 0000000..c10ac7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/0.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1.png new file mode 100644 index 0000000..6cd663c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/10.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/10.png new file mode 100644 index 0000000..a023b03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/10.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/100.png new file mode 100644 index 0000000..21c3165 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1000.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1000.png new file mode 100644 index 0000000..03e6288 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1000.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1001.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1001.png new file mode 100644 index 0000000..be5a183 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1001.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1002.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1002.png new file mode 100644 index 0000000..af7bfb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1002.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1003.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1003.png new file mode 100644 index 0000000..8446d66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1003.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1004.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1004.png new file mode 100644 index 0000000..bd70383 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1004.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1005.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1005.png new file mode 100644 index 0000000..ccd69e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1005.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1006.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1006.png new file mode 100644 index 0000000..3e539a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1006.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1007.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1007.png new file mode 100644 index 0000000..368a54d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1007.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1008.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1008.png new file mode 100644 index 0000000..c6312ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1008.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1009.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1009.png new file mode 100644 index 0000000..517dc15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1009.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/101.png new file mode 100644 index 0000000..4049136 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1010.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1010.png new file mode 100644 index 0000000..4898522 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1010.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1011.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1011.png new file mode 100644 index 0000000..a8b1538 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1011.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1012.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1012.png new file mode 100644 index 0000000..9388ccc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1012.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1013.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1013.png new file mode 100644 index 0000000..1ffb815 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1013.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1014.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1014.png new file mode 100644 index 0000000..6b06f96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1014.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1015.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1015.png new file mode 100644 index 0000000..ceb0e31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1015.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1016.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1016.png new file mode 100644 index 0000000..fc4081d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1016.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1017.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1017.png new file mode 100644 index 0000000..dd4f55c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1017.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1018.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1018.png new file mode 100644 index 0000000..07e75a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1018.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1019.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1019.png new file mode 100644 index 0000000..d9ff7dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1019.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/102.png new file mode 100644 index 0000000..9d2ff1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1020.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1020.png new file mode 100644 index 0000000..e5eb169 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1020.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1021.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1021.png new file mode 100644 index 0000000..51358d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1021.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1022.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1022.png new file mode 100644 index 0000000..26f8cc2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1022.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1023.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1023.png new file mode 100644 index 0000000..93cc4e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1023.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1024.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1024.png new file mode 100644 index 0000000..8492c8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1024.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1025.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1025.png new file mode 100644 index 0000000..2c6af31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1025.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1026.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1026.png new file mode 100644 index 0000000..0ace763 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1026.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1027.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1027.png new file mode 100644 index 0000000..05e2683 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1027.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1028.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1028.png new file mode 100644 index 0000000..adc270c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1028.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1029.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1029.png new file mode 100644 index 0000000..7ad119a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1029.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/103.png new file mode 100644 index 0000000..6d650e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1030.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1030.png new file mode 100644 index 0000000..f86add6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1030.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1031.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1031.png new file mode 100644 index 0000000..e8a3e5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1031.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1032.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1032.png new file mode 100644 index 0000000..fd8d04c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1032.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1033.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1033.png new file mode 100644 index 0000000..f806c5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1033.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1034.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1034.png new file mode 100644 index 0000000..71fbfe9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1034.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1035.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1035.png new file mode 100644 index 0000000..b214105 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1035.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1036.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1036.png new file mode 100644 index 0000000..88bd64f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1036.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1037.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1037.png new file mode 100644 index 0000000..6f81587 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1037.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1038.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1038.png new file mode 100644 index 0000000..c47827f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1038.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1039.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1039.png new file mode 100644 index 0000000..42a2d7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1039.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/104.png new file mode 100644 index 0000000..85d1cc3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1040.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1040.png new file mode 100644 index 0000000..1780a2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1040.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1041.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1041.png new file mode 100644 index 0000000..0b8c323 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1041.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1042.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1042.png new file mode 100644 index 0000000..d5ce148 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1042.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1043.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1043.png new file mode 100644 index 0000000..8cf8e2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1043.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1044.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1044.png new file mode 100644 index 0000000..58bd075 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1044.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1045.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1045.png new file mode 100644 index 0000000..3fda656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1045.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1046.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1046.png new file mode 100644 index 0000000..f8adce0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1046.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1047.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1047.png new file mode 100644 index 0000000..094423e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1047.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1048.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1048.png new file mode 100644 index 0000000..4cdddbd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1048.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1049.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1049.png new file mode 100644 index 0000000..bc37c23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1049.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/105.png new file mode 100644 index 0000000..a76205e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1050.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1050.png new file mode 100644 index 0000000..e37a815 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1050.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1051.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1051.png new file mode 100644 index 0000000..9f43d47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1051.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1052.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1052.png new file mode 100644 index 0000000..6e962f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1052.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1053.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1053.png new file mode 100644 index 0000000..a092f07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1053.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1054.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1054.png new file mode 100644 index 0000000..c8aab79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1054.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1055.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1055.png new file mode 100644 index 0000000..66e7213 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1055.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1056.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1056.png new file mode 100644 index 0000000..bc63ec8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1056.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1057.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1057.png new file mode 100644 index 0000000..4352450 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1057.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1058.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1058.png new file mode 100644 index 0000000..22767ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1058.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1059.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1059.png new file mode 100644 index 0000000..aafeff9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1059.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/106.png new file mode 100644 index 0000000..785f7e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1060.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1060.png new file mode 100644 index 0000000..ea8d6c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1060.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1061.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1061.png new file mode 100644 index 0000000..bbd277d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1061.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1062.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1062.png new file mode 100644 index 0000000..5dfe9a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1062.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1063.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1063.png new file mode 100644 index 0000000..bb6b1c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1063.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1064.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1064.png new file mode 100644 index 0000000..67d3e8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1064.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1065.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1065.png new file mode 100644 index 0000000..76cdec2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1065.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1066.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1066.png new file mode 100644 index 0000000..21a3a3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1066.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1067.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1067.png new file mode 100644 index 0000000..30d35d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1067.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1068.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1068.png new file mode 100644 index 0000000..eca8f5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1068.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1069.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1069.png new file mode 100644 index 0000000..1078819 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1069.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/107.png new file mode 100644 index 0000000..70b3076 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1070.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1070.png new file mode 100644 index 0000000..9dbbefa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1070.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1071.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1071.png new file mode 100644 index 0000000..1ef8fb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1071.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1072.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1072.png new file mode 100644 index 0000000..ed222b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1072.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1073.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1073.png new file mode 100644 index 0000000..6b6aeca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1073.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1074.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1074.png new file mode 100644 index 0000000..4650e5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1074.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1075.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1075.png new file mode 100644 index 0000000..e032c57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1075.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1076.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1076.png new file mode 100644 index 0000000..a406e0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1076.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1077.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1077.png new file mode 100644 index 0000000..cc8c4f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1077.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1078.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1078.png new file mode 100644 index 0000000..0b9d416 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1078.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1079.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1079.png new file mode 100644 index 0000000..e9b522e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1079.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/108.png new file mode 100644 index 0000000..38010fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1080.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1080.png new file mode 100644 index 0000000..d0a7a85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1080.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1081.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1081.png new file mode 100644 index 0000000..6095320 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1081.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1082.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1082.png new file mode 100644 index 0000000..2a0625a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1082.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1083.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1083.png new file mode 100644 index 0000000..7221018 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1083.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1084.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1084.png new file mode 100644 index 0000000..c6d3c67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1084.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1085.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1085.png new file mode 100644 index 0000000..66488d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1085.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1086.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1086.png new file mode 100644 index 0000000..fb88b4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1086.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1087.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1087.png new file mode 100644 index 0000000..e9c08d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1087.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1088.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1088.png new file mode 100644 index 0000000..3d8d087 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1088.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1089.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1089.png new file mode 100644 index 0000000..016d9ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1089.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/109.png new file mode 100644 index 0000000..b1a4fe5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1090.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1090.png new file mode 100644 index 0000000..225ebe8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1090.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1091.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1091.png new file mode 100644 index 0000000..91ffa94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1091.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1092.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1092.png new file mode 100644 index 0000000..517d81d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1092.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1093.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1093.png new file mode 100644 index 0000000..4e5f811 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1093.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1094.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1094.png new file mode 100644 index 0000000..d0cdc62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1094.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1095.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1095.png new file mode 100644 index 0000000..1f1505d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1095.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1096.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1096.png new file mode 100644 index 0000000..cc9924c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1096.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1097.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1097.png new file mode 100644 index 0000000..4aa9f0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1097.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1098.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1098.png new file mode 100644 index 0000000..4872c04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1098.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1099.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1099.png new file mode 100644 index 0000000..134b942 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1099.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/11.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/11.png new file mode 100644 index 0000000..7305129 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/11.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/110.png new file mode 100644 index 0000000..117d466 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1100.png new file mode 100644 index 0000000..87962e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1101.png new file mode 100644 index 0000000..95fa06c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1102.png new file mode 100644 index 0000000..56d8277 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1103.png new file mode 100644 index 0000000..2731305 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1104.png new file mode 100644 index 0000000..f2e6271 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1105.png new file mode 100644 index 0000000..e66375e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1106.png new file mode 100644 index 0000000..7ea6e20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1107.png new file mode 100644 index 0000000..9345618 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1108.png new file mode 100644 index 0000000..9181c5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1109.png new file mode 100644 index 0000000..71a7005 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/111.png new file mode 100644 index 0000000..41086e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1110.png new file mode 100644 index 0000000..add83e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1111.png new file mode 100644 index 0000000..67323d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1112.png new file mode 100644 index 0000000..f24d5f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1113.png new file mode 100644 index 0000000..7c9ce04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1114.png new file mode 100644 index 0000000..44323d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1115.png new file mode 100644 index 0000000..1715409 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1116.png new file mode 100644 index 0000000..43fe78b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1117.png new file mode 100644 index 0000000..8de4d78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1118.png new file mode 100644 index 0000000..055a5f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1119.png new file mode 100644 index 0000000..0590008 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/112.png new file mode 100644 index 0000000..b4dad24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1120.png new file mode 100644 index 0000000..ecb1178 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1121.png new file mode 100644 index 0000000..338a35a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1122.png new file mode 100644 index 0000000..09e8708 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1123.png new file mode 100644 index 0000000..61104b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1124.png new file mode 100644 index 0000000..2dcf2cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1125.png new file mode 100644 index 0000000..05be5a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1126.png new file mode 100644 index 0000000..c7619b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1127.png new file mode 100644 index 0000000..96e1935 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1128.png new file mode 100644 index 0000000..bb8a182 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1129.png new file mode 100644 index 0000000..87eb057 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/113.png new file mode 100644 index 0000000..19c1955 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1130.png new file mode 100644 index 0000000..dec245a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1131.png new file mode 100644 index 0000000..b1d72fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1132.png new file mode 100644 index 0000000..5d21c52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1133.png new file mode 100644 index 0000000..adcce4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1134.png new file mode 100644 index 0000000..675630f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1135.png new file mode 100644 index 0000000..c8474ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1136.png new file mode 100644 index 0000000..a79ecd9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1137.png new file mode 100644 index 0000000..de9d012 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1138.png new file mode 100644 index 0000000..c8fa555 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1139.png new file mode 100644 index 0000000..541e1d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/114.png new file mode 100644 index 0000000..6582fc3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1140.png new file mode 100644 index 0000000..ff4463f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1141.png new file mode 100644 index 0000000..568e87e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1142.png new file mode 100644 index 0000000..3a9860e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1143.png new file mode 100644 index 0000000..2eb309d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1144.png new file mode 100644 index 0000000..2c59188 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1145.png new file mode 100644 index 0000000..3570dd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1146.png new file mode 100644 index 0000000..bfcb16c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1147.png new file mode 100644 index 0000000..1b625d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1148.png new file mode 100644 index 0000000..5b2b047 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1149.png new file mode 100644 index 0000000..163b4dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/115.png new file mode 100644 index 0000000..eed1037 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1150.png new file mode 100644 index 0000000..4439ffc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1151.png new file mode 100644 index 0000000..aecb3f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1152.png new file mode 100644 index 0000000..c3376d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1153.png new file mode 100644 index 0000000..7ac3827 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1154.png new file mode 100644 index 0000000..9cae2dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1155.png new file mode 100644 index 0000000..f64066c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1156.png new file mode 100644 index 0000000..1b79b07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1157.png new file mode 100644 index 0000000..da67287 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1158.png new file mode 100644 index 0000000..6865574 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1159.png new file mode 100644 index 0000000..3b0e43a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/116.png new file mode 100644 index 0000000..22f2512 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1160.png new file mode 100644 index 0000000..ce094c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1161.png new file mode 100644 index 0000000..3a40467 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1162.png new file mode 100644 index 0000000..75aa38b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1163.png new file mode 100644 index 0000000..1cdf2f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1164.png new file mode 100644 index 0000000..154ff9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1165.png new file mode 100644 index 0000000..1dbdbd9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1166.png new file mode 100644 index 0000000..452e1e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1167.png new file mode 100644 index 0000000..66da8c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1168.png new file mode 100644 index 0000000..d84c2f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1169.png new file mode 100644 index 0000000..9dea656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/117.png new file mode 100644 index 0000000..7fd4476 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1170.png new file mode 100644 index 0000000..391919b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1171.png new file mode 100644 index 0000000..d6f7d87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1172.png new file mode 100644 index 0000000..6acbedc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1173.png new file mode 100644 index 0000000..47aad89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1174.png new file mode 100644 index 0000000..a272850 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1175.png new file mode 100644 index 0000000..4feb0c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1176.png new file mode 100644 index 0000000..872ca6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1177.png new file mode 100644 index 0000000..f9573af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1178.png new file mode 100644 index 0000000..5081df9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1179.png new file mode 100644 index 0000000..00a5970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/118.png new file mode 100644 index 0000000..ab248a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1180.png new file mode 100644 index 0000000..f78548a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1181.png new file mode 100644 index 0000000..2539046 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1182.png new file mode 100644 index 0000000..33d441d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1183.png new file mode 100644 index 0000000..a307520 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1184.png new file mode 100644 index 0000000..bb8c051 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1185.png new file mode 100644 index 0000000..4cac5c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1186.png new file mode 100644 index 0000000..fcd0a74 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1187.png new file mode 100644 index 0000000..b72ec5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1188.png new file mode 100644 index 0000000..2d23ca9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1189.png new file mode 100644 index 0000000..2e75476 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/119.png new file mode 100644 index 0000000..af3017f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1190.png new file mode 100644 index 0000000..7b2d985 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1191.png new file mode 100644 index 0000000..76d61fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1192.png new file mode 100644 index 0000000..316a689 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1193.png new file mode 100644 index 0000000..0e01f11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1194.png new file mode 100644 index 0000000..3628a4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1195.png new file mode 100644 index 0000000..05bbda4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1196.png new file mode 100644 index 0000000..3a17d56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1197.png new file mode 100644 index 0000000..5b1efb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1198.png new file mode 100644 index 0000000..d4fd85c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1199.png new file mode 100644 index 0000000..c0a5627 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/12.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/12.png new file mode 100644 index 0000000..2417874 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/12.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/120.png new file mode 100644 index 0000000..64b11f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1200.png new file mode 100644 index 0000000..68fc10d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1201.png new file mode 100644 index 0000000..298422f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1202.png new file mode 100644 index 0000000..591a1be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1203.png new file mode 100644 index 0000000..05a3d96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1204.png new file mode 100644 index 0000000..94e9d27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1205.png new file mode 100644 index 0000000..662ade3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1206.png new file mode 100644 index 0000000..631f5dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1207.png new file mode 100644 index 0000000..9cc110a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1208.png new file mode 100644 index 0000000..99e9fc2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1209.png new file mode 100644 index 0000000..86625ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/121.png new file mode 100644 index 0000000..a4cb2f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1210.png new file mode 100644 index 0000000..7991976 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1211.png new file mode 100644 index 0000000..3149e0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1212.png new file mode 100644 index 0000000..1c205d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1213.png new file mode 100644 index 0000000..86ee4f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1214.png new file mode 100644 index 0000000..d3245b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1215.png new file mode 100644 index 0000000..63b163d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1216.png new file mode 100644 index 0000000..c28b012 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1217.png new file mode 100644 index 0000000..d4227fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1218.png new file mode 100644 index 0000000..78a3ec4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1219.png new file mode 100644 index 0000000..9ad981c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/122.png new file mode 100644 index 0000000..5f03d48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1220.png new file mode 100644 index 0000000..17bfaff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1221.png new file mode 100644 index 0000000..27dd2bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1222.png new file mode 100644 index 0000000..a2edada Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1223.png new file mode 100644 index 0000000..9b7e7bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1224.png new file mode 100644 index 0000000..46fbea1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1225.png new file mode 100644 index 0000000..dc3a88b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1226.png new file mode 100644 index 0000000..a699fb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1227.png new file mode 100644 index 0000000..d372f08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1228.png new file mode 100644 index 0000000..67db6f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1229.png new file mode 100644 index 0000000..1915f25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/123.png new file mode 100644 index 0000000..f4ac512 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1230.png new file mode 100644 index 0000000..990242b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1231.png new file mode 100644 index 0000000..b393e40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1232.png new file mode 100644 index 0000000..5b03740 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1233.png new file mode 100644 index 0000000..acc5d71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1234.png new file mode 100644 index 0000000..6e0be5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1235.png new file mode 100644 index 0000000..c973faf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1236.png new file mode 100644 index 0000000..76929a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1237.png new file mode 100644 index 0000000..79a1f18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1238.png new file mode 100644 index 0000000..56c27ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1239.png new file mode 100644 index 0000000..aeb4a52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/124.png new file mode 100644 index 0000000..bdf57ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1240.png new file mode 100644 index 0000000..9665e08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1241.png new file mode 100644 index 0000000..3e490dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1242.png new file mode 100644 index 0000000..fff9586 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1243.png new file mode 100644 index 0000000..4be8ded Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1244.png new file mode 100644 index 0000000..e8ffa83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1245.png new file mode 100644 index 0000000..2075a3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1246.png new file mode 100644 index 0000000..de217c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1247.png new file mode 100644 index 0000000..81f88bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1248.png new file mode 100644 index 0000000..ec69674 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1249.png new file mode 100644 index 0000000..9508de0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/125.png new file mode 100644 index 0000000..31b3bb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1250.png new file mode 100644 index 0000000..73b6ea0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1251.png new file mode 100644 index 0000000..8787662 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1252.png new file mode 100644 index 0000000..c071e33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1253.png new file mode 100644 index 0000000..720151f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1254.png new file mode 100644 index 0000000..dfa5ea1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1255.png new file mode 100644 index 0000000..745c5ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1256.png new file mode 100644 index 0000000..c7dff09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1257.png new file mode 100644 index 0000000..edba515 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1258.png new file mode 100644 index 0000000..9e0e129 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1259.png new file mode 100644 index 0000000..05d8207 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/126.png new file mode 100644 index 0000000..b52a3c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1260.png new file mode 100644 index 0000000..ca97dd4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1261.png new file mode 100644 index 0000000..934b8e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1262.png new file mode 100644 index 0000000..f5c2d14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1263.png new file mode 100644 index 0000000..13582c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1264.png new file mode 100644 index 0000000..e9a2f05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1265.png new file mode 100644 index 0000000..24fd4d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1266.png new file mode 100644 index 0000000..e193022 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1267.png new file mode 100644 index 0000000..a4f1d4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1268.png new file mode 100644 index 0000000..f970dcb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1269.png new file mode 100644 index 0000000..473ba81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/127.png new file mode 100644 index 0000000..7a1e77b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1270.png new file mode 100644 index 0000000..4cede70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1271.png new file mode 100644 index 0000000..1289702 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1272.png new file mode 100644 index 0000000..2ffce4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1273.png new file mode 100644 index 0000000..9ae86a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1274.png new file mode 100644 index 0000000..9e5f459 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1275.png new file mode 100644 index 0000000..3a011b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1276.png new file mode 100644 index 0000000..455fe2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1277.png new file mode 100644 index 0000000..1413367 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1278.png new file mode 100644 index 0000000..e6679a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1279.png new file mode 100644 index 0000000..0422392 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/128.png new file mode 100644 index 0000000..fd691ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1280.png new file mode 100644 index 0000000..e5cf6d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1281.png new file mode 100644 index 0000000..a2a8d9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1282.png new file mode 100644 index 0000000..be5ae7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1283.png new file mode 100644 index 0000000..2383eb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1284.png new file mode 100644 index 0000000..71f104d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1285.png new file mode 100644 index 0000000..d4a992f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1286.png new file mode 100644 index 0000000..879705c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1287.png new file mode 100644 index 0000000..d33603a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1288.png new file mode 100644 index 0000000..db6be61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1289.png new file mode 100644 index 0000000..ef18a95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/129.png new file mode 100644 index 0000000..db090ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1290.png new file mode 100644 index 0000000..c4a062f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1291.png new file mode 100644 index 0000000..c114ca3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1292.png new file mode 100644 index 0000000..1ce9088 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1293.png new file mode 100644 index 0000000..b62bd81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1294.png new file mode 100644 index 0000000..4fee2fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1295.png new file mode 100644 index 0000000..dd21e1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1296.png new file mode 100644 index 0000000..2f427ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1297.png new file mode 100644 index 0000000..9055656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1298.png new file mode 100644 index 0000000..4c21756 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1299.png new file mode 100644 index 0000000..bf3a86d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/13.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/13.png new file mode 100644 index 0000000..0af2737 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/13.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/130.png new file mode 100644 index 0000000..9cff794 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1300.png new file mode 100644 index 0000000..57895f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1301.png new file mode 100644 index 0000000..c864d03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1302.png new file mode 100644 index 0000000..06bf66a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1303.png new file mode 100644 index 0000000..a4d1f9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1304.png new file mode 100644 index 0000000..d9de71d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1305.png new file mode 100644 index 0000000..6feab63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1306.png new file mode 100644 index 0000000..fe856a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1307.png new file mode 100644 index 0000000..fc6eda5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1308.png new file mode 100644 index 0000000..03732f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1309.png new file mode 100644 index 0000000..17b807f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/131.png new file mode 100644 index 0000000..2989628 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1310.png new file mode 100644 index 0000000..db687db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1311.png new file mode 100644 index 0000000..a484798 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1312.png new file mode 100644 index 0000000..d920df9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1313.png new file mode 100644 index 0000000..b953f1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1314.png new file mode 100644 index 0000000..7faf806 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1315.png new file mode 100644 index 0000000..5c06ee7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1316.png new file mode 100644 index 0000000..35e5984 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1317.png new file mode 100644 index 0000000..6550987 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1318.png new file mode 100644 index 0000000..1800ad0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1319.png new file mode 100644 index 0000000..5d998af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/132.png new file mode 100644 index 0000000..79436b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1320.png new file mode 100644 index 0000000..2b60229 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1321.png new file mode 100644 index 0000000..a2d224c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1322.png new file mode 100644 index 0000000..b22c03f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1323.png new file mode 100644 index 0000000..d71c900 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1324.png new file mode 100644 index 0000000..e4dafac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1325.png new file mode 100644 index 0000000..10e1a41 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1326.png new file mode 100644 index 0000000..2e230ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1327.png new file mode 100644 index 0000000..09161d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1328.png new file mode 100644 index 0000000..5d3042a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1329.png new file mode 100644 index 0000000..281be70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/133.png new file mode 100644 index 0000000..e032e53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1330.png new file mode 100644 index 0000000..c09d215 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1331.png new file mode 100644 index 0000000..ac4cba2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1332.png new file mode 100644 index 0000000..ef0e951 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1333.png new file mode 100644 index 0000000..94d0b48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1334.png new file mode 100644 index 0000000..97a2397 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1335.png new file mode 100644 index 0000000..dc3df35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1336.png new file mode 100644 index 0000000..83b4b07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1337.png new file mode 100644 index 0000000..c310a20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1338.png new file mode 100644 index 0000000..f9e9156 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1339.png new file mode 100644 index 0000000..be26688 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/134.png new file mode 100644 index 0000000..3c262c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1340.png new file mode 100644 index 0000000..7aae7f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1341.png new file mode 100644 index 0000000..681e375 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1342.png new file mode 100644 index 0000000..2a16fa5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1343.png new file mode 100644 index 0000000..ada65be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1344.png new file mode 100644 index 0000000..23ce6e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1345.png new file mode 100644 index 0000000..b093703 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1346.png new file mode 100644 index 0000000..133d896 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1347.png new file mode 100644 index 0000000..cb6a291 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1348.png new file mode 100644 index 0000000..3d02e12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1349.png new file mode 100644 index 0000000..8cf8f09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/135.png new file mode 100644 index 0000000..6c84ba4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1350.png new file mode 100644 index 0000000..01105b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1351.png new file mode 100644 index 0000000..f2c6b29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1352.png new file mode 100644 index 0000000..f98b5b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1353.png new file mode 100644 index 0000000..b1ac522 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1354.png new file mode 100644 index 0000000..ad501a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1355.png new file mode 100644 index 0000000..c3fbaff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1356.png new file mode 100644 index 0000000..d6871f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1357.png new file mode 100644 index 0000000..611031a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1358.png new file mode 100644 index 0000000..b85f7df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1359.png new file mode 100644 index 0000000..803949a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/136.png new file mode 100644 index 0000000..4ee2357 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1360.png new file mode 100644 index 0000000..7ddf7a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1361.png new file mode 100644 index 0000000..8f91423 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1362.png new file mode 100644 index 0000000..7c947c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1363.png new file mode 100644 index 0000000..e79be8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1364.png new file mode 100644 index 0000000..7c485cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1365.png new file mode 100644 index 0000000..2a95cbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1366.png new file mode 100644 index 0000000..61c0e28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1367.png new file mode 100644 index 0000000..b972a22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1368.png new file mode 100644 index 0000000..86aca2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1369.png new file mode 100644 index 0000000..45f9bf5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/137.png new file mode 100644 index 0000000..2805363 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1370.png new file mode 100644 index 0000000..afd33d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1371.png new file mode 100644 index 0000000..aeebf59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1372.png new file mode 100644 index 0000000..389abfe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1373.png new file mode 100644 index 0000000..72fe3eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1374.png new file mode 100644 index 0000000..1073453 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1375.png new file mode 100644 index 0000000..570e755 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1376.png new file mode 100644 index 0000000..e15a680 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1377.png new file mode 100644 index 0000000..7e0f45a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1378.png new file mode 100644 index 0000000..e21bcbd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1379.png new file mode 100644 index 0000000..13447a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/138.png new file mode 100644 index 0000000..7cd6ac0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1380.png new file mode 100644 index 0000000..6f44933 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1381.png new file mode 100644 index 0000000..afd4c83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1382.png new file mode 100644 index 0000000..5893e15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1383.png new file mode 100644 index 0000000..1dd9ed7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1384.png new file mode 100644 index 0000000..20b35c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1385.png new file mode 100644 index 0000000..de640c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1386.png new file mode 100644 index 0000000..13f484e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1387.png new file mode 100644 index 0000000..bff0fd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1388.png new file mode 100644 index 0000000..ba5c3a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1389.png new file mode 100644 index 0000000..fe45f38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/139.png new file mode 100644 index 0000000..1f2cca4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1390.png new file mode 100644 index 0000000..2743821 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1391.png new file mode 100644 index 0000000..2475af5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1392.png new file mode 100644 index 0000000..69400db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1393.png new file mode 100644 index 0000000..76d98ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1394.png new file mode 100644 index 0000000..6a85f3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1395.png new file mode 100644 index 0000000..3135ebc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1396.png new file mode 100644 index 0000000..47fadd9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1397.png new file mode 100644 index 0000000..a093067 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1398.png new file mode 100644 index 0000000..2966c55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1399.png new file mode 100644 index 0000000..f2a789e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/14.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/14.png new file mode 100644 index 0000000..033f145 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/14.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/140.png new file mode 100644 index 0000000..438e942 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1400.png new file mode 100644 index 0000000..34bc0fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1401.png new file mode 100644 index 0000000..1d03d05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1402.png new file mode 100644 index 0000000..bef8751 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1403.png new file mode 100644 index 0000000..9eef067 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1404.png new file mode 100644 index 0000000..41f0299 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1405.png new file mode 100644 index 0000000..a95706d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1406.png new file mode 100644 index 0000000..ccb6918 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1407.png new file mode 100644 index 0000000..6c248a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1408.png new file mode 100644 index 0000000..d7d2d12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1409.png new file mode 100644 index 0000000..f91cffd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/141.png new file mode 100644 index 0000000..c6fa470 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1410.png new file mode 100644 index 0000000..b8bc5d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1411.png new file mode 100644 index 0000000..8d2ed29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1412.png new file mode 100644 index 0000000..9d9e973 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1413.png new file mode 100644 index 0000000..8f2523d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1414.png new file mode 100644 index 0000000..7d2c4e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1415.png new file mode 100644 index 0000000..76809d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1416.png new file mode 100644 index 0000000..7de3179 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1417.png new file mode 100644 index 0000000..bde3106 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1418.png new file mode 100644 index 0000000..ab779a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1419.png new file mode 100644 index 0000000..dc4bbc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/142.png new file mode 100644 index 0000000..dd84c06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1420.png new file mode 100644 index 0000000..48838a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1421.png new file mode 100644 index 0000000..a555b09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1422.png new file mode 100644 index 0000000..b88647f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1423.png new file mode 100644 index 0000000..528e238 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1424.png new file mode 100644 index 0000000..ecf5f93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1425.png new file mode 100644 index 0000000..ad28dac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1426.png new file mode 100644 index 0000000..6977ba2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1427.png new file mode 100644 index 0000000..b8a5a63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1428.png new file mode 100644 index 0000000..33b2198 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1429.png new file mode 100644 index 0000000..ad635fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/143.png new file mode 100644 index 0000000..0b3e175 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1430.png new file mode 100644 index 0000000..d861f15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1431.png new file mode 100644 index 0000000..9fabd64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1432.png new file mode 100644 index 0000000..f6df3bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1433.png new file mode 100644 index 0000000..dec083a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1434.png new file mode 100644 index 0000000..bf12d53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1435.png new file mode 100644 index 0000000..7b15dc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1436.png new file mode 100644 index 0000000..c3022f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1437.png new file mode 100644 index 0000000..4b93b5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1438.png new file mode 100644 index 0000000..e574ebc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1439.png new file mode 100644 index 0000000..52aabe8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/144.png new file mode 100644 index 0000000..46a893b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1440.png new file mode 100644 index 0000000..9508e35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1441.png new file mode 100644 index 0000000..3937134 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1442.png new file mode 100644 index 0000000..fcc2283 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1443.png new file mode 100644 index 0000000..7aabb1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1444.png new file mode 100644 index 0000000..7a6838f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1445.png new file mode 100644 index 0000000..5ec4061 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1446.png new file mode 100644 index 0000000..e16d4a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1447.png new file mode 100644 index 0000000..713efe8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1448.png new file mode 100644 index 0000000..5fcadeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1449.png new file mode 100644 index 0000000..9093795 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/145.png new file mode 100644 index 0000000..f90a709 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1450.png new file mode 100644 index 0000000..94908d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1451.png new file mode 100644 index 0000000..d75d9c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1452.png new file mode 100644 index 0000000..a7c1a24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1453.png new file mode 100644 index 0000000..a61533d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1454.png new file mode 100644 index 0000000..cb99e08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1455.png new file mode 100644 index 0000000..6197827 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1456.png new file mode 100644 index 0000000..9caa867 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1457.png new file mode 100644 index 0000000..a5b0aed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1458.png new file mode 100644 index 0000000..7025687 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1459.png new file mode 100644 index 0000000..34d1c4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/146.png new file mode 100644 index 0000000..bfa9043 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1460.png new file mode 100644 index 0000000..fd33f3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1461.png new file mode 100644 index 0000000..321739b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1462.png new file mode 100644 index 0000000..6b63527 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1463.png new file mode 100644 index 0000000..c4ae8c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1464.png new file mode 100644 index 0000000..81cd9db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1465.png new file mode 100644 index 0000000..6a197c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1466.png new file mode 100644 index 0000000..fc43d63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1467.png new file mode 100644 index 0000000..9358722 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1468.png new file mode 100644 index 0000000..cbcb30c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1469.png new file mode 100644 index 0000000..6d921f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/147.png new file mode 100644 index 0000000..6e88b5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1470.png new file mode 100644 index 0000000..5efca60 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1471.png new file mode 100644 index 0000000..0690f4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1472.png new file mode 100644 index 0000000..f270648 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1473.png new file mode 100644 index 0000000..b0fea06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1474.png new file mode 100644 index 0000000..745c14b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1475.png new file mode 100644 index 0000000..a2052ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1476.png new file mode 100644 index 0000000..c641965 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1477.png new file mode 100644 index 0000000..13aa3aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1478.png new file mode 100644 index 0000000..b219173 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1479.png new file mode 100644 index 0000000..c9731da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/148.png new file mode 100644 index 0000000..8af0f74 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1480.png new file mode 100644 index 0000000..d7d5fa3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1481.png new file mode 100644 index 0000000..0795bf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1482.png new file mode 100644 index 0000000..3438745 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1483.png new file mode 100644 index 0000000..29033cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1484.png new file mode 100644 index 0000000..07c6a18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1485.png new file mode 100644 index 0000000..ff01151 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1486.png new file mode 100644 index 0000000..8213def Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1487.png new file mode 100644 index 0000000..4978b07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1488.png new file mode 100644 index 0000000..2a065e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1489.png new file mode 100644 index 0000000..44a0c15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/149.png new file mode 100644 index 0000000..7e004e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1490.png new file mode 100644 index 0000000..fed807c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1491.png new file mode 100644 index 0000000..c04d16e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1492.png new file mode 100644 index 0000000..e578da5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1493.png new file mode 100644 index 0000000..62c0e52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1494.png new file mode 100644 index 0000000..e5f0a9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1495.png new file mode 100644 index 0000000..c6f1bb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1496.png new file mode 100644 index 0000000..ae4711f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1497.png new file mode 100644 index 0000000..da5cca0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1498.png new file mode 100644 index 0000000..fbe1c8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1499.png new file mode 100644 index 0000000..645c2a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/15.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/15.png new file mode 100644 index 0000000..9b7381a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/15.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/150.png new file mode 100644 index 0000000..98864bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1500.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1500.png new file mode 100644 index 0000000..c2d5f48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1500.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1501.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1501.png new file mode 100644 index 0000000..866d90d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1501.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1502.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1502.png new file mode 100644 index 0000000..1236992 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1502.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1503.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1503.png new file mode 100644 index 0000000..ae23164 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1503.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1504.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1504.png new file mode 100644 index 0000000..12ebd1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1504.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1505.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1505.png new file mode 100644 index 0000000..1536f48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1505.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1506.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1506.png new file mode 100644 index 0000000..6a8d67e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1506.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1507.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1507.png new file mode 100644 index 0000000..81a9cf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1507.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1508.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1508.png new file mode 100644 index 0000000..b4b7742 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1508.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1509.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1509.png new file mode 100644 index 0000000..c05f673 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1509.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/151.png new file mode 100644 index 0000000..29ac735 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1510.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1510.png new file mode 100644 index 0000000..13dc7c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1510.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1511.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1511.png new file mode 100644 index 0000000..3edc15d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1511.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1512.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1512.png new file mode 100644 index 0000000..b5fc8b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1512.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1513.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1513.png new file mode 100644 index 0000000..f518c01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1513.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1514.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1514.png new file mode 100644 index 0000000..9af95c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1514.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1515.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1515.png new file mode 100644 index 0000000..88bd5dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1515.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1516.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1516.png new file mode 100644 index 0000000..05b62e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1516.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1517.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1517.png new file mode 100644 index 0000000..e7c1a35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1517.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1518.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1518.png new file mode 100644 index 0000000..bd09ec2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1518.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1519.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1519.png new file mode 100644 index 0000000..733e33f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1519.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/152.png new file mode 100644 index 0000000..bb38d52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1520.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1520.png new file mode 100644 index 0000000..db5737f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1520.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1521.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1521.png new file mode 100644 index 0000000..d73dea0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1521.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1522.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1522.png new file mode 100644 index 0000000..c895845 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1522.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1523.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1523.png new file mode 100644 index 0000000..4870730 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1523.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1524.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1524.png new file mode 100644 index 0000000..9d00db3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1524.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1525.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1525.png new file mode 100644 index 0000000..0aec68c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1525.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1526.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1526.png new file mode 100644 index 0000000..90356a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1526.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1527.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1527.png new file mode 100644 index 0000000..784e98e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1527.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1528.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1528.png new file mode 100644 index 0000000..dd974f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1528.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1529.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1529.png new file mode 100644 index 0000000..ecf1cf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1529.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/153.png new file mode 100644 index 0000000..10bc7c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1530.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1530.png new file mode 100644 index 0000000..6fd9381 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1530.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1531.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1531.png new file mode 100644 index 0000000..60bb5c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1531.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1532.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1532.png new file mode 100644 index 0000000..1487d5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1532.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1533.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1533.png new file mode 100644 index 0000000..b8293ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1533.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1534.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1534.png new file mode 100644 index 0000000..aece240 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1534.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1535.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1535.png new file mode 100644 index 0000000..d3e2042 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1535.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1536.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1536.png new file mode 100644 index 0000000..c6df36a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1536.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1537.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1537.png new file mode 100644 index 0000000..b8445e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1537.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1538.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1538.png new file mode 100644 index 0000000..679f9f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1538.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1539.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1539.png new file mode 100644 index 0000000..3eda146 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1539.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/154.png new file mode 100644 index 0000000..add4634 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1540.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1540.png new file mode 100644 index 0000000..96a2fae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1540.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1541.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1541.png new file mode 100644 index 0000000..da6d7ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1541.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1542.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1542.png new file mode 100644 index 0000000..f45294b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1542.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1543.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1543.png new file mode 100644 index 0000000..18e172b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1543.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1544.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1544.png new file mode 100644 index 0000000..33b62a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1544.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1545.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1545.png new file mode 100644 index 0000000..45b5b94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1545.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1546.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1546.png new file mode 100644 index 0000000..19fe3a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1546.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1547.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1547.png new file mode 100644 index 0000000..1796064 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1547.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1548.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1548.png new file mode 100644 index 0000000..9d6dc92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1548.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1549.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1549.png new file mode 100644 index 0000000..2ff28e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1549.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/155.png new file mode 100644 index 0000000..513f8f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1550.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1550.png new file mode 100644 index 0000000..c315acf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1550.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1551.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1551.png new file mode 100644 index 0000000..95780b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1551.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1552.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1552.png new file mode 100644 index 0000000..dfe041b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1552.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1553.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1553.png new file mode 100644 index 0000000..b52588c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1553.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1554.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1554.png new file mode 100644 index 0000000..d4893e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1554.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1555.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1555.png new file mode 100644 index 0000000..d4db6b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1555.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1556.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1556.png new file mode 100644 index 0000000..4b8a62a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1556.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1557.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1557.png new file mode 100644 index 0000000..285d3ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1557.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1558.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1558.png new file mode 100644 index 0000000..cdf2bdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1558.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1559.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1559.png new file mode 100644 index 0000000..b6715a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1559.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/156.png new file mode 100644 index 0000000..ee0b884 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1560.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1560.png new file mode 100644 index 0000000..b89e206 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1560.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1561.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1561.png new file mode 100644 index 0000000..8aa7dbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1561.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1562.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1562.png new file mode 100644 index 0000000..5589386 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1562.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1563.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1563.png new file mode 100644 index 0000000..bc8b04c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1563.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1564.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1564.png new file mode 100644 index 0000000..db7110f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1564.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1565.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1565.png new file mode 100644 index 0000000..5b1d23a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1565.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1566.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1566.png new file mode 100644 index 0000000..b5256f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1566.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1567.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1567.png new file mode 100644 index 0000000..4b51cbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1567.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1568.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1568.png new file mode 100644 index 0000000..cf7b022 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1568.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1569.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1569.png new file mode 100644 index 0000000..abef815 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1569.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/157.png new file mode 100644 index 0000000..5a3ba54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1570.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1570.png new file mode 100644 index 0000000..ae971a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1570.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1571.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1571.png new file mode 100644 index 0000000..2afe1c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1571.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1572.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1572.png new file mode 100644 index 0000000..08272cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1572.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1573.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1573.png new file mode 100644 index 0000000..b3ca999 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1573.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1574.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1574.png new file mode 100644 index 0000000..1561053 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1574.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1575.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1575.png new file mode 100644 index 0000000..87c9a9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1575.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1576.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1576.png new file mode 100644 index 0000000..6fb2816 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1576.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1577.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1577.png new file mode 100644 index 0000000..32eea9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1577.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1578.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1578.png new file mode 100644 index 0000000..869137a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1578.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1579.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1579.png new file mode 100644 index 0000000..255223f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1579.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/158.png new file mode 100644 index 0000000..b03934e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1580.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1580.png new file mode 100644 index 0000000..2417564 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1580.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1581.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1581.png new file mode 100644 index 0000000..95024cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1581.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1582.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1582.png new file mode 100644 index 0000000..bd4bebd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1582.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1583.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1583.png new file mode 100644 index 0000000..388fab6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1583.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1584.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1584.png new file mode 100644 index 0000000..668af56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1584.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1585.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1585.png new file mode 100644 index 0000000..873b933 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1585.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1586.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1586.png new file mode 100644 index 0000000..110c56f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1586.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1587.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1587.png new file mode 100644 index 0000000..17b7855 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1587.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1588.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1588.png new file mode 100644 index 0000000..093ed22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1588.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1589.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1589.png new file mode 100644 index 0000000..827110a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1589.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/159.png new file mode 100644 index 0000000..de8544d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1590.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1590.png new file mode 100644 index 0000000..729256e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1590.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1591.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1591.png new file mode 100644 index 0000000..fd00ce7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1591.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1592.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1592.png new file mode 100644 index 0000000..61edd2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1592.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1593.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1593.png new file mode 100644 index 0000000..b144c0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1593.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1594.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1594.png new file mode 100644 index 0000000..6f294e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1594.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1595.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1595.png new file mode 100644 index 0000000..d0ccaf6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1595.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1596.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1596.png new file mode 100644 index 0000000..737c720 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1596.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1597.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1597.png new file mode 100644 index 0000000..2d1665a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1597.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1598.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1598.png new file mode 100644 index 0000000..8f68cd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1598.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1599.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1599.png new file mode 100644 index 0000000..9d06709 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1599.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/16.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/16.png new file mode 100644 index 0000000..6482f94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/16.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/160.png new file mode 100644 index 0000000..4e01688 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1600.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1600.png new file mode 100644 index 0000000..a8e27da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1600.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1601.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1601.png new file mode 100644 index 0000000..5a54770 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1601.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1602.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1602.png new file mode 100644 index 0000000..ee2f0c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1602.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1603.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1603.png new file mode 100644 index 0000000..3ba97d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1603.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1604.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1604.png new file mode 100644 index 0000000..95ec768 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1604.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1605.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1605.png new file mode 100644 index 0000000..2ffb867 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1605.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1606.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1606.png new file mode 100644 index 0000000..328b886 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1606.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1607.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1607.png new file mode 100644 index 0000000..39e662a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1607.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1608.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1608.png new file mode 100644 index 0000000..7745bab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1608.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1609.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1609.png new file mode 100644 index 0000000..edd0d56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1609.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/161.png new file mode 100644 index 0000000..3d8889d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1610.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1610.png new file mode 100644 index 0000000..a8ce223 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1610.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1611.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1611.png new file mode 100644 index 0000000..2145e3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1611.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1612.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1612.png new file mode 100644 index 0000000..d603b9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1612.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1613.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1613.png new file mode 100644 index 0000000..e4b2b52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1613.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1614.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1614.png new file mode 100644 index 0000000..5aee3c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1614.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1615.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1615.png new file mode 100644 index 0000000..b1c4571 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1615.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1616.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1616.png new file mode 100644 index 0000000..596404e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1616.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1617.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1617.png new file mode 100644 index 0000000..b45659c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1617.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1618.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1618.png new file mode 100644 index 0000000..aea44e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1618.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1619.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1619.png new file mode 100644 index 0000000..02b51ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1619.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/162.png new file mode 100644 index 0000000..d3459d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1620.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1620.png new file mode 100644 index 0000000..e0c6483 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1620.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1621.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1621.png new file mode 100644 index 0000000..548741c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1621.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1622.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1622.png new file mode 100644 index 0000000..4d47127 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1622.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1623.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1623.png new file mode 100644 index 0000000..3b5c335 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1623.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1624.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1624.png new file mode 100644 index 0000000..2bc3c49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1624.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1625.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1625.png new file mode 100644 index 0000000..aba8b5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1625.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1626.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1626.png new file mode 100644 index 0000000..a2fbfc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1626.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1627.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1627.png new file mode 100644 index 0000000..c4a2ad9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1627.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1628.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1628.png new file mode 100644 index 0000000..7d6be29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1628.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1629.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1629.png new file mode 100644 index 0000000..c778a29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1629.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/163.png new file mode 100644 index 0000000..867e1f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1630.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1630.png new file mode 100644 index 0000000..5a1d89d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1630.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1631.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1631.png new file mode 100644 index 0000000..f837343 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1631.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1632.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1632.png new file mode 100644 index 0000000..76a32f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1632.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1633.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1633.png new file mode 100644 index 0000000..942c862 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1633.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1634.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1634.png new file mode 100644 index 0000000..9ffe67d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1634.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1635.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1635.png new file mode 100644 index 0000000..fa615a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1635.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1636.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1636.png new file mode 100644 index 0000000..86ece63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1636.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1637.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1637.png new file mode 100644 index 0000000..c83f44e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1637.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1638.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1638.png new file mode 100644 index 0000000..599fc63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1638.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1639.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1639.png new file mode 100644 index 0000000..8b4c3b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1639.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/164.png new file mode 100644 index 0000000..0d8150d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1640.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1640.png new file mode 100644 index 0000000..aca3473 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1640.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1641.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1641.png new file mode 100644 index 0000000..7f9ca3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1641.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1642.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1642.png new file mode 100644 index 0000000..6f08d61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1642.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1643.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1643.png new file mode 100644 index 0000000..11f316f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1643.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1644.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1644.png new file mode 100644 index 0000000..4639c83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1644.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1645.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1645.png new file mode 100644 index 0000000..a28ca59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1645.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1646.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1646.png new file mode 100644 index 0000000..f487914 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1646.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1647.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1647.png new file mode 100644 index 0000000..c0fe7a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1647.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1648.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1648.png new file mode 100644 index 0000000..c999eca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1648.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1649.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1649.png new file mode 100644 index 0000000..a177f15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1649.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/165.png new file mode 100644 index 0000000..8e925b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1650.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1650.png new file mode 100644 index 0000000..ac0b5dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1650.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1651.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1651.png new file mode 100644 index 0000000..76d303a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1651.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1652.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1652.png new file mode 100644 index 0000000..9ef21fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1652.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1653.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1653.png new file mode 100644 index 0000000..1da50ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1653.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1654.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1654.png new file mode 100644 index 0000000..789cadf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1654.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1655.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1655.png new file mode 100644 index 0000000..c15ef3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1655.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1656.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1656.png new file mode 100644 index 0000000..e5bdefe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1656.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1657.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1657.png new file mode 100644 index 0000000..9540296 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1657.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1658.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1658.png new file mode 100644 index 0000000..8fd98c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1658.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1659.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1659.png new file mode 100644 index 0000000..2e52403 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1659.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/166.png new file mode 100644 index 0000000..55b394e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1660.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1660.png new file mode 100644 index 0000000..19d4ba6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1660.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1661.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1661.png new file mode 100644 index 0000000..55fbc6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1661.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1662.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1662.png new file mode 100644 index 0000000..821aad5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1662.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1663.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1663.png new file mode 100644 index 0000000..60a826d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1663.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1664.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1664.png new file mode 100644 index 0000000..2e1ab93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1664.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1665.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1665.png new file mode 100644 index 0000000..cdb261d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1665.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1666.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1666.png new file mode 100644 index 0000000..747cd79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1666.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1667.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1667.png new file mode 100644 index 0000000..7884313 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1667.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1668.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1668.png new file mode 100644 index 0000000..14291ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1668.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1669.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1669.png new file mode 100644 index 0000000..a7d9eaa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1669.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/167.png new file mode 100644 index 0000000..114974e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1670.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1670.png new file mode 100644 index 0000000..4c03740 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1670.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1671.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1671.png new file mode 100644 index 0000000..67d201c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1671.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1672.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1672.png new file mode 100644 index 0000000..6dae674 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1672.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1673.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1673.png new file mode 100644 index 0000000..75e15fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1673.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1674.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1674.png new file mode 100644 index 0000000..d84c1ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1674.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1675.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1675.png new file mode 100644 index 0000000..3e9e18b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1675.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1676.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1676.png new file mode 100644 index 0000000..04afdec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1676.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1677.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1677.png new file mode 100644 index 0000000..fc107cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1677.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1678.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1678.png new file mode 100644 index 0000000..38bdb87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1678.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1679.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1679.png new file mode 100644 index 0000000..062be88 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1679.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/168.png new file mode 100644 index 0000000..64fd4f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1680.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1680.png new file mode 100644 index 0000000..d48685b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1680.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1681.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1681.png new file mode 100644 index 0000000..8ab4be9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1681.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1682.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1682.png new file mode 100644 index 0000000..a0562b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1682.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1683.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1683.png new file mode 100644 index 0000000..3b3d949 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1683.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1684.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1684.png new file mode 100644 index 0000000..fdc5d59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1684.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1685.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1685.png new file mode 100644 index 0000000..857ddf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1685.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1686.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1686.png new file mode 100644 index 0000000..89adb2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1686.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1687.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1687.png new file mode 100644 index 0000000..185e7e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1687.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1688.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1688.png new file mode 100644 index 0000000..3cfa545 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1688.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1689.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1689.png new file mode 100644 index 0000000..e0d060b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1689.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/169.png new file mode 100644 index 0000000..c3a4bf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1690.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1690.png new file mode 100644 index 0000000..b19a9f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1690.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1691.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1691.png new file mode 100644 index 0000000..849659c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1691.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1692.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1692.png new file mode 100644 index 0000000..24de452 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1692.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1693.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1693.png new file mode 100644 index 0000000..b802ba2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1693.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1694.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1694.png new file mode 100644 index 0000000..2b0a781 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1694.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1695.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1695.png new file mode 100644 index 0000000..6901a18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1695.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1696.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1696.png new file mode 100644 index 0000000..8efca42 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1696.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1697.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1697.png new file mode 100644 index 0000000..b8b9e0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1697.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1698.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1698.png new file mode 100644 index 0000000..6445c5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1698.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1699.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1699.png new file mode 100644 index 0000000..c49c370 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1699.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/17.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/17.png new file mode 100644 index 0000000..242d616 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/17.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/170.png new file mode 100644 index 0000000..d379a39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1700.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1700.png new file mode 100644 index 0000000..d58816e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1700.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1701.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1701.png new file mode 100644 index 0000000..be8b9bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1701.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1702.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1702.png new file mode 100644 index 0000000..76c7f01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1702.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1703.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1703.png new file mode 100644 index 0000000..4cf9028 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1703.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1704.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1704.png new file mode 100644 index 0000000..bea45f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1704.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1705.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1705.png new file mode 100644 index 0000000..fd734d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1705.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1706.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1706.png new file mode 100644 index 0000000..6852c68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1706.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1707.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1707.png new file mode 100644 index 0000000..5e35690 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1707.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1708.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1708.png new file mode 100644 index 0000000..1bcd621 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1708.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1709.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1709.png new file mode 100644 index 0000000..33f467d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1709.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/171.png new file mode 100644 index 0000000..7fe7758 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1710.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1710.png new file mode 100644 index 0000000..0b47a7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1710.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1711.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1711.png new file mode 100644 index 0000000..280907b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1711.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1712.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1712.png new file mode 100644 index 0000000..1309eab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1712.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1713.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1713.png new file mode 100644 index 0000000..94e0e70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1713.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1714.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1714.png new file mode 100644 index 0000000..64f6474 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1714.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1715.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1715.png new file mode 100644 index 0000000..a46a7d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1715.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1716.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1716.png new file mode 100644 index 0000000..0091afc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1716.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1717.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1717.png new file mode 100644 index 0000000..f5ef4c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1717.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1718.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1718.png new file mode 100644 index 0000000..28b21eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1718.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1719.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1719.png new file mode 100644 index 0000000..808edec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1719.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/172.png new file mode 100644 index 0000000..6ea1077 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1720.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1720.png new file mode 100644 index 0000000..3ceb05f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1720.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1721.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1721.png new file mode 100644 index 0000000..e98e698 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1721.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1722.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1722.png new file mode 100644 index 0000000..8e23f53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1722.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1723.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1723.png new file mode 100644 index 0000000..66edcba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1723.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1724.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1724.png new file mode 100644 index 0000000..5bd2a47 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1724.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1725.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1725.png new file mode 100644 index 0000000..487b68b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1725.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1726.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1726.png new file mode 100644 index 0000000..e1a3e09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1726.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1727.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1727.png new file mode 100644 index 0000000..89e2b88 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1727.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1728.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1728.png new file mode 100644 index 0000000..279f58a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1728.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1729.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1729.png new file mode 100644 index 0000000..9b60f82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1729.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/173.png new file mode 100644 index 0000000..da7e837 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1730.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1730.png new file mode 100644 index 0000000..f5cf241 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1730.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1731.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1731.png new file mode 100644 index 0000000..0896953 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1731.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1732.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1732.png new file mode 100644 index 0000000..1b2524f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1732.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1733.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1733.png new file mode 100644 index 0000000..4105746 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1733.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1734.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1734.png new file mode 100644 index 0000000..6f34ca3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1734.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1735.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1735.png new file mode 100644 index 0000000..134210d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1735.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1736.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1736.png new file mode 100644 index 0000000..9e26cd2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1736.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1737.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1737.png new file mode 100644 index 0000000..4861056 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1737.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1738.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1738.png new file mode 100644 index 0000000..55a187c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1738.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1739.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1739.png new file mode 100644 index 0000000..b42743c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1739.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/174.png new file mode 100644 index 0000000..5e91e94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1740.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1740.png new file mode 100644 index 0000000..de12daa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1740.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1741.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1741.png new file mode 100644 index 0000000..3d3aa4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1741.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1742.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1742.png new file mode 100644 index 0000000..7037e3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1742.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1743.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1743.png new file mode 100644 index 0000000..09494a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1743.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1744.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1744.png new file mode 100644 index 0000000..783f2a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1744.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1745.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1745.png new file mode 100644 index 0000000..a92ecb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1745.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1746.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1746.png new file mode 100644 index 0000000..424a6b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1746.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1747.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1747.png new file mode 100644 index 0000000..2f8d8b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1747.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1748.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1748.png new file mode 100644 index 0000000..17d6974 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1748.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1749.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1749.png new file mode 100644 index 0000000..5e6ffbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1749.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/175.png new file mode 100644 index 0000000..f7433b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1750.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1750.png new file mode 100644 index 0000000..f844675 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1750.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1751.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1751.png new file mode 100644 index 0000000..2cc770c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1751.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1752.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1752.png new file mode 100644 index 0000000..38836ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1752.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1753.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1753.png new file mode 100644 index 0000000..b068da7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1753.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1754.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1754.png new file mode 100644 index 0000000..ca2dd0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1754.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1755.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1755.png new file mode 100644 index 0000000..7a67ee1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1755.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1756.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1756.png new file mode 100644 index 0000000..e3daccd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1756.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1757.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1757.png new file mode 100644 index 0000000..2bed3aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1757.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1758.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1758.png new file mode 100644 index 0000000..55ed87c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1758.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1759.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1759.png new file mode 100644 index 0000000..abc4852 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1759.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/176.png new file mode 100644 index 0000000..d3479c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1760.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1760.png new file mode 100644 index 0000000..1125b04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1760.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1761.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1761.png new file mode 100644 index 0000000..138f934 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1761.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1762.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1762.png new file mode 100644 index 0000000..3ef97b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1762.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1763.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1763.png new file mode 100644 index 0000000..61de3bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1763.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1764.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1764.png new file mode 100644 index 0000000..0200ddb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1764.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1765.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1765.png new file mode 100644 index 0000000..207f06b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1765.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1766.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1766.png new file mode 100644 index 0000000..2bca121 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1766.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1767.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1767.png new file mode 100644 index 0000000..98c8f61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1767.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1768.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1768.png new file mode 100644 index 0000000..f8a6a96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1768.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1769.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1769.png new file mode 100644 index 0000000..d459cef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1769.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/177.png new file mode 100644 index 0000000..2889c87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1770.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1770.png new file mode 100644 index 0000000..3ed8afd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1770.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1771.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1771.png new file mode 100644 index 0000000..1d900c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1771.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1772.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1772.png new file mode 100644 index 0000000..3fc1975 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1772.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1773.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1773.png new file mode 100644 index 0000000..524c8b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1773.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1774.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1774.png new file mode 100644 index 0000000..5e5dd1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1774.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1775.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1775.png new file mode 100644 index 0000000..d5f9ee8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1775.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1776.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1776.png new file mode 100644 index 0000000..5169563 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1776.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1777.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1777.png new file mode 100644 index 0000000..7c68b15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1777.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1778.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1778.png new file mode 100644 index 0000000..b33335c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1778.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1779.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1779.png new file mode 100644 index 0000000..1e81051 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1779.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/178.png new file mode 100644 index 0000000..1ab6b2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1780.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1780.png new file mode 100644 index 0000000..1ffe6c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1780.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1781.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1781.png new file mode 100644 index 0000000..c176b0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1781.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1782.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1782.png new file mode 100644 index 0000000..386ce20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1782.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1783.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1783.png new file mode 100644 index 0000000..f9635e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1783.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1784.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1784.png new file mode 100644 index 0000000..e9712a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1784.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1785.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1785.png new file mode 100644 index 0000000..16d6432 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1785.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1786.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1786.png new file mode 100644 index 0000000..7d7b0b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1786.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1787.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1787.png new file mode 100644 index 0000000..e775e65 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1787.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1788.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1788.png new file mode 100644 index 0000000..3042ea7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1788.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1789.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1789.png new file mode 100644 index 0000000..08c2877 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1789.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/179.png new file mode 100644 index 0000000..55ffa38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1790.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1790.png new file mode 100644 index 0000000..6310246 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1790.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1791.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1791.png new file mode 100644 index 0000000..7018d3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1791.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1792.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1792.png new file mode 100644 index 0000000..a86d9aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1792.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1793.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1793.png new file mode 100644 index 0000000..8e101f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1793.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1794.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1794.png new file mode 100644 index 0000000..c63f29a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1794.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1795.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1795.png new file mode 100644 index 0000000..cf4bdbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1795.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1796.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1796.png new file mode 100644 index 0000000..40e4302 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1796.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1797.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1797.png new file mode 100644 index 0000000..3c2a6ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1797.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1798.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1798.png new file mode 100644 index 0000000..3c991dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1798.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1799.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1799.png new file mode 100644 index 0000000..10437e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1799.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/18.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/18.png new file mode 100644 index 0000000..db05669 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/18.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/180.png new file mode 100644 index 0000000..02b8262 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1800.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1800.png new file mode 100644 index 0000000..d932bf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1800.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1801.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1801.png new file mode 100644 index 0000000..3edbf97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1801.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1802.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1802.png new file mode 100644 index 0000000..461d746 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1802.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1803.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1803.png new file mode 100644 index 0000000..fcfdc3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1803.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1804.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1804.png new file mode 100644 index 0000000..7a4da68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1804.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1805.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1805.png new file mode 100644 index 0000000..1d24c5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1805.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1806.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1806.png new file mode 100644 index 0000000..c8b1e87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1806.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1807.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1807.png new file mode 100644 index 0000000..9853864 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1807.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1808.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1808.png new file mode 100644 index 0000000..e131f6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1808.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1809.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1809.png new file mode 100644 index 0000000..f5614f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1809.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/181.png new file mode 100644 index 0000000..8324066 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1810.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1810.png new file mode 100644 index 0000000..3dd7ab1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1810.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1811.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1811.png new file mode 100644 index 0000000..2f46e68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1811.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1812.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1812.png new file mode 100644 index 0000000..57b15b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1812.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1813.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1813.png new file mode 100644 index 0000000..e4f2d8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1813.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1814.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1814.png new file mode 100644 index 0000000..70a0460 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1814.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1815.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1815.png new file mode 100644 index 0000000..30b51cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1815.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1816.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1816.png new file mode 100644 index 0000000..51667a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1816.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1817.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1817.png new file mode 100644 index 0000000..5978a62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1817.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1818.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1818.png new file mode 100644 index 0000000..afe753d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1818.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1819.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1819.png new file mode 100644 index 0000000..0cf944a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1819.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/182.png new file mode 100644 index 0000000..cf1825d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1820.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1820.png new file mode 100644 index 0000000..57657bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1820.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1821.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1821.png new file mode 100644 index 0000000..1851407 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1821.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1822.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1822.png new file mode 100644 index 0000000..c9cfce7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1822.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1823.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1823.png new file mode 100644 index 0000000..1436ca4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1823.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1824.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1824.png new file mode 100644 index 0000000..19dd555 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1824.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1825.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1825.png new file mode 100644 index 0000000..8e0eeae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1825.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1826.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1826.png new file mode 100644 index 0000000..b75da44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1826.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1827.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1827.png new file mode 100644 index 0000000..4163306 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1827.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1828.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1828.png new file mode 100644 index 0000000..14a438f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1828.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1829.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1829.png new file mode 100644 index 0000000..90fa88b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1829.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/183.png new file mode 100644 index 0000000..b53c0b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1830.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1830.png new file mode 100644 index 0000000..7814733 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1830.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1831.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1831.png new file mode 100644 index 0000000..486d196 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1831.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1832.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1832.png new file mode 100644 index 0000000..9c86256 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1832.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1833.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1833.png new file mode 100644 index 0000000..f089670 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1833.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1834.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1834.png new file mode 100644 index 0000000..1d58b99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1834.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1835.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1835.png new file mode 100644 index 0000000..0b4576a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1835.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1836.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1836.png new file mode 100644 index 0000000..9f1df89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1836.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1837.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1837.png new file mode 100644 index 0000000..d9df7f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1837.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1838.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1838.png new file mode 100644 index 0000000..8fc3e46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1838.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1839.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1839.png new file mode 100644 index 0000000..66d1f6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1839.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/184.png new file mode 100644 index 0000000..e646e0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1840.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1840.png new file mode 100644 index 0000000..a1934e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1840.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1841.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1841.png new file mode 100644 index 0000000..2d5887d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1841.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1842.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1842.png new file mode 100644 index 0000000..d0052e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1842.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1843.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1843.png new file mode 100644 index 0000000..823c76a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1843.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1844.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1844.png new file mode 100644 index 0000000..a9a9821 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1844.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1845.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1845.png new file mode 100644 index 0000000..be94d7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1845.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1846.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1846.png new file mode 100644 index 0000000..c21264c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1846.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1847.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1847.png new file mode 100644 index 0000000..5f894c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1847.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1848.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1848.png new file mode 100644 index 0000000..fcad111 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1848.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1849.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1849.png new file mode 100644 index 0000000..9d063dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1849.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/185.png new file mode 100644 index 0000000..9effd55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1850.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1850.png new file mode 100644 index 0000000..35b6eb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1850.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1851.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1851.png new file mode 100644 index 0000000..6a9a07e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1851.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1852.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1852.png new file mode 100644 index 0000000..c7c26f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1852.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1853.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1853.png new file mode 100644 index 0000000..3f353b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1853.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1854.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1854.png new file mode 100644 index 0000000..c6cdd2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1854.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1855.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1855.png new file mode 100644 index 0000000..029a84e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1855.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1856.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1856.png new file mode 100644 index 0000000..381b395 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1856.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1857.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1857.png new file mode 100644 index 0000000..c3f2f0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1857.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1858.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1858.png new file mode 100644 index 0000000..c1e2de1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1858.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1859.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1859.png new file mode 100644 index 0000000..19c28d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1859.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/186.png new file mode 100644 index 0000000..06b82b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1860.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1860.png new file mode 100644 index 0000000..bc1ca16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1860.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1861.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1861.png new file mode 100644 index 0000000..5307549 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1861.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1862.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1862.png new file mode 100644 index 0000000..dcb268a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1862.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1863.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1863.png new file mode 100644 index 0000000..1fc3436 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1863.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1864.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1864.png new file mode 100644 index 0000000..8c93339 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1864.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1865.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1865.png new file mode 100644 index 0000000..5c7abb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1865.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1866.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1866.png new file mode 100644 index 0000000..18805f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1866.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1867.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1867.png new file mode 100644 index 0000000..eb42968 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1867.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1868.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1868.png new file mode 100644 index 0000000..564e8a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1868.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1869.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1869.png new file mode 100644 index 0000000..658c79d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1869.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/187.png new file mode 100644 index 0000000..b287752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1870.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1870.png new file mode 100644 index 0000000..b9e3b01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1870.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1871.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1871.png new file mode 100644 index 0000000..cdd256a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1871.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1872.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1872.png new file mode 100644 index 0000000..c75ceaa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1872.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1873.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1873.png new file mode 100644 index 0000000..2fc0da7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1873.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1874.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1874.png new file mode 100644 index 0000000..546fd62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1874.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1875.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1875.png new file mode 100644 index 0000000..aa1ea32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1875.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1876.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1876.png new file mode 100644 index 0000000..42d6852 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1876.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1877.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1877.png new file mode 100644 index 0000000..6916dce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1877.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1878.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1878.png new file mode 100644 index 0000000..2a42e6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1878.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1879.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1879.png new file mode 100644 index 0000000..c2539d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1879.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/188.png new file mode 100644 index 0000000..f8724c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1880.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1880.png new file mode 100644 index 0000000..dc98075 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1880.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1881.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1881.png new file mode 100644 index 0000000..5c272af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1881.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1882.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1882.png new file mode 100644 index 0000000..a355d9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1882.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1883.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1883.png new file mode 100644 index 0000000..e0328a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1883.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1884.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1884.png new file mode 100644 index 0000000..be5953f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1884.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1885.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1885.png new file mode 100644 index 0000000..8af27b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1885.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1886.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1886.png new file mode 100644 index 0000000..30d81b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1886.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1887.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1887.png new file mode 100644 index 0000000..212cfcf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1887.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1888.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1888.png new file mode 100644 index 0000000..e2d7786 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1888.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1889.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1889.png new file mode 100644 index 0000000..7cd37df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1889.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/189.png new file mode 100644 index 0000000..accac0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1890.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1890.png new file mode 100644 index 0000000..70e0133 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1890.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1891.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1891.png new file mode 100644 index 0000000..fec76dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1891.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1892.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1892.png new file mode 100644 index 0000000..1fc35d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1892.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1893.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1893.png new file mode 100644 index 0000000..626e306 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1893.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1894.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1894.png new file mode 100644 index 0000000..3416d1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1894.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1895.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1895.png new file mode 100644 index 0000000..9d5273d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1895.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1896.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1896.png new file mode 100644 index 0000000..5c12c84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1896.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1897.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1897.png new file mode 100644 index 0000000..e3de729 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1897.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1898.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1898.png new file mode 100644 index 0000000..52f4fa3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1898.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1899.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1899.png new file mode 100644 index 0000000..a944ede Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1899.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/19.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/19.png new file mode 100644 index 0000000..c37665e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/19.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/190.png new file mode 100644 index 0000000..e7a863f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1900.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1900.png new file mode 100644 index 0000000..95c3fc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1900.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1901.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1901.png new file mode 100644 index 0000000..5ca2336 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1901.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1902.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1902.png new file mode 100644 index 0000000..f0ced28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1902.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1903.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1903.png new file mode 100644 index 0000000..307e784 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1903.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1904.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1904.png new file mode 100644 index 0000000..1ea93cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1904.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1905.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1905.png new file mode 100644 index 0000000..71aceae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1905.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1906.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1906.png new file mode 100644 index 0000000..6edd62c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1906.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1907.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1907.png new file mode 100644 index 0000000..d5e6970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1907.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1908.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1908.png new file mode 100644 index 0000000..09cddb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1908.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1909.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1909.png new file mode 100644 index 0000000..e3b7764 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1909.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/191.png new file mode 100644 index 0000000..7431d94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1910.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1910.png new file mode 100644 index 0000000..0822dcc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1910.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1911.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1911.png new file mode 100644 index 0000000..037a4ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1911.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1912.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1912.png new file mode 100644 index 0000000..9a4f7f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1912.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1913.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1913.png new file mode 100644 index 0000000..a49cb52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1913.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1914.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1914.png new file mode 100644 index 0000000..803e3a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1914.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1915.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1915.png new file mode 100644 index 0000000..28a51ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1915.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1916.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1916.png new file mode 100644 index 0000000..8fa2b20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1916.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1917.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1917.png new file mode 100644 index 0000000..d3d9b0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1917.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1918.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1918.png new file mode 100644 index 0000000..287f409 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1918.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1919.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1919.png new file mode 100644 index 0000000..0eadede Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1919.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/192.png new file mode 100644 index 0000000..6e0e47a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1920.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1920.png new file mode 100644 index 0000000..24c1bd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1920.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1921.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1921.png new file mode 100644 index 0000000..b00de26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1921.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1922.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1922.png new file mode 100644 index 0000000..918a824 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1922.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1923.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1923.png new file mode 100644 index 0000000..8c5de76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1923.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1924.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1924.png new file mode 100644 index 0000000..09aa00f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1924.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1925.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1925.png new file mode 100644 index 0000000..cda0c84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1925.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1926.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1926.png new file mode 100644 index 0000000..bbe0dd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1926.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1927.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1927.png new file mode 100644 index 0000000..930d895 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1927.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1928.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1928.png new file mode 100644 index 0000000..7ce4bc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1928.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1929.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1929.png new file mode 100644 index 0000000..6c39d1c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1929.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/193.png new file mode 100644 index 0000000..ef68e26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1930.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1930.png new file mode 100644 index 0000000..57a29aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1930.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1931.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1931.png new file mode 100644 index 0000000..6bd66a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1931.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1932.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1932.png new file mode 100644 index 0000000..9755f2a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1932.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1933.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1933.png new file mode 100644 index 0000000..54a621f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1933.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1934.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1934.png new file mode 100644 index 0000000..3a3faf1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1934.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1935.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1935.png new file mode 100644 index 0000000..d016ebe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1935.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1936.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1936.png new file mode 100644 index 0000000..4b20c59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1936.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1937.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1937.png new file mode 100644 index 0000000..a8be89e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1937.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1938.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1938.png new file mode 100644 index 0000000..8ed6b6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1938.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1939.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1939.png new file mode 100644 index 0000000..54d48e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1939.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/194.png new file mode 100644 index 0000000..8191b4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1940.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1940.png new file mode 100644 index 0000000..6afe81d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1940.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1941.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1941.png new file mode 100644 index 0000000..4410c5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1941.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1942.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1942.png new file mode 100644 index 0000000..3462647 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1942.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1943.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1943.png new file mode 100644 index 0000000..66378b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1943.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1944.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1944.png new file mode 100644 index 0000000..b42a294 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1944.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1945.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1945.png new file mode 100644 index 0000000..b9955ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1945.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1946.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1946.png new file mode 100644 index 0000000..3832e1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1946.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1947.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1947.png new file mode 100644 index 0000000..1f73ccc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1947.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1948.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1948.png new file mode 100644 index 0000000..a930970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1948.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1949.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1949.png new file mode 100644 index 0000000..21e04bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1949.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/195.png new file mode 100644 index 0000000..7645e0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1950.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1950.png new file mode 100644 index 0000000..baceb4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1950.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1951.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1951.png new file mode 100644 index 0000000..f23cfb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1951.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1952.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1952.png new file mode 100644 index 0000000..007f714 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1952.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1953.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1953.png new file mode 100644 index 0000000..846c3e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1953.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1954.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1954.png new file mode 100644 index 0000000..651211b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1954.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1955.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1955.png new file mode 100644 index 0000000..bfa27ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1955.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1956.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1956.png new file mode 100644 index 0000000..1032cb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1956.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1957.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1957.png new file mode 100644 index 0000000..2f4f752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1957.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1958.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1958.png new file mode 100644 index 0000000..d426a56 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1958.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1959.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1959.png new file mode 100644 index 0000000..5bbdf9d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1959.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/196.png new file mode 100644 index 0000000..351bbd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1960.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1960.png new file mode 100644 index 0000000..4bc9461 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1960.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1961.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1961.png new file mode 100644 index 0000000..046ad19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1961.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1962.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1962.png new file mode 100644 index 0000000..d4f9443 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1962.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1963.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1963.png new file mode 100644 index 0000000..9d21262 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1963.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1964.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1964.png new file mode 100644 index 0000000..8994db6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1964.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1965.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1965.png new file mode 100644 index 0000000..8b25b7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1965.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1966.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1966.png new file mode 100644 index 0000000..fca8534 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1966.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1967.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1967.png new file mode 100644 index 0000000..f57e59a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1967.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1968.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1968.png new file mode 100644 index 0000000..343eeb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1968.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1969.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1969.png new file mode 100644 index 0000000..30e7bc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1969.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/197.png new file mode 100644 index 0000000..e4023a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1970.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1970.png new file mode 100644 index 0000000..733b838 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1970.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1971.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1971.png new file mode 100644 index 0000000..e609971 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1971.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1972.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1972.png new file mode 100644 index 0000000..ced53d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1972.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1973.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1973.png new file mode 100644 index 0000000..479758f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1973.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1974.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1974.png new file mode 100644 index 0000000..80d7736 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1974.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1975.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1975.png new file mode 100644 index 0000000..a2e2b84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1975.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1976.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1976.png new file mode 100644 index 0000000..31de62a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1976.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1977.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1977.png new file mode 100644 index 0000000..5ff1e16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1977.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1978.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1978.png new file mode 100644 index 0000000..3e9d970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1978.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1979.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1979.png new file mode 100644 index 0000000..890f2d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1979.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/198.png new file mode 100644 index 0000000..67bcb02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1980.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1980.png new file mode 100644 index 0000000..4d0eb18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1980.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1981.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1981.png new file mode 100644 index 0000000..0dc2405 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1981.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1982.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1982.png new file mode 100644 index 0000000..0aabe7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1982.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1983.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1983.png new file mode 100644 index 0000000..32f8b11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1983.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1984.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1984.png new file mode 100644 index 0000000..bf59a33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1984.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1985.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1985.png new file mode 100644 index 0000000..c5bc1a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1985.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1986.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1986.png new file mode 100644 index 0000000..551784a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1986.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1987.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1987.png new file mode 100644 index 0000000..f3a8b21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1987.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1988.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1988.png new file mode 100644 index 0000000..b67fecf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1988.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1989.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1989.png new file mode 100644 index 0000000..080d1c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1989.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/199.png new file mode 100644 index 0000000..bbc1a44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1990.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1990.png new file mode 100644 index 0000000..da0dc5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1990.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1991.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1991.png new file mode 100644 index 0000000..0d301c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1991.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1992.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1992.png new file mode 100644 index 0000000..d55946c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1992.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1993.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1993.png new file mode 100644 index 0000000..cfcaa94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1993.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1994.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1994.png new file mode 100644 index 0000000..96917ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1994.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1995.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1995.png new file mode 100644 index 0000000..d8b43d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1995.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1996.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1996.png new file mode 100644 index 0000000..91c2cfe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1996.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1997.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1997.png new file mode 100644 index 0000000..938ac04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1997.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1998.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1998.png new file mode 100644 index 0000000..b047af4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1998.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1999.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1999.png new file mode 100644 index 0000000..b31ad71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/1999.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2.png new file mode 100644 index 0000000..e7e2c87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/20.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/20.png new file mode 100644 index 0000000..78a5e6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/20.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/200.png new file mode 100644 index 0000000..7f0f7f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2000.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2000.png new file mode 100644 index 0000000..d0163a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2000.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2001.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2001.png new file mode 100644 index 0000000..8828a35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2001.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2002.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2002.png new file mode 100644 index 0000000..dd209c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2002.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2003.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2003.png new file mode 100644 index 0000000..7b079d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2003.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2004.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2004.png new file mode 100644 index 0000000..a9d7f7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2004.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2005.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2005.png new file mode 100644 index 0000000..7b7fd34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2005.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2006.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2006.png new file mode 100644 index 0000000..1a857d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2006.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2007.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2007.png new file mode 100644 index 0000000..448309e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2007.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2008.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2008.png new file mode 100644 index 0000000..190c0ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2008.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2009.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2009.png new file mode 100644 index 0000000..0cd93c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2009.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/201.png new file mode 100644 index 0000000..e15bfd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2010.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2010.png new file mode 100644 index 0000000..41b14cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2010.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2011.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2011.png new file mode 100644 index 0000000..f2df7d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2011.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2012.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2012.png new file mode 100644 index 0000000..7d9148a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2012.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2013.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2013.png new file mode 100644 index 0000000..ee8b87a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2013.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2014.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2014.png new file mode 100644 index 0000000..7a1dbe6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2014.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2015.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2015.png new file mode 100644 index 0000000..e648e4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2015.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2016.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2016.png new file mode 100644 index 0000000..294e5d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2016.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2017.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2017.png new file mode 100644 index 0000000..035c059 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2017.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2018.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2018.png new file mode 100644 index 0000000..103f4ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2018.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2019.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2019.png new file mode 100644 index 0000000..5f74797 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2019.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/202.png new file mode 100644 index 0000000..594d2f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2020.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2020.png new file mode 100644 index 0000000..6fa649c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2020.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2021.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2021.png new file mode 100644 index 0000000..316cab8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2021.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2022.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2022.png new file mode 100644 index 0000000..e873184 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2022.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2023.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2023.png new file mode 100644 index 0000000..807aee8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2023.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2024.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2024.png new file mode 100644 index 0000000..684ee41 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2024.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2025.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2025.png new file mode 100644 index 0000000..340af15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2025.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2026.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2026.png new file mode 100644 index 0000000..75c00fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2026.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2027.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2027.png new file mode 100644 index 0000000..e1197fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2027.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2028.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2028.png new file mode 100644 index 0000000..896a153 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2028.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2029.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2029.png new file mode 100644 index 0000000..6a392d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2029.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/203.png new file mode 100644 index 0000000..f99c052 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2030.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2030.png new file mode 100644 index 0000000..a9ae0e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2030.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2031.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2031.png new file mode 100644 index 0000000..853fcaf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2031.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2032.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2032.png new file mode 100644 index 0000000..3c727aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2032.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2033.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2033.png new file mode 100644 index 0000000..6e218e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2033.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2034.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2034.png new file mode 100644 index 0000000..5bdc55a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2034.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2035.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2035.png new file mode 100644 index 0000000..a47bba3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2035.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2036.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2036.png new file mode 100644 index 0000000..dffd823 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2036.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2037.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2037.png new file mode 100644 index 0000000..c5c3f35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2037.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2038.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2038.png new file mode 100644 index 0000000..b515d63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2038.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2039.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2039.png new file mode 100644 index 0000000..086fcf1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2039.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/204.png new file mode 100644 index 0000000..d6eba80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2040.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2040.png new file mode 100644 index 0000000..0dac8e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2040.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2041.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2041.png new file mode 100644 index 0000000..ea11d84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2041.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2042.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2042.png new file mode 100644 index 0000000..024df6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2042.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2043.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2043.png new file mode 100644 index 0000000..589ece5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2043.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2044.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2044.png new file mode 100644 index 0000000..4f46cc3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2044.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2045.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2045.png new file mode 100644 index 0000000..76b1dbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2045.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2046.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2046.png new file mode 100644 index 0000000..d63196f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2046.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2047.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2047.png new file mode 100644 index 0000000..1e8cfcc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2047.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2048.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2048.png new file mode 100644 index 0000000..2cd64fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2048.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2049.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2049.png new file mode 100644 index 0000000..1932714 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2049.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/205.png new file mode 100644 index 0000000..563c0ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2050.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2050.png new file mode 100644 index 0000000..1c26b1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2050.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2051.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2051.png new file mode 100644 index 0000000..c9efa26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2051.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2052.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2052.png new file mode 100644 index 0000000..0d7781a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2052.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2053.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2053.png new file mode 100644 index 0000000..2e33ad7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2053.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2054.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2054.png new file mode 100644 index 0000000..596df76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2054.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2055.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2055.png new file mode 100644 index 0000000..95165dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2055.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2056.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2056.png new file mode 100644 index 0000000..17ee4d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2056.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2057.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2057.png new file mode 100644 index 0000000..c23735c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2057.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2058.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2058.png new file mode 100644 index 0000000..f5d7629 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2058.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2059.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2059.png new file mode 100644 index 0000000..6e4bdc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2059.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/206.png new file mode 100644 index 0000000..76facfb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2060.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2060.png new file mode 100644 index 0000000..d2c7896 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2060.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2061.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2061.png new file mode 100644 index 0000000..3b9d71d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2061.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2062.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2062.png new file mode 100644 index 0000000..ca1cd63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2062.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2063.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2063.png new file mode 100644 index 0000000..891da34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2063.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2064.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2064.png new file mode 100644 index 0000000..7c85914 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2064.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2065.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2065.png new file mode 100644 index 0000000..e7df3b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2065.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2066.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2066.png new file mode 100644 index 0000000..062e268 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2066.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2067.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2067.png new file mode 100644 index 0000000..2de2f51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2067.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2068.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2068.png new file mode 100644 index 0000000..197fbc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2068.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2069.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2069.png new file mode 100644 index 0000000..eef310a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2069.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/207.png new file mode 100644 index 0000000..fcd89e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2070.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2070.png new file mode 100644 index 0000000..fbd8a94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2070.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2071.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2071.png new file mode 100644 index 0000000..ce3eb18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2071.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2072.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2072.png new file mode 100644 index 0000000..90516c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2072.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2073.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2073.png new file mode 100644 index 0000000..b06dd19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2073.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2074.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2074.png new file mode 100644 index 0000000..6586c18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2074.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2075.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2075.png new file mode 100644 index 0000000..e25fa1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2075.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2076.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2076.png new file mode 100644 index 0000000..5d0604b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2076.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2077.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2077.png new file mode 100644 index 0000000..0803009 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2077.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2078.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2078.png new file mode 100644 index 0000000..6a1fdf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2078.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2079.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2079.png new file mode 100644 index 0000000..c3784d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2079.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/208.png new file mode 100644 index 0000000..de76172 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2080.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2080.png new file mode 100644 index 0000000..a4a8bb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2080.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2081.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2081.png new file mode 100644 index 0000000..1fd6f80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2081.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2082.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2082.png new file mode 100644 index 0000000..f5e7e84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2082.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2083.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2083.png new file mode 100644 index 0000000..f35431b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2083.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2084.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2084.png new file mode 100644 index 0000000..db70f55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2084.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2085.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2085.png new file mode 100644 index 0000000..d2224d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2085.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2086.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2086.png new file mode 100644 index 0000000..cb30e35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2086.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2087.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2087.png new file mode 100644 index 0000000..583b6e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2087.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2088.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2088.png new file mode 100644 index 0000000..8a0efef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2088.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2089.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2089.png new file mode 100644 index 0000000..6aad4e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2089.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/209.png new file mode 100644 index 0000000..d7e6005 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2090.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2090.png new file mode 100644 index 0000000..9b47037 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2090.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2091.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2091.png new file mode 100644 index 0000000..f684289 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2091.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2092.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2092.png new file mode 100644 index 0000000..e4d334b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2092.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2093.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2093.png new file mode 100644 index 0000000..ab5ff2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2093.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2094.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2094.png new file mode 100644 index 0000000..4f70a01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2094.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2095.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2095.png new file mode 100644 index 0000000..be51cae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2095.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2096.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2096.png new file mode 100644 index 0000000..e9889a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2096.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2097.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2097.png new file mode 100644 index 0000000..5d9e988 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2097.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2098.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2098.png new file mode 100644 index 0000000..a7e1b19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2098.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2099.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2099.png new file mode 100644 index 0000000..18d0899 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2099.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/21.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/21.png new file mode 100644 index 0000000..69f6183 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/21.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/210.png new file mode 100644 index 0000000..20c7ad2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2100.png new file mode 100644 index 0000000..70cfc26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2101.png new file mode 100644 index 0000000..0a5f8b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2102.png new file mode 100644 index 0000000..07bd5ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2103.png new file mode 100644 index 0000000..99345ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2104.png new file mode 100644 index 0000000..c324cb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2105.png new file mode 100644 index 0000000..29ea456 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2106.png new file mode 100644 index 0000000..d09183a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2107.png new file mode 100644 index 0000000..ac3e0c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2108.png new file mode 100644 index 0000000..0a84a29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2109.png new file mode 100644 index 0000000..6aa9372 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/211.png new file mode 100644 index 0000000..e20c4b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2110.png new file mode 100644 index 0000000..39554df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2111.png new file mode 100644 index 0000000..706c200 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2112.png new file mode 100644 index 0000000..0324762 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2113.png new file mode 100644 index 0000000..8fbdfc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2114.png new file mode 100644 index 0000000..0d52057 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2115.png new file mode 100644 index 0000000..86fe202 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2116.png new file mode 100644 index 0000000..fb0ef7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2117.png new file mode 100644 index 0000000..088f885 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2118.png new file mode 100644 index 0000000..54bea92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2119.png new file mode 100644 index 0000000..331c1bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/212.png new file mode 100644 index 0000000..793fadf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2120.png new file mode 100644 index 0000000..5f1ade5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2121.png new file mode 100644 index 0000000..233bed4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2122.png new file mode 100644 index 0000000..9fb0bb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2123.png new file mode 100644 index 0000000..7894f6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2124.png new file mode 100644 index 0000000..e1d60c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2125.png new file mode 100644 index 0000000..f3c9dc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2126.png new file mode 100644 index 0000000..994a9b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2127.png new file mode 100644 index 0000000..e5ece5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2128.png new file mode 100644 index 0000000..69e5060 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2129.png new file mode 100644 index 0000000..e5b84ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/213.png new file mode 100644 index 0000000..25696b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2130.png new file mode 100644 index 0000000..0cec277 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2131.png new file mode 100644 index 0000000..c530b85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2132.png new file mode 100644 index 0000000..ef383fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2133.png new file mode 100644 index 0000000..c5d07aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2134.png new file mode 100644 index 0000000..68dffa9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2135.png new file mode 100644 index 0000000..02c3eaa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2136.png new file mode 100644 index 0000000..06e0e60 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2137.png new file mode 100644 index 0000000..1b5fc5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2138.png new file mode 100644 index 0000000..5b3eb2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2139.png new file mode 100644 index 0000000..ee721e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/214.png new file mode 100644 index 0000000..6cdbee6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2140.png new file mode 100644 index 0000000..ff8d06e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2141.png new file mode 100644 index 0000000..f300167 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2142.png new file mode 100644 index 0000000..07a59ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2143.png new file mode 100644 index 0000000..f4a8d95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2144.png new file mode 100644 index 0000000..23a62a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2145.png new file mode 100644 index 0000000..c221e75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2146.png new file mode 100644 index 0000000..40508a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2147.png new file mode 100644 index 0000000..4741f0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2148.png new file mode 100644 index 0000000..1d29d2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2149.png new file mode 100644 index 0000000..20c6685 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/215.png new file mode 100644 index 0000000..f7b087c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2150.png new file mode 100644 index 0000000..8209a91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2151.png new file mode 100644 index 0000000..70f7532 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2152.png new file mode 100644 index 0000000..2e93509 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2153.png new file mode 100644 index 0000000..50e5a64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2154.png new file mode 100644 index 0000000..f85fe08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2155.png new file mode 100644 index 0000000..099e126 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2156.png new file mode 100644 index 0000000..e6e1a58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2157.png new file mode 100644 index 0000000..1a337d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2158.png new file mode 100644 index 0000000..ff1ebc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2159.png new file mode 100644 index 0000000..558106c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/216.png new file mode 100644 index 0000000..090d5c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2160.png new file mode 100644 index 0000000..4ffd1c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2161.png new file mode 100644 index 0000000..64ac302 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2162.png new file mode 100644 index 0000000..2c5dcf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2163.png new file mode 100644 index 0000000..d4f1077 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2164.png new file mode 100644 index 0000000..a9ec77f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2165.png new file mode 100644 index 0000000..135bb7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2166.png new file mode 100644 index 0000000..28f8354 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2167.png new file mode 100644 index 0000000..d4acb24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2168.png new file mode 100644 index 0000000..8e62127 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2169.png new file mode 100644 index 0000000..3ea731d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/217.png new file mode 100644 index 0000000..dd05c72 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2170.png new file mode 100644 index 0000000..087f42a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2171.png new file mode 100644 index 0000000..978b81b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2172.png new file mode 100644 index 0000000..0a89ee6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2173.png new file mode 100644 index 0000000..4fa24db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2174.png new file mode 100644 index 0000000..9644edb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2175.png new file mode 100644 index 0000000..dbe980e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2176.png new file mode 100644 index 0000000..8373d50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2177.png new file mode 100644 index 0000000..b9a9b66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2178.png new file mode 100644 index 0000000..fffbd01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2179.png new file mode 100644 index 0000000..82b6d74 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/218.png new file mode 100644 index 0000000..a73ee6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2180.png new file mode 100644 index 0000000..b281dbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2181.png new file mode 100644 index 0000000..15d37e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2182.png new file mode 100644 index 0000000..0089bd2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2183.png new file mode 100644 index 0000000..cdadc5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2184.png new file mode 100644 index 0000000..d7f585a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2185.png new file mode 100644 index 0000000..9be023e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2186.png new file mode 100644 index 0000000..7c9a128 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2187.png new file mode 100644 index 0000000..7129379 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2188.png new file mode 100644 index 0000000..71f3824 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2189.png new file mode 100644 index 0000000..1258a02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/219.png new file mode 100644 index 0000000..1056c75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2190.png new file mode 100644 index 0000000..a51e2a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2191.png new file mode 100644 index 0000000..bc492d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2192.png new file mode 100644 index 0000000..384faeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2193.png new file mode 100644 index 0000000..373390c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2194.png new file mode 100644 index 0000000..6b23f51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2195.png new file mode 100644 index 0000000..d0d5b7d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2196.png new file mode 100644 index 0000000..60decf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2197.png new file mode 100644 index 0000000..293a07a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2198.png new file mode 100644 index 0000000..0c167a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2199.png new file mode 100644 index 0000000..2093d93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/22.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/22.png new file mode 100644 index 0000000..c91513b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/22.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/220.png new file mode 100644 index 0000000..fd80b3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2200.png new file mode 100644 index 0000000..17199fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2201.png new file mode 100644 index 0000000..5ce6311 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2202.png new file mode 100644 index 0000000..d8dee1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2203.png new file mode 100644 index 0000000..7d71a54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2204.png new file mode 100644 index 0000000..ff1b45b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2205.png new file mode 100644 index 0000000..2b80c0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2206.png new file mode 100644 index 0000000..7ad5ca5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2207.png new file mode 100644 index 0000000..d9c0e0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2208.png new file mode 100644 index 0000000..0325bf8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2209.png new file mode 100644 index 0000000..7a003b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/221.png new file mode 100644 index 0000000..9834482 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2210.png new file mode 100644 index 0000000..6cfeafa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2211.png new file mode 100644 index 0000000..dfe74c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2212.png new file mode 100644 index 0000000..cfc409a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2213.png new file mode 100644 index 0000000..50d9beb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2214.png new file mode 100644 index 0000000..09f30cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2215.png new file mode 100644 index 0000000..d61f832 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2216.png new file mode 100644 index 0000000..63dc49f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2217.png new file mode 100644 index 0000000..e76efdc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2218.png new file mode 100644 index 0000000..41a3631 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2219.png new file mode 100644 index 0000000..75a2280 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/222.png new file mode 100644 index 0000000..2170881 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2220.png new file mode 100644 index 0000000..37772c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2221.png new file mode 100644 index 0000000..331f762 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2222.png new file mode 100644 index 0000000..f24d896 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2223.png new file mode 100644 index 0000000..0a5e850 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2224.png new file mode 100644 index 0000000..3fabc67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2225.png new file mode 100644 index 0000000..2465469 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2226.png new file mode 100644 index 0000000..480c0fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2227.png new file mode 100644 index 0000000..65cdfa2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2228.png new file mode 100644 index 0000000..156113e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2229.png new file mode 100644 index 0000000..571f3fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/223.png new file mode 100644 index 0000000..ce6bc3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2230.png new file mode 100644 index 0000000..0d0949c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2231.png new file mode 100644 index 0000000..198c8b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2232.png new file mode 100644 index 0000000..3934be5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2233.png new file mode 100644 index 0000000..2b6ca26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2234.png new file mode 100644 index 0000000..65f0f9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2235.png new file mode 100644 index 0000000..88df78f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2236.png new file mode 100644 index 0000000..da7a782 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2237.png new file mode 100644 index 0000000..5c21d8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2238.png new file mode 100644 index 0000000..2ab964a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2239.png new file mode 100644 index 0000000..7ed603f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/224.png new file mode 100644 index 0000000..6f4aeb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2240.png new file mode 100644 index 0000000..f4da7c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2241.png new file mode 100644 index 0000000..fdda422 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2242.png new file mode 100644 index 0000000..4f8bdc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2243.png new file mode 100644 index 0000000..9bb1788 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2244.png new file mode 100644 index 0000000..00c1ca8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2245.png new file mode 100644 index 0000000..b86e6b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2246.png new file mode 100644 index 0000000..1ec5922 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2247.png new file mode 100644 index 0000000..9cc97cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2248.png new file mode 100644 index 0000000..0d9496d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2249.png new file mode 100644 index 0000000..0476a5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/225.png new file mode 100644 index 0000000..bd8d3fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2250.png new file mode 100644 index 0000000..d4a1a1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2251.png new file mode 100644 index 0000000..ff94710 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2252.png new file mode 100644 index 0000000..d62f08e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2253.png new file mode 100644 index 0000000..82b7ed5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2254.png new file mode 100644 index 0000000..2abcdd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2255.png new file mode 100644 index 0000000..a63fbe7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2256.png new file mode 100644 index 0000000..4186a25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2257.png new file mode 100644 index 0000000..8fef98b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2258.png new file mode 100644 index 0000000..fb00167 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2259.png new file mode 100644 index 0000000..af07016 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/226.png new file mode 100644 index 0000000..cd3e1a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2260.png new file mode 100644 index 0000000..6b516de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2261.png new file mode 100644 index 0000000..b118f45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2262.png new file mode 100644 index 0000000..6b33b38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2263.png new file mode 100644 index 0000000..3843927 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2264.png new file mode 100644 index 0000000..b430c1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2265.png new file mode 100644 index 0000000..c2b5455 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2266.png new file mode 100644 index 0000000..1c2b323 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2267.png new file mode 100644 index 0000000..320aab7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2268.png new file mode 100644 index 0000000..67f28aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2269.png new file mode 100644 index 0000000..3b40ff2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/227.png new file mode 100644 index 0000000..6bf8a7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2270.png new file mode 100644 index 0000000..6fd3a4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2271.png new file mode 100644 index 0000000..e7a287a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2272.png new file mode 100644 index 0000000..6ea66c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2273.png new file mode 100644 index 0000000..e11c0a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2274.png new file mode 100644 index 0000000..f1f6801 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2275.png new file mode 100644 index 0000000..467d242 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2276.png new file mode 100644 index 0000000..6afd96f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2277.png new file mode 100644 index 0000000..5439edf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2278.png new file mode 100644 index 0000000..be75a2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2279.png new file mode 100644 index 0000000..5cee748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/228.png new file mode 100644 index 0000000..fa5396e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2280.png new file mode 100644 index 0000000..acd0a27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2281.png new file mode 100644 index 0000000..17a8dd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2282.png new file mode 100644 index 0000000..0ffd9d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2283.png new file mode 100644 index 0000000..ca32cc6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2284.png new file mode 100644 index 0000000..e93a1bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2285.png new file mode 100644 index 0000000..a7d1fb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2286.png new file mode 100644 index 0000000..7a96575 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2287.png new file mode 100644 index 0000000..e5fe99e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2288.png new file mode 100644 index 0000000..14bc5a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2289.png new file mode 100644 index 0000000..25870a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/229.png new file mode 100644 index 0000000..e81286f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2290.png new file mode 100644 index 0000000..1d1816b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2291.png new file mode 100644 index 0000000..4f2d101 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2292.png new file mode 100644 index 0000000..9ee6d6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2293.png new file mode 100644 index 0000000..f089db4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2294.png new file mode 100644 index 0000000..d0796f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2295.png new file mode 100644 index 0000000..1d0a65e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2296.png new file mode 100644 index 0000000..d7279a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2297.png new file mode 100644 index 0000000..77eaa30 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2298.png new file mode 100644 index 0000000..485a156 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2299.png new file mode 100644 index 0000000..72a829d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/23.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/23.png new file mode 100644 index 0000000..d223a83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/23.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/230.png new file mode 100644 index 0000000..b94bb5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2300.png new file mode 100644 index 0000000..d3e2f31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2301.png new file mode 100644 index 0000000..e0b0939 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2302.png new file mode 100644 index 0000000..096aefb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2303.png new file mode 100644 index 0000000..7ce0866 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2304.png new file mode 100644 index 0000000..5eb2791 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2305.png new file mode 100644 index 0000000..f6acc4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2306.png new file mode 100644 index 0000000..0346aee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2307.png new file mode 100644 index 0000000..925c8d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2308.png new file mode 100644 index 0000000..18c2c25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2309.png new file mode 100644 index 0000000..7497de8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/231.png new file mode 100644 index 0000000..6e7289a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2310.png new file mode 100644 index 0000000..bf0d5d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2311.png new file mode 100644 index 0000000..6c9523c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2312.png new file mode 100644 index 0000000..54572c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2313.png new file mode 100644 index 0000000..dd3c91c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2314.png new file mode 100644 index 0000000..93a3abd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2315.png new file mode 100644 index 0000000..a5775bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2316.png new file mode 100644 index 0000000..c2266b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2317.png new file mode 100644 index 0000000..2903312 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2318.png new file mode 100644 index 0000000..510dd2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2319.png new file mode 100644 index 0000000..66adc37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/232.png new file mode 100644 index 0000000..a6df684 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2320.png new file mode 100644 index 0000000..79322a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2321.png new file mode 100644 index 0000000..3976e49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2322.png new file mode 100644 index 0000000..b886ba6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2323.png new file mode 100644 index 0000000..ee677da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2324.png new file mode 100644 index 0000000..d515798 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2325.png new file mode 100644 index 0000000..1e2681e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2326.png new file mode 100644 index 0000000..3bccb4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2327.png new file mode 100644 index 0000000..6e94301 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2328.png new file mode 100644 index 0000000..c72bd2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2329.png new file mode 100644 index 0000000..ecb6588 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/233.png new file mode 100644 index 0000000..a8fc0bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2330.png new file mode 100644 index 0000000..c9ca3aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2331.png new file mode 100644 index 0000000..14cf585 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2332.png new file mode 100644 index 0000000..d15d6dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2333.png new file mode 100644 index 0000000..479bb52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2334.png new file mode 100644 index 0000000..fc0af18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2335.png new file mode 100644 index 0000000..a8e3a31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2336.png new file mode 100644 index 0000000..8972cd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2337.png new file mode 100644 index 0000000..4937f48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2338.png new file mode 100644 index 0000000..0d6d367 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2339.png new file mode 100644 index 0000000..ea4176f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/234.png new file mode 100644 index 0000000..44b031c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2340.png new file mode 100644 index 0000000..d3d2c05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2341.png new file mode 100644 index 0000000..2470ace Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2342.png new file mode 100644 index 0000000..d6ed11c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2343.png new file mode 100644 index 0000000..94d394b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2344.png new file mode 100644 index 0000000..5435acd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2345.png new file mode 100644 index 0000000..a652589 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2346.png new file mode 100644 index 0000000..ba6d878 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2347.png new file mode 100644 index 0000000..2d57c78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2348.png new file mode 100644 index 0000000..5216573 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2349.png new file mode 100644 index 0000000..a6a82da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/235.png new file mode 100644 index 0000000..44e7bf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2350.png new file mode 100644 index 0000000..fd7f251 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2351.png new file mode 100644 index 0000000..4bb0cd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2352.png new file mode 100644 index 0000000..f7ec77f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2353.png new file mode 100644 index 0000000..2567f06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2354.png new file mode 100644 index 0000000..d137b55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2355.png new file mode 100644 index 0000000..d32f3e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2356.png new file mode 100644 index 0000000..893af08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2357.png new file mode 100644 index 0000000..bab6014 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2358.png new file mode 100644 index 0000000..26bd254 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2359.png new file mode 100644 index 0000000..0709ce7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/236.png new file mode 100644 index 0000000..0874e5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2360.png new file mode 100644 index 0000000..fa24d4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2361.png new file mode 100644 index 0000000..b83c172 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2362.png new file mode 100644 index 0000000..a4ee698 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2363.png new file mode 100644 index 0000000..4b99c2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2364.png new file mode 100644 index 0000000..80dda7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2365.png new file mode 100644 index 0000000..a896450 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2366.png new file mode 100644 index 0000000..87a2a5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2367.png new file mode 100644 index 0000000..bb79b5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2368.png new file mode 100644 index 0000000..3d0d8aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2369.png new file mode 100644 index 0000000..3586538 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/237.png new file mode 100644 index 0000000..47ad0a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2370.png new file mode 100644 index 0000000..1e49eba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2371.png new file mode 100644 index 0000000..6797aa1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2372.png new file mode 100644 index 0000000..5354328 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2373.png new file mode 100644 index 0000000..8a2d235 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2374.png new file mode 100644 index 0000000..77ac952 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2375.png new file mode 100644 index 0000000..162eab9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2376.png new file mode 100644 index 0000000..af45b3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2377.png new file mode 100644 index 0000000..5376ec4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2378.png new file mode 100644 index 0000000..a341308 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2379.png new file mode 100644 index 0000000..f5e84a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/238.png new file mode 100644 index 0000000..5675615 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2380.png new file mode 100644 index 0000000..8611dac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2381.png new file mode 100644 index 0000000..f6b89aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2382.png new file mode 100644 index 0000000..7b8f165 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2383.png new file mode 100644 index 0000000..b093a7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2384.png new file mode 100644 index 0000000..85bc619 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2385.png new file mode 100644 index 0000000..f765daf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2386.png new file mode 100644 index 0000000..0b26447 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2387.png new file mode 100644 index 0000000..58e69fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2388.png new file mode 100644 index 0000000..a499a49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2389.png new file mode 100644 index 0000000..2c6d765 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/239.png new file mode 100644 index 0000000..282f94a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2390.png new file mode 100644 index 0000000..804f96a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2391.png new file mode 100644 index 0000000..02237bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2392.png new file mode 100644 index 0000000..414e36d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2393.png new file mode 100644 index 0000000..3aa4ba9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2394.png new file mode 100644 index 0000000..553ec7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2395.png new file mode 100644 index 0000000..2278aed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2396.png new file mode 100644 index 0000000..488e9a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2397.png new file mode 100644 index 0000000..8e9b687 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2398.png new file mode 100644 index 0000000..bd55cf5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2399.png new file mode 100644 index 0000000..53d5471 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/24.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/24.png new file mode 100644 index 0000000..12db7d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/24.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/240.png new file mode 100644 index 0000000..49b1ac7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2400.png new file mode 100644 index 0000000..f039daa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2401.png new file mode 100644 index 0000000..03bcbf5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2402.png new file mode 100644 index 0000000..d8d4043 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2403.png new file mode 100644 index 0000000..4d4f16d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2404.png new file mode 100644 index 0000000..77dfbf6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2405.png new file mode 100644 index 0000000..4b09405 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2406.png new file mode 100644 index 0000000..8fe7ac8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2407.png new file mode 100644 index 0000000..c628b52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2408.png new file mode 100644 index 0000000..c05d800 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2409.png new file mode 100644 index 0000000..7951f0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/241.png new file mode 100644 index 0000000..492a89c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2410.png new file mode 100644 index 0000000..04bce2a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2411.png new file mode 100644 index 0000000..318eb17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2412.png new file mode 100644 index 0000000..6a246c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2413.png new file mode 100644 index 0000000..761ad43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2414.png new file mode 100644 index 0000000..94fe611 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2415.png new file mode 100644 index 0000000..f0d0860 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2416.png new file mode 100644 index 0000000..0dfc5f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2417.png new file mode 100644 index 0000000..37c09f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2418.png new file mode 100644 index 0000000..063d0eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2419.png new file mode 100644 index 0000000..d70b74e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/242.png new file mode 100644 index 0000000..1c4ffcc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2420.png new file mode 100644 index 0000000..5681d83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2421.png new file mode 100644 index 0000000..313b68d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2422.png new file mode 100644 index 0000000..06d233c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2423.png new file mode 100644 index 0000000..b4f5ec4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2424.png new file mode 100644 index 0000000..5f8d796 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2425.png new file mode 100644 index 0000000..c0594db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2426.png new file mode 100644 index 0000000..4dc38b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2427.png new file mode 100644 index 0000000..a035fcf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2428.png new file mode 100644 index 0000000..bcc1c52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2429.png new file mode 100644 index 0000000..f390bc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/243.png new file mode 100644 index 0000000..1c740e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2430.png new file mode 100644 index 0000000..b380059 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2431.png new file mode 100644 index 0000000..f0398e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2432.png new file mode 100644 index 0000000..808ffde Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2433.png new file mode 100644 index 0000000..d208dc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2434.png new file mode 100644 index 0000000..bf2e714 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2435.png new file mode 100644 index 0000000..ecd6eac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2436.png new file mode 100644 index 0000000..17cbdc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2437.png new file mode 100644 index 0000000..ad12b15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2438.png new file mode 100644 index 0000000..488c596 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2439.png new file mode 100644 index 0000000..b571611 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/244.png new file mode 100644 index 0000000..3139292 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2440.png new file mode 100644 index 0000000..bb940c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2441.png new file mode 100644 index 0000000..483a407 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2442.png new file mode 100644 index 0000000..afbbafe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2443.png new file mode 100644 index 0000000..0d0ec9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2444.png new file mode 100644 index 0000000..04c448f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2445.png new file mode 100644 index 0000000..ee8fe9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2446.png new file mode 100644 index 0000000..45ca656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2447.png new file mode 100644 index 0000000..f79ac97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2448.png new file mode 100644 index 0000000..717b5bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2449.png new file mode 100644 index 0000000..a0738e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/245.png new file mode 100644 index 0000000..d24df23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2450.png new file mode 100644 index 0000000..f3d99fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2451.png new file mode 100644 index 0000000..849565f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2452.png new file mode 100644 index 0000000..d3cc5de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2453.png new file mode 100644 index 0000000..4c36671 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2454.png new file mode 100644 index 0000000..bb0e9a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2455.png new file mode 100644 index 0000000..a19e308 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2456.png new file mode 100644 index 0000000..f9d51a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2457.png new file mode 100644 index 0000000..c1c7b51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2458.png new file mode 100644 index 0000000..8870245 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2459.png new file mode 100644 index 0000000..d5a7b14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/246.png new file mode 100644 index 0000000..3abde19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2460.png new file mode 100644 index 0000000..4671482 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2461.png new file mode 100644 index 0000000..356433a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2462.png new file mode 100644 index 0000000..011ec7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2463.png new file mode 100644 index 0000000..6833ae8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2464.png new file mode 100644 index 0000000..c372087 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2465.png new file mode 100644 index 0000000..0be913e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2466.png new file mode 100644 index 0000000..8030a9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2467.png new file mode 100644 index 0000000..a9e3519 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2468.png new file mode 100644 index 0000000..ba90182 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2469.png new file mode 100644 index 0000000..dedd611 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/247.png new file mode 100644 index 0000000..c3d8ffd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2470.png new file mode 100644 index 0000000..6dc47f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2471.png new file mode 100644 index 0000000..2b40919 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2472.png new file mode 100644 index 0000000..06ccb38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2473.png new file mode 100644 index 0000000..c50dc92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2474.png new file mode 100644 index 0000000..c174c62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2475.png new file mode 100644 index 0000000..1825a2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2476.png new file mode 100644 index 0000000..02986a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2477.png new file mode 100644 index 0000000..2d8247e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2478.png new file mode 100644 index 0000000..838bd5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2479.png new file mode 100644 index 0000000..efdc375 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/248.png new file mode 100644 index 0000000..42820bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2480.png new file mode 100644 index 0000000..e4ce6f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2481.png new file mode 100644 index 0000000..6f487be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2482.png new file mode 100644 index 0000000..b446928 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2483.png new file mode 100644 index 0000000..520c36b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2484.png new file mode 100644 index 0000000..ef89eb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2485.png new file mode 100644 index 0000000..2ea40dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2486.png new file mode 100644 index 0000000..b55ceb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2487.png new file mode 100644 index 0000000..545d581 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2488.png new file mode 100644 index 0000000..223137d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2489.png new file mode 100644 index 0000000..c14c5de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/249.png new file mode 100644 index 0000000..586444e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2490.png new file mode 100644 index 0000000..d69637d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2491.png new file mode 100644 index 0000000..934e7f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2492.png new file mode 100644 index 0000000..2c14472 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2493.png new file mode 100644 index 0000000..a5febe3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2494.png new file mode 100644 index 0000000..8335851 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2495.png new file mode 100644 index 0000000..5ddc4ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2496.png new file mode 100644 index 0000000..2c32558 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2497.png new file mode 100644 index 0000000..f6f2ad5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2498.png new file mode 100644 index 0000000..db209a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2499.png new file mode 100644 index 0000000..27ebe31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/2499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/25.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/25.png new file mode 100644 index 0000000..d10c8ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/25.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/250.png new file mode 100644 index 0000000..9083270 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/251.png new file mode 100644 index 0000000..e95341e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/252.png new file mode 100644 index 0000000..ccf4a8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/253.png new file mode 100644 index 0000000..94b8354 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/254.png new file mode 100644 index 0000000..54cb544 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/255.png new file mode 100644 index 0000000..599d51f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/256.png new file mode 100644 index 0000000..3af353c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/257.png new file mode 100644 index 0000000..6088cd4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/258.png new file mode 100644 index 0000000..387fc81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/259.png new file mode 100644 index 0000000..614b97c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/26.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/26.png new file mode 100644 index 0000000..51a9894 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/26.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/260.png new file mode 100644 index 0000000..3e8d669 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/261.png new file mode 100644 index 0000000..7ea0924 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/262.png new file mode 100644 index 0000000..58feec0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/263.png new file mode 100644 index 0000000..5f72ff2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/264.png new file mode 100644 index 0000000..3e5f075 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/265.png new file mode 100644 index 0000000..0d6aac0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/266.png new file mode 100644 index 0000000..8d2ceea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/267.png new file mode 100644 index 0000000..d14d4b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/268.png new file mode 100644 index 0000000..abece4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/269.png new file mode 100644 index 0000000..ce92015 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/27.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/27.png new file mode 100644 index 0000000..3890826 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/27.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/270.png new file mode 100644 index 0000000..f861fb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/271.png new file mode 100644 index 0000000..384894c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/272.png new file mode 100644 index 0000000..89eff41 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/273.png new file mode 100644 index 0000000..d4b5795 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/274.png new file mode 100644 index 0000000..18a5e27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/275.png new file mode 100644 index 0000000..2ae07b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/276.png new file mode 100644 index 0000000..25991ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/277.png new file mode 100644 index 0000000..678d284 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/278.png new file mode 100644 index 0000000..421cc23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/279.png new file mode 100644 index 0000000..fb73d0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/28.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/28.png new file mode 100644 index 0000000..7f40826 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/28.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/280.png new file mode 100644 index 0000000..16c2544 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/281.png new file mode 100644 index 0000000..a6ccbf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/282.png new file mode 100644 index 0000000..9cf6c5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/283.png new file mode 100644 index 0000000..cd47af9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/284.png new file mode 100644 index 0000000..60c6ebf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/285.png new file mode 100644 index 0000000..5ef5e91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/286.png new file mode 100644 index 0000000..d7de297 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/287.png new file mode 100644 index 0000000..e7d74ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/288.png new file mode 100644 index 0000000..67a4251 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/289.png new file mode 100644 index 0000000..d87aa32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/29.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/29.png new file mode 100644 index 0000000..c66d93a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/29.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/290.png new file mode 100644 index 0000000..2ba5087 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/291.png new file mode 100644 index 0000000..4c9a4be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/292.png new file mode 100644 index 0000000..40659db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/293.png new file mode 100644 index 0000000..2804421 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/294.png new file mode 100644 index 0000000..fdb9a87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/295.png new file mode 100644 index 0000000..4ce5577 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/296.png new file mode 100644 index 0000000..7bdd71a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/297.png new file mode 100644 index 0000000..4cc7d5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/298.png new file mode 100644 index 0000000..c6ea0b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/299.png new file mode 100644 index 0000000..c839769 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/3.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/3.png new file mode 100644 index 0000000..11e03d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/3.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/30.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/30.png new file mode 100644 index 0000000..1f0c2d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/30.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/300.png new file mode 100644 index 0000000..6a82489 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/301.png new file mode 100644 index 0000000..af426f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/302.png new file mode 100644 index 0000000..ba49ed8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/303.png new file mode 100644 index 0000000..e7e86c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/304.png new file mode 100644 index 0000000..dce15a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/305.png new file mode 100644 index 0000000..d0e473b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/306.png new file mode 100644 index 0000000..d7587c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/307.png new file mode 100644 index 0000000..898e703 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/308.png new file mode 100644 index 0000000..ece79f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/309.png new file mode 100644 index 0000000..34de223 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/31.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/31.png new file mode 100644 index 0000000..baab1f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/31.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/310.png new file mode 100644 index 0000000..4c3911a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/311.png new file mode 100644 index 0000000..f47390d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/312.png new file mode 100644 index 0000000..cced851 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/313.png new file mode 100644 index 0000000..f4ea86b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/314.png new file mode 100644 index 0000000..efc3314 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/315.png new file mode 100644 index 0000000..de4db41 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/316.png new file mode 100644 index 0000000..3455d98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/317.png new file mode 100644 index 0000000..7f36cc6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/318.png new file mode 100644 index 0000000..0553ed2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/319.png new file mode 100644 index 0000000..d49c4b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/32.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/32.png new file mode 100644 index 0000000..ef45785 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/32.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/320.png new file mode 100644 index 0000000..fb7fcc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/321.png new file mode 100644 index 0000000..6d3ae4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/322.png new file mode 100644 index 0000000..9c979c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/323.png new file mode 100644 index 0000000..a49642d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/324.png new file mode 100644 index 0000000..4afce04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/325.png new file mode 100644 index 0000000..5d8413f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/326.png new file mode 100644 index 0000000..4f49fd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/327.png new file mode 100644 index 0000000..e31f567 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/328.png new file mode 100644 index 0000000..29fa4dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/329.png new file mode 100644 index 0000000..a2709ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/33.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/33.png new file mode 100644 index 0000000..e628e2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/33.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/330.png new file mode 100644 index 0000000..b3a7847 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/331.png new file mode 100644 index 0000000..d4566f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/332.png new file mode 100644 index 0000000..62be1fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/333.png new file mode 100644 index 0000000..e2afddd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/334.png new file mode 100644 index 0000000..f11f836 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/335.png new file mode 100644 index 0000000..78ff994 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/336.png new file mode 100644 index 0000000..4a9e7f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/337.png new file mode 100644 index 0000000..62c9918 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/338.png new file mode 100644 index 0000000..3cb5af2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/339.png new file mode 100644 index 0000000..78d5f46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/34.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/34.png new file mode 100644 index 0000000..5767340 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/34.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/340.png new file mode 100644 index 0000000..debc4d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/341.png new file mode 100644 index 0000000..4abec2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/342.png new file mode 100644 index 0000000..2ca610b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/343.png new file mode 100644 index 0000000..5f91abc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/344.png new file mode 100644 index 0000000..2fdf1ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/345.png new file mode 100644 index 0000000..9b9baf8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/346.png new file mode 100644 index 0000000..e2941fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/347.png new file mode 100644 index 0000000..269bc4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/348.png new file mode 100644 index 0000000..6d2095c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/349.png new file mode 100644 index 0000000..bea03ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/35.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/35.png new file mode 100644 index 0000000..8f136fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/35.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/350.png new file mode 100644 index 0000000..a0c2070 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/351.png new file mode 100644 index 0000000..6a1f149 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/352.png new file mode 100644 index 0000000..d70698d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/353.png new file mode 100644 index 0000000..eee7390 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/354.png new file mode 100644 index 0000000..54e5cc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/355.png new file mode 100644 index 0000000..8444f7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/356.png new file mode 100644 index 0000000..3616533 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/357.png new file mode 100644 index 0000000..a4199f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/358.png new file mode 100644 index 0000000..3dfc683 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/359.png new file mode 100644 index 0000000..564d5b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/36.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/36.png new file mode 100644 index 0000000..e4d210b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/36.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/360.png new file mode 100644 index 0000000..f92c5d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/361.png new file mode 100644 index 0000000..6006f14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/362.png new file mode 100644 index 0000000..008cffe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/363.png new file mode 100644 index 0000000..cc689c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/364.png new file mode 100644 index 0000000..140b1f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/365.png new file mode 100644 index 0000000..fccbb43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/366.png new file mode 100644 index 0000000..f0d5a87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/367.png new file mode 100644 index 0000000..7099ff7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/368.png new file mode 100644 index 0000000..7499641 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/369.png new file mode 100644 index 0000000..9905a8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/37.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/37.png new file mode 100644 index 0000000..2609759 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/37.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/370.png new file mode 100644 index 0000000..271ece3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/371.png new file mode 100644 index 0000000..d3b151e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/372.png new file mode 100644 index 0000000..fa26e4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/373.png new file mode 100644 index 0000000..af2d129 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/374.png new file mode 100644 index 0000000..a7c78f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/375.png new file mode 100644 index 0000000..787de90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/376.png new file mode 100644 index 0000000..fa23bb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/377.png new file mode 100644 index 0000000..ac6ebce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/378.png new file mode 100644 index 0000000..fa9444c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/379.png new file mode 100644 index 0000000..4a4a479 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/38.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/38.png new file mode 100644 index 0000000..c914c7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/38.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/380.png new file mode 100644 index 0000000..d9cb13a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/381.png new file mode 100644 index 0000000..f1f81f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/382.png new file mode 100644 index 0000000..0af5187 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/383.png new file mode 100644 index 0000000..11a16a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/384.png new file mode 100644 index 0000000..c0afce1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/385.png new file mode 100644 index 0000000..dc7b846 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/386.png new file mode 100644 index 0000000..86e7e80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/387.png new file mode 100644 index 0000000..8c484c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/388.png new file mode 100644 index 0000000..a1d1295 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/389.png new file mode 100644 index 0000000..0d2bb97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/39.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/39.png new file mode 100644 index 0000000..a9e34cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/39.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/390.png new file mode 100644 index 0000000..6d49aa3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/391.png new file mode 100644 index 0000000..906a704 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/392.png new file mode 100644 index 0000000..4242dcd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/393.png new file mode 100644 index 0000000..a054e69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/394.png new file mode 100644 index 0000000..3d28744 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/395.png new file mode 100644 index 0000000..0c6f04d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/396.png new file mode 100644 index 0000000..6bf33ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/397.png new file mode 100644 index 0000000..bcefe6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/398.png new file mode 100644 index 0000000..f99a0f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/399.png new file mode 100644 index 0000000..2815311 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/4.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/4.png new file mode 100644 index 0000000..2cbd35a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/4.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/40.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/40.png new file mode 100644 index 0000000..3b84c2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/40.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/400.png new file mode 100644 index 0000000..6811287 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/401.png new file mode 100644 index 0000000..6e0c0ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/402.png new file mode 100644 index 0000000..d2455bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/403.png new file mode 100644 index 0000000..6d0e7f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/404.png new file mode 100644 index 0000000..74d670a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/405.png new file mode 100644 index 0000000..c75040b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/406.png new file mode 100644 index 0000000..d7ff517 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/407.png new file mode 100644 index 0000000..ee6cab8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/408.png new file mode 100644 index 0000000..69a4db1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/409.png new file mode 100644 index 0000000..663ef6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/41.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/41.png new file mode 100644 index 0000000..2585e51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/41.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/410.png new file mode 100644 index 0000000..e5e7f66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/411.png new file mode 100644 index 0000000..02a0572 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/412.png new file mode 100644 index 0000000..dcc25af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/413.png new file mode 100644 index 0000000..596ad13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/414.png new file mode 100644 index 0000000..a567e8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/415.png new file mode 100644 index 0000000..843d609 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/416.png new file mode 100644 index 0000000..f1de37f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/417.png new file mode 100644 index 0000000..17bb09f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/418.png new file mode 100644 index 0000000..4cbe733 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/419.png new file mode 100644 index 0000000..015fd4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/42.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/42.png new file mode 100644 index 0000000..b872c1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/42.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/420.png new file mode 100644 index 0000000..d19bc7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/421.png new file mode 100644 index 0000000..8b9375a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/422.png new file mode 100644 index 0000000..319cf8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/423.png new file mode 100644 index 0000000..6baab32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/424.png new file mode 100644 index 0000000..d27b748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/425.png new file mode 100644 index 0000000..abb8460 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/426.png new file mode 100644 index 0000000..b77c24f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/427.png new file mode 100644 index 0000000..7996204 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/428.png new file mode 100644 index 0000000..fb0d58d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/429.png new file mode 100644 index 0000000..5278d19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/43.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/43.png new file mode 100644 index 0000000..7764f78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/43.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/430.png new file mode 100644 index 0000000..4095851 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/431.png new file mode 100644 index 0000000..5589e1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/432.png new file mode 100644 index 0000000..f14566c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/433.png new file mode 100644 index 0000000..95715cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/434.png new file mode 100644 index 0000000..f558c31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/435.png new file mode 100644 index 0000000..f7faaa4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/436.png new file mode 100644 index 0000000..d807cf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/437.png new file mode 100644 index 0000000..6b9f3cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/438.png new file mode 100644 index 0000000..a8e25cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/439.png new file mode 100644 index 0000000..7519253 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/44.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/44.png new file mode 100644 index 0000000..861c923 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/44.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/440.png new file mode 100644 index 0000000..f959fe2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/441.png new file mode 100644 index 0000000..86f72eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/442.png new file mode 100644 index 0000000..9ec148e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/443.png new file mode 100644 index 0000000..3d274a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/444.png new file mode 100644 index 0000000..734b909 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/445.png new file mode 100644 index 0000000..2576537 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/446.png new file mode 100644 index 0000000..0452e6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/447.png new file mode 100644 index 0000000..6a8be4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/448.png new file mode 100644 index 0000000..704ca25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/449.png new file mode 100644 index 0000000..42abd16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/45.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/45.png new file mode 100644 index 0000000..bb23718 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/45.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/450.png new file mode 100644 index 0000000..4048e53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/451.png new file mode 100644 index 0000000..bcf0d9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/452.png new file mode 100644 index 0000000..232f673 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/453.png new file mode 100644 index 0000000..f91201e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/454.png new file mode 100644 index 0000000..815e80d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/455.png new file mode 100644 index 0000000..e347daa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/456.png new file mode 100644 index 0000000..44ad1fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/457.png new file mode 100644 index 0000000..979904f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/458.png new file mode 100644 index 0000000..6a689cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/459.png new file mode 100644 index 0000000..e96921f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/46.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/46.png new file mode 100644 index 0000000..b379ecd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/46.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/460.png new file mode 100644 index 0000000..1897a2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/461.png new file mode 100644 index 0000000..9f8ad37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/462.png new file mode 100644 index 0000000..47e9009 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/463.png new file mode 100644 index 0000000..1da510e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/464.png new file mode 100644 index 0000000..9a1d14a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/465.png new file mode 100644 index 0000000..bbe0eb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/466.png new file mode 100644 index 0000000..0e4db3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/467.png new file mode 100644 index 0000000..b3e6576 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/468.png new file mode 100644 index 0000000..277002f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/469.png new file mode 100644 index 0000000..351fb7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/47.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/47.png new file mode 100644 index 0000000..9b911fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/47.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/470.png new file mode 100644 index 0000000..ab29eda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/471.png new file mode 100644 index 0000000..30b87e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/472.png new file mode 100644 index 0000000..3fdd6bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/473.png new file mode 100644 index 0000000..a015747 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/474.png new file mode 100644 index 0000000..0266cda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/475.png new file mode 100644 index 0000000..a409a86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/476.png new file mode 100644 index 0000000..3a210d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/477.png new file mode 100644 index 0000000..814fe94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/478.png new file mode 100644 index 0000000..d07cc54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/479.png new file mode 100644 index 0000000..4d95faf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/48.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/48.png new file mode 100644 index 0000000..29730c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/48.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/480.png new file mode 100644 index 0000000..fbc315b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/481.png new file mode 100644 index 0000000..eb7f1a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/482.png new file mode 100644 index 0000000..c26cd89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/483.png new file mode 100644 index 0000000..dea027e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/484.png new file mode 100644 index 0000000..cbaac3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/485.png new file mode 100644 index 0000000..e08cc99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/486.png new file mode 100644 index 0000000..010c5f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/487.png new file mode 100644 index 0000000..741e8cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/488.png new file mode 100644 index 0000000..77fdef7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/489.png new file mode 100644 index 0000000..8157518 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/49.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/49.png new file mode 100644 index 0000000..5dc96fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/49.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/490.png new file mode 100644 index 0000000..6353c31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/491.png new file mode 100644 index 0000000..22ec807 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/492.png new file mode 100644 index 0000000..736c3f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/493.png new file mode 100644 index 0000000..ca341c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/494.png new file mode 100644 index 0000000..e4502a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/495.png new file mode 100644 index 0000000..31ab568 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/496.png new file mode 100644 index 0000000..b04d752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/497.png new file mode 100644 index 0000000..4c4de5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/498.png new file mode 100644 index 0000000..08c96c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/499.png new file mode 100644 index 0000000..4b33d07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/5.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/5.png new file mode 100644 index 0000000..bb79a94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/5.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/50.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/50.png new file mode 100644 index 0000000..366780c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/50.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/500.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/500.png new file mode 100644 index 0000000..6b2e8d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/500.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/501.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/501.png new file mode 100644 index 0000000..07789bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/501.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/502.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/502.png new file mode 100644 index 0000000..0fbc0f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/502.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/503.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/503.png new file mode 100644 index 0000000..6f105eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/503.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/504.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/504.png new file mode 100644 index 0000000..5785c89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/504.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/505.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/505.png new file mode 100644 index 0000000..5fdcd96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/505.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/506.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/506.png new file mode 100644 index 0000000..9c91b98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/506.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/507.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/507.png new file mode 100644 index 0000000..9160439 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/507.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/508.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/508.png new file mode 100644 index 0000000..ad331b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/508.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/509.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/509.png new file mode 100644 index 0000000..0ba0e63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/509.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/51.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/51.png new file mode 100644 index 0000000..42eaa53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/51.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/510.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/510.png new file mode 100644 index 0000000..b19b59c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/510.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/511.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/511.png new file mode 100644 index 0000000..f787c24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/511.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/512.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/512.png new file mode 100644 index 0000000..62a3839 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/512.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/513.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/513.png new file mode 100644 index 0000000..80a25b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/513.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/514.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/514.png new file mode 100644 index 0000000..312e104 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/514.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/515.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/515.png new file mode 100644 index 0000000..9cd07b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/515.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/516.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/516.png new file mode 100644 index 0000000..a19b327 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/516.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/517.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/517.png new file mode 100644 index 0000000..f0faf05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/517.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/518.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/518.png new file mode 100644 index 0000000..26c685f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/518.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/519.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/519.png new file mode 100644 index 0000000..c8fc25d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/519.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/52.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/52.png new file mode 100644 index 0000000..1d8addd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/52.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/520.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/520.png new file mode 100644 index 0000000..7b7653d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/520.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/521.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/521.png new file mode 100644 index 0000000..f22c82b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/521.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/522.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/522.png new file mode 100644 index 0000000..5e10921 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/522.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/523.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/523.png new file mode 100644 index 0000000..ce71d44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/523.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/524.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/524.png new file mode 100644 index 0000000..f510870 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/524.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/525.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/525.png new file mode 100644 index 0000000..b225d66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/525.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/526.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/526.png new file mode 100644 index 0000000..622d6c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/526.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/527.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/527.png new file mode 100644 index 0000000..1960082 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/527.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/528.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/528.png new file mode 100644 index 0000000..82d7300 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/528.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/529.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/529.png new file mode 100644 index 0000000..a0a34e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/529.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/53.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/53.png new file mode 100644 index 0000000..24d3768 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/53.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/530.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/530.png new file mode 100644 index 0000000..67fc2e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/530.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/531.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/531.png new file mode 100644 index 0000000..57340d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/531.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/532.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/532.png new file mode 100644 index 0000000..565db50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/532.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/533.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/533.png new file mode 100644 index 0000000..3007ea3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/533.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/534.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/534.png new file mode 100644 index 0000000..147d0e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/534.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/535.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/535.png new file mode 100644 index 0000000..69e45c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/535.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/536.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/536.png new file mode 100644 index 0000000..01ccb84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/536.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/537.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/537.png new file mode 100644 index 0000000..1a7143e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/537.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/538.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/538.png new file mode 100644 index 0000000..871a96b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/538.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/539.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/539.png new file mode 100644 index 0000000..e5048e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/539.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/54.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/54.png new file mode 100644 index 0000000..2934a27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/54.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/540.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/540.png new file mode 100644 index 0000000..19f6a65 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/540.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/541.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/541.png new file mode 100644 index 0000000..008acd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/541.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/542.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/542.png new file mode 100644 index 0000000..09308f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/542.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/543.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/543.png new file mode 100644 index 0000000..e12d840 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/543.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/544.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/544.png new file mode 100644 index 0000000..7711e3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/544.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/545.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/545.png new file mode 100644 index 0000000..5f80886 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/545.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/546.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/546.png new file mode 100644 index 0000000..c256717 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/546.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/547.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/547.png new file mode 100644 index 0000000..5b5d0be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/547.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/548.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/548.png new file mode 100644 index 0000000..428108d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/548.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/549.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/549.png new file mode 100644 index 0000000..6689416 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/549.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/55.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/55.png new file mode 100644 index 0000000..efaaca9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/55.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/550.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/550.png new file mode 100644 index 0000000..e092409 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/550.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/551.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/551.png new file mode 100644 index 0000000..96feb40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/551.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/552.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/552.png new file mode 100644 index 0000000..f075481 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/552.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/553.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/553.png new file mode 100644 index 0000000..a2e0f9d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/553.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/554.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/554.png new file mode 100644 index 0000000..ad1408c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/554.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/555.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/555.png new file mode 100644 index 0000000..60ba202 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/555.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/556.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/556.png new file mode 100644 index 0000000..6974fd9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/556.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/557.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/557.png new file mode 100644 index 0000000..542cc64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/557.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/558.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/558.png new file mode 100644 index 0000000..9757485 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/558.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/559.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/559.png new file mode 100644 index 0000000..ad0da45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/559.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/56.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/56.png new file mode 100644 index 0000000..936b102 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/56.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/560.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/560.png new file mode 100644 index 0000000..2e92031 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/560.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/561.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/561.png new file mode 100644 index 0000000..3ed6437 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/561.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/562.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/562.png new file mode 100644 index 0000000..07eb81e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/562.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/563.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/563.png new file mode 100644 index 0000000..30dfbca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/563.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/564.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/564.png new file mode 100644 index 0000000..07c3f08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/564.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/565.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/565.png new file mode 100644 index 0000000..402bb58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/565.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/566.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/566.png new file mode 100644 index 0000000..9d43ec4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/566.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/567.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/567.png new file mode 100644 index 0000000..7da444d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/567.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/568.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/568.png new file mode 100644 index 0000000..3a169fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/568.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/569.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/569.png new file mode 100644 index 0000000..c652f95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/569.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/57.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/57.png new file mode 100644 index 0000000..cc50dc4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/57.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/570.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/570.png new file mode 100644 index 0000000..0653e32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/570.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/571.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/571.png new file mode 100644 index 0000000..fb4618e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/571.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/572.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/572.png new file mode 100644 index 0000000..0592dfe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/572.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/573.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/573.png new file mode 100644 index 0000000..f170e57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/573.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/574.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/574.png new file mode 100644 index 0000000..4f4d563 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/574.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/575.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/575.png new file mode 100644 index 0000000..b8bf575 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/575.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/576.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/576.png new file mode 100644 index 0000000..6f4ccd5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/576.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/577.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/577.png new file mode 100644 index 0000000..38d179a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/577.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/578.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/578.png new file mode 100644 index 0000000..811615d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/578.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/579.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/579.png new file mode 100644 index 0000000..3ed7446 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/579.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/58.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/58.png new file mode 100644 index 0000000..9919aef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/58.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/580.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/580.png new file mode 100644 index 0000000..d9e6404 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/580.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/581.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/581.png new file mode 100644 index 0000000..e090339 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/581.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/582.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/582.png new file mode 100644 index 0000000..69ea0c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/582.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/583.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/583.png new file mode 100644 index 0000000..50be2d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/583.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/584.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/584.png new file mode 100644 index 0000000..5807f76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/584.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/585.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/585.png new file mode 100644 index 0000000..8f73896 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/585.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/586.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/586.png new file mode 100644 index 0000000..973c7a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/586.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/587.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/587.png new file mode 100644 index 0000000..5a63a8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/587.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/588.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/588.png new file mode 100644 index 0000000..2fdddc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/588.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/589.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/589.png new file mode 100644 index 0000000..03d7ee3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/589.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/59.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/59.png new file mode 100644 index 0000000..3ca47a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/59.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/590.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/590.png new file mode 100644 index 0000000..c767e35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/590.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/591.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/591.png new file mode 100644 index 0000000..b86668d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/591.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/592.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/592.png new file mode 100644 index 0000000..1c2f4c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/592.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/593.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/593.png new file mode 100644 index 0000000..aec4624 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/593.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/594.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/594.png new file mode 100644 index 0000000..85e5f03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/594.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/595.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/595.png new file mode 100644 index 0000000..66c41b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/595.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/596.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/596.png new file mode 100644 index 0000000..887fb52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/596.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/597.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/597.png new file mode 100644 index 0000000..e071ef5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/597.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/598.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/598.png new file mode 100644 index 0000000..5248a12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/598.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/599.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/599.png new file mode 100644 index 0000000..52c3709 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/599.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/6.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/6.png new file mode 100644 index 0000000..3523697 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/6.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/60.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/60.png new file mode 100644 index 0000000..fbb7c63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/60.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/600.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/600.png new file mode 100644 index 0000000..a574bf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/600.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/601.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/601.png new file mode 100644 index 0000000..dc6d781 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/601.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/602.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/602.png new file mode 100644 index 0000000..03c05a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/602.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/603.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/603.png new file mode 100644 index 0000000..a7e2d9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/603.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/604.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/604.png new file mode 100644 index 0000000..7fe0e8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/604.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/605.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/605.png new file mode 100644 index 0000000..fb5a8be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/605.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/606.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/606.png new file mode 100644 index 0000000..efaa8c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/606.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/607.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/607.png new file mode 100644 index 0000000..be36394 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/607.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/608.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/608.png new file mode 100644 index 0000000..221f25b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/608.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/609.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/609.png new file mode 100644 index 0000000..a5cbfcc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/609.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/61.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/61.png new file mode 100644 index 0000000..2b23fa4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/61.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/610.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/610.png new file mode 100644 index 0000000..717cdc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/610.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/611.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/611.png new file mode 100644 index 0000000..0eb9043 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/611.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/612.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/612.png new file mode 100644 index 0000000..82356b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/612.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/613.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/613.png new file mode 100644 index 0000000..dfc6513 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/613.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/614.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/614.png new file mode 100644 index 0000000..ae9d84f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/614.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/615.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/615.png new file mode 100644 index 0000000..ea8323a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/615.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/616.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/616.png new file mode 100644 index 0000000..07e2059 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/616.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/617.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/617.png new file mode 100644 index 0000000..5b7d5ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/617.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/618.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/618.png new file mode 100644 index 0000000..cd0f935 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/618.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/619.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/619.png new file mode 100644 index 0000000..8882070 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/619.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/62.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/62.png new file mode 100644 index 0000000..e614b66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/62.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/620.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/620.png new file mode 100644 index 0000000..8ae8ba1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/620.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/621.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/621.png new file mode 100644 index 0000000..efd0c94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/621.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/622.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/622.png new file mode 100644 index 0000000..7e2f7a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/622.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/623.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/623.png new file mode 100644 index 0000000..d5a6579 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/623.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/624.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/624.png new file mode 100644 index 0000000..fca90c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/624.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/625.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/625.png new file mode 100644 index 0000000..3aa8a22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/625.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/626.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/626.png new file mode 100644 index 0000000..b9ead5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/626.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/627.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/627.png new file mode 100644 index 0000000..7f88693 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/627.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/628.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/628.png new file mode 100644 index 0000000..5b2d5d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/628.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/629.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/629.png new file mode 100644 index 0000000..462a438 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/629.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/63.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/63.png new file mode 100644 index 0000000..ec9e2f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/63.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/630.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/630.png new file mode 100644 index 0000000..3c58f68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/630.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/631.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/631.png new file mode 100644 index 0000000..40621c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/631.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/632.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/632.png new file mode 100644 index 0000000..d8d0ca7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/632.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/633.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/633.png new file mode 100644 index 0000000..3268ea2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/633.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/634.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/634.png new file mode 100644 index 0000000..42027e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/634.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/635.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/635.png new file mode 100644 index 0000000..1bf657e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/635.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/636.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/636.png new file mode 100644 index 0000000..92a4f81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/636.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/637.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/637.png new file mode 100644 index 0000000..e1d38e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/637.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/638.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/638.png new file mode 100644 index 0000000..e1f56ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/638.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/639.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/639.png new file mode 100644 index 0000000..bf2d748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/639.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/64.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/64.png new file mode 100644 index 0000000..8f5d763 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/64.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/640.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/640.png new file mode 100644 index 0000000..02f3104 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/640.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/641.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/641.png new file mode 100644 index 0000000..810dfd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/641.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/642.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/642.png new file mode 100644 index 0000000..33edcb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/642.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/643.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/643.png new file mode 100644 index 0000000..1c9085e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/643.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/644.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/644.png new file mode 100644 index 0000000..abebc45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/644.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/645.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/645.png new file mode 100644 index 0000000..9aa7334 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/645.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/646.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/646.png new file mode 100644 index 0000000..cfcf0d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/646.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/647.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/647.png new file mode 100644 index 0000000..facdeb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/647.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/648.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/648.png new file mode 100644 index 0000000..66662a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/648.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/649.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/649.png new file mode 100644 index 0000000..5ac413e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/649.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/65.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/65.png new file mode 100644 index 0000000..d482777 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/65.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/650.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/650.png new file mode 100644 index 0000000..4dc815f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/650.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/651.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/651.png new file mode 100644 index 0000000..c4c8d8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/651.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/652.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/652.png new file mode 100644 index 0000000..12f145e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/652.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/653.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/653.png new file mode 100644 index 0000000..67bb42c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/653.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/654.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/654.png new file mode 100644 index 0000000..9b63b16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/654.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/655.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/655.png new file mode 100644 index 0000000..2d8757f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/655.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/656.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/656.png new file mode 100644 index 0000000..d598c4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/656.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/657.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/657.png new file mode 100644 index 0000000..ab1a675 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/657.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/658.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/658.png new file mode 100644 index 0000000..9315b08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/658.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/659.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/659.png new file mode 100644 index 0000000..0766f59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/659.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/66.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/66.png new file mode 100644 index 0000000..f03a87b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/66.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/660.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/660.png new file mode 100644 index 0000000..fc2a47d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/660.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/661.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/661.png new file mode 100644 index 0000000..6c7497d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/661.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/662.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/662.png new file mode 100644 index 0000000..8fef8fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/662.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/663.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/663.png new file mode 100644 index 0000000..ab2912a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/663.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/664.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/664.png new file mode 100644 index 0000000..9acb2b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/664.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/665.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/665.png new file mode 100644 index 0000000..0015560 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/665.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/666.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/666.png new file mode 100644 index 0000000..4f46b97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/666.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/667.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/667.png new file mode 100644 index 0000000..32d74a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/667.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/668.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/668.png new file mode 100644 index 0000000..59a1076 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/668.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/669.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/669.png new file mode 100644 index 0000000..69403eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/669.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/67.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/67.png new file mode 100644 index 0000000..2ef2adb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/67.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/670.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/670.png new file mode 100644 index 0000000..f5812de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/670.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/671.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/671.png new file mode 100644 index 0000000..75cfe87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/671.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/672.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/672.png new file mode 100644 index 0000000..e3fd1c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/672.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/673.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/673.png new file mode 100644 index 0000000..a28fbee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/673.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/674.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/674.png new file mode 100644 index 0000000..ba46427 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/674.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/675.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/675.png new file mode 100644 index 0000000..ded7a7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/675.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/676.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/676.png new file mode 100644 index 0000000..2069bef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/676.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/677.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/677.png new file mode 100644 index 0000000..660bf04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/677.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/678.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/678.png new file mode 100644 index 0000000..1462c17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/678.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/679.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/679.png new file mode 100644 index 0000000..6395f44 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/679.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/68.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/68.png new file mode 100644 index 0000000..5aefa4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/68.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/680.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/680.png new file mode 100644 index 0000000..65566cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/680.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/681.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/681.png new file mode 100644 index 0000000..16cebbe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/681.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/682.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/682.png new file mode 100644 index 0000000..a72ed67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/682.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/683.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/683.png new file mode 100644 index 0000000..00230d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/683.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/684.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/684.png new file mode 100644 index 0000000..d9f173b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/684.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/685.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/685.png new file mode 100644 index 0000000..8a52f43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/685.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/686.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/686.png new file mode 100644 index 0000000..64ac762 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/686.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/687.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/687.png new file mode 100644 index 0000000..4daafa1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/687.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/688.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/688.png new file mode 100644 index 0000000..16e9b98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/688.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/689.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/689.png new file mode 100644 index 0000000..29c2008 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/689.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/69.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/69.png new file mode 100644 index 0000000..d209b90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/69.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/690.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/690.png new file mode 100644 index 0000000..8d5f6c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/690.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/691.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/691.png new file mode 100644 index 0000000..15b5357 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/691.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/692.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/692.png new file mode 100644 index 0000000..44d640a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/692.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/693.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/693.png new file mode 100644 index 0000000..2ab661c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/693.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/694.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/694.png new file mode 100644 index 0000000..c530a2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/694.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/695.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/695.png new file mode 100644 index 0000000..cc6b167 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/695.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/696.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/696.png new file mode 100644 index 0000000..13b83ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/696.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/697.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/697.png new file mode 100644 index 0000000..92f5297 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/697.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/698.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/698.png new file mode 100644 index 0000000..4fbd691 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/698.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/699.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/699.png new file mode 100644 index 0000000..25deb9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/699.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/7.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/7.png new file mode 100644 index 0000000..7a33488 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/7.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/70.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/70.png new file mode 100644 index 0000000..4c8c846 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/70.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/700.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/700.png new file mode 100644 index 0000000..8ca1fec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/700.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/701.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/701.png new file mode 100644 index 0000000..ef2c6a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/701.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/702.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/702.png new file mode 100644 index 0000000..7456558 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/702.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/703.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/703.png new file mode 100644 index 0000000..e290c4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/703.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/704.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/704.png new file mode 100644 index 0000000..0cd3aad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/704.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/705.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/705.png new file mode 100644 index 0000000..bbadee2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/705.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/706.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/706.png new file mode 100644 index 0000000..83f6897 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/706.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/707.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/707.png new file mode 100644 index 0000000..e971803 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/707.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/708.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/708.png new file mode 100644 index 0000000..64d4e4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/708.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/709.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/709.png new file mode 100644 index 0000000..6ded9a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/709.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/71.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/71.png new file mode 100644 index 0000000..376d55e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/71.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/710.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/710.png new file mode 100644 index 0000000..716b0a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/710.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/711.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/711.png new file mode 100644 index 0000000..9cce0a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/711.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/712.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/712.png new file mode 100644 index 0000000..aa340e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/712.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/713.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/713.png new file mode 100644 index 0000000..26288eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/713.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/714.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/714.png new file mode 100644 index 0000000..415194a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/714.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/715.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/715.png new file mode 100644 index 0000000..83fa7bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/715.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/716.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/716.png new file mode 100644 index 0000000..f1a8236 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/716.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/717.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/717.png new file mode 100644 index 0000000..b07f4e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/717.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/718.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/718.png new file mode 100644 index 0000000..7417824 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/718.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/719.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/719.png new file mode 100644 index 0000000..7fcdff3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/719.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/72.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/72.png new file mode 100644 index 0000000..d24dee0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/72.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/720.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/720.png new file mode 100644 index 0000000..9ccedce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/720.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/721.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/721.png new file mode 100644 index 0000000..588dde2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/721.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/722.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/722.png new file mode 100644 index 0000000..97d9530 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/722.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/723.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/723.png new file mode 100644 index 0000000..8917aa9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/723.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/724.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/724.png new file mode 100644 index 0000000..e1fac04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/724.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/725.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/725.png new file mode 100644 index 0000000..341c209 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/725.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/726.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/726.png new file mode 100644 index 0000000..f7a34e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/726.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/727.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/727.png new file mode 100644 index 0000000..d7db51d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/727.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/728.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/728.png new file mode 100644 index 0000000..01e1a1e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/728.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/729.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/729.png new file mode 100644 index 0000000..08a51c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/729.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/73.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/73.png new file mode 100644 index 0000000..425598a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/73.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/730.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/730.png new file mode 100644 index 0000000..434f54c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/730.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/731.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/731.png new file mode 100644 index 0000000..86b12e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/731.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/732.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/732.png new file mode 100644 index 0000000..4e0562d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/732.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/733.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/733.png new file mode 100644 index 0000000..ccdbb6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/733.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/734.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/734.png new file mode 100644 index 0000000..6f26e1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/734.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/735.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/735.png new file mode 100644 index 0000000..83967c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/735.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/736.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/736.png new file mode 100644 index 0000000..95ea7f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/736.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/737.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/737.png new file mode 100644 index 0000000..86698ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/737.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/738.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/738.png new file mode 100644 index 0000000..1e02f41 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/738.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/739.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/739.png new file mode 100644 index 0000000..97276c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/739.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/74.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/74.png new file mode 100644 index 0000000..529246c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/74.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/740.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/740.png new file mode 100644 index 0000000..2b87578 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/740.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/741.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/741.png new file mode 100644 index 0000000..154b892 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/741.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/742.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/742.png new file mode 100644 index 0000000..ba04962 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/742.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/743.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/743.png new file mode 100644 index 0000000..e0c7345 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/743.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/744.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/744.png new file mode 100644 index 0000000..36c258f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/744.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/745.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/745.png new file mode 100644 index 0000000..cdc7870 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/745.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/746.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/746.png new file mode 100644 index 0000000..6fe3e3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/746.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/747.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/747.png new file mode 100644 index 0000000..e4f995e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/747.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/748.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/748.png new file mode 100644 index 0000000..dbdb63c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/748.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/749.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/749.png new file mode 100644 index 0000000..a364197 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/749.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/75.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/75.png new file mode 100644 index 0000000..6353ce3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/75.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/750.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/750.png new file mode 100644 index 0000000..f4d164d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/750.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/751.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/751.png new file mode 100644 index 0000000..6ef9256 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/751.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/752.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/752.png new file mode 100644 index 0000000..e6b83de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/752.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/753.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/753.png new file mode 100644 index 0000000..588dbd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/753.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/754.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/754.png new file mode 100644 index 0000000..5041266 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/754.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/755.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/755.png new file mode 100644 index 0000000..666ea7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/755.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/756.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/756.png new file mode 100644 index 0000000..ab09dad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/756.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/757.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/757.png new file mode 100644 index 0000000..793a0e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/757.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/758.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/758.png new file mode 100644 index 0000000..3e3bdf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/758.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/759.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/759.png new file mode 100644 index 0000000..8ff0d35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/759.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/76.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/76.png new file mode 100644 index 0000000..9f2e3de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/76.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/760.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/760.png new file mode 100644 index 0000000..ee07023 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/760.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/761.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/761.png new file mode 100644 index 0000000..5c0e314 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/761.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/762.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/762.png new file mode 100644 index 0000000..9035bda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/762.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/763.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/763.png new file mode 100644 index 0000000..6dac618 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/763.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/764.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/764.png new file mode 100644 index 0000000..be068ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/764.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/765.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/765.png new file mode 100644 index 0000000..56f5e66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/765.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/766.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/766.png new file mode 100644 index 0000000..2de8931 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/766.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/767.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/767.png new file mode 100644 index 0000000..6d03d6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/767.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/768.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/768.png new file mode 100644 index 0000000..b99a777 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/768.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/769.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/769.png new file mode 100644 index 0000000..bf45693 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/769.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/77.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/77.png new file mode 100644 index 0000000..36a3e83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/77.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/770.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/770.png new file mode 100644 index 0000000..f8954a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/770.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/771.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/771.png new file mode 100644 index 0000000..f67a4b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/771.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/772.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/772.png new file mode 100644 index 0000000..c15b699 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/772.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/773.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/773.png new file mode 100644 index 0000000..69b3def Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/773.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/774.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/774.png new file mode 100644 index 0000000..a004e73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/774.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/775.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/775.png new file mode 100644 index 0000000..7a1ea9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/775.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/776.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/776.png new file mode 100644 index 0000000..2e1a684 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/776.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/777.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/777.png new file mode 100644 index 0000000..b3ce2aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/777.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/778.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/778.png new file mode 100644 index 0000000..b0aad70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/778.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/779.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/779.png new file mode 100644 index 0000000..5313bbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/779.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/78.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/78.png new file mode 100644 index 0000000..b71ac50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/78.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/780.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/780.png new file mode 100644 index 0000000..469669b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/780.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/781.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/781.png new file mode 100644 index 0000000..57ec813 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/781.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/782.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/782.png new file mode 100644 index 0000000..2f2e59d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/782.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/783.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/783.png new file mode 100644 index 0000000..fc677b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/783.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/784.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/784.png new file mode 100644 index 0000000..32656c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/784.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/785.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/785.png new file mode 100644 index 0000000..3cf265b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/785.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/786.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/786.png new file mode 100644 index 0000000..3a72164 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/786.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/787.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/787.png new file mode 100644 index 0000000..0d5b74a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/787.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/788.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/788.png new file mode 100644 index 0000000..91dc95e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/788.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/789.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/789.png new file mode 100644 index 0000000..f1eaf0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/789.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/79.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/79.png new file mode 100644 index 0000000..da2f4d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/79.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/790.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/790.png new file mode 100644 index 0000000..a35b8d6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/790.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/791.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/791.png new file mode 100644 index 0000000..7c628f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/791.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/792.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/792.png new file mode 100644 index 0000000..506578e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/792.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/793.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/793.png new file mode 100644 index 0000000..2838642 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/793.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/794.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/794.png new file mode 100644 index 0000000..2c43476 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/794.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/795.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/795.png new file mode 100644 index 0000000..10c5595 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/795.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/796.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/796.png new file mode 100644 index 0000000..3af7b93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/796.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/797.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/797.png new file mode 100644 index 0000000..8e1a10f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/797.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/798.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/798.png new file mode 100644 index 0000000..15a05f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/798.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/799.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/799.png new file mode 100644 index 0000000..8425df4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/799.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/8.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/8.png new file mode 100644 index 0000000..f52d44b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/8.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/80.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/80.png new file mode 100644 index 0000000..d664706 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/80.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/800.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/800.png new file mode 100644 index 0000000..62e0c86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/800.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/801.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/801.png new file mode 100644 index 0000000..eb4a12d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/801.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/802.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/802.png new file mode 100644 index 0000000..ca26a80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/802.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/803.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/803.png new file mode 100644 index 0000000..de8f569 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/803.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/804.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/804.png new file mode 100644 index 0000000..eb00991 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/804.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/805.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/805.png new file mode 100644 index 0000000..576abf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/805.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/806.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/806.png new file mode 100644 index 0000000..2d5967a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/806.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/807.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/807.png new file mode 100644 index 0000000..346ec66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/807.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/808.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/808.png new file mode 100644 index 0000000..eabaa7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/808.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/809.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/809.png new file mode 100644 index 0000000..a450bdc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/809.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/81.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/81.png new file mode 100644 index 0000000..4dd0596 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/81.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/810.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/810.png new file mode 100644 index 0000000..a84ea57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/810.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/811.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/811.png new file mode 100644 index 0000000..17eda10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/811.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/812.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/812.png new file mode 100644 index 0000000..e8326cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/812.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/813.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/813.png new file mode 100644 index 0000000..ed1db2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/813.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/814.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/814.png new file mode 100644 index 0000000..d59a3e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/814.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/815.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/815.png new file mode 100644 index 0000000..80f1ce8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/815.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/816.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/816.png new file mode 100644 index 0000000..e0ea9be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/816.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/817.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/817.png new file mode 100644 index 0000000..05d095c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/817.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/818.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/818.png new file mode 100644 index 0000000..3ce9de3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/818.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/819.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/819.png new file mode 100644 index 0000000..cc02899 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/819.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/82.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/82.png new file mode 100644 index 0000000..b95b519 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/82.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/820.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/820.png new file mode 100644 index 0000000..b349d6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/820.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/821.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/821.png new file mode 100644 index 0000000..1359bb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/821.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/822.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/822.png new file mode 100644 index 0000000..4de2332 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/822.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/823.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/823.png new file mode 100644 index 0000000..79567c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/823.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/824.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/824.png new file mode 100644 index 0000000..6077d58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/824.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/825.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/825.png new file mode 100644 index 0000000..620f909 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/825.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/826.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/826.png new file mode 100644 index 0000000..d54871c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/826.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/827.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/827.png new file mode 100644 index 0000000..9e71504 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/827.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/828.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/828.png new file mode 100644 index 0000000..39d33f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/828.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/829.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/829.png new file mode 100644 index 0000000..bb7b8a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/829.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/83.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/83.png new file mode 100644 index 0000000..f8e7ee9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/83.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/830.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/830.png new file mode 100644 index 0000000..32bc47a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/830.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/831.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/831.png new file mode 100644 index 0000000..5cf491f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/831.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/832.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/832.png new file mode 100644 index 0000000..b755969 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/832.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/833.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/833.png new file mode 100644 index 0000000..28e8147 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/833.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/834.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/834.png new file mode 100644 index 0000000..9b61055 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/834.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/835.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/835.png new file mode 100644 index 0000000..8e7ec96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/835.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/836.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/836.png new file mode 100644 index 0000000..a2c283e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/836.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/837.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/837.png new file mode 100644 index 0000000..76e7c81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/837.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/838.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/838.png new file mode 100644 index 0000000..6ecc2e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/838.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/839.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/839.png new file mode 100644 index 0000000..4920448 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/839.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/84.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/84.png new file mode 100644 index 0000000..8164566 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/84.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/840.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/840.png new file mode 100644 index 0000000..ff3e3f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/840.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/841.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/841.png new file mode 100644 index 0000000..97bf729 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/841.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/842.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/842.png new file mode 100644 index 0000000..fb4ae68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/842.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/843.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/843.png new file mode 100644 index 0000000..657eab7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/843.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/844.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/844.png new file mode 100644 index 0000000..fa79e31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/844.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/845.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/845.png new file mode 100644 index 0000000..d15a8a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/845.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/846.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/846.png new file mode 100644 index 0000000..fb54dc2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/846.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/847.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/847.png new file mode 100644 index 0000000..2202f78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/847.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/848.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/848.png new file mode 100644 index 0000000..5e54a3b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/848.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/849.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/849.png new file mode 100644 index 0000000..d05c1ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/849.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/85.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/85.png new file mode 100644 index 0000000..02842b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/85.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/850.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/850.png new file mode 100644 index 0000000..f7f6d61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/850.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/851.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/851.png new file mode 100644 index 0000000..bef0240 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/851.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/852.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/852.png new file mode 100644 index 0000000..feb663a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/852.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/853.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/853.png new file mode 100644 index 0000000..7e1626c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/853.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/854.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/854.png new file mode 100644 index 0000000..0fc6f83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/854.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/855.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/855.png new file mode 100644 index 0000000..4616853 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/855.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/856.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/856.png new file mode 100644 index 0000000..4429a75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/856.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/857.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/857.png new file mode 100644 index 0000000..983f6a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/857.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/858.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/858.png new file mode 100644 index 0000000..05c9c5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/858.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/859.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/859.png new file mode 100644 index 0000000..5e7f0dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/859.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/86.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/86.png new file mode 100644 index 0000000..c7b1cd4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/86.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/860.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/860.png new file mode 100644 index 0000000..e842638 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/860.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/861.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/861.png new file mode 100644 index 0000000..52eca4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/861.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/862.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/862.png new file mode 100644 index 0000000..2712664 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/862.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/863.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/863.png new file mode 100644 index 0000000..951c6f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/863.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/864.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/864.png new file mode 100644 index 0000000..d15dbcd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/864.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/865.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/865.png new file mode 100644 index 0000000..459ae0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/865.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/866.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/866.png new file mode 100644 index 0000000..dc8b117 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/866.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/867.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/867.png new file mode 100644 index 0000000..c3509d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/867.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/868.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/868.png new file mode 100644 index 0000000..5423a51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/868.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/869.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/869.png new file mode 100644 index 0000000..1eb0a5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/869.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/87.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/87.png new file mode 100644 index 0000000..7cbf69e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/87.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/870.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/870.png new file mode 100644 index 0000000..5149801 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/870.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/871.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/871.png new file mode 100644 index 0000000..56223e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/871.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/872.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/872.png new file mode 100644 index 0000000..4e17b12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/872.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/873.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/873.png new file mode 100644 index 0000000..7f87a30 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/873.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/874.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/874.png new file mode 100644 index 0000000..e630442 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/874.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/875.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/875.png new file mode 100644 index 0000000..c9dc387 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/875.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/876.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/876.png new file mode 100644 index 0000000..6a77c1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/876.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/877.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/877.png new file mode 100644 index 0000000..9b8a019 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/877.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/878.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/878.png new file mode 100644 index 0000000..20e272c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/878.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/879.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/879.png new file mode 100644 index 0000000..714630c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/879.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/88.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/88.png new file mode 100644 index 0000000..c1d4f8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/88.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/880.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/880.png new file mode 100644 index 0000000..351d947 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/880.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/881.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/881.png new file mode 100644 index 0000000..adca8b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/881.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/882.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/882.png new file mode 100644 index 0000000..b4c3a7d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/882.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/883.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/883.png new file mode 100644 index 0000000..01abae2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/883.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/884.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/884.png new file mode 100644 index 0000000..9796881 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/884.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/885.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/885.png new file mode 100644 index 0000000..f6ea741 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/885.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/886.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/886.png new file mode 100644 index 0000000..b954f3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/886.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/887.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/887.png new file mode 100644 index 0000000..20eae05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/887.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/888.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/888.png new file mode 100644 index 0000000..78b51c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/888.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/889.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/889.png new file mode 100644 index 0000000..c68a183 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/889.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/89.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/89.png new file mode 100644 index 0000000..ea255a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/89.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/890.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/890.png new file mode 100644 index 0000000..2d07263 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/890.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/891.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/891.png new file mode 100644 index 0000000..02bd19a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/891.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/892.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/892.png new file mode 100644 index 0000000..b1ec318 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/892.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/893.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/893.png new file mode 100644 index 0000000..0da0dd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/893.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/894.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/894.png new file mode 100644 index 0000000..4571a18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/894.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/895.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/895.png new file mode 100644 index 0000000..a039aa8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/895.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/896.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/896.png new file mode 100644 index 0000000..af518ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/896.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/897.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/897.png new file mode 100644 index 0000000..5e43e0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/897.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/898.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/898.png new file mode 100644 index 0000000..ebd8caa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/898.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/899.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/899.png new file mode 100644 index 0000000..e55aa86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/899.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/9.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/9.png new file mode 100644 index 0000000..3691155 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/9.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/90.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/90.png new file mode 100644 index 0000000..1ce5e1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/90.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/900.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/900.png new file mode 100644 index 0000000..3266107 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/900.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/901.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/901.png new file mode 100644 index 0000000..856f644 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/901.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/902.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/902.png new file mode 100644 index 0000000..b493bf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/902.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/903.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/903.png new file mode 100644 index 0000000..4403f82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/903.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/904.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/904.png new file mode 100644 index 0000000..b97d13e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/904.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/905.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/905.png new file mode 100644 index 0000000..e9d5eaf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/905.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/906.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/906.png new file mode 100644 index 0000000..60c1786 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/906.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/907.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/907.png new file mode 100644 index 0000000..eda039e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/907.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/908.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/908.png new file mode 100644 index 0000000..2c4e8f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/908.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/909.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/909.png new file mode 100644 index 0000000..ef3e847 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/909.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/91.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/91.png new file mode 100644 index 0000000..36c527c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/91.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/910.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/910.png new file mode 100644 index 0000000..fd0c9ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/910.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/911.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/911.png new file mode 100644 index 0000000..439a6fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/911.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/912.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/912.png new file mode 100644 index 0000000..9ac4778 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/912.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/913.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/913.png new file mode 100644 index 0000000..70f1532 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/913.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/914.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/914.png new file mode 100644 index 0000000..41d5aa7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/914.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/915.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/915.png new file mode 100644 index 0000000..7c150c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/915.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/916.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/916.png new file mode 100644 index 0000000..762652d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/916.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/917.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/917.png new file mode 100644 index 0000000..f54414d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/917.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/918.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/918.png new file mode 100644 index 0000000..e25fdb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/918.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/919.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/919.png new file mode 100644 index 0000000..417e131 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/919.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/92.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/92.png new file mode 100644 index 0000000..f186933 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/92.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/920.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/920.png new file mode 100644 index 0000000..580b7dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/920.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/921.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/921.png new file mode 100644 index 0000000..c1401d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/921.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/922.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/922.png new file mode 100644 index 0000000..0269d8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/922.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/923.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/923.png new file mode 100644 index 0000000..9eb0e5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/923.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/924.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/924.png new file mode 100644 index 0000000..bb79707 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/924.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/925.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/925.png new file mode 100644 index 0000000..ec652a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/925.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/926.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/926.png new file mode 100644 index 0000000..f5735e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/926.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/927.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/927.png new file mode 100644 index 0000000..5039810 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/927.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/928.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/928.png new file mode 100644 index 0000000..dd34628 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/928.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/929.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/929.png new file mode 100644 index 0000000..68feeef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/929.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/93.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/93.png new file mode 100644 index 0000000..5145c7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/93.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/930.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/930.png new file mode 100644 index 0000000..e2965ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/930.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/931.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/931.png new file mode 100644 index 0000000..895a413 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/931.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/932.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/932.png new file mode 100644 index 0000000..77fdae1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/932.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/933.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/933.png new file mode 100644 index 0000000..eec8ac8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/933.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/934.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/934.png new file mode 100644 index 0000000..d657660 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/934.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/935.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/935.png new file mode 100644 index 0000000..fca4fcb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/935.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/936.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/936.png new file mode 100644 index 0000000..8625035 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/936.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/937.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/937.png new file mode 100644 index 0000000..12700a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/937.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/938.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/938.png new file mode 100644 index 0000000..3544401 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/938.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/939.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/939.png new file mode 100644 index 0000000..bcfede9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/939.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/94.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/94.png new file mode 100644 index 0000000..b6ef2e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/94.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/940.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/940.png new file mode 100644 index 0000000..af3c4b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/940.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/941.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/941.png new file mode 100644 index 0000000..5cd229b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/941.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/942.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/942.png new file mode 100644 index 0000000..74afa65 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/942.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/943.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/943.png new file mode 100644 index 0000000..78d3f40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/943.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/944.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/944.png new file mode 100644 index 0000000..80f60bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/944.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/945.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/945.png new file mode 100644 index 0000000..48c99d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/945.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/946.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/946.png new file mode 100644 index 0000000..5b1f7e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/946.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/947.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/947.png new file mode 100644 index 0000000..09c5a73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/947.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/948.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/948.png new file mode 100644 index 0000000..3e0869a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/948.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/949.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/949.png new file mode 100644 index 0000000..0af279f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/949.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/95.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/95.png new file mode 100644 index 0000000..42a5c84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/95.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/950.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/950.png new file mode 100644 index 0000000..b1d7a28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/950.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/951.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/951.png new file mode 100644 index 0000000..e5404e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/951.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/952.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/952.png new file mode 100644 index 0000000..4dce59a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/952.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/953.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/953.png new file mode 100644 index 0000000..c55af66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/953.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/954.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/954.png new file mode 100644 index 0000000..2c8ced9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/954.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/955.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/955.png new file mode 100644 index 0000000..c61ba0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/955.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/956.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/956.png new file mode 100644 index 0000000..0c33acd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/956.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/957.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/957.png new file mode 100644 index 0000000..4a6939c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/957.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/958.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/958.png new file mode 100644 index 0000000..052e058 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/958.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/959.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/959.png new file mode 100644 index 0000000..dd974d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/959.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/96.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/96.png new file mode 100644 index 0000000..c9253be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/96.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/960.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/960.png new file mode 100644 index 0000000..1f24369 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/960.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/961.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/961.png new file mode 100644 index 0000000..89e8044 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/961.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/962.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/962.png new file mode 100644 index 0000000..55ba76f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/962.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/963.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/963.png new file mode 100644 index 0000000..c8fe0e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/963.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/964.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/964.png new file mode 100644 index 0000000..8037f18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/964.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/965.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/965.png new file mode 100644 index 0000000..f1c80a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/965.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/966.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/966.png new file mode 100644 index 0000000..4563a49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/966.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/967.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/967.png new file mode 100644 index 0000000..e0c197b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/967.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/968.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/968.png new file mode 100644 index 0000000..1621fef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/968.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/969.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/969.png new file mode 100644 index 0000000..d1eef0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/969.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/97.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/97.png new file mode 100644 index 0000000..4e22488 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/97.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/970.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/970.png new file mode 100644 index 0000000..3ac44ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/970.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/971.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/971.png new file mode 100644 index 0000000..dd2415a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/971.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/972.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/972.png new file mode 100644 index 0000000..8cd17ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/972.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/973.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/973.png new file mode 100644 index 0000000..b6d3920 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/973.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/974.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/974.png new file mode 100644 index 0000000..8add989 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/974.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/975.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/975.png new file mode 100644 index 0000000..85e1768 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/975.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/976.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/976.png new file mode 100644 index 0000000..8ebd8f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/976.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/977.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/977.png new file mode 100644 index 0000000..6943e45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/977.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/978.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/978.png new file mode 100644 index 0000000..4e71074 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/978.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/979.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/979.png new file mode 100644 index 0000000..ee34728 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/979.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/98.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/98.png new file mode 100644 index 0000000..1f95736 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/98.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/980.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/980.png new file mode 100644 index 0000000..10cddde Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/980.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/981.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/981.png new file mode 100644 index 0000000..b1d58d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/981.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/982.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/982.png new file mode 100644 index 0000000..350eab9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/982.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/983.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/983.png new file mode 100644 index 0000000..d43333b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/983.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/984.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/984.png new file mode 100644 index 0000000..ba5f70f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/984.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/985.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/985.png new file mode 100644 index 0000000..8964058 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/985.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/986.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/986.png new file mode 100644 index 0000000..d8b3a25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/986.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/987.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/987.png new file mode 100644 index 0000000..f836bb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/987.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/988.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/988.png new file mode 100644 index 0000000..75969e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/988.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/989.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/989.png new file mode 100644 index 0000000..1165650 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/989.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/99.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/99.png new file mode 100644 index 0000000..33cdb82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/99.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/990.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/990.png new file mode 100644 index 0000000..2e79329 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/990.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/991.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/991.png new file mode 100644 index 0000000..ce7ac37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/991.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/992.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/992.png new file mode 100644 index 0000000..0be900b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/992.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/993.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/993.png new file mode 100644 index 0000000..21c2673 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/993.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/994.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/994.png new file mode 100644 index 0000000..e411e75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/994.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/995.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/995.png new file mode 100644 index 0000000..c371ef3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/995.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/996.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/996.png new file mode 100644 index 0000000..d107c90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/996.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/997.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/997.png new file mode 100644 index 0000000..b033348 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/997.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/998.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/998.png new file mode 100644 index 0000000..61ab2c7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/998.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/999.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/999.png new file mode 100644 index 0000000..efd1753 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/pos/999.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/0.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/0.png new file mode 100644 index 0000000..33c22ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/0.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1.png new file mode 100644 index 0000000..543cc3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/10.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/10.png new file mode 100644 index 0000000..cc254b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/10.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/100.png new file mode 100644 index 0000000..49abd50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1000.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1000.png new file mode 100644 index 0000000..26f603b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1000.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1001.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1001.png new file mode 100644 index 0000000..dabc24c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1001.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1002.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1002.png new file mode 100644 index 0000000..621a6de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1002.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1003.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1003.png new file mode 100644 index 0000000..02680d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1003.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1004.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1004.png new file mode 100644 index 0000000..6281034 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1004.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1005.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1005.png new file mode 100644 index 0000000..a97a10c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1005.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1006.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1006.png new file mode 100644 index 0000000..87c6eab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1006.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1007.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1007.png new file mode 100644 index 0000000..8e024b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1007.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1008.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1008.png new file mode 100644 index 0000000..e2219d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1008.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1009.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1009.png new file mode 100644 index 0000000..6a37a1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1009.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/101.png new file mode 100644 index 0000000..b16f925 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1010.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1010.png new file mode 100644 index 0000000..33bdab1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1010.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1011.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1011.png new file mode 100644 index 0000000..bfd418a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1011.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1012.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1012.png new file mode 100644 index 0000000..af34002 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1012.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1013.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1013.png new file mode 100644 index 0000000..71f7c6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1013.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1014.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1014.png new file mode 100644 index 0000000..2b32f34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1014.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1015.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1015.png new file mode 100644 index 0000000..d526c5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1015.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1016.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1016.png new file mode 100644 index 0000000..551c39d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1016.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1017.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1017.png new file mode 100644 index 0000000..78d946e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1017.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1018.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1018.png new file mode 100644 index 0000000..4b201cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1018.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1019.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1019.png new file mode 100644 index 0000000..81dc490 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1019.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/102.png new file mode 100644 index 0000000..a38aec2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1020.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1020.png new file mode 100644 index 0000000..e71653d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1020.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1021.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1021.png new file mode 100644 index 0000000..a4a60fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1021.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1022.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1022.png new file mode 100644 index 0000000..c36b274 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1022.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1023.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1023.png new file mode 100644 index 0000000..572647f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1023.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1024.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1024.png new file mode 100644 index 0000000..6da13d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1024.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1025.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1025.png new file mode 100644 index 0000000..d2b3762 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1025.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1026.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1026.png new file mode 100644 index 0000000..a62f5d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1026.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1027.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1027.png new file mode 100644 index 0000000..1d3b0ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1027.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1028.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1028.png new file mode 100644 index 0000000..6b228c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1028.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1029.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1029.png new file mode 100644 index 0000000..ed57d2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1029.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/103.png new file mode 100644 index 0000000..73e1514 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1030.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1030.png new file mode 100644 index 0000000..43c567e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1030.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1031.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1031.png new file mode 100644 index 0000000..4e1b381 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1031.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1032.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1032.png new file mode 100644 index 0000000..66c8570 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1032.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1033.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1033.png new file mode 100644 index 0000000..16444ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1033.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1034.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1034.png new file mode 100644 index 0000000..7b9b938 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1034.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1035.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1035.png new file mode 100644 index 0000000..2a307bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1035.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1036.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1036.png new file mode 100644 index 0000000..3f5090b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1036.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1037.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1037.png new file mode 100644 index 0000000..0003f2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1037.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1038.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1038.png new file mode 100644 index 0000000..6971741 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1038.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1039.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1039.png new file mode 100644 index 0000000..0edffc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1039.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/104.png new file mode 100644 index 0000000..6972a83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1040.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1040.png new file mode 100644 index 0000000..3c80035 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1040.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1041.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1041.png new file mode 100644 index 0000000..3444285 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1041.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1042.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1042.png new file mode 100644 index 0000000..09da63a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1042.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1043.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1043.png new file mode 100644 index 0000000..6a9ace3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1043.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1044.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1044.png new file mode 100644 index 0000000..5a87025 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1044.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1045.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1045.png new file mode 100644 index 0000000..55c2473 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1045.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1046.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1046.png new file mode 100644 index 0000000..ea9e8a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1046.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1047.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1047.png new file mode 100644 index 0000000..3559cb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1047.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1048.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1048.png new file mode 100644 index 0000000..87f1f36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1048.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1049.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1049.png new file mode 100644 index 0000000..a938629 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1049.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/105.png new file mode 100644 index 0000000..b43ff1c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1050.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1050.png new file mode 100644 index 0000000..128e420 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1050.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1051.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1051.png new file mode 100644 index 0000000..7e9974b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1051.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1052.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1052.png new file mode 100644 index 0000000..42edaeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1052.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1053.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1053.png new file mode 100644 index 0000000..c37db8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1053.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1054.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1054.png new file mode 100644 index 0000000..a97f99b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1054.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1055.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1055.png new file mode 100644 index 0000000..eca2900 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1055.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1056.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1056.png new file mode 100644 index 0000000..54dd2b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1056.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1057.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1057.png new file mode 100644 index 0000000..f5bc815 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1057.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1058.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1058.png new file mode 100644 index 0000000..ef5e390 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1058.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1059.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1059.png new file mode 100644 index 0000000..6f3fbac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1059.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/106.png new file mode 100644 index 0000000..5df8bc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1060.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1060.png new file mode 100644 index 0000000..3a9b719 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1060.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1061.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1061.png new file mode 100644 index 0000000..4244395 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1061.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1062.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1062.png new file mode 100644 index 0000000..63178ac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1062.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1063.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1063.png new file mode 100644 index 0000000..a242836 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1063.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1064.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1064.png new file mode 100644 index 0000000..8fea602 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1064.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1065.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1065.png new file mode 100644 index 0000000..bfd694e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1065.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1066.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1066.png new file mode 100644 index 0000000..580ae7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1066.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1067.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1067.png new file mode 100644 index 0000000..d1bc195 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1067.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1068.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1068.png new file mode 100644 index 0000000..8f07520 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1068.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1069.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1069.png new file mode 100644 index 0000000..3e77f8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1069.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/107.png new file mode 100644 index 0000000..5d35324 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1070.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1070.png new file mode 100644 index 0000000..1959d6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1070.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1071.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1071.png new file mode 100644 index 0000000..4404d0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1071.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1072.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1072.png new file mode 100644 index 0000000..836c407 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1072.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1073.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1073.png new file mode 100644 index 0000000..5157f26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1073.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1074.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1074.png new file mode 100644 index 0000000..d1df43a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1074.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1075.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1075.png new file mode 100644 index 0000000..7dfeaa6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1075.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1076.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1076.png new file mode 100644 index 0000000..578dfbe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1076.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1077.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1077.png new file mode 100644 index 0000000..c89033d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1077.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1078.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1078.png new file mode 100644 index 0000000..074f825 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1078.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1079.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1079.png new file mode 100644 index 0000000..4ea325e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1079.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/108.png new file mode 100644 index 0000000..8679509 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1080.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1080.png new file mode 100644 index 0000000..9dea90b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1080.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1081.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1081.png new file mode 100644 index 0000000..e7e5fb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1081.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1082.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1082.png new file mode 100644 index 0000000..501d83e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1082.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1083.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1083.png new file mode 100644 index 0000000..874f6b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1083.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1084.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1084.png new file mode 100644 index 0000000..bef7e82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1084.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1085.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1085.png new file mode 100644 index 0000000..b155ac2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1085.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1086.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1086.png new file mode 100644 index 0000000..fb7906d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1086.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1087.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1087.png new file mode 100644 index 0000000..e8b3459 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1087.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1088.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1088.png new file mode 100644 index 0000000..32bb41c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1088.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1089.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1089.png new file mode 100644 index 0000000..8cdfebc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1089.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/109.png new file mode 100644 index 0000000..65ef80a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1090.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1090.png new file mode 100644 index 0000000..a52b4aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1090.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1091.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1091.png new file mode 100644 index 0000000..b49b5fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1091.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1092.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1092.png new file mode 100644 index 0000000..54ce2bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1092.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1093.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1093.png new file mode 100644 index 0000000..a35d3b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1093.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1094.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1094.png new file mode 100644 index 0000000..7608f6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1094.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1095.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1095.png new file mode 100644 index 0000000..ed97ea8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1095.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1096.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1096.png new file mode 100644 index 0000000..6a50732 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1096.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1097.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1097.png new file mode 100644 index 0000000..7a48123 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1097.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1098.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1098.png new file mode 100644 index 0000000..857f608 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1098.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1099.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1099.png new file mode 100644 index 0000000..cb9eaf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1099.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/11.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/11.png new file mode 100644 index 0000000..452e9c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/11.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/110.png new file mode 100644 index 0000000..72dd6b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1100.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1100.png new file mode 100644 index 0000000..cbfff43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1100.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1101.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1101.png new file mode 100644 index 0000000..d017678 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1101.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1102.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1102.png new file mode 100644 index 0000000..6ee5595 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1102.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1103.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1103.png new file mode 100644 index 0000000..84878b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1103.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1104.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1104.png new file mode 100644 index 0000000..89207b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1104.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1105.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1105.png new file mode 100644 index 0000000..3821059 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1105.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1106.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1106.png new file mode 100644 index 0000000..33ec669 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1106.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1107.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1107.png new file mode 100644 index 0000000..77345b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1107.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1108.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1108.png new file mode 100644 index 0000000..0b4590f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1108.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1109.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1109.png new file mode 100644 index 0000000..1b6866f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1109.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/111.png new file mode 100644 index 0000000..b54637b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1110.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1110.png new file mode 100644 index 0000000..e2d123b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1110.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1111.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1111.png new file mode 100644 index 0000000..1d700fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1111.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1112.png new file mode 100644 index 0000000..54d2b96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1113.png new file mode 100644 index 0000000..a5bea54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1114.png new file mode 100644 index 0000000..c7b460f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1115.png new file mode 100644 index 0000000..7001367 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1116.png new file mode 100644 index 0000000..5bfa6c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1117.png new file mode 100644 index 0000000..07cda78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1118.png new file mode 100644 index 0000000..f6bfc94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1119.png new file mode 100644 index 0000000..b7dfa8c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/112.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/112.png new file mode 100644 index 0000000..c9d8998 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/112.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1120.png new file mode 100644 index 0000000..5e205e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1121.png new file mode 100644 index 0000000..912caf3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1122.png new file mode 100644 index 0000000..0fdc9d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1123.png new file mode 100644 index 0000000..24ed592 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1124.png new file mode 100644 index 0000000..95af1f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1125.png new file mode 100644 index 0000000..3ac5d6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1126.png new file mode 100644 index 0000000..8467b88 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1127.png new file mode 100644 index 0000000..0efe769 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1128.png new file mode 100644 index 0000000..0ec39ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1129.png new file mode 100644 index 0000000..dec4211 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/113.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/113.png new file mode 100644 index 0000000..5022c12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/113.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1130.png new file mode 100644 index 0000000..485e4ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1131.png new file mode 100644 index 0000000..e4eee60 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1132.png new file mode 100644 index 0000000..3e280bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1133.png new file mode 100644 index 0000000..bc537da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1134.png new file mode 100644 index 0000000..55e5306 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1135.png new file mode 100644 index 0000000..40a3d89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1136.png new file mode 100644 index 0000000..1aea18d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1137.png new file mode 100644 index 0000000..973343d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1138.png new file mode 100644 index 0000000..2955744 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1139.png new file mode 100644 index 0000000..a020006 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/114.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/114.png new file mode 100644 index 0000000..abd756c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/114.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1140.png new file mode 100644 index 0000000..2d8d14b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1141.png new file mode 100644 index 0000000..7b29ddd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1142.png new file mode 100644 index 0000000..5843d53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1143.png new file mode 100644 index 0000000..1a8273c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1144.png new file mode 100644 index 0000000..95be011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1145.png new file mode 100644 index 0000000..cffa910 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1146.png new file mode 100644 index 0000000..aaaf4c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1147.png new file mode 100644 index 0000000..de005d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1148.png new file mode 100644 index 0000000..fdd01fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1149.png new file mode 100644 index 0000000..5bece15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/115.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/115.png new file mode 100644 index 0000000..9f31234 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/115.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1150.png new file mode 100644 index 0000000..bf711d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1151.png new file mode 100644 index 0000000..f752686 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1152.png new file mode 100644 index 0000000..a0b9f92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1153.png new file mode 100644 index 0000000..e5d17ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1154.png new file mode 100644 index 0000000..43a7286 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1155.png new file mode 100644 index 0000000..c5224fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1156.png new file mode 100644 index 0000000..11f789f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1157.png new file mode 100644 index 0000000..5bb48a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1158.png new file mode 100644 index 0000000..b630f7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1159.png new file mode 100644 index 0000000..ff10936 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/116.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/116.png new file mode 100644 index 0000000..b0da608 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/116.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1160.png new file mode 100644 index 0000000..b9c9dc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1161.png new file mode 100644 index 0000000..3cf99b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1162.png new file mode 100644 index 0000000..e20f223 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1163.png new file mode 100644 index 0000000..8bb2da5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1164.png new file mode 100644 index 0000000..69c13f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1165.png new file mode 100644 index 0000000..009a01f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1166.png new file mode 100644 index 0000000..2fc82f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1167.png new file mode 100644 index 0000000..33c75d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1168.png new file mode 100644 index 0000000..572b5b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1169.png new file mode 100644 index 0000000..bccddd5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/117.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/117.png new file mode 100644 index 0000000..9aeeba8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/117.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1170.png new file mode 100644 index 0000000..9ebeb62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1171.png new file mode 100644 index 0000000..3f8f46e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1172.png new file mode 100644 index 0000000..8439c6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1173.png new file mode 100644 index 0000000..e004f76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1174.png new file mode 100644 index 0000000..745eb7f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1175.png new file mode 100644 index 0000000..c1b8c19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1176.png new file mode 100644 index 0000000..b33ed00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1177.png new file mode 100644 index 0000000..2b967de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1178.png new file mode 100644 index 0000000..a7b71f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1179.png new file mode 100644 index 0000000..3a3479c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/118.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/118.png new file mode 100644 index 0000000..63311b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/118.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1180.png new file mode 100644 index 0000000..b668606 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1181.png new file mode 100644 index 0000000..b4110ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1182.png new file mode 100644 index 0000000..58bbfdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1183.png new file mode 100644 index 0000000..6fe4271 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1184.png new file mode 100644 index 0000000..aed6d7d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1185.png new file mode 100644 index 0000000..3913385 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1186.png new file mode 100644 index 0000000..e87ca51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1187.png new file mode 100644 index 0000000..90c3957 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1188.png new file mode 100644 index 0000000..0955c5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1189.png new file mode 100644 index 0000000..31fd018 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/119.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/119.png new file mode 100644 index 0000000..0eb8ce5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/119.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1190.png new file mode 100644 index 0000000..14a99be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1191.png new file mode 100644 index 0000000..d32cc55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1192.png new file mode 100644 index 0000000..8929cfb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1193.png new file mode 100644 index 0000000..9cca405 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1194.png new file mode 100644 index 0000000..b9822c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1195.png new file mode 100644 index 0000000..c0dbfe1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1196.png new file mode 100644 index 0000000..d5edf27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1197.png new file mode 100644 index 0000000..957e4c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1198.png new file mode 100644 index 0000000..361d441 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1199.png new file mode 100644 index 0000000..ef75dc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/12.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/12.png new file mode 100644 index 0000000..36633ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/12.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/120.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/120.png new file mode 100644 index 0000000..04cdee7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/120.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1200.png new file mode 100644 index 0000000..e2c19d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1201.png new file mode 100644 index 0000000..4a76003 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1202.png new file mode 100644 index 0000000..4ac8754 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1203.png new file mode 100644 index 0000000..c40559d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1204.png new file mode 100644 index 0000000..7b170bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1205.png new file mode 100644 index 0000000..419be4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1206.png new file mode 100644 index 0000000..b5e0276 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1207.png new file mode 100644 index 0000000..3ce45a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1208.png new file mode 100644 index 0000000..15ca21a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1209.png new file mode 100644 index 0000000..80908cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/121.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/121.png new file mode 100644 index 0000000..78e36ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/121.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1210.png new file mode 100644 index 0000000..f90822b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1211.png new file mode 100644 index 0000000..aa723c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1212.png new file mode 100644 index 0000000..014a000 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1213.png new file mode 100644 index 0000000..7b1d034 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1214.png new file mode 100644 index 0000000..10f4d80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1215.png new file mode 100644 index 0000000..3908f1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1216.png new file mode 100644 index 0000000..639ffaa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1217.png new file mode 100644 index 0000000..15d2670 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1218.png new file mode 100644 index 0000000..ffef1cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1219.png new file mode 100644 index 0000000..7cfa871 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/122.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/122.png new file mode 100644 index 0000000..8710612 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/122.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1220.png new file mode 100644 index 0000000..f45456f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1221.png new file mode 100644 index 0000000..8ee8656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1222.png new file mode 100644 index 0000000..acd1320 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1223.png new file mode 100644 index 0000000..3f8e1e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1224.png new file mode 100644 index 0000000..a164c82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1225.png new file mode 100644 index 0000000..f652849 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1226.png new file mode 100644 index 0000000..1f0d590 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1227.png new file mode 100644 index 0000000..08814a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1228.png new file mode 100644 index 0000000..46f7545 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1229.png new file mode 100644 index 0000000..fbfad3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/123.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/123.png new file mode 100644 index 0000000..e9cefbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/123.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1230.png new file mode 100644 index 0000000..b4519d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1231.png new file mode 100644 index 0000000..c1c7d09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1232.png new file mode 100644 index 0000000..bfc2360 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1233.png new file mode 100644 index 0000000..8ea2b89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1234.png new file mode 100644 index 0000000..14618a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1235.png new file mode 100644 index 0000000..1003ca6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1236.png new file mode 100644 index 0000000..0037877 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1237.png new file mode 100644 index 0000000..74c429d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1238.png new file mode 100644 index 0000000..e9a20e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1239.png new file mode 100644 index 0000000..f36932c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/124.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/124.png new file mode 100644 index 0000000..fe02e28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/124.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1240.png new file mode 100644 index 0000000..632f7cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1241.png new file mode 100644 index 0000000..a4facef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1242.png new file mode 100644 index 0000000..fa3cf4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1243.png new file mode 100644 index 0000000..f2fdf77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1244.png new file mode 100644 index 0000000..5f84ea5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1245.png new file mode 100644 index 0000000..8c5ddf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1246.png new file mode 100644 index 0000000..04463cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1247.png new file mode 100644 index 0000000..b04180c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1248.png new file mode 100644 index 0000000..39d0259 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1249.png new file mode 100644 index 0000000..123fdfd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/125.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/125.png new file mode 100644 index 0000000..5a490d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/125.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1250.png new file mode 100644 index 0000000..10d1f94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1251.png new file mode 100644 index 0000000..ba2564e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1252.png new file mode 100644 index 0000000..a2ef594 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1253.png new file mode 100644 index 0000000..2fdaac8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1254.png new file mode 100644 index 0000000..76ca925 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1255.png new file mode 100644 index 0000000..f3f0109 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1256.png new file mode 100644 index 0000000..a3e3086 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1257.png new file mode 100644 index 0000000..2f4de9d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1258.png new file mode 100644 index 0000000..8a8da8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1259.png new file mode 100644 index 0000000..d6739d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/126.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/126.png new file mode 100644 index 0000000..540dc40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/126.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1260.png new file mode 100644 index 0000000..e512ad3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1261.png new file mode 100644 index 0000000..c63b35f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1262.png new file mode 100644 index 0000000..46d9c04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1263.png new file mode 100644 index 0000000..649089a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1264.png new file mode 100644 index 0000000..7035ed5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1265.png new file mode 100644 index 0000000..4f7fda1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1266.png new file mode 100644 index 0000000..d537ab2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1267.png new file mode 100644 index 0000000..d9996a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1268.png new file mode 100644 index 0000000..c3ac4c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1269.png new file mode 100644 index 0000000..d141a78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/127.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/127.png new file mode 100644 index 0000000..90ee765 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/127.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1270.png new file mode 100644 index 0000000..b996882 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1271.png new file mode 100644 index 0000000..df39f41 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1272.png new file mode 100644 index 0000000..d9c304b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1273.png new file mode 100644 index 0000000..f2728bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1274.png new file mode 100644 index 0000000..57407af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1275.png new file mode 100644 index 0000000..95928e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1276.png new file mode 100644 index 0000000..cd48ea8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1277.png new file mode 100644 index 0000000..83b8485 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1278.png new file mode 100644 index 0000000..91a8e00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1279.png new file mode 100644 index 0000000..263c199 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/128.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/128.png new file mode 100644 index 0000000..7681065 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/128.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1280.png new file mode 100644 index 0000000..0158a19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1281.png new file mode 100644 index 0000000..0509b69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1282.png new file mode 100644 index 0000000..c751a68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1283.png new file mode 100644 index 0000000..9408821 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1284.png new file mode 100644 index 0000000..5d226a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1285.png new file mode 100644 index 0000000..798e9c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1286.png new file mode 100644 index 0000000..427f822 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1287.png new file mode 100644 index 0000000..a13dd1f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1288.png new file mode 100644 index 0000000..bf776db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1289.png new file mode 100644 index 0000000..6b45ca3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/129.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/129.png new file mode 100644 index 0000000..e20b0ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/129.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1290.png new file mode 100644 index 0000000..f913356 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1291.png new file mode 100644 index 0000000..cc61e49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1292.png new file mode 100644 index 0000000..a32781c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1293.png new file mode 100644 index 0000000..514f762 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1294.png new file mode 100644 index 0000000..70c44f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1295.png new file mode 100644 index 0000000..eef9a0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1296.png new file mode 100644 index 0000000..81926eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1297.png new file mode 100644 index 0000000..53eb4a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1298.png new file mode 100644 index 0000000..23a37bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1299.png new file mode 100644 index 0000000..f4bfabc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/13.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/13.png new file mode 100644 index 0000000..0678611 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/13.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/130.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/130.png new file mode 100644 index 0000000..deed47c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/130.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1300.png new file mode 100644 index 0000000..beb1fd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1301.png new file mode 100644 index 0000000..c5961fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1302.png new file mode 100644 index 0000000..4a40ae2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1303.png new file mode 100644 index 0000000..d51fc2a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1304.png new file mode 100644 index 0000000..81a5bf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1305.png new file mode 100644 index 0000000..b611662 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1306.png new file mode 100644 index 0000000..f058f71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1307.png new file mode 100644 index 0000000..b850085 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1308.png new file mode 100644 index 0000000..39f1b1c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1309.png new file mode 100644 index 0000000..158fe1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/131.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/131.png new file mode 100644 index 0000000..17215ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/131.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1310.png new file mode 100644 index 0000000..f55938c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1311.png new file mode 100644 index 0000000..465c9df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1312.png new file mode 100644 index 0000000..c8b59db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1313.png new file mode 100644 index 0000000..f345785 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1314.png new file mode 100644 index 0000000..c0ab0ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1315.png new file mode 100644 index 0000000..b6224d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1316.png new file mode 100644 index 0000000..10aa383 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1317.png new file mode 100644 index 0000000..96b8c40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1318.png new file mode 100644 index 0000000..d4dc818 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1319.png new file mode 100644 index 0000000..6404bab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/132.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/132.png new file mode 100644 index 0000000..f79ab01 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/132.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1320.png new file mode 100644 index 0000000..48032a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1321.png new file mode 100644 index 0000000..31dc612 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1322.png new file mode 100644 index 0000000..90ac3f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1323.png new file mode 100644 index 0000000..eabfb4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1324.png new file mode 100644 index 0000000..edbe543 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1325.png new file mode 100644 index 0000000..80afb21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1326.png new file mode 100644 index 0000000..d22dc30 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1327.png new file mode 100644 index 0000000..8c82e6c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1328.png new file mode 100644 index 0000000..5ec7b52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1329.png new file mode 100644 index 0000000..7f5b019 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/133.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/133.png new file mode 100644 index 0000000..0ccc6c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/133.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1330.png new file mode 100644 index 0000000..3e19582 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1331.png new file mode 100644 index 0000000..75afeb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1332.png new file mode 100644 index 0000000..4f35979 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1333.png new file mode 100644 index 0000000..5dd5895 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1334.png new file mode 100644 index 0000000..867fc07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1335.png new file mode 100644 index 0000000..9eaaa4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1336.png new file mode 100644 index 0000000..48ee389 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1337.png new file mode 100644 index 0000000..ca085b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1338.png new file mode 100644 index 0000000..2907f10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1339.png new file mode 100644 index 0000000..205d16e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/134.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/134.png new file mode 100644 index 0000000..35b0d0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/134.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1340.png new file mode 100644 index 0000000..e8d89da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1341.png new file mode 100644 index 0000000..47c45e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1342.png new file mode 100644 index 0000000..df9748c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1343.png new file mode 100644 index 0000000..6d03b26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1344.png new file mode 100644 index 0000000..e655195 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1345.png new file mode 100644 index 0000000..d1ab4a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1346.png new file mode 100644 index 0000000..1a68a4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1347.png new file mode 100644 index 0000000..a02daa9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1348.png new file mode 100644 index 0000000..0f7b315 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1349.png new file mode 100644 index 0000000..8a9e4ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/135.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/135.png new file mode 100644 index 0000000..326a5d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/135.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1350.png new file mode 100644 index 0000000..f6375d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1351.png new file mode 100644 index 0000000..aa65b68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1352.png new file mode 100644 index 0000000..9922bb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1353.png new file mode 100644 index 0000000..d135c48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1354.png new file mode 100644 index 0000000..8dffb0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1355.png new file mode 100644 index 0000000..1e3c987 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1356.png new file mode 100644 index 0000000..5940135 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1357.png new file mode 100644 index 0000000..85890ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1358.png new file mode 100644 index 0000000..4bbcef2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1359.png new file mode 100644 index 0000000..e4bdbab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/136.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/136.png new file mode 100644 index 0000000..240f43f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/136.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1360.png new file mode 100644 index 0000000..4a019c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1361.png new file mode 100644 index 0000000..fc64e25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1362.png new file mode 100644 index 0000000..6d06c13 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1363.png new file mode 100644 index 0000000..a2ee28e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1364.png new file mode 100644 index 0000000..e2f24ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1365.png new file mode 100644 index 0000000..e898129 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1366.png new file mode 100644 index 0000000..63a6c86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1367.png new file mode 100644 index 0000000..eaa6799 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1368.png new file mode 100644 index 0000000..917e76b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1369.png new file mode 100644 index 0000000..f79bf1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/137.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/137.png new file mode 100644 index 0000000..d7280a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/137.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1370.png new file mode 100644 index 0000000..4615792 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1371.png new file mode 100644 index 0000000..b896464 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1372.png new file mode 100644 index 0000000..6a3f862 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1373.png new file mode 100644 index 0000000..5114ebd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1374.png new file mode 100644 index 0000000..3520b64 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1375.png new file mode 100644 index 0000000..852b2a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1376.png new file mode 100644 index 0000000..1beaed5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1377.png new file mode 100644 index 0000000..89d650c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1378.png new file mode 100644 index 0000000..51efcf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1379.png new file mode 100644 index 0000000..2b79d11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/138.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/138.png new file mode 100644 index 0000000..94504c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/138.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1380.png new file mode 100644 index 0000000..13e5ccb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1381.png new file mode 100644 index 0000000..a1adb38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1382.png new file mode 100644 index 0000000..c528ad9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1383.png new file mode 100644 index 0000000..96b6977 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1384.png new file mode 100644 index 0000000..822db78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1385.png new file mode 100644 index 0000000..6acc99d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1386.png new file mode 100644 index 0000000..1d4375f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1387.png new file mode 100644 index 0000000..514478a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1388.png new file mode 100644 index 0000000..4ee6758 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1389.png new file mode 100644 index 0000000..472127a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/139.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/139.png new file mode 100644 index 0000000..795e248 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/139.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1390.png new file mode 100644 index 0000000..bc7bcb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1391.png new file mode 100644 index 0000000..16d0157 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1392.png new file mode 100644 index 0000000..96360a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1393.png new file mode 100644 index 0000000..abeabf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1394.png new file mode 100644 index 0000000..1bffe6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1395.png new file mode 100644 index 0000000..ce16fe0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1396.png new file mode 100644 index 0000000..58eb2aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1397.png new file mode 100644 index 0000000..93bb7d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1398.png new file mode 100644 index 0000000..ab80a7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1399.png new file mode 100644 index 0000000..d31bb24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/14.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/14.png new file mode 100644 index 0000000..a5ba85c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/14.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/140.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/140.png new file mode 100644 index 0000000..c9c940f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/140.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1400.png new file mode 100644 index 0000000..2944ef4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1401.png new file mode 100644 index 0000000..e081f0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1402.png new file mode 100644 index 0000000..f29af17 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1403.png new file mode 100644 index 0000000..e3a1c5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1404.png new file mode 100644 index 0000000..725d9cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1405.png new file mode 100644 index 0000000..5620fb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1406.png new file mode 100644 index 0000000..ff46a24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1407.png new file mode 100644 index 0000000..2b67726 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1408.png new file mode 100644 index 0000000..801b083 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1409.png new file mode 100644 index 0000000..b533b93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/141.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/141.png new file mode 100644 index 0000000..ad7dbc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/141.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1410.png new file mode 100644 index 0000000..5f77a18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1411.png new file mode 100644 index 0000000..4eb55a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1412.png new file mode 100644 index 0000000..9129864 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1413.png new file mode 100644 index 0000000..d3675d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1414.png new file mode 100644 index 0000000..03e62a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1415.png new file mode 100644 index 0000000..0b23d00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1416.png new file mode 100644 index 0000000..bee55b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1417.png new file mode 100644 index 0000000..7ae260f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1418.png new file mode 100644 index 0000000..4e4619c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1419.png new file mode 100644 index 0000000..906ec08 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/142.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/142.png new file mode 100644 index 0000000..84e4776 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/142.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1420.png new file mode 100644 index 0000000..d7fe490 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1421.png new file mode 100644 index 0000000..f57bfd4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1422.png new file mode 100644 index 0000000..b57568d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1423.png new file mode 100644 index 0000000..29dde31 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1424.png new file mode 100644 index 0000000..a3af1ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1425.png new file mode 100644 index 0000000..b658163 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1426.png new file mode 100644 index 0000000..41da876 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1427.png new file mode 100644 index 0000000..d54c746 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1428.png new file mode 100644 index 0000000..88522cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1429.png new file mode 100644 index 0000000..f41c845 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/143.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/143.png new file mode 100644 index 0000000..acdb0a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/143.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1430.png new file mode 100644 index 0000000..2a78147 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1431.png new file mode 100644 index 0000000..b442526 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1432.png new file mode 100644 index 0000000..759103d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1433.png new file mode 100644 index 0000000..6f488d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1434.png new file mode 100644 index 0000000..a5515bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1435.png new file mode 100644 index 0000000..88ca676 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1436.png new file mode 100644 index 0000000..28c7ece Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1437.png new file mode 100644 index 0000000..4d4adf1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1438.png new file mode 100644 index 0000000..9cfbfec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1439.png new file mode 100644 index 0000000..1ff53ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/144.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/144.png new file mode 100644 index 0000000..3dade9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/144.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1440.png new file mode 100644 index 0000000..1af9c89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1441.png new file mode 100644 index 0000000..5cc30e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1442.png new file mode 100644 index 0000000..db8f1c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1443.png new file mode 100644 index 0000000..45b0a03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1444.png new file mode 100644 index 0000000..7c977d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1445.png new file mode 100644 index 0000000..08e5ed1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1446.png new file mode 100644 index 0000000..08f008b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1447.png new file mode 100644 index 0000000..5e788de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1448.png new file mode 100644 index 0000000..cf38e96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1449.png new file mode 100644 index 0000000..0179a24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/145.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/145.png new file mode 100644 index 0000000..d9ffdf9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/145.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1450.png new file mode 100644 index 0000000..7f5462e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1451.png new file mode 100644 index 0000000..34afe82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1452.png new file mode 100644 index 0000000..f827c0f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1453.png new file mode 100644 index 0000000..456464d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1454.png new file mode 100644 index 0000000..2f206df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1455.png new file mode 100644 index 0000000..4d884e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1456.png new file mode 100644 index 0000000..1a5f35b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1457.png new file mode 100644 index 0000000..4d9a35b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1458.png new file mode 100644 index 0000000..8fc8183 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1459.png new file mode 100644 index 0000000..b0b8ae3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/146.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/146.png new file mode 100644 index 0000000..1fa96ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/146.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1460.png new file mode 100644 index 0000000..1142c19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1461.png new file mode 100644 index 0000000..1adb03f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1462.png new file mode 100644 index 0000000..2c2a569 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1463.png new file mode 100644 index 0000000..f5927c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1464.png new file mode 100644 index 0000000..bcd291f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1465.png new file mode 100644 index 0000000..4169c78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1466.png new file mode 100644 index 0000000..c3ad6ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1467.png new file mode 100644 index 0000000..cd8aa90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1468.png new file mode 100644 index 0000000..2b89d26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1469.png new file mode 100644 index 0000000..938a0d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/147.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/147.png new file mode 100644 index 0000000..ac62f52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/147.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1470.png new file mode 100644 index 0000000..c311f6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1471.png new file mode 100644 index 0000000..c096963 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1472.png new file mode 100644 index 0000000..fb0eeb8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1473.png new file mode 100644 index 0000000..df5e641 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1474.png new file mode 100644 index 0000000..b2994fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1475.png new file mode 100644 index 0000000..427653f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1476.png new file mode 100644 index 0000000..f22f24f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1477.png new file mode 100644 index 0000000..a81cdae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1478.png new file mode 100644 index 0000000..228e62b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1479.png new file mode 100644 index 0000000..d779c07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/148.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/148.png new file mode 100644 index 0000000..9cad845 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/148.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1480.png new file mode 100644 index 0000000..578bbc6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1481.png new file mode 100644 index 0000000..5185806 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1482.png new file mode 100644 index 0000000..558e7cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1483.png new file mode 100644 index 0000000..9a1b11c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1484.png new file mode 100644 index 0000000..9c8ab77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1485.png new file mode 100644 index 0000000..29dab53 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1486.png new file mode 100644 index 0000000..2dff0ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1487.png new file mode 100644 index 0000000..4b0ee5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1488.png new file mode 100644 index 0000000..bd6de74 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1489.png new file mode 100644 index 0000000..518b1ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/149.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/149.png new file mode 100644 index 0000000..f0dcd38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/149.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1490.png new file mode 100644 index 0000000..b6d3021 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1491.png new file mode 100644 index 0000000..f58b62b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1492.png new file mode 100644 index 0000000..f1ccca3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1493.png new file mode 100644 index 0000000..6a53708 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1494.png new file mode 100644 index 0000000..32d044f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1495.png new file mode 100644 index 0000000..7930377 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1496.png new file mode 100644 index 0000000..8b00aa1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1497.png new file mode 100644 index 0000000..e6d5437 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1498.png new file mode 100644 index 0000000..9212033 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1499.png new file mode 100644 index 0000000..f1f8911 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/15.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/15.png new file mode 100644 index 0000000..fdadbbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/15.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/150.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/150.png new file mode 100644 index 0000000..3bb65f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/150.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1500.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1500.png new file mode 100644 index 0000000..68ca216 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1500.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1501.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1501.png new file mode 100644 index 0000000..11ea0df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1501.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1502.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1502.png new file mode 100644 index 0000000..2d07b07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1502.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1503.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1503.png new file mode 100644 index 0000000..e2d9ea9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1503.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1504.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1504.png new file mode 100644 index 0000000..c23d748 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1504.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1505.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1505.png new file mode 100644 index 0000000..f1b1d66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1505.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1506.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1506.png new file mode 100644 index 0000000..a94fc7a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1506.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1507.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1507.png new file mode 100644 index 0000000..358cf85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1507.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1508.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1508.png new file mode 100644 index 0000000..9e9618f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1508.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1509.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1509.png new file mode 100644 index 0000000..7b92340 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1509.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/151.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/151.png new file mode 100644 index 0000000..4d74f10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/151.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1510.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1510.png new file mode 100644 index 0000000..017fcb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1510.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1511.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1511.png new file mode 100644 index 0000000..1db40f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1511.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1512.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1512.png new file mode 100644 index 0000000..6871653 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1512.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1513.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1513.png new file mode 100644 index 0000000..13c139f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1513.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1514.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1514.png new file mode 100644 index 0000000..4b5b214 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1514.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1515.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1515.png new file mode 100644 index 0000000..da47e43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1515.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1516.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1516.png new file mode 100644 index 0000000..bb16d99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1516.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1517.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1517.png new file mode 100644 index 0000000..f6c8448 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1517.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1518.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1518.png new file mode 100644 index 0000000..95f7c8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1518.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1519.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1519.png new file mode 100644 index 0000000..307af29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1519.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/152.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/152.png new file mode 100644 index 0000000..c185d9e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/152.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1520.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1520.png new file mode 100644 index 0000000..b1a5e4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1520.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1521.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1521.png new file mode 100644 index 0000000..778737b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1521.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1522.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1522.png new file mode 100644 index 0000000..5fbc827 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1522.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1523.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1523.png new file mode 100644 index 0000000..2094a79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1523.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1524.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1524.png new file mode 100644 index 0000000..601ad80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1524.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1525.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1525.png new file mode 100644 index 0000000..7315017 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1525.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1526.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1526.png new file mode 100644 index 0000000..f0f3c11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1526.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1527.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1527.png new file mode 100644 index 0000000..b4c0d8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1527.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1528.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1528.png new file mode 100644 index 0000000..4e00ef2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1528.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1529.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1529.png new file mode 100644 index 0000000..a330f25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1529.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/153.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/153.png new file mode 100644 index 0000000..4bfed51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/153.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1530.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1530.png new file mode 100644 index 0000000..03454f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1530.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1531.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1531.png new file mode 100644 index 0000000..473448b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1531.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1532.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1532.png new file mode 100644 index 0000000..80a26fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1532.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1533.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1533.png new file mode 100644 index 0000000..4140ed9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1533.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1534.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1534.png new file mode 100644 index 0000000..b7a3fd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1534.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1535.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1535.png new file mode 100644 index 0000000..f991195 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1535.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1536.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1536.png new file mode 100644 index 0000000..633a171 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1536.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1537.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1537.png new file mode 100644 index 0000000..1f3ca07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1537.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1538.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1538.png new file mode 100644 index 0000000..3705334 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1538.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1539.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1539.png new file mode 100644 index 0000000..6225bd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1539.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/154.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/154.png new file mode 100644 index 0000000..ad787f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/154.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1540.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1540.png new file mode 100644 index 0000000..fdf1c1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1540.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1541.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1541.png new file mode 100644 index 0000000..22f91dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1541.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1542.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1542.png new file mode 100644 index 0000000..d73fbb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1542.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1543.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1543.png new file mode 100644 index 0000000..ac83866 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1543.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1544.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1544.png new file mode 100644 index 0000000..8b13dac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1544.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1545.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1545.png new file mode 100644 index 0000000..1f0ead3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1545.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1546.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1546.png new file mode 100644 index 0000000..eaafca3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1546.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1547.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1547.png new file mode 100644 index 0000000..a783dc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1547.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1548.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1548.png new file mode 100644 index 0000000..179b1c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1548.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1549.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1549.png new file mode 100644 index 0000000..407a1a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1549.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/155.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/155.png new file mode 100644 index 0000000..7fd5719 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/155.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1550.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1550.png new file mode 100644 index 0000000..978f01b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1550.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1551.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1551.png new file mode 100644 index 0000000..abbebe0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1551.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1552.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1552.png new file mode 100644 index 0000000..2ac106a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1552.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1553.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1553.png new file mode 100644 index 0000000..c990528 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1553.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1554.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1554.png new file mode 100644 index 0000000..748e135 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1554.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1555.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1555.png new file mode 100644 index 0000000..daeb070 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1555.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1556.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1556.png new file mode 100644 index 0000000..e938f10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1556.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1557.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1557.png new file mode 100644 index 0000000..89828b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1557.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1558.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1558.png new file mode 100644 index 0000000..a334edb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1558.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1559.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1559.png new file mode 100644 index 0000000..34e9618 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1559.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/156.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/156.png new file mode 100644 index 0000000..b678c7b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/156.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1560.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1560.png new file mode 100644 index 0000000..8a3efd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1560.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1561.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1561.png new file mode 100644 index 0000000..69f8acf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1561.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1562.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1562.png new file mode 100644 index 0000000..14389c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1562.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1563.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1563.png new file mode 100644 index 0000000..2ebee9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1563.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1564.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1564.png new file mode 100644 index 0000000..837fb54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1564.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1565.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1565.png new file mode 100644 index 0000000..71df11e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1565.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1566.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1566.png new file mode 100644 index 0000000..5fcd413 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1566.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1567.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1567.png new file mode 100644 index 0000000..72262be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1567.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1568.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1568.png new file mode 100644 index 0000000..8b40fe2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1568.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1569.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1569.png new file mode 100644 index 0000000..5d8c942 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1569.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/157.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/157.png new file mode 100644 index 0000000..465103f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/157.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1570.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1570.png new file mode 100644 index 0000000..8d2e29d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1570.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1571.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1571.png new file mode 100644 index 0000000..5f6f4bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1571.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1572.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1572.png new file mode 100644 index 0000000..630b148 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1572.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1573.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1573.png new file mode 100644 index 0000000..1831c59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1573.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1574.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1574.png new file mode 100644 index 0000000..0b2f387 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1574.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1575.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1575.png new file mode 100644 index 0000000..c5bec23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1575.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1576.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1576.png new file mode 100644 index 0000000..c1276b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1576.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1577.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1577.png new file mode 100644 index 0000000..80ee5aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1577.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1578.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1578.png new file mode 100644 index 0000000..3e280c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1578.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1579.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1579.png new file mode 100644 index 0000000..50f29ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1579.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/158.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/158.png new file mode 100644 index 0000000..bb8c1be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/158.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1580.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1580.png new file mode 100644 index 0000000..b79b1e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1580.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1581.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1581.png new file mode 100644 index 0000000..05442c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1581.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1582.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1582.png new file mode 100644 index 0000000..bc37d37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1582.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1583.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1583.png new file mode 100644 index 0000000..67f78b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1583.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1584.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1584.png new file mode 100644 index 0000000..c7233eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1584.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1585.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1585.png new file mode 100644 index 0000000..50c5aab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1585.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1586.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1586.png new file mode 100644 index 0000000..37789fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1586.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1587.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1587.png new file mode 100644 index 0000000..ce42856 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1587.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1588.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1588.png new file mode 100644 index 0000000..a53384f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1588.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1589.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1589.png new file mode 100644 index 0000000..805413b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1589.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/159.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/159.png new file mode 100644 index 0000000..d8ad886 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/159.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1590.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1590.png new file mode 100644 index 0000000..caf1128 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1590.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1591.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1591.png new file mode 100644 index 0000000..29423ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1591.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1592.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1592.png new file mode 100644 index 0000000..ac484f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1592.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1593.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1593.png new file mode 100644 index 0000000..730e6c9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1593.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1594.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1594.png new file mode 100644 index 0000000..200658f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1594.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1595.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1595.png new file mode 100644 index 0000000..ba6a1a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1595.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1596.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1596.png new file mode 100644 index 0000000..104097c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1596.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1597.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1597.png new file mode 100644 index 0000000..6ae3377 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1597.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1598.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1598.png new file mode 100644 index 0000000..cca5e22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1598.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1599.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1599.png new file mode 100644 index 0000000..4cd4780 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1599.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/16.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/16.png new file mode 100644 index 0000000..8ebbfd9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/16.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/160.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/160.png new file mode 100644 index 0000000..5e8611a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/160.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1600.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1600.png new file mode 100644 index 0000000..fbbfe8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1600.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1601.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1601.png new file mode 100644 index 0000000..8f109e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1601.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1602.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1602.png new file mode 100644 index 0000000..03fe0f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1602.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1603.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1603.png new file mode 100644 index 0000000..438d52a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1603.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1604.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1604.png new file mode 100644 index 0000000..d959cb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1604.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1605.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1605.png new file mode 100644 index 0000000..6437d43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1605.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1606.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1606.png new file mode 100644 index 0000000..6252d98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1606.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1607.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1607.png new file mode 100644 index 0000000..9f7480b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1607.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1608.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1608.png new file mode 100644 index 0000000..835f140 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1608.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1609.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1609.png new file mode 100644 index 0000000..50edbe1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1609.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/161.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/161.png new file mode 100644 index 0000000..3bd017e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/161.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1610.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1610.png new file mode 100644 index 0000000..38ca7a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1610.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1611.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1611.png new file mode 100644 index 0000000..a9718af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1611.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1612.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1612.png new file mode 100644 index 0000000..40eec68 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1612.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1613.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1613.png new file mode 100644 index 0000000..678a07e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1613.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1614.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1614.png new file mode 100644 index 0000000..e8172c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1614.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1615.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1615.png new file mode 100644 index 0000000..99886f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1615.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1616.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1616.png new file mode 100644 index 0000000..8fd479c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1616.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1617.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1617.png new file mode 100644 index 0000000..b2af1a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1617.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1618.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1618.png new file mode 100644 index 0000000..7c12a7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1618.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1619.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1619.png new file mode 100644 index 0000000..88e1daf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1619.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/162.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/162.png new file mode 100644 index 0000000..5bd8be8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/162.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1620.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1620.png new file mode 100644 index 0000000..cf57fb9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1620.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1621.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1621.png new file mode 100644 index 0000000..38ac723 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1621.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1622.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1622.png new file mode 100644 index 0000000..a2b3ae9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1622.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1623.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1623.png new file mode 100644 index 0000000..455c553 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1623.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1624.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1624.png new file mode 100644 index 0000000..0814085 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1624.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1625.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1625.png new file mode 100644 index 0000000..ad77569 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1625.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1626.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1626.png new file mode 100644 index 0000000..13ebaea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1626.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1627.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1627.png new file mode 100644 index 0000000..7a859e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1627.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1628.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1628.png new file mode 100644 index 0000000..0322f48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1628.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1629.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1629.png new file mode 100644 index 0000000..0d8371e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1629.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/163.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/163.png new file mode 100644 index 0000000..951ecda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/163.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1630.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1630.png new file mode 100644 index 0000000..d2722ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1630.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1631.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1631.png new file mode 100644 index 0000000..45a5297 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1631.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1632.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1632.png new file mode 100644 index 0000000..4a98eae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1632.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1633.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1633.png new file mode 100644 index 0000000..af0d56f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1633.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1634.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1634.png new file mode 100644 index 0000000..f9b68ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1634.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1635.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1635.png new file mode 100644 index 0000000..bb9c9b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1635.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1636.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1636.png new file mode 100644 index 0000000..0c08ca2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1636.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1637.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1637.png new file mode 100644 index 0000000..583d117 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1637.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1638.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1638.png new file mode 100644 index 0000000..55e7854 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1638.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1639.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1639.png new file mode 100644 index 0000000..9e99961 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1639.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/164.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/164.png new file mode 100644 index 0000000..51db730 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/164.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1640.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1640.png new file mode 100644 index 0000000..08b409a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1640.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1641.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1641.png new file mode 100644 index 0000000..53bccef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1641.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1642.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1642.png new file mode 100644 index 0000000..2316e0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1642.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1643.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1643.png new file mode 100644 index 0000000..beef3d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1643.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1644.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1644.png new file mode 100644 index 0000000..65a8a78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1644.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1645.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1645.png new file mode 100644 index 0000000..e82cb11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1645.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1646.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1646.png new file mode 100644 index 0000000..168a43e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1646.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1647.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1647.png new file mode 100644 index 0000000..39a274a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1647.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1648.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1648.png new file mode 100644 index 0000000..77eff60 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1648.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1649.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1649.png new file mode 100644 index 0000000..2137c9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1649.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/165.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/165.png new file mode 100644 index 0000000..3d40cac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/165.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1650.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1650.png new file mode 100644 index 0000000..a5edd5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1650.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1651.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1651.png new file mode 100644 index 0000000..2d3f685 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1651.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1652.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1652.png new file mode 100644 index 0000000..faccdab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1652.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1653.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1653.png new file mode 100644 index 0000000..61fce0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1653.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1654.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1654.png new file mode 100644 index 0000000..0c6d7b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1654.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1655.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1655.png new file mode 100644 index 0000000..f1d1102 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1655.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1656.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1656.png new file mode 100644 index 0000000..8ee163c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1656.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1657.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1657.png new file mode 100644 index 0000000..d2adc8c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1657.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1658.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1658.png new file mode 100644 index 0000000..e980c66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1658.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1659.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1659.png new file mode 100644 index 0000000..0e6e704 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1659.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/166.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/166.png new file mode 100644 index 0000000..4b97ede Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/166.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1660.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1660.png new file mode 100644 index 0000000..17bb26b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1660.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1661.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1661.png new file mode 100644 index 0000000..5abc224 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1661.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1662.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1662.png new file mode 100644 index 0000000..f4a8140 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1662.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1663.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1663.png new file mode 100644 index 0000000..ee2f3d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1663.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1664.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1664.png new file mode 100644 index 0000000..e44ded2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1664.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1665.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1665.png new file mode 100644 index 0000000..c0b21bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1665.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1666.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1666.png new file mode 100644 index 0000000..51fbf14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1666.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1667.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1667.png new file mode 100644 index 0000000..eb286a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1667.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1668.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1668.png new file mode 100644 index 0000000..4a675b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1668.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1669.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1669.png new file mode 100644 index 0000000..645ed69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1669.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/167.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/167.png new file mode 100644 index 0000000..b17cb14 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/167.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1670.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1670.png new file mode 100644 index 0000000..4fd447c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1670.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1671.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1671.png new file mode 100644 index 0000000..b201f8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1671.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1672.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1672.png new file mode 100644 index 0000000..0f85d0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1672.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1673.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1673.png new file mode 100644 index 0000000..8dc8894 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1673.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1674.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1674.png new file mode 100644 index 0000000..c114b2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1674.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1675.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1675.png new file mode 100644 index 0000000..0495ea1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1675.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1676.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1676.png new file mode 100644 index 0000000..717d85e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1676.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1677.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1677.png new file mode 100644 index 0000000..b2d47c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1677.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1678.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1678.png new file mode 100644 index 0000000..8bcaaf3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1678.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1679.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1679.png new file mode 100644 index 0000000..c42e6ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1679.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/168.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/168.png new file mode 100644 index 0000000..4cb87a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/168.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1680.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1680.png new file mode 100644 index 0000000..65cb6f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1680.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1681.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1681.png new file mode 100644 index 0000000..766e385 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1681.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1682.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1682.png new file mode 100644 index 0000000..738cf2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1682.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1683.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1683.png new file mode 100644 index 0000000..dcfa7ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1683.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1684.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1684.png new file mode 100644 index 0000000..e8986ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1684.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1685.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1685.png new file mode 100644 index 0000000..2df738f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1685.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1686.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1686.png new file mode 100644 index 0000000..550b82e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1686.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1687.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1687.png new file mode 100644 index 0000000..46281be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1687.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1688.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1688.png new file mode 100644 index 0000000..57ec12f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1688.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1689.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1689.png new file mode 100644 index 0000000..ad08a49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1689.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/169.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/169.png new file mode 100644 index 0000000..cfb03a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/169.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1690.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1690.png new file mode 100644 index 0000000..dec2fad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1690.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1691.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1691.png new file mode 100644 index 0000000..547affc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1691.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1692.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1692.png new file mode 100644 index 0000000..b5ebad7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1692.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1693.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1693.png new file mode 100644 index 0000000..2264040 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1693.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1694.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1694.png new file mode 100644 index 0000000..48680a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1694.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1695.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1695.png new file mode 100644 index 0000000..7ed6948 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1695.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1696.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1696.png new file mode 100644 index 0000000..2020c8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1696.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1697.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1697.png new file mode 100644 index 0000000..668f5c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1697.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1698.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1698.png new file mode 100644 index 0000000..4de1dbe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1698.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1699.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1699.png new file mode 100644 index 0000000..cf7da8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1699.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/17.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/17.png new file mode 100644 index 0000000..f03a328 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/17.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/170.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/170.png new file mode 100644 index 0000000..44b4a2d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/170.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1700.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1700.png new file mode 100644 index 0000000..0a5e761 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1700.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1701.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1701.png new file mode 100644 index 0000000..02e3e15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1701.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1702.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1702.png new file mode 100644 index 0000000..8926dcf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1702.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1703.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1703.png new file mode 100644 index 0000000..a44ae21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1703.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1704.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1704.png new file mode 100644 index 0000000..41e903e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1704.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1705.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1705.png new file mode 100644 index 0000000..20bcae0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1705.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1706.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1706.png new file mode 100644 index 0000000..ebf3bb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1706.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1707.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1707.png new file mode 100644 index 0000000..bf378b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1707.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1708.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1708.png new file mode 100644 index 0000000..221009a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1708.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1709.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1709.png new file mode 100644 index 0000000..e582f67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1709.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/171.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/171.png new file mode 100644 index 0000000..2fa2033 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/171.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1710.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1710.png new file mode 100644 index 0000000..d0ed36a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1710.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1711.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1711.png new file mode 100644 index 0000000..cea7c82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1711.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1712.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1712.png new file mode 100644 index 0000000..88c80c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1712.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1713.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1713.png new file mode 100644 index 0000000..47f65d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1713.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1714.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1714.png new file mode 100644 index 0000000..fa65514 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1714.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1715.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1715.png new file mode 100644 index 0000000..b3377b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1715.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1716.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1716.png new file mode 100644 index 0000000..9f1774e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1716.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1717.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1717.png new file mode 100644 index 0000000..51bf053 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1717.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1718.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1718.png new file mode 100644 index 0000000..c382800 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1718.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1719.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1719.png new file mode 100644 index 0000000..32b26b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1719.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/172.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/172.png new file mode 100644 index 0000000..7e40829 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/172.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1720.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1720.png new file mode 100644 index 0000000..78a790e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1720.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1721.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1721.png new file mode 100644 index 0000000..8975366 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1721.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1722.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1722.png new file mode 100644 index 0000000..9031416 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1722.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1723.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1723.png new file mode 100644 index 0000000..632e637 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1723.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1724.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1724.png new file mode 100644 index 0000000..0905dd0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1724.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1725.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1725.png new file mode 100644 index 0000000..ce0ea5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1725.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1726.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1726.png new file mode 100644 index 0000000..864eaa3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1726.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1727.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1727.png new file mode 100644 index 0000000..c0c177f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1727.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1728.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1728.png new file mode 100644 index 0000000..a713d29 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1728.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1729.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1729.png new file mode 100644 index 0000000..e30f76e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1729.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/173.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/173.png new file mode 100644 index 0000000..116ad89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/173.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1730.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1730.png new file mode 100644 index 0000000..eba601d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1730.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1731.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1731.png new file mode 100644 index 0000000..6052252 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1731.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1732.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1732.png new file mode 100644 index 0000000..1d77ed6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1732.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1733.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1733.png new file mode 100644 index 0000000..df2944e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1733.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1734.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1734.png new file mode 100644 index 0000000..197d6a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1734.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1735.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1735.png new file mode 100644 index 0000000..17164f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1735.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1736.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1736.png new file mode 100644 index 0000000..a642019 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1736.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1737.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1737.png new file mode 100644 index 0000000..125dad9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1737.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1738.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1738.png new file mode 100644 index 0000000..972764a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1738.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1739.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1739.png new file mode 100644 index 0000000..02c274d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1739.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/174.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/174.png new file mode 100644 index 0000000..5125b46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/174.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1740.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1740.png new file mode 100644 index 0000000..f96d530 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1740.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1741.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1741.png new file mode 100644 index 0000000..6f59ef9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1741.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1742.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1742.png new file mode 100644 index 0000000..3244c60 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1742.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1743.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1743.png new file mode 100644 index 0000000..b247254 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1743.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1744.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1744.png new file mode 100644 index 0000000..cef9f18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1744.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1745.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1745.png new file mode 100644 index 0000000..8717742 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1745.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1746.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1746.png new file mode 100644 index 0000000..309a95f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1746.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1747.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1747.png new file mode 100644 index 0000000..0676656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1747.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1748.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1748.png new file mode 100644 index 0000000..d223731 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1748.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1749.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1749.png new file mode 100644 index 0000000..7c96688 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1749.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/175.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/175.png new file mode 100644 index 0000000..4e1c6c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/175.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1750.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1750.png new file mode 100644 index 0000000..3edf404 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1750.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1751.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1751.png new file mode 100644 index 0000000..f9f6db3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1751.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1752.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1752.png new file mode 100644 index 0000000..b2696cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1752.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1753.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1753.png new file mode 100644 index 0000000..34b7f40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1753.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1754.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1754.png new file mode 100644 index 0000000..95a86b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1754.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1755.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1755.png new file mode 100644 index 0000000..6c97bf3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1755.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1756.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1756.png new file mode 100644 index 0000000..14d79a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1756.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1757.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1757.png new file mode 100644 index 0000000..9a7e402 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1757.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1758.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1758.png new file mode 100644 index 0000000..8b8742a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1758.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1759.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1759.png new file mode 100644 index 0000000..b168c6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1759.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/176.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/176.png new file mode 100644 index 0000000..717ff96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/176.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1760.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1760.png new file mode 100644 index 0000000..c923178 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1760.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1761.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1761.png new file mode 100644 index 0000000..8435cd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1761.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1762.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1762.png new file mode 100644 index 0000000..c247be8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1762.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1763.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1763.png new file mode 100644 index 0000000..e81fd86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1763.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1764.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1764.png new file mode 100644 index 0000000..18d3257 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1764.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1765.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1765.png new file mode 100644 index 0000000..21ade42 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1765.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1766.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1766.png new file mode 100644 index 0000000..0ca4ad8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1766.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1767.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1767.png new file mode 100644 index 0000000..d5273e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1767.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1768.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1768.png new file mode 100644 index 0000000..4936b2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1768.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1769.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1769.png new file mode 100644 index 0000000..8691df1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1769.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/177.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/177.png new file mode 100644 index 0000000..55c69e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/177.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1770.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1770.png new file mode 100644 index 0000000..01443b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1770.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1771.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1771.png new file mode 100644 index 0000000..2b54cb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1771.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1772.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1772.png new file mode 100644 index 0000000..70f8e92 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1772.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1773.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1773.png new file mode 100644 index 0000000..c74dd34 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1773.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1774.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1774.png new file mode 100644 index 0000000..2a34d27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1774.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1775.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1775.png new file mode 100644 index 0000000..4c347b8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1775.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1776.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1776.png new file mode 100644 index 0000000..ee08946 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1776.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1777.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1777.png new file mode 100644 index 0000000..c4275ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1777.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1778.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1778.png new file mode 100644 index 0000000..abfe18b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1778.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1779.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1779.png new file mode 100644 index 0000000..61072b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1779.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/178.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/178.png new file mode 100644 index 0000000..50df732 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/178.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1780.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1780.png new file mode 100644 index 0000000..50d2e9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1780.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1781.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1781.png new file mode 100644 index 0000000..a54a7ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1781.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1782.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1782.png new file mode 100644 index 0000000..b157050 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1782.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1783.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1783.png new file mode 100644 index 0000000..f960132 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1783.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1784.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1784.png new file mode 100644 index 0000000..7c50480 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1784.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1785.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1785.png new file mode 100644 index 0000000..d0238f9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1785.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1786.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1786.png new file mode 100644 index 0000000..c1349e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1786.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1787.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1787.png new file mode 100644 index 0000000..256c9cc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1787.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1788.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1788.png new file mode 100644 index 0000000..2d4e54c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1788.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1789.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1789.png new file mode 100644 index 0000000..cbde11b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1789.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/179.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/179.png new file mode 100644 index 0000000..68d094f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/179.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1790.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1790.png new file mode 100644 index 0000000..8a53919 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1790.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1791.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1791.png new file mode 100644 index 0000000..74aca0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1791.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1792.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1792.png new file mode 100644 index 0000000..1c18f1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1792.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1793.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1793.png new file mode 100644 index 0000000..708ebcd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1793.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1794.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1794.png new file mode 100644 index 0000000..3b3a889 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1794.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1795.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1795.png new file mode 100644 index 0000000..5628c49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1795.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1796.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1796.png new file mode 100644 index 0000000..6695e06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1796.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1797.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1797.png new file mode 100644 index 0000000..58a208c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1797.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1798.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1798.png new file mode 100644 index 0000000..5835152 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1798.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1799.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1799.png new file mode 100644 index 0000000..453bf27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1799.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/18.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/18.png new file mode 100644 index 0000000..74c9f0b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/18.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/180.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/180.png new file mode 100644 index 0000000..03349ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/180.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1800.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1800.png new file mode 100644 index 0000000..80efd94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1800.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1801.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1801.png new file mode 100644 index 0000000..f162cd2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1801.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1802.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1802.png new file mode 100644 index 0000000..bfcf5f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1802.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1803.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1803.png new file mode 100644 index 0000000..fbbd231 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1803.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1804.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1804.png new file mode 100644 index 0000000..22dc99d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1804.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1805.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1805.png new file mode 100644 index 0000000..68373d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1805.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1806.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1806.png new file mode 100644 index 0000000..a1bb26e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1806.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1807.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1807.png new file mode 100644 index 0000000..cb12289 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1807.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1808.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1808.png new file mode 100644 index 0000000..8bfb3fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1808.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1809.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1809.png new file mode 100644 index 0000000..8fc026b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1809.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/181.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/181.png new file mode 100644 index 0000000..58fd220 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/181.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1810.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1810.png new file mode 100644 index 0000000..39b09d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1810.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1811.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1811.png new file mode 100644 index 0000000..3fb8a40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1811.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1812.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1812.png new file mode 100644 index 0000000..ea46d4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1812.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1813.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1813.png new file mode 100644 index 0000000..9ecb80b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1813.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1814.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1814.png new file mode 100644 index 0000000..258bc86 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1814.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1815.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1815.png new file mode 100644 index 0000000..44b0b67 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1815.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1816.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1816.png new file mode 100644 index 0000000..5811a6a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1816.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1817.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1817.png new file mode 100644 index 0000000..0c53342 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1817.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1818.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1818.png new file mode 100644 index 0000000..deb2d35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1818.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1819.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1819.png new file mode 100644 index 0000000..2859346 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1819.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/182.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/182.png new file mode 100644 index 0000000..99b75ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/182.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1820.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1820.png new file mode 100644 index 0000000..7385650 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1820.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1821.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1821.png new file mode 100644 index 0000000..c5c6452 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1821.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1822.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1822.png new file mode 100644 index 0000000..2026ff3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1822.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1823.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1823.png new file mode 100644 index 0000000..631a09d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1823.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1824.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1824.png new file mode 100644 index 0000000..747ed12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1824.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1825.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1825.png new file mode 100644 index 0000000..69700d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1825.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1826.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1826.png new file mode 100644 index 0000000..9dd97de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1826.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1827.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1827.png new file mode 100644 index 0000000..2e1f86d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1827.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1828.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1828.png new file mode 100644 index 0000000..d8e153b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1828.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1829.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1829.png new file mode 100644 index 0000000..a596fa2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1829.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/183.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/183.png new file mode 100644 index 0000000..9f9d142 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/183.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1830.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1830.png new file mode 100644 index 0000000..0d78a2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1830.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1831.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1831.png new file mode 100644 index 0000000..1b89a8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1831.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1832.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1832.png new file mode 100644 index 0000000..9e17914 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1832.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1833.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1833.png new file mode 100644 index 0000000..5a82448 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1833.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1834.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1834.png new file mode 100644 index 0000000..c5ad50f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1834.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1835.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1835.png new file mode 100644 index 0000000..54f9d80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1835.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1836.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1836.png new file mode 100644 index 0000000..4bd7d11 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1836.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1837.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1837.png new file mode 100644 index 0000000..bdcc0c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1837.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1838.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1838.png new file mode 100644 index 0000000..1d1c1bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1838.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1839.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1839.png new file mode 100644 index 0000000..08e97af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1839.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/184.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/184.png new file mode 100644 index 0000000..d8955d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/184.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1840.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1840.png new file mode 100644 index 0000000..faf2d61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1840.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1841.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1841.png new file mode 100644 index 0000000..402658c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1841.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1842.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1842.png new file mode 100644 index 0000000..554ae5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1842.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1843.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1843.png new file mode 100644 index 0000000..39a68b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1843.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1844.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1844.png new file mode 100644 index 0000000..f146613 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1844.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1845.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1845.png new file mode 100644 index 0000000..9957a85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1845.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1846.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1846.png new file mode 100644 index 0000000..12abc79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1846.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1847.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1847.png new file mode 100644 index 0000000..2921daa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1847.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1848.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1848.png new file mode 100644 index 0000000..6617faf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1848.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1849.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1849.png new file mode 100644 index 0000000..3221150 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1849.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/185.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/185.png new file mode 100644 index 0000000..b0b7669 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/185.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1850.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1850.png new file mode 100644 index 0000000..5c19c9b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1850.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1851.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1851.png new file mode 100644 index 0000000..a60e96d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1851.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1852.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1852.png new file mode 100644 index 0000000..8c2a8f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1852.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1853.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1853.png new file mode 100644 index 0000000..409a074 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1853.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1854.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1854.png new file mode 100644 index 0000000..5e30a0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1854.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1855.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1855.png new file mode 100644 index 0000000..1be6073 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1855.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1856.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1856.png new file mode 100644 index 0000000..9d8204b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1856.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1857.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1857.png new file mode 100644 index 0000000..7a6b086 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1857.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1858.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1858.png new file mode 100644 index 0000000..d9454bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1858.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1859.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1859.png new file mode 100644 index 0000000..233eaf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1859.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/186.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/186.png new file mode 100644 index 0000000..e5136cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/186.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1860.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1860.png new file mode 100644 index 0000000..9eec476 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1860.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1861.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1861.png new file mode 100644 index 0000000..9e72942 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1861.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1862.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1862.png new file mode 100644 index 0000000..0997f46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1862.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1863.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1863.png new file mode 100644 index 0000000..916d28e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1863.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1864.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1864.png new file mode 100644 index 0000000..b21766c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1864.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1865.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1865.png new file mode 100644 index 0000000..363e9e2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1865.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1866.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1866.png new file mode 100644 index 0000000..c00f8b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1866.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1867.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1867.png new file mode 100644 index 0000000..f7779dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1867.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1868.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1868.png new file mode 100644 index 0000000..c46b37b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1868.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1869.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1869.png new file mode 100644 index 0000000..aafa75f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1869.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/187.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/187.png new file mode 100644 index 0000000..d5f0de9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/187.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1870.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1870.png new file mode 100644 index 0000000..2ea8906 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1870.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1871.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1871.png new file mode 100644 index 0000000..0781a3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1871.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1872.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1872.png new file mode 100644 index 0000000..6102616 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1872.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1873.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1873.png new file mode 100644 index 0000000..d3cb1f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1873.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1874.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1874.png new file mode 100644 index 0000000..061936e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1874.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1875.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1875.png new file mode 100644 index 0000000..edb862f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1875.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1876.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1876.png new file mode 100644 index 0000000..5bd4953 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1876.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1877.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1877.png new file mode 100644 index 0000000..651a5db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1877.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1878.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1878.png new file mode 100644 index 0000000..f2e0c5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1878.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1879.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1879.png new file mode 100644 index 0000000..36e6be3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1879.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/188.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/188.png new file mode 100644 index 0000000..dcfdf06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/188.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1880.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1880.png new file mode 100644 index 0000000..4d3ff9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1880.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1881.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1881.png new file mode 100644 index 0000000..4d2afb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1881.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1882.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1882.png new file mode 100644 index 0000000..518211b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1882.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1883.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1883.png new file mode 100644 index 0000000..b03d1f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1883.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1884.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1884.png new file mode 100644 index 0000000..a924ab7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1884.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1885.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1885.png new file mode 100644 index 0000000..0c66ba2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1885.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1886.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1886.png new file mode 100644 index 0000000..7428760 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1886.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1887.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1887.png new file mode 100644 index 0000000..f8e3d71 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1887.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1888.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1888.png new file mode 100644 index 0000000..2b65a54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1888.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1889.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1889.png new file mode 100644 index 0000000..10848eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1889.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/189.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/189.png new file mode 100644 index 0000000..b045412 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/189.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1890.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1890.png new file mode 100644 index 0000000..30bdb63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1890.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1891.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1891.png new file mode 100644 index 0000000..96b7260 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1891.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1892.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1892.png new file mode 100644 index 0000000..27c7206 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1892.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1893.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1893.png new file mode 100644 index 0000000..615606c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1893.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1894.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1894.png new file mode 100644 index 0000000..668f584 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1894.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1895.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1895.png new file mode 100644 index 0000000..add3745 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1895.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1896.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1896.png new file mode 100644 index 0000000..a16aa73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1896.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1897.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1897.png new file mode 100644 index 0000000..2d58513 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1897.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1898.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1898.png new file mode 100644 index 0000000..2233828 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1898.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1899.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1899.png new file mode 100644 index 0000000..38d2a04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1899.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/19.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/19.png new file mode 100644 index 0000000..1f356eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/19.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/190.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/190.png new file mode 100644 index 0000000..9655224 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/190.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1900.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1900.png new file mode 100644 index 0000000..306ef4b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1900.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1901.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1901.png new file mode 100644 index 0000000..dc7453c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1901.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1902.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1902.png new file mode 100644 index 0000000..fe52deb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1902.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1903.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1903.png new file mode 100644 index 0000000..f400941 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1903.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1904.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1904.png new file mode 100644 index 0000000..e681859 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1904.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1905.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1905.png new file mode 100644 index 0000000..4594231 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1905.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1906.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1906.png new file mode 100644 index 0000000..80732ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1906.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1907.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1907.png new file mode 100644 index 0000000..a21f3fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1907.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1908.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1908.png new file mode 100644 index 0000000..309d026 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1908.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1909.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1909.png new file mode 100644 index 0000000..8e9415b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1909.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/191.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/191.png new file mode 100644 index 0000000..a0373ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/191.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1910.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1910.png new file mode 100644 index 0000000..e607311 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1910.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1911.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1911.png new file mode 100644 index 0000000..5915404 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1911.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1912.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1912.png new file mode 100644 index 0000000..8ca9eb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1912.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1913.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1913.png new file mode 100644 index 0000000..82604e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1913.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1914.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1914.png new file mode 100644 index 0000000..551b90b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1914.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1915.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1915.png new file mode 100644 index 0000000..ca84b5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1915.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1916.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1916.png new file mode 100644 index 0000000..121e752 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1916.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1917.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1917.png new file mode 100644 index 0000000..81638ad Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1917.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1918.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1918.png new file mode 100644 index 0000000..7eab309 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1918.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1919.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1919.png new file mode 100644 index 0000000..1e74f97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1919.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/192.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/192.png new file mode 100644 index 0000000..5d93e83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/192.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1920.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1920.png new file mode 100644 index 0000000..f1e6f61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1920.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1921.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1921.png new file mode 100644 index 0000000..2f4b37d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1921.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1922.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1922.png new file mode 100644 index 0000000..a7aaf63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1922.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1923.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1923.png new file mode 100644 index 0000000..394d62b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1923.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1924.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1924.png new file mode 100644 index 0000000..9334349 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1924.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1925.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1925.png new file mode 100644 index 0000000..4c6ce83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1925.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1926.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1926.png new file mode 100644 index 0000000..a221cd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1926.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1927.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1927.png new file mode 100644 index 0000000..e2ecd09 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1927.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1928.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1928.png new file mode 100644 index 0000000..bda75d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1928.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1929.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1929.png new file mode 100644 index 0000000..aebcfda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1929.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/193.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/193.png new file mode 100644 index 0000000..902d474 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/193.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1930.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1930.png new file mode 100644 index 0000000..2ebdaf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1930.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1931.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1931.png new file mode 100644 index 0000000..19326f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1931.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1932.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1932.png new file mode 100644 index 0000000..de48036 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1932.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1933.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1933.png new file mode 100644 index 0000000..a5c04a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1933.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1934.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1934.png new file mode 100644 index 0000000..9f868e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1934.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1935.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1935.png new file mode 100644 index 0000000..3f1da84 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1935.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1936.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1936.png new file mode 100644 index 0000000..aaaa92e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1936.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1937.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1937.png new file mode 100644 index 0000000..102e8e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1937.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1938.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1938.png new file mode 100644 index 0000000..bcbb1d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1938.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1939.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1939.png new file mode 100644 index 0000000..b57ed87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1939.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/194.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/194.png new file mode 100644 index 0000000..fea85db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/194.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1940.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1940.png new file mode 100644 index 0000000..edb4eb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1940.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1941.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1941.png new file mode 100644 index 0000000..146ef51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1941.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1942.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1942.png new file mode 100644 index 0000000..f45e828 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1942.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1943.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1943.png new file mode 100644 index 0000000..6b44431 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1943.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1944.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1944.png new file mode 100644 index 0000000..3d9e55b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1944.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1945.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1945.png new file mode 100644 index 0000000..28d90fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1945.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1946.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1946.png new file mode 100644 index 0000000..bf4e7b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1946.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1947.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1947.png new file mode 100644 index 0000000..8ef9458 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1947.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1948.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1948.png new file mode 100644 index 0000000..6432520 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1948.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1949.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1949.png new file mode 100644 index 0000000..6ac477c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1949.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/195.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/195.png new file mode 100644 index 0000000..c06b24a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/195.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1950.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1950.png new file mode 100644 index 0000000..a352690 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1950.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1951.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1951.png new file mode 100644 index 0000000..876dc0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1951.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1952.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1952.png new file mode 100644 index 0000000..c9e14d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1952.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1953.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1953.png new file mode 100644 index 0000000..c3af547 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1953.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1954.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1954.png new file mode 100644 index 0000000..40d511b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1954.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1955.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1955.png new file mode 100644 index 0000000..0d554ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1955.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1956.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1956.png new file mode 100644 index 0000000..90d4fd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1956.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1957.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1957.png new file mode 100644 index 0000000..4c14b2a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1957.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1958.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1958.png new file mode 100644 index 0000000..04ab0e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1958.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1959.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1959.png new file mode 100644 index 0000000..96e18e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1959.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/196.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/196.png new file mode 100644 index 0000000..c8a5497 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/196.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1960.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1960.png new file mode 100644 index 0000000..8e872aa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1960.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1961.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1961.png new file mode 100644 index 0000000..9b47993 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1961.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1962.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1962.png new file mode 100644 index 0000000..a6369de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1962.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1963.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1963.png new file mode 100644 index 0000000..e8cc656 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1963.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1964.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1964.png new file mode 100644 index 0000000..4c59f3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1964.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1965.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1965.png new file mode 100644 index 0000000..e5ef061 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1965.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1966.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1966.png new file mode 100644 index 0000000..9853213 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1966.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1967.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1967.png new file mode 100644 index 0000000..166175c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1967.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1968.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1968.png new file mode 100644 index 0000000..36bc148 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1968.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1969.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1969.png new file mode 100644 index 0000000..b6a8285 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1969.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/197.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/197.png new file mode 100644 index 0000000..0ad3519 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/197.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1970.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1970.png new file mode 100644 index 0000000..e7706ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1970.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1971.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1971.png new file mode 100644 index 0000000..c01f098 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1971.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1972.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1972.png new file mode 100644 index 0000000..5cf0d91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1972.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1973.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1973.png new file mode 100644 index 0000000..75d9c2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1973.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1974.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1974.png new file mode 100644 index 0000000..8ce6cbb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1974.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1975.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1975.png new file mode 100644 index 0000000..2da332e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1975.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1976.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1976.png new file mode 100644 index 0000000..7ae4d3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1976.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1977.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1977.png new file mode 100644 index 0000000..e1df468 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1977.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1978.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1978.png new file mode 100644 index 0000000..d0b1f96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1978.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1979.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1979.png new file mode 100644 index 0000000..f93ff16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1979.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/198.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/198.png new file mode 100644 index 0000000..40082cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/198.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1980.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1980.png new file mode 100644 index 0000000..8889f25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1980.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1981.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1981.png new file mode 100644 index 0000000..cf9e110 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1981.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1982.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1982.png new file mode 100644 index 0000000..cb200dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1982.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1983.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1983.png new file mode 100644 index 0000000..7e44653 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1983.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1984.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1984.png new file mode 100644 index 0000000..20ac2d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1984.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1985.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1985.png new file mode 100644 index 0000000..7e7e437 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1985.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1986.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1986.png new file mode 100644 index 0000000..6fae9a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1986.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1987.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1987.png new file mode 100644 index 0000000..b8260d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1987.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1988.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1988.png new file mode 100644 index 0000000..b036f24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1988.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1989.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1989.png new file mode 100644 index 0000000..e9ef1a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1989.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/199.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/199.png new file mode 100644 index 0000000..2a182c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/199.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1990.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1990.png new file mode 100644 index 0000000..1c3b3c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1990.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1991.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1991.png new file mode 100644 index 0000000..cb8e305 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1991.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1992.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1992.png new file mode 100644 index 0000000..dc7d4a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1992.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1993.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1993.png new file mode 100644 index 0000000..7058d73 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1993.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1994.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1994.png new file mode 100644 index 0000000..c845032 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1994.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1995.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1995.png new file mode 100644 index 0000000..f1ebb45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1995.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1996.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1996.png new file mode 100644 index 0000000..9d588df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1996.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1997.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1997.png new file mode 100644 index 0000000..fd49584 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1997.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1998.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1998.png new file mode 100644 index 0000000..c99048a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1998.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1999.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1999.png new file mode 100644 index 0000000..4dff3f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/1999.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2.png new file mode 100644 index 0000000..087f951 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/20.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/20.png new file mode 100644 index 0000000..7949dbd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/20.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/200.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/200.png new file mode 100644 index 0000000..f8c3786 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/200.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2000.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2000.png new file mode 100644 index 0000000..81db9c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2000.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2001.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2001.png new file mode 100644 index 0000000..d7c989c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2001.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2002.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2002.png new file mode 100644 index 0000000..dca4fdc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2002.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2003.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2003.png new file mode 100644 index 0000000..622f8f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2003.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2004.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2004.png new file mode 100644 index 0000000..5d01f8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2004.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2005.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2005.png new file mode 100644 index 0000000..06bf467 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2005.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2006.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2006.png new file mode 100644 index 0000000..fe3d9ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2006.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2007.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2007.png new file mode 100644 index 0000000..725c2b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2007.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2008.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2008.png new file mode 100644 index 0000000..7b3a429 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2008.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2009.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2009.png new file mode 100644 index 0000000..f2f65bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2009.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/201.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/201.png new file mode 100644 index 0000000..4ca9386 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/201.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2010.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2010.png new file mode 100644 index 0000000..72b7c9c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2010.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2011.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2011.png new file mode 100644 index 0000000..5ba2722 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2011.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2012.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2012.png new file mode 100644 index 0000000..a6cccf7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2012.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2013.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2013.png new file mode 100644 index 0000000..a3e1c36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2013.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2014.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2014.png new file mode 100644 index 0000000..a74a53d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2014.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2015.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2015.png new file mode 100644 index 0000000..50b9474 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2015.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2016.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2016.png new file mode 100644 index 0000000..8c2284b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2016.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2017.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2017.png new file mode 100644 index 0000000..60e8dd5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2017.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2018.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2018.png new file mode 100644 index 0000000..8189970 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2018.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2019.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2019.png new file mode 100644 index 0000000..f235c75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2019.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/202.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/202.png new file mode 100644 index 0000000..9801484 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/202.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2020.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2020.png new file mode 100644 index 0000000..b32d360 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2020.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2021.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2021.png new file mode 100644 index 0000000..01f0ec0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2021.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2022.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2022.png new file mode 100644 index 0000000..4ef716b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2022.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2023.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2023.png new file mode 100644 index 0000000..2996ec8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2023.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2024.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2024.png new file mode 100644 index 0000000..a9d6c4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2024.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2025.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2025.png new file mode 100644 index 0000000..35061f6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2025.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2026.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2026.png new file mode 100644 index 0000000..eef504f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2026.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2027.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2027.png new file mode 100644 index 0000000..df6d217 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2027.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2028.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2028.png new file mode 100644 index 0000000..05df8d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2028.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2029.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2029.png new file mode 100644 index 0000000..7989633 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2029.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/203.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/203.png new file mode 100644 index 0000000..f12dbd5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/203.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2030.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2030.png new file mode 100644 index 0000000..488fe22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2030.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2031.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2031.png new file mode 100644 index 0000000..505b344 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2031.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2032.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2032.png new file mode 100644 index 0000000..2d983e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2032.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2033.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2033.png new file mode 100644 index 0000000..7c68acb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2033.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2034.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2034.png new file mode 100644 index 0000000..5e34ea1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2034.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2035.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2035.png new file mode 100644 index 0000000..55884b5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2035.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2036.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2036.png new file mode 100644 index 0000000..c9d9551 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2036.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2037.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2037.png new file mode 100644 index 0000000..1896aa0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2037.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2038.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2038.png new file mode 100644 index 0000000..b8123a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2038.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2039.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2039.png new file mode 100644 index 0000000..9622513 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2039.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/204.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/204.png new file mode 100644 index 0000000..eabb978 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/204.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2040.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2040.png new file mode 100644 index 0000000..68f5f02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2040.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2041.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2041.png new file mode 100644 index 0000000..ad86342 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2041.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2042.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2042.png new file mode 100644 index 0000000..ba8e14f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2042.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2043.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2043.png new file mode 100644 index 0000000..e6c36c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2043.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2044.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2044.png new file mode 100644 index 0000000..6edca28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2044.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2045.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2045.png new file mode 100644 index 0000000..38398a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2045.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2046.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2046.png new file mode 100644 index 0000000..8c40b39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2046.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2047.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2047.png new file mode 100644 index 0000000..3a3872e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2047.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2048.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2048.png new file mode 100644 index 0000000..aeed821 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2048.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2049.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2049.png new file mode 100644 index 0000000..faa97c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2049.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/205.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/205.png new file mode 100644 index 0000000..38b4afe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/205.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2050.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2050.png new file mode 100644 index 0000000..71f7bb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2050.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2051.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2051.png new file mode 100644 index 0000000..bb83a02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/2051.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/206.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/206.png new file mode 100644 index 0000000..f9d40ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/206.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/207.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/207.png new file mode 100644 index 0000000..eead622 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/207.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/208.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/208.png new file mode 100644 index 0000000..33a4e58 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/208.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/209.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/209.png new file mode 100644 index 0000000..4ec1764 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/209.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/21.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/21.png new file mode 100644 index 0000000..64c0f00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/21.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/210.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/210.png new file mode 100644 index 0000000..9591fd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/210.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/211.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/211.png new file mode 100644 index 0000000..70bda40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/211.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/212.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/212.png new file mode 100644 index 0000000..58672d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/212.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/213.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/213.png new file mode 100644 index 0000000..c32e53c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/213.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/214.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/214.png new file mode 100644 index 0000000..f781df2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/214.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/215.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/215.png new file mode 100644 index 0000000..b912a8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/215.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/216.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/216.png new file mode 100644 index 0000000..e3fd198 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/216.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/217.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/217.png new file mode 100644 index 0000000..7579ef1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/217.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/218.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/218.png new file mode 100644 index 0000000..1f7dca1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/218.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/219.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/219.png new file mode 100644 index 0000000..0af4258 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/219.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/22.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/22.png new file mode 100644 index 0000000..4b4be1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/22.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/220.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/220.png new file mode 100644 index 0000000..6014b57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/220.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/221.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/221.png new file mode 100644 index 0000000..4d828e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/221.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/222.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/222.png new file mode 100644 index 0000000..a7ab85c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/222.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/223.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/223.png new file mode 100644 index 0000000..dc33072 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/223.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/224.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/224.png new file mode 100644 index 0000000..db1f2fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/224.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/225.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/225.png new file mode 100644 index 0000000..deff588 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/225.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/226.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/226.png new file mode 100644 index 0000000..865df8e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/226.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/227.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/227.png new file mode 100644 index 0000000..bd349fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/227.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/228.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/228.png new file mode 100644 index 0000000..bea8b16 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/228.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/229.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/229.png new file mode 100644 index 0000000..a663531 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/229.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/23.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/23.png new file mode 100644 index 0000000..0822b77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/23.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/230.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/230.png new file mode 100644 index 0000000..fcdb8bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/230.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/231.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/231.png new file mode 100644 index 0000000..875b956 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/231.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/232.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/232.png new file mode 100644 index 0000000..78aec33 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/232.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/233.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/233.png new file mode 100644 index 0000000..3ff75d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/233.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/234.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/234.png new file mode 100644 index 0000000..0d65b96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/234.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/235.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/235.png new file mode 100644 index 0000000..fd2e7ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/235.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/236.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/236.png new file mode 100644 index 0000000..8e357e1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/236.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/237.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/237.png new file mode 100644 index 0000000..c052d9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/237.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/238.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/238.png new file mode 100644 index 0000000..5323e4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/238.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/239.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/239.png new file mode 100644 index 0000000..d2ceb6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/239.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/24.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/24.png new file mode 100644 index 0000000..6e83cc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/24.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/240.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/240.png new file mode 100644 index 0000000..c390490 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/240.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/241.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/241.png new file mode 100644 index 0000000..86eafbd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/241.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/242.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/242.png new file mode 100644 index 0000000..6af70c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/242.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/243.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/243.png new file mode 100644 index 0000000..bb8b00b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/243.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/244.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/244.png new file mode 100644 index 0000000..bb6b5a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/244.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/245.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/245.png new file mode 100644 index 0000000..febb340 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/245.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/246.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/246.png new file mode 100644 index 0000000..535092f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/246.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/247.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/247.png new file mode 100644 index 0000000..36724d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/247.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/248.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/248.png new file mode 100644 index 0000000..d0ba0a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/248.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/249.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/249.png new file mode 100644 index 0000000..c294ed2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/249.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/25.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/25.png new file mode 100644 index 0000000..e290106 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/25.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/250.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/250.png new file mode 100644 index 0000000..2ae5447 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/250.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/251.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/251.png new file mode 100644 index 0000000..37f56bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/251.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/252.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/252.png new file mode 100644 index 0000000..4b70fb2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/252.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/253.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/253.png new file mode 100644 index 0000000..1b6a3d7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/253.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/254.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/254.png new file mode 100644 index 0000000..6d6f71e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/254.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/255.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/255.png new file mode 100644 index 0000000..63dda99 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/255.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/256.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/256.png new file mode 100644 index 0000000..825e1e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/256.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/257.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/257.png new file mode 100644 index 0000000..4c289f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/257.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/258.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/258.png new file mode 100644 index 0000000..e8b10b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/258.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/259.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/259.png new file mode 100644 index 0000000..435d8e4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/259.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/26.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/26.png new file mode 100644 index 0000000..4f85e35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/26.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/260.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/260.png new file mode 100644 index 0000000..1c3c498 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/260.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/261.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/261.png new file mode 100644 index 0000000..f4f45a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/261.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/262.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/262.png new file mode 100644 index 0000000..54be4ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/262.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/263.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/263.png new file mode 100644 index 0000000..b4f6df4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/263.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/264.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/264.png new file mode 100644 index 0000000..124fee1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/264.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/265.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/265.png new file mode 100644 index 0000000..4b83fc0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/265.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/266.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/266.png new file mode 100644 index 0000000..4ef50c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/266.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/267.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/267.png new file mode 100644 index 0000000..276ed70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/267.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/268.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/268.png new file mode 100644 index 0000000..ca1d78b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/268.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/269.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/269.png new file mode 100644 index 0000000..a5f6635 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/269.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/27.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/27.png new file mode 100644 index 0000000..92597bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/27.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/270.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/270.png new file mode 100644 index 0000000..6ab01cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/270.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/271.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/271.png new file mode 100644 index 0000000..4ae3f3a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/271.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/272.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/272.png new file mode 100644 index 0000000..222cffc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/272.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/273.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/273.png new file mode 100644 index 0000000..bf97a3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/273.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/274.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/274.png new file mode 100644 index 0000000..a012798 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/274.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/275.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/275.png new file mode 100644 index 0000000..63196b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/275.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/276.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/276.png new file mode 100644 index 0000000..aa683fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/276.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/277.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/277.png new file mode 100644 index 0000000..87d1be1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/277.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/278.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/278.png new file mode 100644 index 0000000..f2f485d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/278.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/279.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/279.png new file mode 100644 index 0000000..ab0565d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/279.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/28.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/28.png new file mode 100644 index 0000000..399c7f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/28.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/280.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/280.png new file mode 100644 index 0000000..fa4feb5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/280.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/281.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/281.png new file mode 100644 index 0000000..5b12711 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/281.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/282.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/282.png new file mode 100644 index 0000000..7cf4f4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/282.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/283.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/283.png new file mode 100644 index 0000000..d96e250 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/283.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/284.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/284.png new file mode 100644 index 0000000..fa6fa22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/284.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/285.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/285.png new file mode 100644 index 0000000..9363287 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/285.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/286.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/286.png new file mode 100644 index 0000000..9f16977 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/286.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/287.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/287.png new file mode 100644 index 0000000..f3bf349 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/287.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/288.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/288.png new file mode 100644 index 0000000..2e05ad0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/288.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/289.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/289.png new file mode 100644 index 0000000..1d24358 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/289.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/29.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/29.png new file mode 100644 index 0000000..4b251be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/29.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/290.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/290.png new file mode 100644 index 0000000..8fb7b02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/290.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/291.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/291.png new file mode 100644 index 0000000..3a41bb4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/291.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/292.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/292.png new file mode 100644 index 0000000..0937032 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/292.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/293.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/293.png new file mode 100644 index 0000000..683ad6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/293.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/294.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/294.png new file mode 100644 index 0000000..94c5581 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/294.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/295.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/295.png new file mode 100644 index 0000000..9682f1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/295.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/296.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/296.png new file mode 100644 index 0000000..1979b22 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/296.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/297.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/297.png new file mode 100644 index 0000000..7495acf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/297.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/298.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/298.png new file mode 100644 index 0000000..3d91a12 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/298.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/299.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/299.png new file mode 100644 index 0000000..32fd40a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/299.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/3.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/3.png new file mode 100644 index 0000000..86074d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/3.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/30.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/30.png new file mode 100644 index 0000000..93459ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/30.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/300.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/300.png new file mode 100644 index 0000000..6a9f3cf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/300.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/301.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/301.png new file mode 100644 index 0000000..70244a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/301.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/302.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/302.png new file mode 100644 index 0000000..bcef3bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/302.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/303.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/303.png new file mode 100644 index 0000000..b6c5f80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/303.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/304.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/304.png new file mode 100644 index 0000000..9effa20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/304.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/305.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/305.png new file mode 100644 index 0000000..d255120 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/305.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/306.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/306.png new file mode 100644 index 0000000..d73e08d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/306.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/307.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/307.png new file mode 100644 index 0000000..0fd03df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/307.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/308.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/308.png new file mode 100644 index 0000000..a080faf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/308.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/309.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/309.png new file mode 100644 index 0000000..f4f66b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/309.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/31.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/31.png new file mode 100644 index 0000000..cc23c7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/31.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/310.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/310.png new file mode 100644 index 0000000..a840eeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/310.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/311.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/311.png new file mode 100644 index 0000000..abc8c28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/311.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/312.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/312.png new file mode 100644 index 0000000..055a2a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/312.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/313.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/313.png new file mode 100644 index 0000000..090baba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/313.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/314.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/314.png new file mode 100644 index 0000000..311aba4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/314.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/315.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/315.png new file mode 100644 index 0000000..3ed4f43 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/315.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/316.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/316.png new file mode 100644 index 0000000..7e5bed4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/316.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/317.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/317.png new file mode 100644 index 0000000..ef08866 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/317.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/318.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/318.png new file mode 100644 index 0000000..53d628e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/318.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/319.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/319.png new file mode 100644 index 0000000..824dda7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/319.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/32.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/32.png new file mode 100644 index 0000000..7a914eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/32.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/320.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/320.png new file mode 100644 index 0000000..bc313e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/320.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/321.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/321.png new file mode 100644 index 0000000..4c41df4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/321.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/322.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/322.png new file mode 100644 index 0000000..5d8b361 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/322.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/323.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/323.png new file mode 100644 index 0000000..3e35c98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/323.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/324.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/324.png new file mode 100644 index 0000000..770c22f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/324.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/325.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/325.png new file mode 100644 index 0000000..f019bf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/325.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/326.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/326.png new file mode 100644 index 0000000..d6a546e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/326.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/327.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/327.png new file mode 100644 index 0000000..862c145 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/327.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/328.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/328.png new file mode 100644 index 0000000..1029dbc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/328.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/329.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/329.png new file mode 100644 index 0000000..a84a952 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/329.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/33.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/33.png new file mode 100644 index 0000000..e99aac4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/33.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/330.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/330.png new file mode 100644 index 0000000..5a1624d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/330.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/331.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/331.png new file mode 100644 index 0000000..4ea350c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/331.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/332.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/332.png new file mode 100644 index 0000000..8784793 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/332.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/333.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/333.png new file mode 100644 index 0000000..b49e582 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/333.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/334.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/334.png new file mode 100644 index 0000000..cef4d75 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/334.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/335.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/335.png new file mode 100644 index 0000000..b4e1e85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/335.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/336.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/336.png new file mode 100644 index 0000000..b44081d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/336.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/337.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/337.png new file mode 100644 index 0000000..d24af55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/337.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/338.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/338.png new file mode 100644 index 0000000..491f82d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/338.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/339.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/339.png new file mode 100644 index 0000000..114f98b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/339.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/34.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/34.png new file mode 100644 index 0000000..a4d999b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/34.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/340.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/340.png new file mode 100644 index 0000000..9483c03 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/340.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/341.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/341.png new file mode 100644 index 0000000..aaaffdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/341.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/342.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/342.png new file mode 100644 index 0000000..b60dd2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/342.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/343.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/343.png new file mode 100644 index 0000000..afdf439 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/343.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/344.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/344.png new file mode 100644 index 0000000..e94097d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/344.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/345.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/345.png new file mode 100644 index 0000000..cc2174c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/345.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/346.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/346.png new file mode 100644 index 0000000..35acdd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/346.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/347.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/347.png new file mode 100644 index 0000000..0d966ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/347.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/348.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/348.png new file mode 100644 index 0000000..ac2234c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/348.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/349.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/349.png new file mode 100644 index 0000000..d2822fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/349.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/35.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/35.png new file mode 100644 index 0000000..00540b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/35.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/350.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/350.png new file mode 100644 index 0000000..304c5f0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/350.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/351.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/351.png new file mode 100644 index 0000000..12cf057 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/351.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/352.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/352.png new file mode 100644 index 0000000..e2b1ee9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/352.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/353.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/353.png new file mode 100644 index 0000000..2b65703 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/353.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/354.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/354.png new file mode 100644 index 0000000..1f54d91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/354.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/355.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/355.png new file mode 100644 index 0000000..b3fd096 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/355.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/356.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/356.png new file mode 100644 index 0000000..034b75b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/356.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/357.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/357.png new file mode 100644 index 0000000..dd35bab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/357.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/358.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/358.png new file mode 100644 index 0000000..0e78546 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/358.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/359.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/359.png new file mode 100644 index 0000000..6211a82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/359.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/36.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/36.png new file mode 100644 index 0000000..638ed2f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/36.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/360.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/360.png new file mode 100644 index 0000000..4950aa0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/360.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/361.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/361.png new file mode 100644 index 0000000..f989e79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/361.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/362.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/362.png new file mode 100644 index 0000000..1f497b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/362.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/363.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/363.png new file mode 100644 index 0000000..af47754 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/363.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/364.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/364.png new file mode 100644 index 0000000..bfbeee2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/364.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/365.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/365.png new file mode 100644 index 0000000..0a9e632 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/365.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/366.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/366.png new file mode 100644 index 0000000..cedc196 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/366.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/367.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/367.png new file mode 100644 index 0000000..0aed75b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/367.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/368.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/368.png new file mode 100644 index 0000000..f93c3fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/368.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/369.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/369.png new file mode 100644 index 0000000..90d823a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/369.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/37.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/37.png new file mode 100644 index 0000000..a9457af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/37.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/370.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/370.png new file mode 100644 index 0000000..23893c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/370.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/371.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/371.png new file mode 100644 index 0000000..62d1f5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/371.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/372.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/372.png new file mode 100644 index 0000000..609860a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/372.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/373.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/373.png new file mode 100644 index 0000000..db9c3e9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/373.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/374.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/374.png new file mode 100644 index 0000000..5009e8d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/374.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/375.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/375.png new file mode 100644 index 0000000..32a4504 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/375.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/376.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/376.png new file mode 100644 index 0000000..06ab44a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/376.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/377.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/377.png new file mode 100644 index 0000000..6c6c1d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/377.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/378.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/378.png new file mode 100644 index 0000000..01d5bb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/378.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/379.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/379.png new file mode 100644 index 0000000..21ec037 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/379.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/38.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/38.png new file mode 100644 index 0000000..b4ef048 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/38.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/380.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/380.png new file mode 100644 index 0000000..a1a3e81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/380.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/381.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/381.png new file mode 100644 index 0000000..4ece07a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/381.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/382.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/382.png new file mode 100644 index 0000000..b0e3f7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/382.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/383.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/383.png new file mode 100644 index 0000000..c2e658d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/383.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/384.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/384.png new file mode 100644 index 0000000..1cbbdce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/384.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/385.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/385.png new file mode 100644 index 0000000..481555e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/385.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/386.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/386.png new file mode 100644 index 0000000..11ed75b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/386.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/387.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/387.png new file mode 100644 index 0000000..c535d85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/387.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/388.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/388.png new file mode 100644 index 0000000..1c17932 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/388.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/389.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/389.png new file mode 100644 index 0000000..a49bd96 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/389.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/39.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/39.png new file mode 100644 index 0000000..0e47c57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/39.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/390.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/390.png new file mode 100644 index 0000000..ff6b17a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/390.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/391.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/391.png new file mode 100644 index 0000000..ede1b0e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/391.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/392.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/392.png new file mode 100644 index 0000000..2420f6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/392.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/393.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/393.png new file mode 100644 index 0000000..9095fd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/393.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/394.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/394.png new file mode 100644 index 0000000..cc93e89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/394.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/395.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/395.png new file mode 100644 index 0000000..dd56e3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/395.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/396.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/396.png new file mode 100644 index 0000000..65f1d94 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/396.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/397.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/397.png new file mode 100644 index 0000000..9dd70a4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/397.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/398.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/398.png new file mode 100644 index 0000000..fb708e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/398.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/399.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/399.png new file mode 100644 index 0000000..dd45b5e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/399.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/4.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/4.png new file mode 100644 index 0000000..74e3705 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/4.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/40.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/40.png new file mode 100644 index 0000000..e81abea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/40.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/400.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/400.png new file mode 100644 index 0000000..a36bb39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/400.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/401.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/401.png new file mode 100644 index 0000000..5e41755 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/401.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/402.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/402.png new file mode 100644 index 0000000..fe904a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/402.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/403.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/403.png new file mode 100644 index 0000000..4934643 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/403.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/404.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/404.png new file mode 100644 index 0000000..b08877a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/404.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/405.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/405.png new file mode 100644 index 0000000..37ce05c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/405.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/406.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/406.png new file mode 100644 index 0000000..ea25770 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/406.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/407.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/407.png new file mode 100644 index 0000000..587f584 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/407.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/408.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/408.png new file mode 100644 index 0000000..de34829 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/408.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/409.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/409.png new file mode 100644 index 0000000..4291d1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/409.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/41.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/41.png new file mode 100644 index 0000000..c9a499a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/41.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/410.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/410.png new file mode 100644 index 0000000..fd2b700 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/410.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/411.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/411.png new file mode 100644 index 0000000..e7f3136 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/411.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/412.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/412.png new file mode 100644 index 0000000..d5ff961 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/412.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/413.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/413.png new file mode 100644 index 0000000..21be070 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/413.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/414.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/414.png new file mode 100644 index 0000000..2cd27ca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/414.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/415.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/415.png new file mode 100644 index 0000000..cb768c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/415.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/416.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/416.png new file mode 100644 index 0000000..ea68055 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/416.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/417.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/417.png new file mode 100644 index 0000000..ad74b6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/417.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/418.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/418.png new file mode 100644 index 0000000..8089a51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/418.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/419.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/419.png new file mode 100644 index 0000000..3a54e8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/419.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/42.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/42.png new file mode 100644 index 0000000..32ce9b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/42.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/420.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/420.png new file mode 100644 index 0000000..4217b82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/420.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/421.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/421.png new file mode 100644 index 0000000..a541090 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/421.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/422.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/422.png new file mode 100644 index 0000000..48e41a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/422.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/423.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/423.png new file mode 100644 index 0000000..f75ff25 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/423.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/424.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/424.png new file mode 100644 index 0000000..23db5a9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/424.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/425.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/425.png new file mode 100644 index 0000000..868bdb7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/425.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/426.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/426.png new file mode 100644 index 0000000..e6d02fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/426.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/427.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/427.png new file mode 100644 index 0000000..53a0a48 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/427.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/428.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/428.png new file mode 100644 index 0000000..4d4354c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/428.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/429.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/429.png new file mode 100644 index 0000000..d2dc1c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/429.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/43.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/43.png new file mode 100644 index 0000000..6ecd5b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/43.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/430.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/430.png new file mode 100644 index 0000000..62245c6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/430.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/431.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/431.png new file mode 100644 index 0000000..7fe4eba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/431.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/432.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/432.png new file mode 100644 index 0000000..aff1258 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/432.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/433.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/433.png new file mode 100644 index 0000000..4a4d2a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/433.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/434.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/434.png new file mode 100644 index 0000000..34ad809 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/434.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/435.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/435.png new file mode 100644 index 0000000..5e4530a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/435.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/436.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/436.png new file mode 100644 index 0000000..0e30b5a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/436.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/437.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/437.png new file mode 100644 index 0000000..7a4727a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/437.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/438.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/438.png new file mode 100644 index 0000000..cf7302b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/438.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/439.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/439.png new file mode 100644 index 0000000..3bb284f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/439.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/44.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/44.png new file mode 100644 index 0000000..b400a98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/44.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/440.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/440.png new file mode 100644 index 0000000..e14cb4e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/440.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/441.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/441.png new file mode 100644 index 0000000..23cc67c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/441.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/442.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/442.png new file mode 100644 index 0000000..d7e6834 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/442.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/443.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/443.png new file mode 100644 index 0000000..2421334 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/443.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/444.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/444.png new file mode 100644 index 0000000..8a2202d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/444.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/445.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/445.png new file mode 100644 index 0000000..78a180e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/445.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/446.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/446.png new file mode 100644 index 0000000..9989ebb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/446.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/447.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/447.png new file mode 100644 index 0000000..d6a38cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/447.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/448.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/448.png new file mode 100644 index 0000000..310747c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/448.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/449.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/449.png new file mode 100644 index 0000000..b9f3223 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/449.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/45.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/45.png new file mode 100644 index 0000000..53c0f5f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/45.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/450.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/450.png new file mode 100644 index 0000000..983a3da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/450.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/451.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/451.png new file mode 100644 index 0000000..b2f90c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/451.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/452.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/452.png new file mode 100644 index 0000000..64096bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/452.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/453.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/453.png new file mode 100644 index 0000000..0092db2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/453.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/454.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/454.png new file mode 100644 index 0000000..3552157 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/454.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/455.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/455.png new file mode 100644 index 0000000..60ff88c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/455.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/456.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/456.png new file mode 100644 index 0000000..9929e3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/456.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/457.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/457.png new file mode 100644 index 0000000..2452e4f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/457.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/458.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/458.png new file mode 100644 index 0000000..60edf1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/458.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/459.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/459.png new file mode 100644 index 0000000..4f2ce39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/459.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/46.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/46.png new file mode 100644 index 0000000..e2e43f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/46.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/460.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/460.png new file mode 100644 index 0000000..c002085 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/460.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/461.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/461.png new file mode 100644 index 0000000..d948f1b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/461.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/462.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/462.png new file mode 100644 index 0000000..2920a39 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/462.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/463.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/463.png new file mode 100644 index 0000000..8ae2ee5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/463.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/464.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/464.png new file mode 100644 index 0000000..6695fc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/464.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/465.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/465.png new file mode 100644 index 0000000..1182cf6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/465.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/466.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/466.png new file mode 100644 index 0000000..9daa790 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/466.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/467.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/467.png new file mode 100644 index 0000000..5cd6321 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/467.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/468.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/468.png new file mode 100644 index 0000000..c1b89b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/468.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/469.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/469.png new file mode 100644 index 0000000..8fe4c40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/469.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/47.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/47.png new file mode 100644 index 0000000..d69ae6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/47.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/470.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/470.png new file mode 100644 index 0000000..a0eab0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/470.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/471.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/471.png new file mode 100644 index 0000000..150553a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/471.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/472.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/472.png new file mode 100644 index 0000000..87bbe85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/472.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/473.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/473.png new file mode 100644 index 0000000..9020063 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/473.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/474.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/474.png new file mode 100644 index 0000000..08830a1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/474.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/475.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/475.png new file mode 100644 index 0000000..1350c82 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/475.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/476.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/476.png new file mode 100644 index 0000000..bf42dfe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/476.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/477.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/477.png new file mode 100644 index 0000000..b3fe601 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/477.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/478.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/478.png new file mode 100644 index 0000000..b927e8a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/478.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/479.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/479.png new file mode 100644 index 0000000..b0afa87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/479.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/48.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/48.png new file mode 100644 index 0000000..a944617 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/48.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/480.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/480.png new file mode 100644 index 0000000..8db3130 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/480.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/481.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/481.png new file mode 100644 index 0000000..210ef05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/481.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/482.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/482.png new file mode 100644 index 0000000..6422420 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/482.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/483.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/483.png new file mode 100644 index 0000000..9121ffb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/483.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/484.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/484.png new file mode 100644 index 0000000..dad13a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/484.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/485.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/485.png new file mode 100644 index 0000000..f8d247c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/485.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/486.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/486.png new file mode 100644 index 0000000..828bbe7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/486.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/487.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/487.png new file mode 100644 index 0000000..ca8fb57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/487.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/488.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/488.png new file mode 100644 index 0000000..d5021cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/488.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/489.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/489.png new file mode 100644 index 0000000..a28da26 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/489.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/49.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/49.png new file mode 100644 index 0000000..e677bd1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/49.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/490.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/490.png new file mode 100644 index 0000000..ce4365d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/490.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/491.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/491.png new file mode 100644 index 0000000..9f0a024 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/491.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/492.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/492.png new file mode 100644 index 0000000..ab3a7dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/492.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/493.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/493.png new file mode 100644 index 0000000..c103c4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/493.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/494.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/494.png new file mode 100644 index 0000000..2fbf212 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/494.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/495.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/495.png new file mode 100644 index 0000000..825b78b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/495.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/496.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/496.png new file mode 100644 index 0000000..bc979f2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/496.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/497.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/497.png new file mode 100644 index 0000000..31013bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/497.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/498.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/498.png new file mode 100644 index 0000000..5e20cd7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/498.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/499.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/499.png new file mode 100644 index 0000000..2cb37b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/499.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/5.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/5.png new file mode 100644 index 0000000..1a7976c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/5.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/50.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/50.png new file mode 100644 index 0000000..9b1956e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/50.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/500.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/500.png new file mode 100644 index 0000000..bf88ad5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/500.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/501.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/501.png new file mode 100644 index 0000000..7ac1cd4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/501.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/502.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/502.png new file mode 100644 index 0000000..205ad9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/502.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/503.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/503.png new file mode 100644 index 0000000..3d5c635 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/503.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/504.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/504.png new file mode 100644 index 0000000..1055939 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/504.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/505.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/505.png new file mode 100644 index 0000000..e0eaa90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/505.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/506.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/506.png new file mode 100644 index 0000000..b480905 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/506.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/507.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/507.png new file mode 100644 index 0000000..032fc66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/507.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/508.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/508.png new file mode 100644 index 0000000..59a3fdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/508.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/509.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/509.png new file mode 100644 index 0000000..1b32cb1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/509.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/51.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/51.png new file mode 100644 index 0000000..d5033ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/51.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/510.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/510.png new file mode 100644 index 0000000..fdb2c07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/510.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/511.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/511.png new file mode 100644 index 0000000..fc38cc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/511.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/512.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/512.png new file mode 100644 index 0000000..d88a631 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/512.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/513.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/513.png new file mode 100644 index 0000000..2ab10d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/513.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/514.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/514.png new file mode 100644 index 0000000..944cdec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/514.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/515.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/515.png new file mode 100644 index 0000000..36ed11d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/515.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/516.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/516.png new file mode 100644 index 0000000..9da0983 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/516.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/517.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/517.png new file mode 100644 index 0000000..2a0c42f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/517.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/518.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/518.png new file mode 100644 index 0000000..5d0a829 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/518.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/519.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/519.png new file mode 100644 index 0000000..932615a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/519.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/52.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/52.png new file mode 100644 index 0000000..7e61f3c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/52.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/520.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/520.png new file mode 100644 index 0000000..be21858 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/520.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/521.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/521.png new file mode 100644 index 0000000..4d51993 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/521.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/522.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/522.png new file mode 100644 index 0000000..2f1fb81 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/522.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/523.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/523.png new file mode 100644 index 0000000..b88f340 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/523.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/524.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/524.png new file mode 100644 index 0000000..8765d3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/524.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/525.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/525.png new file mode 100644 index 0000000..593e1dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/525.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/526.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/526.png new file mode 100644 index 0000000..3224129 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/526.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/527.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/527.png new file mode 100644 index 0000000..65dd533 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/527.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/528.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/528.png new file mode 100644 index 0000000..d5d27f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/528.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/529.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/529.png new file mode 100644 index 0000000..760fd3f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/529.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/53.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/53.png new file mode 100644 index 0000000..ae1c8df Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/53.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/530.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/530.png new file mode 100644 index 0000000..8238533 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/530.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/531.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/531.png new file mode 100644 index 0000000..be809dc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/531.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/532.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/532.png new file mode 100644 index 0000000..f2b6cd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/532.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/533.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/533.png new file mode 100644 index 0000000..2611163 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/533.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/534.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/534.png new file mode 100644 index 0000000..f7f6950 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/534.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/535.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/535.png new file mode 100644 index 0000000..fe342e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/535.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/536.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/536.png new file mode 100644 index 0000000..24a0374 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/536.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/537.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/537.png new file mode 100644 index 0000000..1548db2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/537.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/538.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/538.png new file mode 100644 index 0000000..f9cd889 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/538.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/539.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/539.png new file mode 100644 index 0000000..70e1c2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/539.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/54.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/54.png new file mode 100644 index 0000000..c23bf89 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/54.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/540.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/540.png new file mode 100644 index 0000000..6a123cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/540.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/541.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/541.png new file mode 100644 index 0000000..d1c30e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/541.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/542.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/542.png new file mode 100644 index 0000000..c235e55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/542.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/543.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/543.png new file mode 100644 index 0000000..1e8f3a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/543.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/544.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/544.png new file mode 100644 index 0000000..4072028 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/544.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/545.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/545.png new file mode 100644 index 0000000..ee1abdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/545.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/546.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/546.png new file mode 100644 index 0000000..70851c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/546.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/547.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/547.png new file mode 100644 index 0000000..716d346 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/547.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/548.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/548.png new file mode 100644 index 0000000..358e7f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/548.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/549.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/549.png new file mode 100644 index 0000000..49577b2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/549.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/55.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/55.png new file mode 100644 index 0000000..0e1d011 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/55.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/550.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/550.png new file mode 100644 index 0000000..3ee5465 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/550.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/551.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/551.png new file mode 100644 index 0000000..e439aea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/551.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/552.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/552.png new file mode 100644 index 0000000..c2d18f4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/552.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/553.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/553.png new file mode 100644 index 0000000..475c69c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/553.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/554.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/554.png new file mode 100644 index 0000000..3e1f9b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/554.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/555.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/555.png new file mode 100644 index 0000000..4570c30 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/555.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/556.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/556.png new file mode 100644 index 0000000..900b114 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/556.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/557.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/557.png new file mode 100644 index 0000000..e436d91 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/557.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/558.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/558.png new file mode 100644 index 0000000..0acd878 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/558.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/559.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/559.png new file mode 100644 index 0000000..a7c6aab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/559.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/56.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/56.png new file mode 100644 index 0000000..c2f10cb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/56.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/560.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/560.png new file mode 100644 index 0000000..2ec8741 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/560.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/561.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/561.png new file mode 100644 index 0000000..f4a884f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/561.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/562.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/562.png new file mode 100644 index 0000000..e7e2ca0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/562.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/563.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/563.png new file mode 100644 index 0000000..eed3961 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/563.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/564.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/564.png new file mode 100644 index 0000000..9788975 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/564.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/565.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/565.png new file mode 100644 index 0000000..0f75729 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/565.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/566.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/566.png new file mode 100644 index 0000000..2b84a77 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/566.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/567.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/567.png new file mode 100644 index 0000000..2544fdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/567.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/568.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/568.png new file mode 100644 index 0000000..7780dac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/568.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/569.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/569.png new file mode 100644 index 0000000..fefeacd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/569.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/57.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/57.png new file mode 100644 index 0000000..ee04d15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/57.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/570.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/570.png new file mode 100644 index 0000000..a5169d9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/570.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/571.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/571.png new file mode 100644 index 0000000..9cf32fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/571.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/572.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/572.png new file mode 100644 index 0000000..485bd52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/572.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/573.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/573.png new file mode 100644 index 0000000..a4a03d3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/573.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/574.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/574.png new file mode 100644 index 0000000..4f43be1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/574.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/575.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/575.png new file mode 100644 index 0000000..14e4caa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/575.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/576.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/576.png new file mode 100644 index 0000000..beed81e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/576.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/577.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/577.png new file mode 100644 index 0000000..7bcd9f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/577.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/578.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/578.png new file mode 100644 index 0000000..b5dae7d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/578.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/579.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/579.png new file mode 100644 index 0000000..7b5a108 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/579.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/58.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/58.png new file mode 100644 index 0000000..c42ab79 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/58.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/580.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/580.png new file mode 100644 index 0000000..fcde01b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/580.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/581.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/581.png new file mode 100644 index 0000000..9b3f941 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/581.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/582.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/582.png new file mode 100644 index 0000000..5556fb6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/582.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/583.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/583.png new file mode 100644 index 0000000..e295caf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/583.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/584.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/584.png new file mode 100644 index 0000000..0880359 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/584.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/585.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/585.png new file mode 100644 index 0000000..88e5077 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/585.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/586.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/586.png new file mode 100644 index 0000000..17bd7b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/586.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/587.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/587.png new file mode 100644 index 0000000..6366a7d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/587.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/588.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/588.png new file mode 100644 index 0000000..15069b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/588.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/589.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/589.png new file mode 100644 index 0000000..2adf21f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/589.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/59.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/59.png new file mode 100644 index 0000000..5dc9bdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/59.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/590.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/590.png new file mode 100644 index 0000000..b65cfba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/590.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/591.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/591.png new file mode 100644 index 0000000..c8f8183 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/591.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/592.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/592.png new file mode 100644 index 0000000..66d905d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/592.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/593.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/593.png new file mode 100644 index 0000000..499bbfc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/593.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/594.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/594.png new file mode 100644 index 0000000..5c79d5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/594.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/595.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/595.png new file mode 100644 index 0000000..e56a5e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/595.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/596.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/596.png new file mode 100644 index 0000000..5ed30f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/596.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/597.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/597.png new file mode 100644 index 0000000..526e4bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/597.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/598.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/598.png new file mode 100644 index 0000000..5de71e6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/598.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/599.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/599.png new file mode 100644 index 0000000..2ab5b59 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/599.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/6.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/6.png new file mode 100644 index 0000000..9e18c5d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/6.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/60.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/60.png new file mode 100644 index 0000000..2bbdb0d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/60.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/600.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/600.png new file mode 100644 index 0000000..c44b388 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/600.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/601.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/601.png new file mode 100644 index 0000000..697f2cd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/601.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/602.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/602.png new file mode 100644 index 0000000..00a1917 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/602.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/603.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/603.png new file mode 100644 index 0000000..1879ff8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/603.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/604.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/604.png new file mode 100644 index 0000000..b8691be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/604.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/605.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/605.png new file mode 100644 index 0000000..d6c7b20 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/605.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/606.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/606.png new file mode 100644 index 0000000..6910a3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/606.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/607.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/607.png new file mode 100644 index 0000000..b340fc3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/607.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/608.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/608.png new file mode 100644 index 0000000..baa78a0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/608.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/609.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/609.png new file mode 100644 index 0000000..18dce90 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/609.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/61.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/61.png new file mode 100644 index 0000000..63aed52 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/61.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/610.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/610.png new file mode 100644 index 0000000..d32794d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/610.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/611.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/611.png new file mode 100644 index 0000000..96793e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/611.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/612.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/612.png new file mode 100644 index 0000000..1ec806b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/612.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/613.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/613.png new file mode 100644 index 0000000..41e4ccb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/613.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/614.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/614.png new file mode 100644 index 0000000..599c63a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/614.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/615.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/615.png new file mode 100644 index 0000000..47b38a2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/615.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/616.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/616.png new file mode 100644 index 0000000..b1f5aeb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/616.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/617.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/617.png new file mode 100644 index 0000000..0481f06 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/617.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/618.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/618.png new file mode 100644 index 0000000..c4852f5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/618.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/619.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/619.png new file mode 100644 index 0000000..4f98dc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/619.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/62.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/62.png new file mode 100644 index 0000000..4e1a904 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/62.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/620.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/620.png new file mode 100644 index 0000000..020fd5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/620.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/621.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/621.png new file mode 100644 index 0000000..a9e64bc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/621.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/622.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/622.png new file mode 100644 index 0000000..4a68837 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/622.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/623.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/623.png new file mode 100644 index 0000000..c596f51 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/623.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/624.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/624.png new file mode 100644 index 0000000..1bc2cb0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/624.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/625.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/625.png new file mode 100644 index 0000000..8fdc4ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/625.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/626.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/626.png new file mode 100644 index 0000000..6bfeb87 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/626.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/627.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/627.png new file mode 100644 index 0000000..15baceb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/627.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/628.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/628.png new file mode 100644 index 0000000..9973052 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/628.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/629.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/629.png new file mode 100644 index 0000000..894ece3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/629.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/63.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/63.png new file mode 100644 index 0000000..79a2e97 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/63.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/630.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/630.png new file mode 100644 index 0000000..380aaae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/630.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/631.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/631.png new file mode 100644 index 0000000..4ec727e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/631.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/632.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/632.png new file mode 100644 index 0000000..570246c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/632.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/633.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/633.png new file mode 100644 index 0000000..fec5281 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/633.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/634.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/634.png new file mode 100644 index 0000000..72db42a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/634.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/635.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/635.png new file mode 100644 index 0000000..14b1b32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/635.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/636.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/636.png new file mode 100644 index 0000000..a33a7ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/636.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/637.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/637.png new file mode 100644 index 0000000..f976f5c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/637.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/638.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/638.png new file mode 100644 index 0000000..796d421 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/638.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/639.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/639.png new file mode 100644 index 0000000..e3af839 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/639.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/64.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/64.png new file mode 100644 index 0000000..bbce63b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/64.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/640.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/640.png new file mode 100644 index 0000000..54e9188 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/640.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/641.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/641.png new file mode 100644 index 0000000..c6f14c0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/641.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/642.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/642.png new file mode 100644 index 0000000..f377c95 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/642.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/643.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/643.png new file mode 100644 index 0000000..7a18606 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/643.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/644.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/644.png new file mode 100644 index 0000000..815a358 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/644.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/645.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/645.png new file mode 100644 index 0000000..7f57740 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/645.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/646.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/646.png new file mode 100644 index 0000000..9acc235 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/646.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/647.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/647.png new file mode 100644 index 0000000..38197e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/647.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/648.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/648.png new file mode 100644 index 0000000..8c495bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/648.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/649.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/649.png new file mode 100644 index 0000000..50028a7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/649.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/65.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/65.png new file mode 100644 index 0000000..69fc0e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/65.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/650.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/650.png new file mode 100644 index 0000000..2db5092 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/650.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/651.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/651.png new file mode 100644 index 0000000..d01bd07 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/651.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/652.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/652.png new file mode 100644 index 0000000..5de9523 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/652.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/653.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/653.png new file mode 100644 index 0000000..5b0f382 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/653.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/654.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/654.png new file mode 100644 index 0000000..9b2aa55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/654.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/655.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/655.png new file mode 100644 index 0000000..ea9daef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/655.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/656.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/656.png new file mode 100644 index 0000000..7e59247 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/656.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/657.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/657.png new file mode 100644 index 0000000..aefb295 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/657.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/658.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/658.png new file mode 100644 index 0000000..98f9330 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/658.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/659.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/659.png new file mode 100644 index 0000000..b891141 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/659.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/66.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/66.png new file mode 100644 index 0000000..e84b0d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/66.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/660.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/660.png new file mode 100644 index 0000000..6a97d0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/660.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/661.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/661.png new file mode 100644 index 0000000..950142e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/661.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/662.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/662.png new file mode 100644 index 0000000..42ae105 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/662.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/663.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/663.png new file mode 100644 index 0000000..cac9ba0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/663.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/664.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/664.png new file mode 100644 index 0000000..c29eec8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/664.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/665.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/665.png new file mode 100644 index 0000000..462e8eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/665.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/666.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/666.png new file mode 100644 index 0000000..5a7fc74 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/666.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/667.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/667.png new file mode 100644 index 0000000..6575564 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/667.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/668.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/668.png new file mode 100644 index 0000000..462332d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/668.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/669.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/669.png new file mode 100644 index 0000000..763f758 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/669.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/67.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/67.png new file mode 100644 index 0000000..5636fbd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/67.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/670.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/670.png new file mode 100644 index 0000000..7d51d1a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/670.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/671.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/671.png new file mode 100644 index 0000000..b3cbe15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/671.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/672.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/672.png new file mode 100644 index 0000000..f8a42ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/672.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/673.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/673.png new file mode 100644 index 0000000..a800769 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/673.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/674.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/674.png new file mode 100644 index 0000000..d41fa54 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/674.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/675.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/675.png new file mode 100644 index 0000000..9d6834e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/675.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/676.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/676.png new file mode 100644 index 0000000..ce74871 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/676.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/677.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/677.png new file mode 100644 index 0000000..6669913 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/677.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/678.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/678.png new file mode 100644 index 0000000..dec3bf2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/678.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/679.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/679.png new file mode 100644 index 0000000..fd04a02 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/679.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/68.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/68.png new file mode 100644 index 0000000..be0036e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/68.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/680.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/680.png new file mode 100644 index 0000000..6f92082 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/680.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/681.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/681.png new file mode 100644 index 0000000..0b771a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/681.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/682.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/682.png new file mode 100644 index 0000000..135627d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/682.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/683.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/683.png new file mode 100644 index 0000000..3a56352 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/683.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/684.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/684.png new file mode 100644 index 0000000..84c29c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/684.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/685.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/685.png new file mode 100644 index 0000000..79cf608 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/685.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/686.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/686.png new file mode 100644 index 0000000..0c9cf35 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/686.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/687.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/687.png new file mode 100644 index 0000000..edfbedd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/687.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/688.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/688.png new file mode 100644 index 0000000..a72e724 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/688.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/689.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/689.png new file mode 100644 index 0000000..15006db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/689.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/69.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/69.png new file mode 100644 index 0000000..dac6663 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/69.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/690.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/690.png new file mode 100644 index 0000000..53e5db4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/690.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/691.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/691.png new file mode 100644 index 0000000..ca71e2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/691.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/692.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/692.png new file mode 100644 index 0000000..b1ee29f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/692.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/693.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/693.png new file mode 100644 index 0000000..3590ad0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/693.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/694.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/694.png new file mode 100644 index 0000000..b9cc39b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/694.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/695.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/695.png new file mode 100644 index 0000000..9ded505 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/695.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/696.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/696.png new file mode 100644 index 0000000..d554c70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/696.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/697.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/697.png new file mode 100644 index 0000000..3a030bf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/697.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/698.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/698.png new file mode 100644 index 0000000..e4543b7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/698.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/699.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/699.png new file mode 100644 index 0000000..2ace4b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/699.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/7.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/7.png new file mode 100644 index 0000000..c6811b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/7.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/70.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/70.png new file mode 100644 index 0000000..f557a37 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/70.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/700.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/700.png new file mode 100644 index 0000000..2766170 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/700.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/701.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/701.png new file mode 100644 index 0000000..41fc7e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/701.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/702.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/702.png new file mode 100644 index 0000000..f154fa6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/702.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/703.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/703.png new file mode 100644 index 0000000..bc05408 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/703.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/704.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/704.png new file mode 100644 index 0000000..94edfac Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/704.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/705.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/705.png new file mode 100644 index 0000000..495253a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/705.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/706.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/706.png new file mode 100644 index 0000000..be18a57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/706.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/707.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/707.png new file mode 100644 index 0000000..6b7cd9f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/707.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/708.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/708.png new file mode 100644 index 0000000..ebafafd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/708.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/709.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/709.png new file mode 100644 index 0000000..4fb19fa Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/709.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/71.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/71.png new file mode 100644 index 0000000..14645d2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/71.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/710.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/710.png new file mode 100644 index 0000000..466e0fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/710.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/711.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/711.png new file mode 100644 index 0000000..5ea2556 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/711.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/712.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/712.png new file mode 100644 index 0000000..fd5d746 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/712.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/713.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/713.png new file mode 100644 index 0000000..b7e44e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/713.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/714.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/714.png new file mode 100644 index 0000000..446f221 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/714.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/715.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/715.png new file mode 100644 index 0000000..7e0a7db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/715.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/716.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/716.png new file mode 100644 index 0000000..3da38ff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/716.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/717.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/717.png new file mode 100644 index 0000000..8881626 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/717.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/718.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/718.png new file mode 100644 index 0000000..a218665 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/718.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/719.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/719.png new file mode 100644 index 0000000..2241b0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/719.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/72.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/72.png new file mode 100644 index 0000000..ef03d3e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/72.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/720.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/720.png new file mode 100644 index 0000000..bc1f790 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/720.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/721.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/721.png new file mode 100644 index 0000000..72661da Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/721.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/722.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/722.png new file mode 100644 index 0000000..6de876b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/722.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/723.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/723.png new file mode 100644 index 0000000..9c933e5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/723.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/724.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/724.png new file mode 100644 index 0000000..77c8b0a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/724.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/725.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/725.png new file mode 100644 index 0000000..5ae67c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/725.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/726.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/726.png new file mode 100644 index 0000000..c1f0e8c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/726.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/727.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/727.png new file mode 100644 index 0000000..8d47607 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/727.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/728.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/728.png new file mode 100644 index 0000000..0c273db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/728.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/729.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/729.png new file mode 100644 index 0000000..ca86ae3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/729.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/73.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/73.png new file mode 100644 index 0000000..7c8e30e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/73.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/730.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/730.png new file mode 100644 index 0000000..71d4532 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/730.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/731.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/731.png new file mode 100644 index 0000000..4f44810 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/731.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/732.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/732.png new file mode 100644 index 0000000..d5aee05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/732.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/733.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/733.png new file mode 100644 index 0000000..802f8bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/733.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/734.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/734.png new file mode 100644 index 0000000..36e2bc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/734.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/735.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/735.png new file mode 100644 index 0000000..12b8cc7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/735.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/736.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/736.png new file mode 100644 index 0000000..0211222 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/736.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/737.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/737.png new file mode 100644 index 0000000..d234f85 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/737.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/738.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/738.png new file mode 100644 index 0000000..86cc725 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/738.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/739.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/739.png new file mode 100644 index 0000000..1f82617 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/739.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/74.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/74.png new file mode 100644 index 0000000..4939aa3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/74.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/740.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/740.png new file mode 100644 index 0000000..680e8c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/740.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/741.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/741.png new file mode 100644 index 0000000..255bfff Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/741.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/742.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/742.png new file mode 100644 index 0000000..3c672db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/742.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/743.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/743.png new file mode 100644 index 0000000..37333c3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/743.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/744.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/744.png new file mode 100644 index 0000000..150ab61 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/744.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/745.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/745.png new file mode 100644 index 0000000..be9a016 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/745.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/746.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/746.png new file mode 100644 index 0000000..e20f443 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/746.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/747.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/747.png new file mode 100644 index 0000000..55f7f1d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/747.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/748.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/748.png new file mode 100644 index 0000000..a801a62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/748.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/749.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/749.png new file mode 100644 index 0000000..36f207b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/749.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/75.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/75.png new file mode 100644 index 0000000..20a9426 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/75.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/750.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/750.png new file mode 100644 index 0000000..65a24e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/750.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/751.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/751.png new file mode 100644 index 0000000..a0d8c40 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/751.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/752.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/752.png new file mode 100644 index 0000000..9d6b083 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/752.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/753.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/753.png new file mode 100644 index 0000000..44443fb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/753.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/754.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/754.png new file mode 100644 index 0000000..1c8410e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/754.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/755.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/755.png new file mode 100644 index 0000000..ae08555 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/755.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/756.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/756.png new file mode 100644 index 0000000..dce3f19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/756.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/757.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/757.png new file mode 100644 index 0000000..6accb83 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/757.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/758.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/758.png new file mode 100644 index 0000000..0f89625 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/758.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/759.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/759.png new file mode 100644 index 0000000..e698c04 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/759.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/76.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/76.png new file mode 100644 index 0000000..652b3b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/76.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/760.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/760.png new file mode 100644 index 0000000..ddc762c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/760.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/761.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/761.png new file mode 100644 index 0000000..2a0a900 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/761.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/762.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/762.png new file mode 100644 index 0000000..3acc96b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/762.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/763.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/763.png new file mode 100644 index 0000000..04afc6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/763.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/764.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/764.png new file mode 100644 index 0000000..f00e37b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/764.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/765.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/765.png new file mode 100644 index 0000000..15c3d7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/765.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/766.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/766.png new file mode 100644 index 0000000..9a8c30c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/766.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/767.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/767.png new file mode 100644 index 0000000..10c359a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/767.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/768.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/768.png new file mode 100644 index 0000000..ebb8ba7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/768.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/769.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/769.png new file mode 100644 index 0000000..35e2dc5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/769.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/77.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/77.png new file mode 100644 index 0000000..a226fa7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/77.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/770.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/770.png new file mode 100644 index 0000000..5f07c6e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/770.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/771.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/771.png new file mode 100644 index 0000000..df26811 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/771.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/772.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/772.png new file mode 100644 index 0000000..c4e70ab Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/772.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/773.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/773.png new file mode 100644 index 0000000..03b3963 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/773.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/774.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/774.png new file mode 100644 index 0000000..d267317 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/774.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/775.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/775.png new file mode 100644 index 0000000..e50fdf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/775.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/776.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/776.png new file mode 100644 index 0000000..c78e059 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/776.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/777.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/777.png new file mode 100644 index 0000000..aa3eaef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/777.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/778.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/778.png new file mode 100644 index 0000000..5f0ec50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/778.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/779.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/779.png new file mode 100644 index 0000000..0008eca Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/779.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/78.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/78.png new file mode 100644 index 0000000..954b175 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/78.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/780.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/780.png new file mode 100644 index 0000000..76b6042 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/780.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/781.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/781.png new file mode 100644 index 0000000..cfbf282 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/781.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/782.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/782.png new file mode 100644 index 0000000..6129e00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/782.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/783.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/783.png new file mode 100644 index 0000000..917e6f1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/783.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/784.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/784.png new file mode 100644 index 0000000..c3d172b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/784.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/785.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/785.png new file mode 100644 index 0000000..e68003d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/785.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/786.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/786.png new file mode 100644 index 0000000..e206eef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/786.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/787.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/787.png new file mode 100644 index 0000000..050bc46 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/787.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/788.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/788.png new file mode 100644 index 0000000..dbc23ee Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/788.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/789.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/789.png new file mode 100644 index 0000000..338340b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/789.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/79.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/79.png new file mode 100644 index 0000000..cf41c36 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/79.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/790.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/790.png new file mode 100644 index 0000000..6de92b3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/790.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/791.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/791.png new file mode 100644 index 0000000..315a93a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/791.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/792.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/792.png new file mode 100644 index 0000000..e2cb54e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/792.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/793.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/793.png new file mode 100644 index 0000000..2a45d76 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/793.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/794.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/794.png new file mode 100644 index 0000000..458f861 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/794.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/795.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/795.png new file mode 100644 index 0000000..d681762 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/795.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/796.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/796.png new file mode 100644 index 0000000..1978549 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/796.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/797.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/797.png new file mode 100644 index 0000000..5fbc31d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/797.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/798.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/798.png new file mode 100644 index 0000000..ed9c07b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/798.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/799.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/799.png new file mode 100644 index 0000000..527b54d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/799.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/8.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/8.png new file mode 100644 index 0000000..2f20654 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/8.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/80.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/80.png new file mode 100644 index 0000000..093d913 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/80.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/800.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/800.png new file mode 100644 index 0000000..f89215a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/800.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/801.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/801.png new file mode 100644 index 0000000..998077c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/801.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/802.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/802.png new file mode 100644 index 0000000..de76ea6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/802.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/803.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/803.png new file mode 100644 index 0000000..0136a8f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/803.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/804.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/804.png new file mode 100644 index 0000000..9c53e49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/804.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/805.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/805.png new file mode 100644 index 0000000..4b3b454 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/805.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/806.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/806.png new file mode 100644 index 0000000..10c3eda Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/806.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/807.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/807.png new file mode 100644 index 0000000..439bf45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/807.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/808.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/808.png new file mode 100644 index 0000000..803c419 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/808.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/809.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/809.png new file mode 100644 index 0000000..b0d7772 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/809.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/81.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/81.png new file mode 100644 index 0000000..c93efb3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/81.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/810.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/810.png new file mode 100644 index 0000000..ddf0194 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/810.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/811.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/811.png new file mode 100644 index 0000000..4b25e05 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/811.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/812.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/812.png new file mode 100644 index 0000000..a18a2ea Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/812.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/813.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/813.png new file mode 100644 index 0000000..9b6bb2e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/813.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/814.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/814.png new file mode 100644 index 0000000..d8c04b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/814.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/815.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/815.png new file mode 100644 index 0000000..21033ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/815.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/816.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/816.png new file mode 100644 index 0000000..1ff6c62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/816.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/817.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/817.png new file mode 100644 index 0000000..7b8e141 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/817.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/818.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/818.png new file mode 100644 index 0000000..d32cf4d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/818.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/819.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/819.png new file mode 100644 index 0000000..3b3a911 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/819.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/82.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/82.png new file mode 100644 index 0000000..5e9e51a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/82.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/820.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/820.png new file mode 100644 index 0000000..d2e5a6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/820.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/821.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/821.png new file mode 100644 index 0000000..fb3acf8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/821.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/822.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/822.png new file mode 100644 index 0000000..43b3483 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/822.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/823.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/823.png new file mode 100644 index 0000000..f5109bb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/823.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/824.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/824.png new file mode 100644 index 0000000..77ad5c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/824.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/825.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/825.png new file mode 100644 index 0000000..c95155f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/825.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/826.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/826.png new file mode 100644 index 0000000..29907e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/826.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/827.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/827.png new file mode 100644 index 0000000..d254727 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/827.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/828.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/828.png new file mode 100644 index 0000000..9e95106 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/828.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/829.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/829.png new file mode 100644 index 0000000..9a90298 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/829.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/83.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/83.png new file mode 100644 index 0000000..fedfad3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/83.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/830.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/830.png new file mode 100644 index 0000000..8ee9178 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/830.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/831.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/831.png new file mode 100644 index 0000000..8eaf084 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/831.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/832.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/832.png new file mode 100644 index 0000000..7a656c1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/832.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/833.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/833.png new file mode 100644 index 0000000..f8f810b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/833.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/834.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/834.png new file mode 100644 index 0000000..8e16b0c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/834.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/835.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/835.png new file mode 100644 index 0000000..d8f6bdd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/835.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/836.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/836.png new file mode 100644 index 0000000..8d94dc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/836.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/837.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/837.png new file mode 100644 index 0000000..4c49121 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/837.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/838.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/838.png new file mode 100644 index 0000000..3cdd462 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/838.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/839.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/839.png new file mode 100644 index 0000000..ba61ed8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/839.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/84.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/84.png new file mode 100644 index 0000000..6c41cdf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/84.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/840.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/840.png new file mode 100644 index 0000000..b5d7901 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/840.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/841.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/841.png new file mode 100644 index 0000000..3a7c33a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/841.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/842.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/842.png new file mode 100644 index 0000000..f3c976c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/842.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/843.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/843.png new file mode 100644 index 0000000..4b80a66 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/843.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/844.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/844.png new file mode 100644 index 0000000..d4d4538 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/844.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/845.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/845.png new file mode 100644 index 0000000..4c54c57 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/845.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/846.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/846.png new file mode 100644 index 0000000..8210890 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/846.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/847.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/847.png new file mode 100644 index 0000000..a7ca3fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/847.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/848.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/848.png new file mode 100644 index 0000000..2be74e7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/848.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/849.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/849.png new file mode 100644 index 0000000..ed26329 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/849.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/85.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/85.png new file mode 100644 index 0000000..9fce2db Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/85.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/850.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/850.png new file mode 100644 index 0000000..8ab0d98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/850.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/851.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/851.png new file mode 100644 index 0000000..88f55d8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/851.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/852.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/852.png new file mode 100644 index 0000000..5441435 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/852.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/853.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/853.png new file mode 100644 index 0000000..b84a5ae Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/853.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/854.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/854.png new file mode 100644 index 0000000..a3153a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/854.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/855.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/855.png new file mode 100644 index 0000000..9813604 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/855.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/856.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/856.png new file mode 100644 index 0000000..895f4fe Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/856.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/857.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/857.png new file mode 100644 index 0000000..7253889 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/857.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/858.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/858.png new file mode 100644 index 0000000..c3922eb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/858.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/859.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/859.png new file mode 100644 index 0000000..56389fc Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/859.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/86.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/86.png new file mode 100644 index 0000000..2e44e6d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/86.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/860.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/860.png new file mode 100644 index 0000000..26a0152 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/860.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/861.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/861.png new file mode 100644 index 0000000..4a8af5b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/861.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/862.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/862.png new file mode 100644 index 0000000..50995a8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/862.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/863.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/863.png new file mode 100644 index 0000000..bbc5330 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/863.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/864.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/864.png new file mode 100644 index 0000000..6aaa8b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/864.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/865.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/865.png new file mode 100644 index 0000000..5843f98 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/865.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/866.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/866.png new file mode 100644 index 0000000..ee02d18 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/866.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/867.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/867.png new file mode 100644 index 0000000..87ae398 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/867.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/868.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/868.png new file mode 100644 index 0000000..e7cf220 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/868.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/869.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/869.png new file mode 100644 index 0000000..988ea24 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/869.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/87.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/87.png new file mode 100644 index 0000000..91b6cc1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/87.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/870.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/870.png new file mode 100644 index 0000000..cd6d56c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/870.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/871.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/871.png new file mode 100644 index 0000000..3747b6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/871.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/872.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/872.png new file mode 100644 index 0000000..fe492be Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/872.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/873.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/873.png new file mode 100644 index 0000000..c664c62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/873.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/874.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/874.png new file mode 100644 index 0000000..d9b2906 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/874.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/875.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/875.png new file mode 100644 index 0000000..0e40264 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/875.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/876.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/876.png new file mode 100644 index 0000000..1e8f2f3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/876.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/877.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/877.png new file mode 100644 index 0000000..0c85f3d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/877.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/878.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/878.png new file mode 100644 index 0000000..1fc4371 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/878.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/879.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/879.png new file mode 100644 index 0000000..084f02d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/879.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/88.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/88.png new file mode 100644 index 0000000..69dcd93 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/88.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/880.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/880.png new file mode 100644 index 0000000..fe6ece7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/880.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/881.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/881.png new file mode 100644 index 0000000..c4e18b6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/881.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/882.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/882.png new file mode 100644 index 0000000..e137393 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/882.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/883.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/883.png new file mode 100644 index 0000000..9befdf4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/883.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/884.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/884.png new file mode 100644 index 0000000..d580670 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/884.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/885.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/885.png new file mode 100644 index 0000000..506c89c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/885.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/886.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/886.png new file mode 100644 index 0000000..df13a7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/886.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/887.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/887.png new file mode 100644 index 0000000..7d3fc69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/887.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/888.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/888.png new file mode 100644 index 0000000..ba8e3d1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/888.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/889.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/889.png new file mode 100644 index 0000000..6c9a03d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/889.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/89.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/89.png new file mode 100644 index 0000000..5777f8b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/89.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/890.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/890.png new file mode 100644 index 0000000..b2d34ec Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/890.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/891.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/891.png new file mode 100644 index 0000000..86e4cf0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/891.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/892.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/892.png new file mode 100644 index 0000000..a4943a3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/892.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/893.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/893.png new file mode 100644 index 0000000..6161876 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/893.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/894.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/894.png new file mode 100644 index 0000000..1ee365f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/894.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/895.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/895.png new file mode 100644 index 0000000..7bf1589 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/895.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/896.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/896.png new file mode 100644 index 0000000..e312747 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/896.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/897.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/897.png new file mode 100644 index 0000000..5be5fd8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/897.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/898.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/898.png new file mode 100644 index 0000000..620d5a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/898.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/899.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/899.png new file mode 100644 index 0000000..21c4650 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/899.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/9.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/9.png new file mode 100644 index 0000000..168e1de Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/9.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/90.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/90.png new file mode 100644 index 0000000..34d6fdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/90.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/900.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/900.png new file mode 100644 index 0000000..d541f6f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/900.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/901.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/901.png new file mode 100644 index 0000000..d5bcfc9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/901.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/902.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/902.png new file mode 100644 index 0000000..deb5c32 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/902.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/903.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/903.png new file mode 100644 index 0000000..8c6baa3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/903.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/904.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/904.png new file mode 100644 index 0000000..278de9a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/904.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/905.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/905.png new file mode 100644 index 0000000..6062f00 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/905.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/906.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/906.png new file mode 100644 index 0000000..527da10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/906.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/907.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/907.png new file mode 100644 index 0000000..703d1f7 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/907.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/908.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/908.png new file mode 100644 index 0000000..1106d70 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/908.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/909.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/909.png new file mode 100644 index 0000000..da79024 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/909.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/91.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/91.png new file mode 100644 index 0000000..4789845 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/91.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/910.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/910.png new file mode 100644 index 0000000..96ef497 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/910.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/911.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/911.png new file mode 100644 index 0000000..b5223e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/911.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/912.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/912.png new file mode 100644 index 0000000..3fce59c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/912.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/913.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/913.png new file mode 100644 index 0000000..42d234b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/913.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/914.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/914.png new file mode 100644 index 0000000..02e6fdb Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/914.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/915.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/915.png new file mode 100644 index 0000000..749e5d5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/915.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/916.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/916.png new file mode 100644 index 0000000..fa5d6d4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/916.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/917.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/917.png new file mode 100644 index 0000000..1cb0a4c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/917.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/918.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/918.png new file mode 100644 index 0000000..2f431bd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/918.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/919.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/919.png new file mode 100644 index 0000000..8dbea45 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/919.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/92.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/92.png new file mode 100644 index 0000000..e419759 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/92.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/920.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/920.png new file mode 100644 index 0000000..bb5ba10 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/920.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/921.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/921.png new file mode 100644 index 0000000..e0efea3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/921.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/922.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/922.png new file mode 100644 index 0000000..e2bd382 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/922.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/923.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/923.png new file mode 100644 index 0000000..22399a6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/923.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/924.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/924.png new file mode 100644 index 0000000..9173b69 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/924.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/925.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/925.png new file mode 100644 index 0000000..0b482ce Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/925.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/926.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/926.png new file mode 100644 index 0000000..462c963 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/926.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/927.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/927.png new file mode 100644 index 0000000..51d08a5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/927.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/928.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/928.png new file mode 100644 index 0000000..286a592 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/928.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/929.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/929.png new file mode 100644 index 0000000..455974b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/929.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/93.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/93.png new file mode 100644 index 0000000..45cc42c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/93.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/930.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/930.png new file mode 100644 index 0000000..2ea0b38 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/930.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/931.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/931.png new file mode 100644 index 0000000..faa7211 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/931.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/932.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/932.png new file mode 100644 index 0000000..60f6120 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/932.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/933.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/933.png new file mode 100644 index 0000000..a8dfd15 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/933.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/934.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/934.png new file mode 100644 index 0000000..f92b8c4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/934.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/935.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/935.png new file mode 100644 index 0000000..8a47c78 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/935.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/936.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/936.png new file mode 100644 index 0000000..3db26c2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/936.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/937.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/937.png new file mode 100644 index 0000000..64580e0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/937.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/938.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/938.png new file mode 100644 index 0000000..b0bcb21 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/938.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/939.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/939.png new file mode 100644 index 0000000..1697a55 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/939.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/94.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/94.png new file mode 100644 index 0000000..4cfe32a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/94.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/940.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/940.png new file mode 100644 index 0000000..547c8d0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/940.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/941.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/941.png new file mode 100644 index 0000000..2b26f50 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/941.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/942.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/942.png new file mode 100644 index 0000000..84f6da4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/942.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/943.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/943.png new file mode 100644 index 0000000..61312e3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/943.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/944.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/944.png new file mode 100644 index 0000000..d5f7679 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/944.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/945.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/945.png new file mode 100644 index 0000000..aa1359b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/945.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/946.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/946.png new file mode 100644 index 0000000..ab366c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/946.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/947.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/947.png new file mode 100644 index 0000000..193b2f8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/947.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/948.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/948.png new file mode 100644 index 0000000..d3e5b9d Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/948.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/949.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/949.png new file mode 100644 index 0000000..a660fc8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/949.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/95.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/95.png new file mode 100644 index 0000000..6c4dbe6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/95.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/950.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/950.png new file mode 100644 index 0000000..bb9b5af Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/950.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/951.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/951.png new file mode 100644 index 0000000..8e1ce6b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/951.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/952.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/952.png new file mode 100644 index 0000000..656f61a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/952.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/953.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/953.png new file mode 100644 index 0000000..46bd99e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/953.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/954.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/954.png new file mode 100644 index 0000000..1ec3930 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/954.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/955.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/955.png new file mode 100644 index 0000000..9968add Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/955.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/956.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/956.png new file mode 100644 index 0000000..319563a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/956.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/957.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/957.png new file mode 100644 index 0000000..e14db27 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/957.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/958.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/958.png new file mode 100644 index 0000000..64b4be2 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/958.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/959.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/959.png new file mode 100644 index 0000000..d805a62 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/959.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/96.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/96.png new file mode 100644 index 0000000..9063553 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/96.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/960.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/960.png new file mode 100644 index 0000000..2897b2b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/960.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/961.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/961.png new file mode 100644 index 0000000..110855f Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/961.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/962.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/962.png new file mode 100644 index 0000000..1e4a584 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/962.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/963.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/963.png new file mode 100644 index 0000000..ce0bd28 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/963.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/964.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/964.png new file mode 100644 index 0000000..3d8c2b1 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/964.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/965.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/965.png new file mode 100644 index 0000000..08551c8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/965.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/966.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/966.png new file mode 100644 index 0000000..ad6f1e8 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/966.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/967.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/967.png new file mode 100644 index 0000000..188f28a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/967.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/968.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/968.png new file mode 100644 index 0000000..f5ff110 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/968.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/969.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/969.png new file mode 100644 index 0000000..613a6b9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/969.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/97.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/97.png new file mode 100644 index 0000000..9e46567 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/97.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/970.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/970.png new file mode 100644 index 0000000..fa480dd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/970.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/971.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/971.png new file mode 100644 index 0000000..a58fb63 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/971.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/972.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/972.png new file mode 100644 index 0000000..f2750ed Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/972.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/973.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/973.png new file mode 100644 index 0000000..d46b610 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/973.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/974.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/974.png new file mode 100644 index 0000000..f7ac3b4 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/974.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/975.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/975.png new file mode 100644 index 0000000..4e6bcbf Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/975.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/976.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/976.png new file mode 100644 index 0000000..1e879ba Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/976.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/977.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/977.png new file mode 100644 index 0000000..e5ad8fd Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/977.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/978.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/978.png new file mode 100644 index 0000000..39a1897 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/978.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/979.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/979.png new file mode 100644 index 0000000..299fc19 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/979.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/98.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/98.png new file mode 100644 index 0000000..fc0f711 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/98.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/980.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/980.png new file mode 100644 index 0000000..0ae1a49 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/980.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/981.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/981.png new file mode 100644 index 0000000..b45353b Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/981.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/982.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/982.png new file mode 100644 index 0000000..9cd3f80 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/982.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/983.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/983.png new file mode 100644 index 0000000..a5cd2c5 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/983.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/984.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/984.png new file mode 100644 index 0000000..be79de9 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/984.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/985.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/985.png new file mode 100644 index 0000000..ad0d981 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/985.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/986.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/986.png new file mode 100644 index 0000000..0bde4b0 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/986.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/987.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/987.png new file mode 100644 index 0000000..ee3ee7e Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/987.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/988.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/988.png new file mode 100644 index 0000000..b591750 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/988.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/989.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/989.png new file mode 100644 index 0000000..4216bd6 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/989.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/99.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/99.png new file mode 100644 index 0000000..a0aef7c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/99.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/990.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/990.png new file mode 100644 index 0000000..e530269 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/990.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/991.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/991.png new file mode 100644 index 0000000..164f068 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/991.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/992.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/992.png new file mode 100644 index 0000000..1b6fe23 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/992.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/993.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/993.png new file mode 100644 index 0000000..d3b2bd3 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/993.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/994.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/994.png new file mode 100644 index 0000000..624c6ef Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/994.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/995.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/995.png new file mode 100644 index 0000000..b209738 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/995.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/996.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/996.png new file mode 100644 index 0000000..15f9585 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/996.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/997.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/997.png new file mode 100644 index 0000000..05dbf4a Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/997.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/998.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/998.png new file mode 100644 index 0000000..4dfa037 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/998.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/999.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/999.png new file mode 100644 index 0000000..edd5659 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/test/999.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/train_neg.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/train_neg.png new file mode 100644 index 0000000..8c88035 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/train_neg.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/train_pos.png b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/train_pos.png new file mode 100644 index 0000000..e585989 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework3/cs598ps_ps3/sample/train_pos.png differ diff --git a/598MachLrngforSignalProcessng/homework/homework4/Problem set 4-2017.pdf b/598MachLrngforSignalProcessng/homework/homework4/Problem set 4-2017.pdf new file mode 100644 index 0000000..1d2c443 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework4/Problem set 4-2017.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/Problem set 4-2017.pdf b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/Problem set 4-2017.pdf new file mode 100644 index 0000000..1d2c443 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/Problem set 4-2017.pdf differ diff --git a/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/cs598ps_4.zip b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/cs598ps_4.zip new file mode 100644 index 0000000..858b713 Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/cs598ps_4.zip differ diff --git a/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/friends.wav b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/friends.wav new file mode 100644 index 0000000..2427e2c Binary files /dev/null and b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/friends.wav differ diff --git a/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/labels.txt b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/labels.txt new file mode 100644 index 0000000..e52610e --- /dev/null +++ b/598MachLrngforSignalProcessng/homework/homework4/cs598ps_4/labels.txt @@ -0,0 +1 @@ +0.000000 2.105419 music 2.105419 13.320000 speech 13.320000 15.661742 laughter 15.661742 18.690968 speech 18.690968 21.462388 laughter 21.462388 28.745420 speech 28.745420 31.130130 laughter 31.130130 34.653485 speech 34.653485 36.801872 laughter 36.801872 39.465872 speech 39.465872 41.399420 laughter 41.399420 51.819098 speech 51.819098 54.418647 laughter 54.418647 57.877550 speech 57.877550 59.510324 laughter 59.510324 61.830582 speech 61.830582 63.334453 laughter 63.334453 74.033421 speech 74.033421 77.707163 laughter 77.707163 79.640712 speech 79.640712 83.013680 laughter 83.013680 86.837809 speech 86.837809 89.201035 laughter 89.201035 139.580713 music 139.580713 152.019875 speech 152.019875 154.576456 laughter 154.576456 155.135036 speech 155.135036 156.789295 laughter 156.789295 162.718843 speech 162.718843 165.382843 laughter 165.382843 171.355359 speech 171.355359 173.546714 laughter 173.546714 185.663618 speech 185.663618 187.812005 laughter 187.812005 188.735812 speech 188.735812 190.583425 laughter 190.583425 196.534457 speech 196.534457 197.630134 laughter 197.630134 208.135748 speech 208.135748 212.711812 laughter 212.711812 222.508458 speech 222.508458 225.086522 laughter 225.086522 241.306845 speech 241.306845 244.980587 laughter 244.980587 256.109233 speech 256.109233 259.095491 laughter 259.095491 269.257362 speech 269.257362 272.952588 laughter 272.952588 275.079491 speech 275.079491 278.688782 laughter 278.688782 283.930846 music 283.930846 293.942331 speech 293.942331 296.262589 laughter 296.262589 298.711700 speech \ No newline at end of file