From 74ad7a9d22bd4f2aba8967437660da5ff5041e6b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 25 三月 2023 15:41:52 +0800
Subject: [PATCH] A*寻路算法

---
 src/main/resources/mapIn.json                                  | 2052 +++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/common/model/NavigateNode.java            |   47 +
 src/main/java/com/zy/common/utils/NavigateUtils.java           |  161 +++
 src/main/resources/mapOut.json                                 |    1 
 src/main/java/com/zy/common/utils/NavigateMapData.java         |   66 +
 src/main/java/com/zy/common/utils/NavigatePositionConvert.java |   31 
 src/main/java/com/zy/common/utils/NavigateSolution.java        |  212 ++++
 7 files changed, 2,570 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/common/model/NavigateNode.java b/src/main/java/com/zy/common/model/NavigateNode.java
new file mode 100644
index 0000000..d173410
--- /dev/null
+++ b/src/main/java/com/zy/common/model/NavigateNode.java
@@ -0,0 +1,47 @@
+package com.zy.common.model;
+
+import lombok.Data;
+
+/**
+ * A*瀵昏矾绠楁硶Node鑺傜偣
+ */
+@Data
+public class NavigateNode implements Comparable<NavigateNode>{
+
+    private int x;//鍧愭爣x
+    private int y;//鍧愭爣y
+    private int F;//缁煎悎鑺辫垂鐨勬鏁�
+    private int G;//宸茬粡鑺辫垂鐨勬鏁�
+    private int H;//灏嗚鑺辫垂鐨勬鏁�
+    private NavigateNode Father;//鐖惰妭鐐�
+    private Boolean isInflectionPoint;//鏄惁涓烘嫄鐐�
+    private String direction;//鎷愮偣鏂瑰悜
+
+    public NavigateNode(int x, int y) {
+        this.x = x;
+        this.y = y;
+    }
+
+    //閫氳繃缁撶偣鐨勫潗鏍囧拰鐩爣缁撶偣鐨勫潗鏍囧彲浠ヨ绠楀嚭F锛� G锛� H涓変釜灞炴��
+    //闇�瑕佷紶鍏ヨ繖涓妭鐐圭殑涓婁竴涓妭鐐瑰拰鏈�缁堢殑缁撶偣
+    public void init_node(NavigateNode father, NavigateNode end) {
+        this.Father = father;
+        if (this.Father != null) {
+            //璧拌繃鐨勬鏁扮瓑浜庣埗鑺傜偣璧拌繃鐨勬鏁板姞涓�
+            this.G = father.G + 1;
+        } else { //鐖惰妭鐐逛负绌轰唬琛ㄥ畠鏄涓�涓粨鐐�
+            this.G = 0;
+        }
+
+        //浠ヤ笅璁$畻鏂规涓虹畻娉曞師濮嬫柟妗堬紝娌℃湁鍘绘嫄鐐规柟妗堛�傚凡琚玈olution璁$畻鏃惰嚜鍔ㄨ鐩栥��
+        //璁$畻閫氳繃鐜板湪鐨勭粨鐐圭殑浣嶇疆鍜屾渶缁堢粨鐐圭殑浣嶇疆璁$畻H鍊�(鏇煎搱椤挎硶锛氬潗鏍囧垎鍒彇宸�肩浉鍔�)
+        this.H = Math.abs(this.x - end.x) + Math.abs(this.y - end.y);
+        this.F = this.G + this.H;
+    }
+
+    @Override
+    public int compareTo(NavigateNode o) {
+        return Integer.compare(this.F, o.F);
+    }
+
+}
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
new file mode 100644
index 0000000..7ffae0e
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -0,0 +1,66 @@
+package com.zy.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.*;
+import java.util.ArrayList;
+
+/**
+ * A*绠楁硶鍦板浘鑾峰彇绫�
+ */
+public class NavigateMapData {
+
+    public int[][] getData() {
+        return getData("in");
+    }
+
+    public int[][] getData(String mapType) {
+        try {
+            String mapFilename = "";
+            if (mapType.equals("in")) {
+                mapFilename = "mapIn.json";
+            }else {
+                mapFilename = "mapOut.json";
+            }
+
+            String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞
+            File file = new File(fileName);
+            StringBuffer stringBuffer = new StringBuffer();
+            if (file.isFile() && file.exists()) {
+                InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
+                BufferedReader br = new BufferedReader(isr);
+                String lineTxt = null;
+                while ((lineTxt = br.readLine()) != null) {
+                    stringBuffer.append(lineTxt);
+                }
+                br.close();
+
+                //瑙f瀽json鍦板浘鏁版嵁
+                ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
+                int[][] map = new int[arrayList.size()][];
+                int j = 0;
+                for (Object obj : arrayList) {
+                    ArrayList list = JSON.parseObject(obj.toString(), ArrayList.class);
+                    int[] tmp = new int[list.size()];
+                    int i = 0;
+                    for (Object o : list) {
+                        JSONObject jsonObject = JSON.parseObject(o.toString());
+                        //灏嗘暟鎹坊鍔犺繘浜岀淮鏁扮粍
+                        tmp[i++] = Integer.parseInt(jsonObject.get("value").toString());
+                    }
+                    //鏁版嵁娣诲姞杩涗竴缁存暟缁�
+                    map[j++] = tmp;
+                }
+
+                return map;
+            } else {
+                System.out.println("鏂囦欢涓嶅瓨鍦�!");
+            }
+        } catch (IOException ioException) {
+            ioException.printStackTrace();
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/utils/NavigatePositionConvert.java b/src/main/java/com/zy/common/utils/NavigatePositionConvert.java
new file mode 100644
index 0000000..fe443b0
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/NavigatePositionConvert.java
@@ -0,0 +1,31 @@
+package com.zy.common.utils;
+
+/**
+ * 搴撲綅缂栧彿鍜孉*绠楁硶鐨剎y杞磋浆鎹㈠伐鍏风被
+ */
+public class NavigatePositionConvert {
+
+    //鍧愭爣缂栧彿杞瑇y杞�
+    public static int[] positionToXY(String position) {
+        int col = Integer.parseInt(position.substring(0, 2));
+        int row = Integer.parseInt(position.substring(2, 5));
+        int[] newPosition = coverPosition(col,row);
+        //杩斿洖x鍜寉
+//        return new int[]{row, col};
+        return newPosition;
+    }
+
+    //杞崲琛屽彿锛屽疄闄呬腑鏈�搴曞眰鍙兘鏄涓�琛岋紝鍦ㄦ暟缁勪腑鏈�搴曞眰鏄渶鍚庝竴琛岋紝鍥犳闇�瑕佽繘琛岃浆鎹㈡墠鍙互鍖归厤鏁版嵁
+    public static int covertRow(int row) {
+        NavigateMapData mapData = new NavigateMapData();
+        int[][] data = mapData.getData();
+        //瀹為檯琛屾暟
+        int realRow = data.length - 1;
+        return realRow - row;
+    }
+
+    public static int[] coverPosition(int col,int row) {
+        return new int[]{row, col};
+    }
+
+}
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
new file mode 100644
index 0000000..89046a8
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -0,0 +1,212 @@
+package com.zy.common.utils;
+
+import com.zy.common.model.NavigateNode;
+
+import java.util.ArrayList;
+import java.util.PriorityQueue;
+
+/**
+ * A*绠楁硶瀹炵幇绫�
+ */
+public class NavigateSolution {
+
+    // -1 -> 澧欏锛� 1 -> 璧风偣  2 -> 缁堢偣  3-> 姣嶈建  4->绔欑偣
+
+    int[][] map = {{}};
+
+    public NavigateSolution() {
+        //杞藉叆鍦板浘
+        NavigateMapData mapData = new NavigateMapData();
+        int[][] data = mapData.getData();
+        this.map = data;
+    }
+
+    public NavigateSolution(String mapType) {
+        //杞藉叆鍦板浘
+        NavigateMapData mapData = new NavigateMapData();
+        int[][] data = mapData.getData(mapType);
+        this.map = data;
+    }
+
+    public NavigateSolution(int[][] data) {
+        this.map = data;
+    }
+
+    // Open琛ㄧ敤浼樺厛闃熷垪
+    public PriorityQueue<NavigateNode> Open = new PriorityQueue<NavigateNode>();
+    //Close琛ㄧ敤鏅�氱殑鏁扮粍
+    public ArrayList<NavigateNode> Close = new ArrayList<NavigateNode>();
+    //Exist琛ㄧ敤鏉ュ瓨鏀惧凡缁忓嚭鐜拌繃鐨勭粨鐐广��
+    public ArrayList<NavigateNode> Exist = new ArrayList<NavigateNode>();
+
+    public NavigateNode astarSearch(NavigateNode start, NavigateNode end) {
+        //鎶婄涓�涓紑濮嬬殑缁撶偣鍔犲叆鍒癘pen琛ㄤ腑
+        this.Open.add(start);
+        //鎶婂嚭鐜拌繃鐨勭粨鐐瑰姞鍏ュ埌Exist琛ㄤ腑
+        this.Exist.add(start);
+        //涓诲惊鐜�
+        while (Open.size() > 0) {
+            //鍙栦紭鍏堥槦鍒楅《閮ㄥ厓绱犲苟涓旀妸杩欎釜鍏冪礌浠嶰pen琛ㄤ腑鍒犻櫎
+            NavigateNode current_node = Open.poll();
+            //灏嗚繖涓粨鐐瑰姞鍏ュ埌Close琛ㄤ腑
+            Close.add(current_node);
+            //瀵瑰綋鍓嶇粨鐐硅繘琛屾墿灞曪紝寰楀埌涓�涓洓鍛ㄧ粨鐐圭殑鏁扮粍
+            ArrayList<NavigateNode> neighbour_node = extend_current_node(current_node);
+            //瀵硅繖涓粨鐐归亶鍘嗭紝鐪嬫槸鍚︽湁鐩爣缁撶偣鍑虹幇
+            for (NavigateNode node : neighbour_node) {
+                // G + H + E (瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
+                int gCost = calcNodeCost(current_node, node) * calcNodeExtraCost(current_node, node, end);
+                if (node.getX() == end.getX() && node.getY() == end.getY()) {//鎵惧埌鐩爣缁撶偣灏辫繑鍥�
+                    //init_node鎿嶄綔鎶婅繖涓偦灞呯粨鐐圭殑鐖惰妭鐐硅缃负褰撳墠缁撶偣
+                    //骞朵笖璁$畻鍑篏锛� F锛� H绛夊��
+                    node.init_node(current_node, end);
+                    return node;
+                }
+
+                //(瀵瑰惎鍙戝嚱鏁板鍔犲幓鎷愮偣鏂规calcNodeExtraCost)
+                if (is_exist(node)) {
+                    if (gCost < node.getG()) {
+                        node.setFather(current_node);
+                        node.setG(gCost);
+                        node.setF(node.getG() + node.getH());
+                    }
+                }else {
+                    //娌″嚭鐜拌繃鐨勭粨鐐瑰姞鍏ュ埌Open琛ㄤ腑骞朵笖璁剧疆鐖惰妭鐐�
+                    //杩涜璁$畻瀵笹, F, H 绛夊��
+                    node.init_node(current_node, end);
+                    node.setG(gCost);
+                    node.setH(calcNodeCost(node, end));
+                    node.setF(node.getG() + node.getH());
+
+                    Open.add(node);
+                    Exist.add(node);
+                }
+            }
+        }
+        //濡傛灉閬嶅巻瀹屾墍鏈夊嚭鐜扮殑缁撶偣閮芥病鏈夋壘鍒版渶缁堢殑缁撶偣锛岃繑鍥瀗ull
+        return null;
+    }
+
+
+    public ArrayList<NavigateNode> extend_current_node(NavigateNode current_node) {
+        //鑾峰彇褰撳墠缁撶偣鐨剎, y
+        int x = current_node.getX();
+        int y = current_node.getY();
+        //濡傛灉褰撳墠缁撶偣鐨勯偦缁撶偣鍚堟硶锛屽氨鍔犲叆鍒皀eighbour_node
+        ArrayList<NavigateNode> neighbour_node = new ArrayList<NavigateNode>();
+//        if (map[x][y] == 0 || map[x][y] == 3) {
+//            //鍙湁瀛愯建鍜屾瘝杞ㄦ墠鑳借繘琛屽乏鍙崇Щ鍔�
+//            if (is_valid(x, y + 1))
+//            {
+//                Node node = new Node(x, y + 1);
+//                neighbour_node.add(node);
+//            }
+//            if (is_valid(x, y - 1))
+//            {
+//                Node node = new Node(x, y - 1);
+//                neighbour_node.add(node);
+//            }
+//        }
+//
+//        if (map[x][y] == 3) {
+//            //鍙湁姣嶈建鎵嶈兘杩涜涓婁笅绉诲姩
+//            if (is_valid(x + 1, y))
+//            {
+//                Node node = new Node(x + 1, y);
+//                neighbour_node.add(node);
+//            }
+//            if (is_valid(x - 1, y))
+//            {
+//                Node node = new Node(x -1, y);
+//                neighbour_node.add(node);
+//            }
+//        }
+        if (map[x][y] == 3) {
+            //姣嶈建鎵嶈兘杩涜宸﹀彸绉诲姩
+            if (is_valid(x, y + 1))
+            {
+                NavigateNode node = new NavigateNode(x, y + 1);
+                neighbour_node.add(node);
+            }
+            if (is_valid(x, y - 1))
+            {
+                NavigateNode node = new NavigateNode(x, y - 1);
+                neighbour_node.add(node);
+            }
+        }
+
+        if (map[x][y] == 0 || map[x][y] == 3) {
+            //瀛愯建鍜屾瘝杞ㄦ墠鑳借繘琛屼笂涓嬬Щ鍔�
+            if (is_valid(x + 1, y))
+            {
+                NavigateNode node = new NavigateNode(x + 1, y);
+                neighbour_node.add(node);
+            }
+            if (is_valid(x - 1, y))
+            {
+                NavigateNode node = new NavigateNode(x -1, y);
+                neighbour_node.add(node);
+            }
+        }
+
+        return neighbour_node;
+    }
+
+    public boolean is_valid(int x, int y) {
+        // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
+        if (map[x][y] < 0) return false;
+        for (NavigateNode node : Exist) {
+            //濡傛灉缁撶偣鍑虹幇杩囷紝涓嶅悎娉�
+            if (node.getX() == x && node.getY() == y) {
+                return false;
+            }
+            if (is_exist(new NavigateNode(x, y))) {
+                return false;
+            }
+        }
+        //浠ヤ笂鎯呭喌閮芥病鏈夊垯鍚堟硶
+        return true;
+    }
+
+    public boolean is_exist(NavigateNode node)
+    {
+        for (NavigateNode exist_node : Exist) {
+            if (node.getX() == exist_node.getX() && node.getY() == exist_node.getY()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //------------------A*鍚彂鍑芥暟------------------//
+
+    //璁$畻閫氳繃鐜板湪鐨勭粨鐐圭殑浣嶇疆鍜屾渶缁堢粨鐐圭殑浣嶇疆璁$畻H鍊�(鏇煎搱椤挎硶锛氬潗鏍囧垎鍒彇宸�肩浉鍔�)
+    private int calcNodeCost(NavigateNode node1, NavigateNode node2) {
+        return Math.abs(node2.getX() - node1.getX()) + Math.abs(node2.getY() - node1.getY());
+    }
+
+    //鍘婚櫎鎷愮偣绠楁硶锛岀粰鐩寸嚎澧炲姞浼樺厛绾�
+    private int calcNodeExtraCost(NavigateNode currNode, NavigateNode nextNode, NavigateNode endNode) {
+        // 绗竴涓偣鎴栫洿绾跨偣
+        if (currNode.getFather() == null || nextNode.getX() == currNode.getFather().getX()
+                || nextNode.getY() == currNode.getFather().getY()) {
+            return 0;
+        }
+
+        // 鎷愬悜缁堢偣鐨勭偣
+        if (nextNode.getX() == endNode.getX() || nextNode.getY() == endNode.getY()) {
+            return 1;
+        }
+
+        // 鏅�氭嫄鐐�
+        /*
+        鎷愮偣鍒ゆ柇閫昏緫
+        鎷垮埌鐖惰妭鐐瑰拰涓嬩竴鑺傜偣
+        閫氳繃鍒ゆ柇鐖惰妭鐐瑰拰涓嬩竴鑺傜偣鐨剎鏁版嵁鍜寉鏁版嵁閮戒笉鐩稿悓鏃讹紝鍒欒〃鏄庡綋鍓嶅潗鏍囨槸涓�涓嫄鐐�
+         */
+        return 2;
+    }
+
+    //------------------A*鍚彂鍑芥暟-end------------------//
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
new file mode 100644
index 0000000..d53077d
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -0,0 +1,161 @@
+package com.zy.common.utils;
+
+import com.zy.common.model.NavigateNode;
+
+import java.util.*;
+
+/**
+ * A*绠楁硶浣跨敤宸ュ叿
+ */
+public class NavigateUtils {
+
+    public static List<NavigateNode> calc(String startPoint, String endPoint, String mapType) {
+        //閫氳繃寮�濮嬬紪鍙峰拰缁撴潫缂栧彿鑾峰彇瀵瑰簲鐨剎y杞村潗鏍�
+        int[] startArr = NavigatePositionConvert.positionToXY(startPoint);//寮�濮嬭妭鐐�
+        int[] endArr = NavigatePositionConvert.positionToXY(endPoint);//缁撴潫鑺傜偣
+
+        //鍒濆鍖栧紑濮嬭妭鐐�
+        NavigateNode start = new NavigateNode(startArr[0], startArr[1]);
+        //寮�濮嬭妭鐐规棤鐖惰妭鐐�
+        start.setFather(null);
+
+        NavigateNode end = new NavigateNode(endArr[0], endArr[1]);
+        NavigateSolution solution = new NavigateSolution(mapType);
+        NavigateNode res_node = solution.astarSearch(start, end);
+        if (res_node == null) {
+            System.out.println("鏈壘鍒拌矾寰�");
+            return null;
+        } else {
+            ArrayList<NavigateNode> list = new ArrayList<>();
+
+            //娓叉煋
+            NavigateNode fatherNode = null;//褰撳墠寰幆涓婁竴鑺傜偣锛岀敤浜庢嫄鐐硅绠�
+            while (res_node != null) {
+                HashMap<String, Object> data = new HashMap<>();
+                res_node.setDirection(null);
+                res_node.setIsInflectionPoint(false);
+
+                //瀵绘壘鎷愮偣
+                HashMap<String, Object> result = searchInflectionPoint(res_node, fatherNode, res_node.getFather());//鍒嗗埆浼犲叆褰撳墠鑺傜偣銆佺埗鑺傜偣銆佷笅涓�鑺傜偣
+                //鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘嫄鐐�
+                if (Boolean.parseBoolean(result.get("result").toString())) {
+                    //褰撳墠涓烘嫄鐐�
+                    res_node.setIsInflectionPoint(true);
+                    //鎷愮偣鏂瑰悜
+                    res_node.setDirection(result.get("direction").toString());
+                }
+                list.add(res_node);
+
+                fatherNode = res_node;//鎶婂綋鍓嶈妭鐐逛繚瀛樻垚涓�涓埗鑺傜偣
+                res_node = res_node.getFather();//杩唬鎿嶄綔
+            }
+
+            Collections.reverse(list);
+
+            //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
+            for (NavigateNode navigateNode : list) {
+                //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
+                //姝ゆ搷浣滀粎涓哄悗缁帓鏌ュ鐞嗘彁渚涜瑙夋柟渚裤��
+                navigateNode.setFather(null);
+            }
+
+            //璧峰鑺傜偣璁$畻鏂瑰悜
+            String direction = calcDirection(list.get(0), list.get(1));
+            NavigateNode startNode = list.get(0);
+            startNode.setDirection(direction);
+            //鏇存柊鑺傜偣鍒楄〃
+            list.set(0, startNode);
+            return list;
+        }
+    }
+
+    //鍒ゆ柇褰撳墠鑺傜偣鍒颁笅涓�涓妭鐐规槸鍚︿负鎷愮偣
+    public static HashMap<String,Object> searchInflectionPoint(NavigateNode currentNode, NavigateNode fatherNode, NavigateNode nextNode) {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("result", false);//鏄惁涓烘嫄鐐癸紝true锛氭嫄鐐癸紝false锛氱洿绾�
+        // 绗竴涓偣鎴栫洿绾跨偣
+        if (fatherNode == null || nextNode == null || nextNode.getX() == fatherNode.getX() || nextNode.getY() == fatherNode.getY()) {
+            return map;//涓嶆槸鎷愮偣鐩存帴杩斿洖
+        }
+
+        //鎷愮偣鏂瑰悜
+        String direction = calcDirection(currentNode, fatherNode);
+
+        map.put("result", true);//鎷愮偣
+        map.put("direction", direction);//鎷愮偣鏂瑰悜锛堜粠褰撳墠鑺傜偣瑙嗚鐪嬬殑鏂瑰悜锛�
+        return map;
+    }
+
+    /**
+     * 璁$畻鏂瑰悜
+     */
+    public static String calcDirection(NavigateNode currentNode, NavigateNode fatherNode) {
+        //鎷愮偣鏂瑰悜
+        String direction = "";
+        // 鏅�氭嫄鐐�
+        //璁$畻鎷愮偣鏂瑰悜
+        if (fatherNode.getX() != currentNode.getX()) {
+            //x杞存暟鎹湁宸紓锛屽垽鏂瓁杞存柟鍚�
+            //褰撳墠鑺傜偣X - 鐖惰妭鐐筙
+            if (currentNode.getX() - fatherNode.getX() > 0) {
+                //澶т簬0锛屾柟鍚憈op
+                direction = "top";
+            }else {
+                //灏忎簬0锛屾柟鍚慴ottom
+                direction = "bottom";
+            }
+        }
+
+        if (fatherNode.getY() != currentNode.getY()) {
+            //y杞存暟鎹湁宸紓锛屽垽鏂瓂杞存柟鍚�
+            //褰撳墠鑺傜偣Y - 鐖惰妭鐐筜
+            if (currentNode.getY() - fatherNode.getY() > 0) {
+                //澶т簬0锛屾柟鍚憀eft
+                direction = "left";
+            }else {
+                //灏忎簬0锛屾柟鍚憆ight
+                direction = "right";
+            }
+        }
+
+        return direction;
+    }
+
+    /**
+     * 鑾峰彇鍒嗘璺緞锛屾瘡褰撴湁涓�涓嫄鐐瑰垯杩涜涓�娆″垎娈碉紝鏈�缁堣繑鍥炴�诲垎娈垫暟鎹�
+     */
+    public static ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) {
+        ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>();
+        ArrayList<NavigateNode> data = new ArrayList<>();
+        for (NavigateNode mapNode : mapList) {
+            boolean isInflectionPoint = mapNode.getIsInflectionPoint();
+            data.add(mapNode);
+            if (isInflectionPoint) {
+                //鎷愮偣
+                //鍒嗗壊鏁版嵁
+                list.add(data);//娣诲姞鏌愪竴娈垫暟鎹�
+                data = new ArrayList<>();
+            }
+        }
+
+        //灏嗘渶鍚庝竴娈垫暟鎹坊鍔犺繘鍏�
+        list.add(data);
+
+        return list;
+    }
+
+    public static void main(String[] args) {
+        //璁$畻璺緞
+        List<NavigateNode> calc = calc("1000901", "0201801", "out");
+        System.out.println(calc);
+        System.out.println("------------------------");
+//        List<NavigateNode> calc = calc("0501401", "0201801", "out");
+        //灏嗚矾寰勫垎鍓叉垚澶氭
+        ArrayList<ArrayList<NavigateNode>> data = getSectionPath(calc);
+        for (ArrayList<NavigateNode> list : data) {
+            System.out.println(list);
+        }
+
+    }
+
+}
diff --git a/src/main/resources/mapIn.json b/src/main/resources/mapIn.json
new file mode 100644
index 0000000..6670040
--- /dev/null
+++ b/src/main/resources/mapIn.json
@@ -0,0 +1,2052 @@
+[
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -23,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -22,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -21,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -20,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -19,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -18,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -17,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -16,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -15,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -14,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": -13,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -12,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -11,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -10,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 4,
+    "data": "100"
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -9,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 4,
+    "data": "104"
+  }, {
+    "value": 4,
+    "data": "101"
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -8,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 4,
+    "data": "103"
+  }, {
+    "value": 4,
+    "data": "102"
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -7,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 4,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -6,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": 3,
+    "data": ""
+  }, {
+    "value": -5,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -4,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -3,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -2,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": 0,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }],
+  [{
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }, {
+    "value": -1,
+    "data": ""
+  }]
+]
\ No newline at end of file
diff --git a/src/main/resources/mapOut.json b/src/main/resources/mapOut.json
new file mode 100644
index 0000000..c5f105c
--- /dev/null
+++ b/src/main/resources/mapOut.json
@@ -0,0 +1 @@
+[[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-23,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-22,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-21,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-20,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-19,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-18,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-17,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-16,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-15,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-14,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":-1,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-12,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-11,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-10,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":4,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-9,"data":""}],[{"value":-1,"data":""},{"value":4,"data":""},{"value":4,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-8,"data":""}],[{"value":-1,"data":""},{"value":4,"data":""},{"value":4,"data":""},{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-7,"data":""}],[{"value":-1,"data":""},{"value":0,"data":""},{"value":4,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-6,"data":""}],[{"value":-1,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":3,"data":""},{"value":-5,"data":""}],[{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-4,"data":""}],[{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-3,"data":""}],[{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-2,"data":""}],[{"value":-1,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":0,"data":""},{"value":-1,"data":""}],[{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""},{"value":-1,"data":""}]]
\ No newline at end of file

--
Gitblit v1.9.1