From 2bc319c2c241d7646cb6805f9364cb7416edfa0a Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Mon, 22 Jun 2020 17:31:09 +0800
Subject: [PATCH] add websocket实时发送设备数据,显示风向等信息

---
 src/main/webapp/js/stomp.min.js                              |  470 +++++++
 src/main/webapp/js/sockjs.min.js                             | 2852 +++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/moral/config/WebSocketConfig.java          |   22 
 src/main/webapp/js/newmoralmap.js                            |  194 ++
 src/main/java/com/moral/webSocketServer/WebSocketServer.java |  145 ++
 pom.xml                                                      |   10 
 src/main/webapp/img/wind_dir.png                             |    0 
 src/main/webapp/view/newmap.jsp                              |   46 
 8 files changed, 3,697 insertions(+), 42 deletions(-)

diff --git a/pom.xml b/pom.xml
index fb81680..6642f1f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -216,6 +216,16 @@
             <artifactId>poi-ooxml</artifactId>
             <version>4.1.2</version>
         </dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-amqp</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-websocket</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/main/java/com/moral/config/WebSocketConfig.java b/src/main/java/com/moral/config/WebSocketConfig.java
new file mode 100644
index 0000000..dc2b9eb
--- /dev/null
+++ b/src/main/java/com/moral/config/WebSocketConfig.java
@@ -0,0 +1,22 @@
+package com.moral.config;
+
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+
+    @Bean
+    public MessageConverter jsonMessageConverter() {
+        return new Jackson2JsonMessageConverter();
+    }
+
+}
diff --git a/src/main/java/com/moral/webSocketServer/WebSocketServer.java b/src/main/java/com/moral/webSocketServer/WebSocketServer.java
new file mode 100644
index 0000000..e019555
--- /dev/null
+++ b/src/main/java/com/moral/webSocketServer/WebSocketServer.java
@@ -0,0 +1,145 @@
+package com.moral.webSocketServer;
+
+import java.io.IOException;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+
+import com.moral.service.MonitorPointService;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.QueueingConsumer;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ServerEndpoint ���������������������������������������������������������������������������������������websocket������������,
+ * ���������������������������������������������������������URL������,���������������������������URL������������WebSocket������������
+ */
+@Slf4j
+@ServerEndpoint("/screen/webSocket/{param}")
+@Component
+public class WebSocketServer {
+
+    public static MonitorPointService monitorPointService;
+
+    // ������������������������������������������������������������������������������
+    private Session session;
+
+    private String orgId;
+
+    private String regionCode;
+
+    // ������session���������������������������
+    private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
+
+    /**
+     * ���������������������������������
+     *
+     * @param session ������������������session���������������������������������������������������������������������������������
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("param") String param) {
+        this.session = session;
+        //������������������������������������������������
+        webSocketSet.add(this);
+        int flag = param.indexOf("&");
+        orgId = param.substring(0, flag);
+        regionCode = param.substring(flag + 1);
+        String QUEUE_NAME = "deviceInfo";
+        try {
+            //������������������������������������������������
+            ConnectionFactory factory = new ConnectionFactory();
+            //������MabbitMQ������������ip���������������
+            factory.setHost("47.96.15.25");
+            factory.setPort(5672);
+            factory.setUsername("guest");
+            factory.setPassword("guest_pass");
+            String routingKey = orgId+".*";
+            Connection connection = factory.newConnection();
+            Channel channel = connection.createChannel();
+            //���������������������������������������������������������������������������������������������������������
+            channel.queueDeclare(QUEUE_NAME, false, false, true, null);
+            channel.queueBind(QUEUE_NAME,"screens_data",routingKey);
+
+            //���������������������
+            QueueingConsumer consumer = new QueueingConsumer(channel);
+            //������������������
+            channel.basicConsume(QUEUE_NAME, true, consumer);
+
+            while (true) {
+                //nextDelivery������������������������������������������������������������take���������
+                QueueingConsumer.Delivery delivery = consumer.nextDelivery();
+                String message = new String(delivery.getBody());
+                sendMessage(message);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+    /**
+     * ���������������������������
+     */
+    @OnClose
+    public void onClose() {
+        /**���������Set��� ������������������������*/
+        webSocketSet.remove(this);
+    }
+
+    @OnMessage
+    public void onMessage(String message) {
+        System.out.println(message);
+        for (WebSocketServer webSocketServer : webSocketSet) {
+            webSocketServer.sendMessage(message);
+        }
+    }
+
+   /* @RabbitListener(bindings = @QueueBinding(
+            value = @Queue(value = "deviceInfo", durable = "false", autoDelete = "true"),
+            exchange = @Exchange(value = "screens_data", durable = "true", type = "topic"),
+            key = "99.*"
+    ))
+    @RabbitHandler //������������:��������������������� ������������������������������������������
+    public void receiveMessage(@Payload String message, @Headers Map<String, Object> headers, Channel channel) throws IOException {
+        //sendMessage(message.toString());
+        onMessage(message);
+       *//* Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
+        //���������������������rabbitmq���������������������  deliverTag������������������ false���������������
+        channel.basicAck(deliveryTag, true);*//*
+    }*/
+
+    /**
+     * ������������������������
+     */
+    public void sendMessage(String message) {
+        try {
+            if (session.isOpen()) {
+                this.session.getBasicRemote().sendText(message);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * ���������������������
+     *
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        error.printStackTrace();
+    }
+
+}
diff --git a/src/main/webapp/img/wind_dir.png b/src/main/webapp/img/wind_dir.png
new file mode 100644
index 0000000..a2e42b3
--- /dev/null
+++ b/src/main/webapp/img/wind_dir.png
Binary files differ
diff --git a/src/main/webapp/js/newmoralmap.js b/src/main/webapp/js/newmoralmap.js
index 6e08a5b..3a90815 100644
--- a/src/main/webapp/js/newmoralmap.js
+++ b/src/main/webapp/js/newmoralmap.js
@@ -695,8 +695,36 @@
             }
         })
     }
+
+    moralMap.WindMarker = function (option, target) {
+        var _option = option;
+        var _pointObj = new BMap.Point(_option['longitude'], _option['latitude']);
+        var _iconObj = new BMap.Icon("/img/wind_dir.png", new BMap.Size(25, 25));
+        this._point = _pointObj;
+
+        this.constructor.call(this, _pointObj, {
+            icon: _iconObj,
+            offset: new BMap.Size(0, -35),
+            enableMassClear: true
+        })
+        return $.extend(this, {
+            refreshWindDir: function (windDir) {
+                //���������������������������������������������
+                this.setRotation(windDir);
+            },
+            getOption: function () {
+                return _option;
+            },
+            setOption: function (option) {
+                _option = option;
+            }
+        })
+
+    }
+
     //new BMap.Marker()������������IE7���������������������
     moralMap.MoralMarker.prototype = new BMap.Marker();
+    moralMap.WindMarker.prototype = new BMap.Marker();
     //��������������� ������Mark������
     moralMap.Monitorpoint = function (option) {
         if (monitorPointStates) {
@@ -786,6 +814,36 @@
         }
     });
 
+    moralMap.Device = function (option) {
+        if (deviceStates) {
+            for (var i in deviceStates) {
+                var state = deviceStates[i];
+                if (state.id == option.id) {
+                    option.state = state.state;
+                }
+            }
+        }
+        var windMarker = new moralMap.WindMarker(option);
+        moralMap.putDevice(option['mac'], windMarker);
+        var refreshWindMarker = windMarker.refreshWindDir;
+        return $.extend(windMarker, {
+            refreshWindDir: function (data) {
+                if (data != null && data != "") {
+                    this.setData(data); //������������
+                    refreshWindMarker.call(this, data["e23"]);
+                }
+            },
+            setData: function (data) {
+                var option = this.getOption();
+                option["data"] = data;
+                this.setOption(option);
+            },
+            getData: function () {
+                return this.getOption()["data"];
+            }
+        });
+    }
+
     //���������mac���key������
     //��������������� ������MoralMark������
     moralMap.Equipment = function (option) {
@@ -840,7 +898,7 @@
         }
         var mouseOverHandle = option['mouseover'];
         moralMarker.addEventListener("mouseover", function () {
-            var obj = {};
+         /*   var obj = {};
             obj['methodName'] = 'deliverMac';
             obj['mac'] = option['mac'];
             var objStr = JSON.stringify(obj);
@@ -848,45 +906,49 @@
                 window['external'].callWin(objStr);
             } else {
                 alert(objStr);
-            }
+            }*/
 
             moralMap.showSensors = function (jsonData) {
-                if (!jsonData.hasOwnProperty('mac')) {
-                    infoWindow.setContent("");
-                    infoWindow.redraw();
-                } else {
-                    var adressOutHtml = '<div style="min-height:20px;overflow:auto;max-height:400px;font-size: 12px;" onmouseover="moralMap.clearCloseInfoWindow()" onmouseout="moralMap.closeInfoWindow()">';
-                    var y, m, d, h, mm, s;
-                    var date = new Date(jsonData['time']);
-                    y = 1900 + date.getYear();
-                    m = "0" + (date.getMonth() + 1);
-                    d = "0" + date.getDate();
-                    h = "0" + date.getHours();
-                    mm = "0" + date.getMinutes();
-                    s = "0" + date.getSeconds();
-                    date = y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length) + " " + h.substring(h.length - 2, h.length) + ":" + mm.substring(mm.length - 2, mm.length) + ":" + s.substring(s.length - 2, s.length);
-                    adressOutHtml += '<p style="height: 18px;line-height: 18px">' + "���������&nbsp;" + date + "&nbsp;</p>";
-                    for (var prop in jsonData) {
-                        if (jsonData.hasOwnProperty(prop) && prop != 'ver' && prop != 'methodName' && prop != 'mac' && prop != 'time') {
-                            for (var key in sensorsDescriptionMap) {
-                                if (prop == key) {
-                                    var sensorsDescription = sensorsDescriptionMap[key];
-                                }
-                            }
-                            for (var key in sensorsUnitMap) {
-                                if (prop == key) {
-                                    var sensorsUnit = sensorsUnitMap[key];
-                                    if (sensorsUnit == null) {
-                                        sensorsUnit = "";
+                var deviceSensors = jsonData;
+                var mac = deviceSensors["mac"];
+                if (mac == option['mac']) {
+                    if (!jsonData.hasOwnProperty('mac')) {
+                        infoWindow.setContent("");
+                        infoWindow.redraw();
+                    } else {
+                        var adressOutHtml = '<div style="min-height:20px;overflow:auto;max-height:480px;font-size: 12px;" onmouseover="moralMap.clearCloseInfoWindow()" onmouseout="moralMap.closeInfoWindow()">';
+                        var y, m, d, h, mm, s;
+                        var date = new Date($.now());
+                        y = 1900 + date.getYear();
+                        m = "0" + (date.getMonth() + 1);
+                        d = "0" + date.getDate();
+                        h = "0" + date.getHours();
+                        mm = "0" + date.getMinutes();
+                        s = "0" + date.getSeconds();
+                        date = y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length) + " " + h.substring(h.length - 2, h.length) + ":" + mm.substring(mm.length - 2, mm.length) + ":" + s.substring(s.length - 2, s.length);
+                        adressOutHtml += '<p style="height: 18px;line-height: 18px">' + "���������&nbsp;" + date + "&nbsp;</p>";
+                        for (var prop in jsonData) {
+                            if (jsonData.hasOwnProperty(prop) && prop != 'ver' && prop != 'methodName' && prop != 'mac' && prop != 'time') {
+                                for (var key in sensorsDescriptionMap) {
+                                    if (prop == key) {
+                                        var sensorsDescription = sensorsDescriptionMap[key];
                                     }
                                 }
+                                for (var key in sensorsUnitMap) {
+                                    if (prop == key) {
+                                        var sensorsUnit = sensorsUnitMap[key];
+                                        if (sensorsUnit == null) {
+                                            sensorsUnit = "";
+                                        }
+                                    }
+                                }
+                                adressOutHtml += ('<p style="height: 18px;line-height: 18px">' + sensorsDescription + "���" + jsonData[prop] + sensorsUnit + "</p>");
                             }
-                            adressOutHtml += ('<p style="height: 18px;line-height: 18px">' + sensorsDescription + "���" + jsonData[prop] + sensorsUnit + "</p>");
                         }
+                        adressOutHtml += "</div>";
+                        infoWindow.setContent(adressOutHtml);
+                        infoWindow.redraw();
                     }
-                    adressOutHtml += "</div>";
-                    infoWindow.setContent(adressOutHtml);
-                    infoWindow.redraw();
                 }
             }
             /*   if (!$.isEmptyObject(sensorInfo)) {
@@ -896,14 +958,14 @@
         });
 
         moralMarker.addEventListener("mouseout", function () {
-            var obj = {};
+          /*  var obj = {};
             obj['methodName'] = 'stopDeliverMac';
             var objStr = JSON.stringify(obj);
             if (!!window['external'] && !!window['external']['callWin']) {
                 window['external'].callWin(objStr);
             } else {
                 alert(objStr);
-            }
+            }*/
             moralMap.closeInfoWindow();
         });
 
@@ -952,6 +1014,31 @@
     moralMap.getEquipments = function (key) {
         return moralMap['_equipments'];
     }
+
+    moralMap.putDevice = function (key, obj) {
+        if (key != null && key != "") {
+            key = String.prototype.toLowerCase.call(key);
+            if (moralMap['_devices'] == undefined) {
+                moralMap['_devices'] = {};
+            }
+            moralMap['_devices'][key] = obj;
+        }
+    }
+
+    moralMap.getDevice = function (key) {
+        if (key == null) {
+            return null;
+        }
+        key = String.prototype.toLowerCase.call(key);
+        if (typeof moralMap['_devices'] === 'object') {
+            return moralMap['_devices'][key];
+        }
+    }
+
+    moralMap.getDevices = function (key) {
+        return moralMap['_devices'];
+    }
+
     moralMap.clearEquipments = function () {
         if (moralMap['_equipments'] != undefined) {
             delete moralMap['_equipments'];
@@ -991,6 +1078,34 @@
         }
         return markers;
     }
+
+    moralMap.getHorizonWindMarkers = function (isShow) {
+        var bounds = moralMap.getBounds();
+        var oldWindMarkerList;
+        var isShow = (isShow) ? baiduMap : null;
+        if (moralMap.layer() == "equipments") {
+            oldWindMarkerList = moralMap.getDevices();
+        }
+        var markers = [];
+        if (oldWindMarkerList != null && typeof oldWindMarkerList == "object") {
+            for (var i in oldWindMarkerList) {
+                var oldWindMarker = oldWindMarkerList[i];
+                if (oldWindMarker != null && oldWindMarker instanceof BMap.Overlay && oldWindMarker.getMap() == isShow) {
+                    var option = oldWindMarker.getOption();
+                    if (typeof option == 'object') {
+                        var longitude = option['longitude'];
+                        var latitude = option['latitude'];
+                        // ������������������������������������
+                        if (longitude < bounds.northeastLng && longitude > bounds.southwestLng && latitude < bounds.northeastLat && latitude > bounds.southwestLat) {
+                            markers.push(oldWindMarker);
+                        }
+                    }
+                }
+            }
+        }
+        return markers;
+    }
+
     moralMap.showPointMonitor = function (id) {
         var mpointMarker = moralMap.getMpoint(id);
         var mpoint = mpointMarker.getOption();
@@ -1072,5 +1187,14 @@
         }
     }
 
+    moralMap.refreshWindDir = function (devicesInfo) {
+        var deviceInfo = devicesInfo;
+        var mac = deviceInfo["mac"];
+        var device = moralMap.getDevice(mac);
+        if (device) {
+            device.refreshWindDir(deviceInfo);
+        }
+    }
+
     window.moralMap = moralMap;
 })(jQuery, BMap, window);
diff --git a/src/main/webapp/js/sockjs.min.js b/src/main/webapp/js/sockjs.min.js
new file mode 100644
index 0000000..0acda5a
--- /dev/null
+++ b/src/main/webapp/js/sockjs.min.js
@@ -0,0 +1,2852 @@
+/* sockjs-client v1.1.4 | http://sockjs.org | MIT license */
+!
+function(t) {
+    if ("object" == typeof exports && "undefined" != typeof module) module.exports = t();
+    else if ("function" == typeof define && define.amd) define([], t);
+    else {
+        var e;
+        e = "undefined" != typeof window ? window: "undefined" != typeof global ? global: "undefined" != typeof self ? self: this,
+        e.SockJS = t()
+    }
+} (function() {
+    var t;
+    return function t(e, n, r) {
+        function i(s, a) {
+            if (!n[s]) {
+                if (!e[s]) {
+                    var l = "function" == typeof require && require;
+                    if (!a && l) return l(s, !0);
+                    if (o) return o(s, !0);
+                    var u = new Error("Cannot find module '" + s + "'");
+                    throw u.code = "MODULE_NOT_FOUND",
+                    u
+                }
+                var c = n[s] = {
+                    exports: {}
+                };
+                e[s][0].call(c.exports,
+                function(t) {
+                    var n = e[s][1][t];
+                    return i(n || t)
+                },
+                c, c.exports, t, e, n, r)
+            }
+            return n[s].exports
+        }
+        for (var o = "function" == typeof require && require,
+        s = 0; s < r.length; s++) i(r[s]);
+        return i
+    } ({
+        1 : [function(t, e, n) { (function(n) {
+                "use strict";
+                var r = t("./transport-list");
+                e.exports = t("./main")(r),
+                "_sockjs_onload" in n && setTimeout(n._sockjs_onload, 1)
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./main": 14,
+            "./transport-list": 16
+        }],
+        2 : [function(t, e, n) {
+            "use strict";
+            function r() {
+                o.call(this),
+                this.initEvent("close", !1, !1),
+                this.wasClean = !1,
+                this.code = 0,
+                this.reason = ""
+            }
+            var i = t("inherits"),
+            o = t("./event");
+            i(r, o),
+            e.exports = r
+        },
+        {
+            "./event": 4,
+            "inherits": 54
+        }],
+        3 : [function(t, e, n) {
+            "use strict";
+            function r() {
+                o.call(this)
+            }
+            var i = t("inherits"),
+            o = t("./eventtarget");
+            i(r, o),
+            r.prototype.removeAllListeners = function(t) {
+                t ? delete this._listeners[t] : this._listeners = {}
+            },
+            r.prototype.once = function(t, e) {
+                function n() {
+                    r.removeListener(t, n),
+                    i || (i = !0, e.apply(this, arguments))
+                }
+                var r = this,
+                i = !1;
+                this.on(t, n)
+            },
+            r.prototype.emit = function() {
+                var t = arguments[0],
+                e = this._listeners[t];
+                if (e) {
+                    for (var n = arguments.length,
+                    r = new Array(n - 1), i = 1; i < n; i++) r[i - 1] = arguments[i];
+                    for (var o = 0; o < e.length; o++) e[o].apply(this, r)
+                }
+            },
+            r.prototype.on = r.prototype.addListener = o.prototype.addEventListener,
+            r.prototype.removeListener = o.prototype.removeEventListener,
+            e.exports.EventEmitter = r
+        },
+        {
+            "./eventtarget": 5,
+            "inherits": 54
+        }],
+        4 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                this.type = t
+            }
+            r.prototype.initEvent = function(t, e, n) {
+                return this.type = t,
+                this.bubbles = e,
+                this.cancelable = n,
+                this.timeStamp = +new Date,
+                this
+            },
+            r.prototype.stopPropagation = function() {},
+            r.prototype.preventDefault = function() {},
+            r.CAPTURING_PHASE = 1,
+            r.AT_TARGET = 2,
+            r.BUBBLING_PHASE = 3,
+            e.exports = r
+        },
+        {}],
+        5 : [function(t, e, n) {
+            "use strict";
+            function r() {
+                this._listeners = {}
+            }
+            r.prototype.addEventListener = function(t, e) {
+                t in this._listeners || (this._listeners[t] = []);
+                var n = this._listeners[t]; - 1 === n.indexOf(e) && (n = n.concat([e])),
+                this._listeners[t] = n
+            },
+            r.prototype.removeEventListener = function(t, e) {
+                var n = this._listeners[t];
+                if (n) {
+                    var r = n.indexOf(e);
+                    return - 1 !== r ? void(n.length > 1 ? this._listeners[t] = n.slice(0, r).concat(n.slice(r + 1)) : delete this._listeners[t]) : void 0
+                }
+            },
+            r.prototype.dispatchEvent = function() {
+                var t = arguments[0],
+                e = t.type,
+                n = 1 === arguments.length ? [t] : Array.apply(null, arguments);
+                if (this["on" + e] && this["on" + e].apply(this, n), e in this._listeners) for (var r = this._listeners[e], i = 0; i < r.length; i++) r[i].apply(this, n)
+            },
+            e.exports = r
+        },
+        {}],
+        6 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                o.call(this),
+                this.initEvent("message", !1, !1),
+                this.data = t
+            }
+            var i = t("inherits"),
+            o = t("./event");
+            i(r, o),
+            e.exports = r
+        },
+        {
+            "./event": 4,
+            "inherits": 54
+        }],
+        7 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                this._transport = t,
+                t.on("message", this._transportMessage.bind(this)),
+                t.on("close", this._transportClose.bind(this))
+            }
+            var i = t("json3"),
+            o = t("./utils/iframe");
+            r.prototype._transportClose = function(t, e) {
+                o.postMessage("c", i.stringify([t, e]))
+            },
+            r.prototype._transportMessage = function(t) {
+                o.postMessage("t", t)
+            },
+            r.prototype._send = function(t) {
+                this._transport.send(t)
+            },
+            r.prototype._close = function() {
+                this._transport.close(),
+                this._transport.removeAllListeners()
+            },
+            e.exports = r
+        },
+        {
+            "./utils/iframe": 47,
+            "json3": 55
+        }],
+        8 : [function(t, e, n) {
+            "use strict";
+            var r = t("./utils/url"),
+            i = t("./utils/event"),
+            o = t("json3"),
+            s = t("./facade"),
+            a = t("./info-iframe-receiver"),
+            l = t("./utils/iframe"),
+            u = t("./location");
+            e.exports = function(t, e) {
+                var n = {};
+                e.forEach(function(t) {
+                    t.facadeTransport && (n[t.facadeTransport.transportName] = t.facadeTransport)
+                }),
+                n[a.transportName] = a;
+                var c;
+                t.bootstrap_iframe = function() {
+                    var e;
+                    l.currentWindowId = u.hash.slice(1);
+                    var a = function(i) {
+                        if (i.source === parent && (void 0 === c && (c = i.origin), i.origin === c)) {
+                            var a;
+                            try {
+                                a = o.parse(i.data)
+                            } catch(t) {
+                                return void i.data
+                            }
+                            if (a.windowId === l.currentWindowId) switch (a.type) {
+                            case "s":
+                                var f;
+                                try {
+                                    f = o.parse(a.data)
+                                } catch(t) {
+                                    a.data;
+                                    break
+                                }
+                                var h = f[0],
+                                d = f[1],
+                                p = f[2],
+                                v = f[3];
+                                if (h !== t.version) throw new Error('Incompatible SockJS! Main site uses: "' + h + '", the iframe: "' + t.version + '".');
+                                if (!r.isOriginEqual(p, u.href) || !r.isOriginEqual(v, u.href)) throw new Error("Can't connect to different domain from within an iframe. (" + u.href + ", " + p + ", " + v + ")");
+                                e = new s(new n[d](p, v));
+                                break;
+                            case "m":
+                                e._send(a.data);
+                                break;
+                            case "c":
+                                e && e._close(),
+                                e = null
+                            }
+                        }
+                    };
+                    i.attachEvent("message", a),
+                    l.postMessage("s")
+                }
+            }
+        },
+        {
+            "./facade": 7,
+            "./info-iframe-receiver": 10,
+            "./location": 13,
+            "./utils/event": 46,
+            "./utils/iframe": 47,
+            "./utils/url": 52,
+            "debug": void 0,
+            "json3": 55
+        }],
+        9 : [function(t, e, n) {
+            "use strict";
+            function r(t, e) {
+                i.call(this);
+                var n = this,
+                r = +new Date;
+                this.xo = new e("GET", t),
+                this.xo.once("finish",
+                function(t, e) {
+                    var i, o;
+                    if (200 === t) {
+                        if (o = +new Date - r, e) try {
+                            i = s.parse(e)
+                        } catch(t) {}
+                        a.isObject(i) || (i = {})
+                    }
+                    n.emit("finish", i, o),
+                    n.removeAllListeners()
+                })
+            }
+            var i = t("events").EventEmitter,
+            o = t("inherits"),
+            s = t("json3"),
+            a = t("./utils/object");
+            o(r, i),
+            r.prototype.close = function() {
+                this.removeAllListeners(),
+                this.xo.close()
+            },
+            e.exports = r
+        },
+        {
+            "./utils/object": 49,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54,
+            "json3": 55
+        }],
+        10 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                var e = this;
+                o.call(this),
+                this.ir = new l(t, a),
+                this.ir.once("finish",
+                function(t, n) {
+                    e.ir = null,
+                    e.emit("message", s.stringify([t, n]))
+                })
+            }
+            var i = t("inherits"),
+            o = t("events").EventEmitter,
+            s = t("json3"),
+            a = t("./transport/sender/xhr-local"),
+            l = t("./info-ajax");
+            i(r, o),
+            r.transportName = "iframe-info-receiver",
+            r.prototype.close = function() {
+                this.ir && (this.ir.close(), this.ir = null),
+                this.removeAllListeners()
+            },
+            e.exports = r
+        },
+        {
+            "./info-ajax": 9,
+            "./transport/sender/xhr-local": 37,
+            "events": 3,
+            "inherits": 54,
+            "json3": 55
+        }],
+        11 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t, e) {
+                    var r = this;
+                    i.call(this);
+                    var o = function() {
+                        var n = r.ifr = new l(u.transportName, e, t);
+                        n.once("message",
+                        function(t) {
+                            if (t) {
+                                var e;
+                                try {
+                                    e = s.parse(t)
+                                } catch(t) {
+                                    return r.emit("finish"),
+                                    void r.close()
+                                }
+                                var n = e[0],
+                                i = e[1];
+                                r.emit("finish", n, i)
+                            }
+                            r.close()
+                        }),
+                        n.once("close",
+                        function() {
+                            r.emit("finish"),
+                            r.close()
+                        })
+                    };
+                    n.document.body ? o() : a.attachEvent("load", o)
+                }
+                var i = t("events").EventEmitter,
+                o = t("inherits"),
+                s = t("json3"),
+                a = t("./utils/event"),
+                l = t("./transport/iframe"),
+                u = t("./info-iframe-receiver");
+                o(r, i),
+                r.enabled = function() {
+                    return l.enabled()
+                },
+                r.prototype.close = function() {
+                    this.ifr && this.ifr.close(),
+                    this.removeAllListeners(),
+                    this.ifr = null
+                },
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./info-iframe-receiver": 10,
+            "./transport/iframe": 22,
+            "./utils/event": 46,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54,
+            "json3": 55
+        }],
+        12 : [function(t, e, n) {
+            "use strict";
+            function r(t, e) {
+                var n = this;
+                i.call(this),
+                setTimeout(function() {
+                    n.doXhr(t, e)
+                },
+                0)
+            }
+            var i = t("events").EventEmitter,
+            o = t("inherits"),
+            s = t("./utils/url"),
+            a = t("./transport/sender/xdr"),
+            l = t("./transport/sender/xhr-cors"),
+            u = t("./transport/sender/xhr-local"),
+            c = t("./transport/sender/xhr-fake"),
+            f = t("./info-iframe"),
+            h = t("./info-ajax");
+            o(r, i),
+            r._getReceiver = function(t, e, n) {
+                return n.sameOrigin ? new h(e, u) : l.enabled ? new h(e, l) : a.enabled && n.sameScheme ? new h(e, a) : f.enabled() ? new f(t, e) : new h(e, c)
+            },
+            r.prototype.doXhr = function(t, e) {
+                var n = this,
+                i = s.addPath(t, "/info");
+                this.xo = r._getReceiver(t, i, e),
+                this.timeoutRef = setTimeout(function() {
+                    n._cleanup(!1),
+                    n.emit("finish")
+                },
+                r.timeout),
+                this.xo.once("finish",
+                function(t, e) {
+                    n._cleanup(!0),
+                    n.emit("finish", t, e)
+                })
+            },
+            r.prototype._cleanup = function(t) {
+                clearTimeout(this.timeoutRef),
+                this.timeoutRef = null,
+                !t && this.xo && this.xo.close(),
+                this.xo = null
+            },
+            r.prototype.close = function() {
+                this.removeAllListeners(),
+                this._cleanup(!1)
+            },
+            r.timeout = 8e3,
+            e.exports = r
+        },
+        {
+            "./info-ajax": 9,
+            "./info-iframe": 11,
+            "./transport/sender/xdr": 34,
+            "./transport/sender/xhr-cors": 35,
+            "./transport/sender/xhr-fake": 36,
+            "./transport/sender/xhr-local": 37,
+            "./utils/url": 52,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        13 : [function(t, e, n) { (function(t) {
+                "use strict";
+                e.exports = t.location || {
+                    origin: "http://localhost:80",
+                    protocol: "http",
+                    host: "localhost",
+                    port: 80,
+                    href: "http://localhost/",
+                    hash: ""
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        14 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t, e, n) {
+                    if (! (this instanceof r)) return new r(t, e, n);
+                    if (arguments.length < 1) throw new TypeError("Failed to construct 'SockJS: 1 argument required, but only 0 present");
+                    y.call(this),
+                    this.readyState = r.CONNECTING,
+                    this.extensions = "",
+                    this.protocol = "",
+                    n = n || {},
+                    n.protocols_whitelist && m.warn("'protocols_whitelist' is DEPRECATED. Use 'transports' instead."),
+                    this._transportsWhitelist = n.transports,
+                    this._transportOptions = n.transportOptions || {};
+                    var i = n.sessionId || 8;
+                    if ("function" == typeof i) this._generateSessionId = i;
+                    else {
+                        if ("number" != typeof i) throw new TypeError("If sessionId is used in the options, it needs to be a number or a function.");
+                        this._generateSessionId = function() {
+                            return u.string(i)
+                        }
+                    }
+                    this._server = n.server || u.numberString(1e3);
+                    var o = new s(t);
+                    if (!o.host || !o.protocol) throw new SyntaxError("The URL '" + t + "' is invalid");
+                    if (o.hash) throw new SyntaxError("The URL must not contain a fragment");
+                    if ("http:" !== o.protocol && "https:" !== o.protocol) throw new SyntaxError("The URL's scheme must be either 'http:' or 'https:'. '" + o.protocol + "' is not allowed.");
+                    var a = "https:" === o.protocol;
+                    if ("https" === g.protocol && !a) throw new Error("SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS");
+                    e ? Array.isArray(e) || (e = [e]) : e = [];
+                    var l = e.sort();
+                    l.forEach(function(t, e) {
+                        if (!t) throw new SyntaxError("The protocols entry '" + t + "' is invalid.");
+                        if (e < l.length - 1 && t === l[e + 1]) throw new SyntaxError("The protocols entry '" + t + "' is duplicated.")
+                    });
+                    var c = f.getOrigin(g.href);
+                    this._origin = c ? c.toLowerCase() : null,
+                    o.set("pathname", o.pathname.replace(/\/+$/, "")),
+                    this.url = o.href,
+                    this.url,
+                    this._urlInfo = {
+                        nullOrigin: !v.hasDomain(),
+                        sameOrigin: f.isOriginEqual(this.url, g.href),
+                        sameScheme: f.isSchemeEqual(this.url, g.href)
+                    },
+                    this._ir = new _(this.url, this._urlInfo),
+                    this._ir.once("finish", this._receiveInfo.bind(this))
+                }
+                function i(t) {
+                    return 1e3 === t || t >= 3e3 && t <= 4999
+                }
+                t("./shims");
+                var o, s = t("url-parse"),
+                a = t("inherits"),
+                l = t("json3"),
+                u = t("./utils/random"),
+                c = t("./utils/escape"),
+                f = t("./utils/url"),
+                h = t("./utils/event"),
+                d = t("./utils/transport"),
+                p = t("./utils/object"),
+                v = t("./utils/browser"),
+                m = t("./utils/log"),
+                b = t("./event/event"),
+                y = t("./event/eventtarget"),
+                g = t("./location"),
+                w = t("./event/close"),
+                x = t("./event/trans-message"),
+                _ = t("./info-receiver");
+                a(r, y),
+                r.prototype.close = function(t, e) {
+                    if (t && !i(t)) throw new Error("InvalidAccessError: Invalid code");
+                    if (e && e.length > 123) throw new SyntaxError("reason argument has an invalid length");
+                    if (this.readyState !== r.CLOSING && this.readyState !== r.CLOSED) {
+                        this._close(t || 1e3, e || "Normal closure", !0)
+                    }
+                },
+                r.prototype.send = function(t) {
+                    if ("string" != typeof t && (t = "" + t), this.readyState === r.CONNECTING) throw new Error("InvalidStateError: The connection has not been established yet");
+                    this.readyState === r.OPEN && this._transport.send(c.quote(t))
+                },
+                r.version = t("./version"),
+                r.CONNECTING = 0,
+                r.OPEN = 1,
+                r.CLOSING = 2,
+                r.CLOSED = 3,
+                r.prototype._receiveInfo = function(t, e) {
+                    if (this._ir = null, !t) return void this._close(1002, "Cannot connect to server");
+                    this._rto = this.countRTO(e),
+                    this._transUrl = t.base_url ? t.base_url: this.url,
+                    t = p.extend(t, this._urlInfo);
+                    var n = o.filterToEnabled(this._transportsWhitelist, t);
+                    this._transports = n.main,
+                    this._transports.length,
+                    this._connect()
+                },
+                r.prototype._connect = function() {
+                    for (var t = this._transports.shift(); t; t = this._transports.shift()) {
+                        if (t.transportName, t.needBody && (!n.document.body || void 0 !== n.document.readyState && "complete" !== n.document.readyState && "interactive" !== n.document.readyState)) return this._transports.unshift(t),
+                        void h.attachEvent("load", this._connect.bind(this));
+                        var e = this._rto * t.roundTrips || 5e3;
+                        this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), e);
+                        var r = f.addPath(this._transUrl, "/" + this._server + "/" + this._generateSessionId()),
+                        i = this._transportOptions[t.transportName],
+                        o = new t(r, this._transUrl, i);
+                        return o.on("message", this._transportMessage.bind(this)),
+                        o.once("close", this._transportClose.bind(this)),
+                        o.transportName = t.transportName,
+                        void(this._transport = o)
+                    }
+                    this._close(2e3, "All transports failed", !1)
+                },
+                r.prototype._transportTimeout = function() {
+                    this.readyState === r.CONNECTING && this._transportClose(2007, "Transport timed out")
+                },
+                r.prototype._transportMessage = function(t) {
+                    var e, n = this,
+                    r = t.slice(0, 1),
+                    i = t.slice(1);
+                    switch (r) {
+                    case "o":
+                        return void this._open();
+                    case "h":
+                        return this.dispatchEvent(new b("heartbeat")),
+                        void this.transport
+                    }
+                    if (i) try {
+                        e = l.parse(i)
+                    } catch(t) {}
+                    if (void 0 !== e) switch (r) {
+                    case "a":
+                        Array.isArray(e) && e.forEach(function(t) {
+                            n.transport,
+                            n.dispatchEvent(new x(t))
+                        });
+                        break;
+                    case "m":
+                        this.transport,
+                        this.dispatchEvent(new x(e));
+                        break;
+                    case "c":
+                        Array.isArray(e) && 2 === e.length && this._close(e[0], e[1], !0)
+                    }
+                },
+                r.prototype._transportClose = function(t, e) {
+                    if (this.transport, this._transport && (this._transport.removeAllListeners(), this._transport = null, this.transport = null), !i(t) && 2e3 !== t && this.readyState === r.CONNECTING) return void this._connect();
+                    this._close(t, e)
+                },
+                r.prototype._open = function() {
+                    this._transport.transportName,
+                    this.readyState,
+                    this.readyState === r.CONNECTING ? (this._transportTimeoutId && (clearTimeout(this._transportTimeoutId), this._transportTimeoutId = null), this.readyState = r.OPEN, this.transport = this._transport.transportName, this.dispatchEvent(new b("open")), this.transport) : this._close(1006, "Server lost session")
+                },
+                r.prototype._close = function(t, e, n) {
+                    this.transport,
+                    this.readyState;
+                    var i = !1;
+                    if (this._ir && (i = !0, this._ir.close(), this._ir = null), this._transport && (this._transport.close(), this._transport = null, this.transport = null), this.readyState === r.CLOSED) throw new Error("InvalidStateError: SockJS has already been closed");
+                    this.readyState = r.CLOSING,
+                    setTimeout(function() {
+                        this.readyState = r.CLOSED,
+                        i && this.dispatchEvent(new b("error"));
+                        var o = new w("close");
+                        o.wasClean = n || !1,
+                        o.code = t || 1e3,
+                        o.reason = e,
+                        this.dispatchEvent(o),
+                        this.onmessage = this.onclose = this.onerror = null
+                    }.bind(this), 0)
+                },
+                r.prototype.countRTO = function(t) {
+                    return t > 100 ? 4 * t: 300 + t
+                },
+                e.exports = function(e) {
+                    return o = d(e),
+                    t("./iframe-bootstrap")(r, e),
+                    r
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./event/close": 2,
+            "./event/event": 4,
+            "./event/eventtarget": 5,
+            "./event/trans-message": 6,
+            "./iframe-bootstrap": 8,
+            "./info-receiver": 12,
+            "./location": 13,
+            "./shims": 15,
+            "./utils/browser": 44,
+            "./utils/escape": 45,
+            "./utils/event": 46,
+            "./utils/log": 48,
+            "./utils/object": 49,
+            "./utils/random": 50,
+            "./utils/transport": 51,
+            "./utils/url": 52,
+            "./version": 53,
+            "debug": void 0,
+            "inherits": 54,
+            "json3": 55,
+            "url-parse": 58
+        }],
+        15 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                var e = +t;
+                return e !== e ? e = 0 : 0 !== e && e !== 1 / 0 && e !== -1 / 0 && (e = (e > 0 || -1) * Math.floor(Math.abs(e))),
+                e
+            }
+            function i(t) {
+                return t >>> 0
+            }
+            function o() {}
+            var s, a = Array.prototype,
+            l = Object.prototype,
+            u = Function.prototype,
+            c = String.prototype,
+            f = a.slice,
+            h = l.toString,
+            d = function(t) {
+                return "[object Function]" === l.toString.call(t)
+            },
+            p = function(t) {
+                return "[object Array]" === h.call(t)
+            },
+            v = function(t) {
+                return "[object String]" === h.call(t)
+            },
+            m = Object.defineProperty &&
+            function() {
+                try {
+                    return Object.defineProperty({},
+                    "x", {}),
+                    !0
+                } catch(t) {
+                    return ! 1
+                }
+            } ();
+            s = m ?
+            function(t, e, n, r) { ! r && e in t || Object.defineProperty(t, e, {
+                    configurable: !0,
+                    enumerable: !1,
+                    writable: !0,
+                    value: n
+                })
+            }: function(t, e, n, r) { ! r && e in t || (t[e] = n)
+            };
+            var b = function(t, e, n) {
+                for (var r in e) l.hasOwnProperty.call(e, r) && s(t, r, e[r], n)
+            },
+            y = function(t) {
+                if (null == t) throw new TypeError("can't convert " + t + " to object");
+                return Object(t)
+            };
+            b(u, {
+                bind: function(t) {
+                    var e = this;
+                    if (!d(e)) throw new TypeError("Function.prototype.bind called on incompatible " + e);
+                    for (var n = f.call(arguments, 1), r = function() {
+                        if (this instanceof l) {
+                            var r = e.apply(this, n.concat(f.call(arguments)));
+                            return Object(r) === r ? r: this
+                        }
+                        return e.apply(t, n.concat(f.call(arguments)))
+                    },
+                    i = Math.max(0, e.length - n.length), s = [], a = 0; a < i; a++) s.push("$" + a);
+                    var l = Function("binder", "return function (" + s.join(",") + "){ return binder.apply(this, arguments); }")(r);
+                    return e.prototype && (o.prototype = e.prototype, l.prototype = new o, o.prototype = null),
+                    l
+                }
+            }),
+            b(Array, {
+                isArray: p
+            });
+            var g = Object("a"),
+            w = "a" !== g[0] || !(0 in g);
+            b(a, {
+                forEach: function(t) {
+                    var e = y(this),
+                    n = w && v(this) ? this.split("") : e,
+                    r = arguments[1],
+                    i = -1,
+                    o = n.length >>> 0;
+                    if (!d(t)) throw new TypeError;
+                    for (; ++i < o;) i in n && t.call(r, n[i], i, e)
+                }
+            },
+            !
+            function(t) {
+                var e = !0,
+                n = !0;
+                return t && (t.call("foo",
+                function(t, n, r) {
+                    "object" != typeof r && (e = !1)
+                }), t.call([1],
+                function() {
+                    n = "string" == typeof this
+                },
+                "x")),
+                !!t && e && n
+            } (a.forEach));
+            var x = Array.prototype.indexOf && -1 !== [0, 1].indexOf(1, 2);
+            b(a, {
+                indexOf: function(t) {
+                    var e = w && v(this) ? this.split("") : y(this),
+                    n = e.length >>> 0;
+                    if (!n) return - 1;
+                    var i = 0;
+                    for (arguments.length > 1 && (i = r(arguments[1])), i = i >= 0 ? i: Math.max(0, n + i); i < n; i++) if (i in e && e[i] === t) return i;
+                    return - 1
+                }
+            },
+            x);
+            var _ = c.split;
+            2 !== "ab".split(/(?:ab)*/).length || 4 !== ".".split(/(.?)(.?)/).length || "t" === "tesst".split(/(s)*/)[1] || 4 !== "test".split(/(?:)/, -1).length || "".split(/.?/).length || ".".split(/()()/).length > 1 ?
+            function() {
+                var t = void 0 === /()??/.exec("")[1];
+                c.split = function(e, n) {
+                    var r = this;
+                    if (void 0 === e && 0 === n) return [];
+                    if ("[object RegExp]" !== h.call(e)) return _.call(this, e, n);
+                    var o, s, l, u, c = [],
+                    f = (e.ignoreCase ? "i": "") + (e.multiline ? "m": "") + (e.extended ? "x": "") + (e.sticky ? "y": ""),
+                    d = 0;
+                    for (e = new RegExp(e.source, f + "g"), r += "", t || (o = new RegExp("^" + e.source + "$(?!\\s)", f)), n = void 0 === n ? -1 >>> 0 : i(n); (s = e.exec(r)) && !((l = s.index + s[0].length) > d && (c.push(r.slice(d, s.index)), !t && s.length > 1 && s[0].replace(o,
+                    function() {
+                        for (var t = 1; t < arguments.length - 2; t++) void 0 === arguments[t] && (s[t] = void 0)
+                    }), s.length > 1 && s.index < r.length && a.push.apply(c, s.slice(1)), u = s[0].length, d = l, c.length >= n));) e.lastIndex === s.index && e.lastIndex++;
+                    return d === r.length ? !u && e.test("") || c.push("") : c.push(r.slice(d)),
+                    c.length > n ? c.slice(0, n) : c
+                }
+            } () : "0".split(void 0, 0).length && (c.split = function(t, e) {
+                return void 0 === t && 0 === e ? [] : _.call(this, t, e)
+            });
+            var E = c.substr,
+            j = "".substr && "b" !== "0b".substr( - 1);
+            b(c, {
+                substr: function(t, e) {
+                    return E.call(this, t < 0 && (t = this.length + t) < 0 ? 0 : t, e)
+                }
+            },
+            j)
+        },
+        {}],
+        16 : [function(t, e, n) {
+            "use strict";
+            e.exports = [t("./transport/websocket"), t("./transport/xhr-streaming"), t("./transport/xdr-streaming"), t("./transport/eventsource"), t("./transport/lib/iframe-wrap")(t("./transport/eventsource")), t("./transport/htmlfile"), t("./transport/lib/iframe-wrap")(t("./transport/htmlfile")), t("./transport/xhr-polling"), t("./transport/xdr-polling"), t("./transport/lib/iframe-wrap")(t("./transport/xhr-polling")), t("./transport/jsonp-polling")]
+        },
+        {
+            "./transport/eventsource": 20,
+            "./transport/htmlfile": 21,
+            "./transport/jsonp-polling": 23,
+            "./transport/lib/iframe-wrap": 26,
+            "./transport/websocket": 38,
+            "./transport/xdr-polling": 39,
+            "./transport/xdr-streaming": 40,
+            "./transport/xhr-polling": 41,
+            "./transport/xhr-streaming": 42
+        }],
+        17 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t, e, n, r) {
+                    var o = this;
+                    i.call(this),
+                    setTimeout(function() {
+                        o._start(t, e, n, r)
+                    },
+                    0)
+                }
+                var i = t("events").EventEmitter,
+                o = t("inherits"),
+                s = t("../../utils/event"),
+                a = t("../../utils/url"),
+                l = n.XMLHttpRequest;
+                o(r, i),
+                r.prototype._start = function(t, e, n, i) {
+                    var o = this;
+                    try {
+                        this.xhr = new l
+                    } catch(t) {}
+                    if (!this.xhr) return this.emit("finish", 0, "no xhr support"),
+                    void this._cleanup();
+                    e = a.addQuery(e, "t=" + +new Date),
+                    this.unloadRef = s.unloadAdd(function() {
+                        o._cleanup(!0)
+                    });
+                    try {
+                        this.xhr.open(t, e, !0),
+                        this.timeout && "timeout" in this.xhr && (this.xhr.timeout = this.timeout, this.xhr.ontimeout = function() {
+                            o.emit("finish", 0, ""),
+                            o._cleanup(!1)
+                        })
+                    } catch(t) {
+                        return this.emit("finish", 0, ""),
+                        void this._cleanup(!1)
+                    }
+                    if (i && i.noCredentials || !r.supportsCORS || (this.xhr.withCredentials = "true"), i && i.headers) for (var u in i.headers) this.xhr.setRequestHeader(u, i.headers[u]);
+                    this.xhr.onreadystatechange = function() {
+                        if (o.xhr) {
+                            var t, e, n = o.xhr;
+                            switch (n.readyState, n.readyState) {
+                            case 3:
+                                try {
+                                    e = n.status,
+                                    t = n.responseText
+                                } catch(t) {}
+                                1223 === e && (e = 204),
+                                200 === e && t && t.length > 0 && o.emit("chunk", e, t);
+                                break;
+                            case 4:
+                                e = n.status,
+                                1223 === e && (e = 204),
+                                12005 !== e && 12029 !== e || (e = 0),
+                                n.responseText,
+                                o.emit("finish", e, n.responseText),
+                                o._cleanup(!1)
+                            }
+                        }
+                    };
+                    try {
+                        o.xhr.send(n)
+                    } catch(t) {
+                        o.emit("finish", 0, ""),
+                        o._cleanup(!1)
+                    }
+                },
+                r.prototype._cleanup = function(t) {
+                    if (this.xhr) {
+                        if (this.removeAllListeners(), s.unloadDel(this.unloadRef), this.xhr.onreadystatechange = function() {},
+                        this.xhr.ontimeout && (this.xhr.ontimeout = null), t) try {
+                            this.xhr.abort()
+                        } catch(t) {}
+                        this.unloadRef = this.xhr = null
+                    }
+                },
+                r.prototype.close = function() {
+                    this._cleanup(!0)
+                },
+                r.enabled = !!l;
+                var u = ["Active"].concat("Object").join("X"); ! r.enabled && u in n && (l = function() {
+                    try {
+                        return new n[u]("Microsoft.XMLHTTP")
+                    } catch(t) {
+                        return null
+                    }
+                },
+                r.enabled = !!new l);
+                var c = !1;
+                try {
+                    c = "withCredentials" in new l
+                } catch(t) {}
+                r.supportsCORS = c,
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../../utils/event": 46,
+            "../../utils/url": 52,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        18 : [function(t, e, n) { (function(t) {
+                e.exports = t.EventSource
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        19 : [function(t, e, n) { (function(t) {
+                "use strict";
+                var n = t.WebSocket || t.MozWebSocket;
+                e.exports = n ?
+                function(t) {
+                    return new n(t)
+                }: void 0
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        20 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                if (!r.enabled()) throw new Error("Transport created when disabled");
+                o.call(this, t, "/eventsource", s, a)
+            }
+            var i = t("inherits"),
+            o = t("./lib/ajax-based"),
+            s = t("./receiver/eventsource"),
+            a = t("./sender/xhr-cors"),
+            l = t("eventsource");
+            i(r, o),
+            r.enabled = function() {
+                return !! l
+            },
+            r.transportName = "eventsource",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "./lib/ajax-based": 24,
+            "./receiver/eventsource": 29,
+            "./sender/xhr-cors": 35,
+            "eventsource": 18,
+            "inherits": 54
+        }],
+        21 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                if (!o.enabled) throw new Error("Transport created when disabled");
+                a.call(this, t, "/htmlfile", o, s)
+            }
+            var i = t("inherits"),
+            o = t("./receiver/htmlfile"),
+            s = t("./sender/xhr-local"),
+            a = t("./lib/ajax-based");
+            i(r, a),
+            r.enabled = function(t) {
+                return o.enabled && t.sameOrigin
+            },
+            r.transportName = "htmlfile",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "./lib/ajax-based": 24,
+            "./receiver/htmlfile": 30,
+            "./sender/xhr-local": 37,
+            "inherits": 54
+        }],
+        22 : [function(t, e, n) {
+            "use strict";
+            function r(t, e, n) {
+                if (!r.enabled()) throw new Error("Transport created when disabled");
+                s.call(this);
+                var i = this;
+                this.origin = l.getOrigin(n),
+                this.baseUrl = n,
+                this.transUrl = e,
+                this.transport = t,
+                this.windowId = f.string(8);
+                var o = l.addPath(n, "/iframe.html") + "#" + this.windowId;
+                this.iframeObj = u.createIframe(o,
+                function(t) {
+                    i.emit("close", 1006, "Unable to load an iframe (" + t + ")"),
+                    i.close()
+                }),
+                this.onmessageCallback = this._message.bind(this),
+                c.attachEvent("message", this.onmessageCallback)
+            }
+            var i = t("inherits"),
+            o = t("json3"),
+            s = t("events").EventEmitter,
+            a = t("../version"),
+            l = t("../utils/url"),
+            u = t("../utils/iframe"),
+            c = t("../utils/event"),
+            f = t("../utils/random");
+            i(r, s),
+            r.prototype.close = function() {
+                if (this.removeAllListeners(), this.iframeObj) {
+                    c.detachEvent("message", this.onmessageCallback);
+                    try {
+                        this.postMessage("c")
+                    } catch(t) {}
+                    this.iframeObj.cleanup(),
+                    this.iframeObj = null,
+                    this.onmessageCallback = this.iframeObj = null
+                }
+            },
+            r.prototype._message = function(t) {
+                if (t.data, !l.isOriginEqual(t.origin, this.origin)) return t.origin,
+                void this.origin;
+                var e;
+                try {
+                    e = o.parse(t.data)
+                } catch(e) {
+                    return void t.data
+                }
+                if (e.windowId !== this.windowId) return e.windowId,
+                void this.windowId;
+                switch (e.type) {
+                case "s":
+                    this.iframeObj.loaded(),
+                    this.postMessage("s", o.stringify([a, this.transport, this.transUrl, this.baseUrl]));
+                    break;
+                case "t":
+                    this.emit("message", e.data);
+                    break;
+                case "c":
+                    var n;
+                    try {
+                        n = o.parse(e.data)
+                    } catch(t) {
+                        return void e.data
+                    }
+                    this.emit("close", n[0], n[1]),
+                    this.close()
+                }
+            },
+            r.prototype.postMessage = function(t, e) {
+                this.iframeObj.post(o.stringify({
+                    windowId: this.windowId,
+                    type: t,
+                    data: e || ""
+                }), this.origin)
+            },
+            r.prototype.send = function(t) {
+                this.postMessage("m", t)
+            },
+            r.enabled = function() {
+                return u.iframeEnabled
+            },
+            r.transportName = "iframe",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "../utils/event": 46,
+            "../utils/iframe": 47,
+            "../utils/random": 50,
+            "../utils/url": 52,
+            "../version": 53,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54,
+            "json3": 55
+        }],
+        23 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t) {
+                    if (!r.enabled()) throw new Error("Transport created when disabled");
+                    o.call(this, t, "/jsonp", a, s)
+                }
+                var i = t("inherits"),
+                o = t("./lib/sender-receiver"),
+                s = t("./receiver/jsonp"),
+                a = t("./sender/jsonp");
+                i(r, o),
+                r.enabled = function() {
+                    return !! n.document
+                },
+                r.transportName = "jsonp-polling",
+                r.roundTrips = 1,
+                r.needBody = !0,
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./lib/sender-receiver": 28,
+            "./receiver/jsonp": 31,
+            "./sender/jsonp": 33,
+            "inherits": 54
+        }],
+        24 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                return function(e, n, r) {
+                    var i = {};
+                    "string" == typeof n && (i.headers = {
+                        "Content-type": "text/plain"
+                    });
+                    var o = s.addPath(e, "/xhr_send"),
+                    a = new t("POST", o, n, i);
+                    return a.once("finish",
+                    function(t) {
+                        if (a = null, 200 !== t && 204 !== t) return r(new Error("http status " + t));
+                        r()
+                    }),
+                    function() {
+                        a.close(),
+                        a = null;
+                        var t = new Error("Aborted");
+                        t.code = 1e3,
+                        r(t)
+                    }
+                }
+            }
+            function i(t, e, n, i) {
+                a.call(this, t, e, r(i), n, i)
+            }
+            var o = t("inherits"),
+            s = t("../../utils/url"),
+            a = t("./sender-receiver");
+            o(i, a),
+            e.exports = i
+        },
+        {
+            "../../utils/url": 52,
+            "./sender-receiver": 28,
+            "debug": void 0,
+            "inherits": 54
+        }],
+        25 : [function(t, e, n) {
+            "use strict";
+            function r(t, e) {
+                o.call(this),
+                this.sendBuffer = [],
+                this.sender = e,
+                this.url = t
+            }
+            var i = t("inherits"),
+            o = t("events").EventEmitter;
+            i(r, o),
+            r.prototype.send = function(t) {
+                this.sendBuffer.push(t),
+                this.sendStop || this.sendSchedule()
+            },
+            r.prototype.sendScheduleWait = function() {
+                var t, e = this;
+                this.sendStop = function() {
+                    e.sendStop = null,
+                    clearTimeout(t)
+                },
+                t = setTimeout(function() {
+                    e.sendStop = null,
+                    e.sendSchedule()
+                },
+                25)
+            },
+            r.prototype.sendSchedule = function() {
+                this.sendBuffer.length;
+                var t = this;
+                if (this.sendBuffer.length > 0) {
+                    var e = "[" + this.sendBuffer.join(",") + "]";
+                    this.sendStop = this.sender(this.url, e,
+                    function(e) {
+                        t.sendStop = null,
+                        e ? (t.emit("close", e.code || 1006, "Sending error: " + e), t.close()) : t.sendScheduleWait()
+                    }),
+                    this.sendBuffer = []
+                }
+            },
+            r.prototype._cleanup = function() {
+                this.removeAllListeners()
+            },
+            r.prototype.close = function() {
+                this._cleanup(),
+                this.sendStop && (this.sendStop(), this.sendStop = null)
+            },
+            e.exports = r
+        },
+        {
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        26 : [function(t, e, n) { (function(n) {
+                "use strict";
+                var r = t("inherits"),
+                i = t("../iframe"),
+                o = t("../../utils/object");
+                e.exports = function(t) {
+                    function e(e, n) {
+                        i.call(this, t.transportName, e, n)
+                    }
+                    return r(e, i),
+                    e.enabled = function(e, r) {
+                        if (!n.document) return ! 1;
+                        var s = o.extend({},
+                        r);
+                        return s.sameOrigin = !0,
+                        t.enabled(s) && i.enabled()
+                    },
+                    e.transportName = "iframe-" + t.transportName,
+                    e.needBody = !0,
+                    e.roundTrips = i.roundTrips + t.roundTrips - 1,
+                    e.facadeTransport = t,
+                    e
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../../utils/object": 49,
+            "../iframe": 22,
+            "inherits": 54
+        }],
+        27 : [function(t, e, n) {
+            "use strict";
+            function r(t, e, n) {
+                o.call(this),
+                this.Receiver = t,
+                this.receiveUrl = e,
+                this.AjaxObject = n,
+                this._scheduleReceiver()
+            }
+            var i = t("inherits"),
+            o = t("events").EventEmitter;
+            i(r, o),
+            r.prototype._scheduleReceiver = function() {
+                var t = this,
+                e = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);
+                e.on("message",
+                function(e) {
+                    t.emit("message", e)
+                }),
+                e.once("close",
+                function(n, r) {
+                    t.pollIsClosing,
+                    t.poll = e = null,
+                    t.pollIsClosing || ("network" === r ? t._scheduleReceiver() : (t.emit("close", n || 1006, r), t.removeAllListeners()))
+                })
+            },
+            r.prototype.abort = function() {
+                this.removeAllListeners(),
+                this.pollIsClosing = !0,
+                this.poll && this.poll.abort()
+            },
+            e.exports = r
+        },
+        {
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        28 : [function(t, e, n) {
+            "use strict";
+            function r(t, e, n, r, i) {
+                var l = o.addPath(t, e),
+                u = this;
+                s.call(this, t, n),
+                this.poll = new a(r, l, i),
+                this.poll.on("message",
+                function(t) {
+                    u.emit("message", t)
+                }),
+                this.poll.once("close",
+                function(t, e) {
+                    u.poll = null,
+                    u.emit("close", t, e),
+                    u.close()
+                })
+            }
+            var i = t("inherits"),
+            o = t("../../utils/url"),
+            s = t("./buffered-sender"),
+            a = t("./polling");
+            i(r, s),
+            r.prototype.close = function() {
+                s.prototype.close.call(this),
+                this.removeAllListeners(),
+                this.poll && (this.poll.abort(), this.poll = null)
+            },
+            e.exports = r
+        },
+        {
+            "../../utils/url": 52,
+            "./buffered-sender": 25,
+            "./polling": 27,
+            "debug": void 0,
+            "inherits": 54
+        }],
+        29 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                o.call(this);
+                var e = this,
+                n = this.es = new s(t);
+                n.onmessage = function(t) {
+                    t.data,
+                    e.emit("message", decodeURI(t.data))
+                },
+                n.onerror = function(t) {
+                    n.readyState;
+                    var r = 2 !== n.readyState ? "network": "permanent";
+                    e._cleanup(),
+                    e._close(r)
+                }
+            }
+            var i = t("inherits"),
+            o = t("events").EventEmitter,
+            s = t("eventsource");
+            i(r, o),
+            r.prototype.abort = function() {
+                this._cleanup(),
+                this._close("user")
+            },
+            r.prototype._cleanup = function() {
+                var t = this.es;
+                t && (t.onmessage = t.onerror = null, t.close(), this.es = null)
+            },
+            r.prototype._close = function(t) {
+                var e = this;
+                setTimeout(function() {
+                    e.emit("close", null, t),
+                    e.removeAllListeners()
+                },
+                200)
+            },
+            e.exports = r
+        },
+        {
+            "debug": void 0,
+            "events": 3,
+            "eventsource": 18,
+            "inherits": 54
+        }],
+        30 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t) {
+                    a.call(this);
+                    var e = this;
+                    o.polluteGlobalNamespace(),
+                    this.id = "a" + l.string(6),
+                    t = s.addQuery(t, "c=" + decodeURIComponent(o.WPrefix + "." + this.id)),
+                    r.htmlfileEnabled;
+                    var i = r.htmlfileEnabled ? o.createHtmlfile: o.createIframe;
+                    n[o.WPrefix][this.id] = {
+                        start: function() {
+                            e.iframeObj.loaded()
+                        },
+                        message: function(t) {
+                            e.emit("message", t)
+                        },
+                        stop: function() {
+                            e._cleanup(),
+                            e._close("network")
+                        }
+                    },
+                    this.iframeObj = i(t,
+                    function() {
+                        e._cleanup(),
+                        e._close("permanent")
+                    })
+                }
+                var i = t("inherits"),
+                o = t("../../utils/iframe"),
+                s = t("../../utils/url"),
+                a = t("events").EventEmitter,
+                l = t("../../utils/random");
+                i(r, a),
+                r.prototype.abort = function() {
+                    this._cleanup(),
+                    this._close("user")
+                },
+                r.prototype._cleanup = function() {
+                    this.iframeObj && (this.iframeObj.cleanup(), this.iframeObj = null),
+                    delete n[o.WPrefix][this.id]
+                },
+                r.prototype._close = function(t) {
+                    this.emit("close", null, t),
+                    this.removeAllListeners()
+                },
+                r.htmlfileEnabled = !1;
+                var u = ["Active"].concat("Object").join("X");
+                if (u in n) try {
+                    r.htmlfileEnabled = !!new n[u]("htmlfile")
+                } catch(t) {}
+                r.enabled = r.htmlfileEnabled || o.iframeEnabled,
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../../utils/iframe": 47,
+            "../../utils/random": 50,
+            "../../utils/url": 52,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        31 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t) {
+                    var e = this;
+                    u.call(this),
+                    i.polluteGlobalNamespace(),
+                    this.id = "a" + o.string(6);
+                    var s = a.addQuery(t, "c=" + encodeURIComponent(i.WPrefix + "." + this.id));
+                    n[i.WPrefix][this.id] = this._callback.bind(this),
+                    this._createScript(s),
+                    this.timeoutId = setTimeout(function() {
+                        e._abort(new Error("JSONP script loaded abnormally (timeout)"))
+                    },
+                    r.timeout)
+                }
+                var i = t("../../utils/iframe"),
+                o = t("../../utils/random"),
+                s = t("../../utils/browser"),
+                a = t("../../utils/url"),
+                l = t("inherits"),
+                u = t("events").EventEmitter;
+                l(r, u),
+                r.prototype.abort = function() {
+                    if (n[i.WPrefix][this.id]) {
+                        var t = new Error("JSONP user aborted read");
+                        t.code = 1e3,
+                        this._abort(t)
+                    }
+                },
+                r.timeout = 35e3,
+                r.scriptErrorTimeout = 1e3,
+                r.prototype._callback = function(t) {
+                    this._cleanup(),
+                    this.aborting || (t && this.emit("message", t), this.emit("close", null, "network"), this.removeAllListeners())
+                },
+                r.prototype._abort = function(t) {
+                    this._cleanup(),
+                    this.aborting = !0,
+                    this.emit("close", t.code, t.message),
+                    this.removeAllListeners()
+                },
+                r.prototype._cleanup = function() {
+                    if (clearTimeout(this.timeoutId), this.script2 && (this.script2.parentNode.removeChild(this.script2), this.script2 = null), this.script) {
+                        var t = this.script;
+                        t.parentNode.removeChild(t),
+                        t.onreadystatechange = t.onerror = t.onload = t.onclick = null,
+                        this.script = null
+                    }
+                    delete n[i.WPrefix][this.id]
+                },
+                r.prototype._scriptError = function() {
+                    var t = this;
+                    this.errorTimer || (this.errorTimer = setTimeout(function() {
+                        t.loadedOkay || t._abort(new Error("JSONP script loaded abnormally (onerror)"))
+                    },
+                    r.scriptErrorTimeout))
+                },
+                r.prototype._createScript = function(t) {
+                    var e, r = this,
+                    i = this.script = n.document.createElement("script");
+                    if (i.id = "a" + o.string(8), i.src = t, i.type = "text/javascript", i.charset = "UTF-8", i.onerror = this._scriptError.bind(this), i.onload = function() {
+                        r._abort(new Error("JSONP script loaded abnormally (onload)"))
+                    },
+                    i.onreadystatechange = function() {
+                        if (i.readyState, /loaded|closed/.test(i.readyState)) {
+                            if (i && i.htmlFor && i.onclick) {
+                                r.loadedOkay = !0;
+                                try {
+                                    i.onclick()
+                                } catch(t) {}
+                            }
+                            i && r._abort(new Error("JSONP script loaded abnormally (onreadystatechange)"))
+                        }
+                    },
+                    void 0 === i.async && n.document.attachEvent) if (s.isOpera()) e = this.script2 = n.document.createElement("script"),
+                    e.text = "try{var a = document.getElementById('" + i.id + "'); if(a)a.onerror();}catch(x){};",
+                    i.async = e.async = !1;
+                    else {
+                        try {
+                            i.htmlFor = i.id,
+                            i.event = "onclick"
+                        } catch(t) {}
+                        i.async = !0
+                    }
+                    void 0 !== i.async && (i.async = !0);
+                    var a = n.document.getElementsByTagName("head")[0];
+                    a.insertBefore(i, a.firstChild),
+                    e && a.insertBefore(e, a.firstChild)
+                },
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../../utils/browser": 44,
+            "../../utils/iframe": 47,
+            "../../utils/random": 50,
+            "../../utils/url": 52,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        32 : [function(t, e, n) {
+            "use strict";
+            function r(t, e) {
+                o.call(this);
+                var n = this;
+                this.bufferPosition = 0,
+                this.xo = new e("POST", t, null),
+                this.xo.on("chunk", this._chunkHandler.bind(this)),
+                this.xo.once("finish",
+                function(t, e) {
+                    n._chunkHandler(t, e),
+                    n.xo = null;
+                    var r = 200 === t ? "network": "permanent";
+                    n.emit("close", null, r),
+                    n._cleanup()
+                })
+            }
+            var i = t("inherits"),
+            o = t("events").EventEmitter;
+            i(r, o),
+            r.prototype._chunkHandler = function(t, e) {
+                if (200 === t && e) for (var n = -1;; this.bufferPosition += n + 1) {
+                    var r = e.slice(this.bufferPosition);
+                    if ( - 1 === (n = r.indexOf("\n"))) break;
+                    var i = r.slice(0, n);
+                    i && this.emit("message", i)
+                }
+            },
+            r.prototype._cleanup = function() {
+                this.removeAllListeners()
+            },
+            r.prototype.abort = function() {
+                this.xo && (this.xo.close(), this.emit("close", null, "user"), this.xo = null),
+                this._cleanup()
+            },
+            e.exports = r
+        },
+        {
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        33 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t) {
+                    try {
+                        return n.document.createElement('<iframe name="' + t + '">')
+                    } catch(r) {
+                        var e = n.document.createElement("iframe");
+                        return e.name = t,
+                        e
+                    }
+                }
+                function i() {
+                    o = n.document.createElement("form"),
+                    o.style.display = "none",
+                    o.style.position = "absolute",
+                    o.method = "POST",
+                    o.enctype = "application/x-www-form-urlencoded",
+                    o.acceptCharset = "UTF-8",
+                    s = n.document.createElement("textarea"),
+                    s.name = "d",
+                    o.appendChild(s),
+                    n.document.body.appendChild(o)
+                }
+                var o, s, a = t("../../utils/random"),
+                l = t("../../utils/url");
+                e.exports = function(t, e, n) {
+                    o || i();
+                    var u = "a" + a.string(8);
+                    o.target = u,
+                    o.action = l.addQuery(l.addPath(t, "/jsonp_send"), "i=" + u);
+                    var c = r(u);
+                    c.id = u,
+                    c.style.display = "none",
+                    o.appendChild(c);
+                    try {
+                        s.value = e
+                    } catch(t) {}
+                    o.submit();
+                    var f = function(t) {
+                        c.onerror && (c.onreadystatechange = c.onerror = c.onload = null, setTimeout(function() {
+                            c.parentNode.removeChild(c),
+                            c = null
+                        },
+                        500), s.value = "", n(t))
+                    };
+                    return c.onerror = function() {
+                        f()
+                    },
+                    c.onload = function() {
+                        f()
+                    },
+                    c.onreadystatechange = function(t) {
+                        c.readyState,
+                        "complete" === c.readyState && f()
+                    },
+                    function() {
+                        f(new Error("Aborted"))
+                    }
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../../utils/random": 50,
+            "../../utils/url": 52,
+            "debug": void 0
+        }],
+        34 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t, e, n) {
+                    var r = this;
+                    i.call(this),
+                    setTimeout(function() {
+                        r._start(t, e, n)
+                    },
+                    0)
+                }
+                var i = t("events").EventEmitter,
+                o = t("inherits"),
+                s = t("../../utils/event"),
+                a = t("../../utils/browser"),
+                l = t("../../utils/url");
+                o(r, i),
+                r.prototype._start = function(t, e, r) {
+                    var i = this,
+                    o = new n.XDomainRequest;
+                    e = l.addQuery(e, "t=" + +new Date),
+                    o.onerror = function() {
+                        i._error()
+                    },
+                    o.ontimeout = function() {
+                        i._error()
+                    },
+                    o.onprogress = function() {
+                        o.responseText,
+                        i.emit("chunk", 200, o.responseText)
+                    },
+                    o.onload = function() {
+                        i.emit("finish", 200, o.responseText),
+                        i._cleanup(!1)
+                    },
+                    this.xdr = o,
+                    this.unloadRef = s.unloadAdd(function() {
+                        i._cleanup(!0)
+                    });
+                    try {
+                        this.xdr.open(t, e),
+                        this.timeout && (this.xdr.timeout = this.timeout),
+                        this.xdr.send(r)
+                    } catch(t) {
+                        this._error()
+                    }
+                },
+                r.prototype._error = function() {
+                    this.emit("finish", 0, ""),
+                    this._cleanup(!1)
+                },
+                r.prototype._cleanup = function(t) {
+                    if (this.xdr) {
+                        if (this.removeAllListeners(), s.unloadDel(this.unloadRef), this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null, t) try {
+                            this.xdr.abort()
+                        } catch(t) {}
+                        this.unloadRef = this.xdr = null
+                    }
+                },
+                r.prototype.close = function() {
+                    this._cleanup(!0)
+                },
+                r.enabled = !(!n.XDomainRequest || !a.hasDomain()),
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../../utils/browser": 44,
+            "../../utils/event": 46,
+            "../../utils/url": 52,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        35 : [function(t, e, n) {
+            "use strict";
+            function r(t, e, n, r) {
+                o.call(this, t, e, n, r)
+            }
+            var i = t("inherits"),
+            o = t("../driver/xhr");
+            i(r, o),
+            r.enabled = o.enabled && o.supportsCORS,
+            e.exports = r
+        },
+        {
+            "../driver/xhr": 17,
+            "inherits": 54
+        }],
+        36 : [function(t, e, n) {
+            "use strict";
+            function r() {
+                var t = this;
+                i.call(this),
+                this.to = setTimeout(function() {
+                    t.emit("finish", 200, "{}")
+                },
+                r.timeout)
+            }
+            var i = t("events").EventEmitter;
+            t("inherits")(r, i),
+            r.prototype.close = function() {
+                clearTimeout(this.to)
+            },
+            r.timeout = 2e3,
+            e.exports = r
+        },
+        {
+            "events": 3,
+            "inherits": 54
+        }],
+        37 : [function(t, e, n) {
+            "use strict";
+            function r(t, e, n) {
+                o.call(this, t, e, n, {
+                    noCredentials: !0
+                })
+            }
+            var i = t("inherits"),
+            o = t("../driver/xhr");
+            i(r, o),
+            r.enabled = o.enabled,
+            e.exports = r
+        },
+        {
+            "../driver/xhr": 17,
+            "inherits": 54
+        }],
+        38 : [function(t, e, n) {
+            "use strict";
+            function r(t, e, n) {
+                if (!r.enabled()) throw new Error("Transport created when disabled");
+                a.call(this);
+                var s = this,
+                u = o.addPath(t, "/websocket");
+                u = "https" === u.slice(0, 5) ? "wss" + u.slice(5) : "ws" + u.slice(4),
+                this.url = u,
+                this.ws = new l(this.url, [], n),
+                this.ws.onmessage = function(t) {
+                    t.data,
+                    s.emit("message", t.data)
+                },
+                this.unloadRef = i.unloadAdd(function() {
+                    s.ws.close()
+                }),
+                this.ws.onclose = function(t) {
+                    t.code,
+                    t.reason,
+                    s.emit("close", t.code, t.reason),
+                    s._cleanup()
+                },
+                this.ws.onerror = function(t) {
+                    s.emit("close", 1006, "WebSocket connection broken"),
+                    s._cleanup()
+                }
+            }
+            var i = t("../utils/event"),
+            o = t("../utils/url"),
+            s = t("inherits"),
+            a = t("events").EventEmitter,
+            l = t("./driver/websocket");
+            s(r, a),
+            r.prototype.send = function(t) {
+                var e = "[" + t + "]";
+                this.ws.send(e)
+            },
+            r.prototype.close = function() {
+                var t = this.ws;
+                this._cleanup(),
+                t && t.close()
+            },
+            r.prototype._cleanup = function() {
+                var t = this.ws;
+                t && (t.onmessage = t.onclose = t.onerror = null),
+                i.unloadDel(this.unloadRef),
+                this.unloadRef = this.ws = null,
+                this.removeAllListeners()
+            },
+            r.enabled = function() {
+                return !! l
+            },
+            r.transportName = "websocket",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "../utils/event": 46,
+            "../utils/url": 52,
+            "./driver/websocket": 19,
+            "debug": void 0,
+            "events": 3,
+            "inherits": 54
+        }],
+        39 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                if (!l.enabled) throw new Error("Transport created when disabled");
+                o.call(this, t, "/xhr", a, l)
+            }
+            var i = t("inherits"),
+            o = t("./lib/ajax-based"),
+            s = t("./xdr-streaming"),
+            a = t("./receiver/xhr"),
+            l = t("./sender/xdr");
+            i(r, o),
+            r.enabled = s.enabled,
+            r.transportName = "xdr-polling",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "./lib/ajax-based": 24,
+            "./receiver/xhr": 32,
+            "./sender/xdr": 34,
+            "./xdr-streaming": 40,
+            "inherits": 54
+        }],
+        40 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                if (!a.enabled) throw new Error("Transport created when disabled");
+                o.call(this, t, "/xhr_streaming", s, a)
+            }
+            var i = t("inherits"),
+            o = t("./lib/ajax-based"),
+            s = t("./receiver/xhr"),
+            a = t("./sender/xdr");
+            i(r, o),
+            r.enabled = function(t) {
+                return ! t.cookie_needed && !t.nullOrigin && (a.enabled && t.sameScheme)
+            },
+            r.transportName = "xdr-streaming",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "./lib/ajax-based": 24,
+            "./receiver/xhr": 32,
+            "./sender/xdr": 34,
+            "inherits": 54
+        }],
+        41 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                if (!l.enabled && !a.enabled) throw new Error("Transport created when disabled");
+                o.call(this, t, "/xhr", s, a)
+            }
+            var i = t("inherits"),
+            o = t("./lib/ajax-based"),
+            s = t("./receiver/xhr"),
+            a = t("./sender/xhr-cors"),
+            l = t("./sender/xhr-local");
+            i(r, o),
+            r.enabled = function(t) {
+                return ! t.nullOrigin && (!(!l.enabled || !t.sameOrigin) || a.enabled)
+            },
+            r.transportName = "xhr-polling",
+            r.roundTrips = 2,
+            e.exports = r
+        },
+        {
+            "./lib/ajax-based": 24,
+            "./receiver/xhr": 32,
+            "./sender/xhr-cors": 35,
+            "./sender/xhr-local": 37,
+            "inherits": 54
+        }],
+        42 : [function(t, e, n) { (function(n) {
+                "use strict";
+                function r(t) {
+                    if (!l.enabled && !a.enabled) throw new Error("Transport created when disabled");
+                    o.call(this, t, "/xhr_streaming", s, a)
+                }
+                var i = t("inherits"),
+                o = t("./lib/ajax-based"),
+                s = t("./receiver/xhr"),
+                a = t("./sender/xhr-cors"),
+                l = t("./sender/xhr-local"),
+                u = t("../utils/browser");
+                i(r, o),
+                r.enabled = function(t) {
+                    return ! t.nullOrigin && (!u.isOpera() && a.enabled)
+                },
+                r.transportName = "xhr-streaming",
+                r.roundTrips = 2,
+                r.needBody = !!n.document,
+                e.exports = r
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "../utils/browser": 44,
+            "./lib/ajax-based": 24,
+            "./receiver/xhr": 32,
+            "./sender/xhr-cors": 35,
+            "./sender/xhr-local": 37,
+            "inherits": 54
+        }],
+        43 : [function(t, e, n) { (function(t) {
+                "use strict";
+                t.crypto && t.crypto.getRandomValues ? e.exports.randomBytes = function(e) {
+                    var n = new Uint8Array(e);
+                    return t.crypto.getRandomValues(n),
+                    n
+                }: e.exports.randomBytes = function(t) {
+                    for (var e = new Array(t), n = 0; n < t; n++) e[n] = Math.floor(256 * Math.random());
+                    return e
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        44 : [function(t, e, n) { (function(t) {
+                "use strict";
+                e.exports = {
+                    isOpera: function() {
+                        return t.navigator && /opera/i.test(t.navigator.userAgent)
+                    },
+                    isKonqueror: function() {
+                        return t.navigator && /konqueror/i.test(t.navigator.userAgent)
+                    },
+                    hasDomain: function() {
+                        if (!t.document) return ! 0;
+                        try {
+                            return !! t.document.domain
+                        } catch(t) {
+                            return ! 1
+                        }
+                    }
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        45 : [function(t, e, n) {
+            "use strict";
+            var r, i = t("json3"),
+            o = /[\x00-\x1f\ud800-\udfff\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e\ufff0-\uffff]/g,
+            s = function(t) {
+                var e, n = {},
+                r = [];
+                for (e = 0; e < 65536; e++) r.push(String.fromCharCode(e));
+                return t.lastIndex = 0,
+                r.join("").replace(t,
+                function(t) {
+                    return n[t] = "\\u" + ("0000" + t.charCodeAt(0).toString(16)).slice( - 4),
+                    ""
+                }),
+                t.lastIndex = 0,
+                n
+            };
+            e.exports = {
+                quote: function(t) {
+                    var e = i.stringify(t);
+                    return o.lastIndex = 0,
+                    o.test(e) ? (r || (r = s(o)), e.replace(o,
+                    function(t) {
+                        return r[t]
+                    })) : e
+                }
+            }
+        },
+        {
+            "json3": 55
+        }],
+        46 : [function(t, e, n) { (function(n) {
+                "use strict";
+                var r = t("./random"),
+                i = {},
+                o = !1,
+                s = n.chrome && n.chrome.app && n.chrome.app.runtime;
+                e.exports = {
+                    attachEvent: function(t, e) {
+                        void 0 !== n.addEventListener ? n.addEventListener(t, e, !1) : n.document && n.attachEvent && (n.document.attachEvent("on" + t, e), n.attachEvent("on" + t, e))
+                    },
+                    detachEvent: function(t, e) {
+                        void 0 !== n.addEventListener ? n.removeEventListener(t, e, !1) : n.document && n.detachEvent && (n.document.detachEvent("on" + t, e), n.detachEvent("on" + t, e))
+                    },
+                    unloadAdd: function(t) {
+                        if (s) return null;
+                        var e = r.string(8);
+                        return i[e] = t,
+                        o && setTimeout(this.triggerUnloadCallbacks, 0),
+                        e
+                    },
+                    unloadDel: function(t) {
+                        t in i && delete i[t]
+                    },
+                    triggerUnloadCallbacks: function() {
+                        for (var t in i) i[t](),
+                        delete i[t]
+                    }
+                };
+                var a = function() {
+                    o || (o = !0, e.exports.triggerUnloadCallbacks())
+                };
+                s || e.exports.attachEvent("unload", a)
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./random": 50
+        }],
+        47 : [function(t, e, n) { (function(n) {
+                "use strict";
+                var r = t("./event"),
+                i = t("json3"),
+                o = t("./browser");
+                e.exports = {
+                    WPrefix: "_jp",
+                    currentWindowId: null,
+                    polluteGlobalNamespace: function() {
+                        e.exports.WPrefix in n || (n[e.exports.WPrefix] = {})
+                    },
+                    postMessage: function(t, r) {
+                        n.parent !== n && n.parent.postMessage(i.stringify({
+                            windowId: e.exports.currentWindowId,
+                            type: t,
+                            data: r || ""
+                        }), "*")
+                    },
+                    createIframe: function(t, e) {
+                        var i, o, s = n.document.createElement("iframe"),
+                        a = function() {
+                            clearTimeout(i);
+                            try {
+                                s.onload = null
+                            } catch(t) {}
+                            s.onerror = null
+                        },
+                        l = function() {
+                            s && (a(), setTimeout(function() {
+                                s && s.parentNode.removeChild(s),
+                                s = null
+                            },
+                            0), r.unloadDel(o))
+                        },
+                        u = function(t) {
+                            s && (l(), e(t))
+                        },
+                        c = function(t, e) {
+                            try {
+                                setTimeout(function() {
+                                    s && s.contentWindow && s.contentWindow.postMessage(t, e)
+                                },
+                                0)
+                            } catch(t) {}
+                        };
+                        return s.src = t,
+                        s.style.display = "none",
+                        s.style.position = "absolute",
+                        s.onerror = function() {
+                            u("onerror")
+                        },
+                        s.onload = function() {
+                            clearTimeout(i),
+                            i = setTimeout(function() {
+                                u("onload timeout")
+                            },
+                            2e3)
+                        },
+                        n.document.body.appendChild(s),
+                        i = setTimeout(function() {
+                            u("timeout")
+                        },
+                        15e3),
+                        o = r.unloadAdd(l),
+                        {
+                            post: c,
+                            cleanup: l,
+                            loaded: a
+                        }
+                    },
+                    createHtmlfile: function(t, i) {
+                        var o, s, a, l = ["Active"].concat("Object").join("X"),
+                        u = new n[l]("htmlfile"),
+                        c = function() {
+                            clearTimeout(o),
+                            a.onerror = null
+                        },
+                        f = function() {
+                            u && (c(), r.unloadDel(s), a.parentNode.removeChild(a), a = u = null, CollectGarbage())
+                        },
+                        h = function(t) {
+                            u && (f(), i(t))
+                        },
+                        d = function(t, e) {
+                            try {
+                                setTimeout(function() {
+                                    a && a.contentWindow && a.contentWindow.postMessage(t, e)
+                                },
+                                0)
+                            } catch(t) {}
+                        };
+                        u.open(),
+                        u.write('<html><script>document.domain="' + n.document.domain + '";<\/script></html>'),
+                        u.close(),
+                        u.parentWindow[e.exports.WPrefix] = n[e.exports.WPrefix];
+                        var p = u.createElement("div");
+                        return u.body.appendChild(p),
+                        a = u.createElement("iframe"),
+                        p.appendChild(a),
+                        a.src = t,
+                        a.onerror = function() {
+                            h("onerror")
+                        },
+                        o = setTimeout(function() {
+                            h("timeout")
+                        },
+                        15e3),
+                        s = r.unloadAdd(f),
+                        {
+                            post: d,
+                            cleanup: f,
+                            loaded: c
+                        }
+                    }
+                },
+                e.exports.iframeEnabled = !1,
+                n.document && (e.exports.iframeEnabled = ("function" == typeof n.postMessage || "object" == typeof n.postMessage) && !o.isKonqueror())
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./browser": 44,
+            "./event": 46,
+            "debug": void 0,
+            "json3": 55
+        }],
+        48 : [function(t, e, n) { (function(t) {
+                "use strict";
+                var n = {}; ["log", "debug", "warn"].forEach(function(e) {
+                    var r;
+                    try {
+                        r = t.console && t.console[e] && t.console[e].apply
+                    } catch(t) {}
+                    n[e] = r ?
+                    function() {
+                        return t.console[e].apply(t.console, arguments)
+                    }: "log" === e ?
+                    function() {}: n.log
+                }),
+                e.exports = n
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        49 : [function(t, e, n) {
+            "use strict";
+            e.exports = {
+                isObject: function(t) {
+                    var e = typeof t;
+                    return "function" === e || "object" === e && !!t
+                },
+                extend: function(t) {
+                    if (!this.isObject(t)) return t;
+                    for (var e, n, r = 1,
+                    i = arguments.length; r < i; r++) {
+                        e = arguments[r];
+                        for (n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n])
+                    }
+                    return t
+                }
+            }
+        },
+        {}],
+        50 : [function(t, e, n) {
+            "use strict";
+            var r = t("crypto"),
+            i = "abcdefghijklmnopqrstuvwxyz012345";
+            e.exports = {
+                string: function(t) {
+                    for (var e = i.length,
+                    n = r.randomBytes(t), o = [], s = 0; s < t; s++) o.push(i.substr(n[s] % e, 1));
+                    return o.join("")
+                },
+                number: function(t) {
+                    return Math.floor(Math.random() * t)
+                },
+                numberString: function(t) {
+                    var e = ("" + (t - 1)).length;
+                    return (new Array(e + 1).join("0") + this.number(t)).slice( - e)
+                }
+            }
+        },
+        {
+            "crypto": 43
+        }],
+        51 : [function(t, e, n) {
+            "use strict";
+            e.exports = function(t) {
+                return {
+                    filterToEnabled: function(e, n) {
+                        var r = {
+                            main: [],
+                            facade: []
+                        };
+                        return e ? "string" == typeof e && (e = [e]) : e = [],
+                        t.forEach(function(t) {
+                            if (t && ("websocket" !== t.transportName || !1 !== n.websocket)) return e.length && -1 === e.indexOf(t.transportName) ? void t.transportName: void(t.enabled(n) ? (t.transportName, r.main.push(t), t.facadeTransport && r.facade.push(t.facadeTransport)) : t.transportName)
+                        }),
+                        r
+                    }
+                }
+            }
+        },
+        {
+            "debug": void 0
+        }],
+        52 : [function(t, e, n) {
+            "use strict";
+            var r = t("url-parse");
+            e.exports = {
+                getOrigin: function(t) {
+                    if (!t) return null;
+                    var e = new r(t);
+                    if ("file:" === e.protocol) return null;
+                    var n = e.port;
+                    return n || (n = "https:" === e.protocol ? "443": "80"),
+                    e.protocol + "//" + e.hostname + ":" + n
+                },
+                isOriginEqual: function(t, e) {
+                    var n = this.getOrigin(t) === this.getOrigin(e);
+                    return n
+                },
+                isSchemeEqual: function(t, e) {
+                    return t.split(":")[0] === e.split(":")[0]
+                },
+                addPath: function(t, e) {
+                    var n = t.split("?");
+                    return n[0] + e + (n[1] ? "?" + n[1] : "")
+                },
+                addQuery: function(t, e) {
+                    return t + ( - 1 === t.indexOf("?") ? "?" + e: "&" + e)
+                }
+            }
+        },
+        {
+            "debug": void 0,
+            "url-parse": 58
+        }],
+        53 : [function(t, e, n) {
+            e.exports = "1.1.4"
+        },
+        {}],
+        54 : [function(t, e, n) {
+            "function" == typeof Object.create ? e.exports = function(t, e) {
+                t.super_ = e,
+                t.prototype = Object.create(e.prototype, {
+                    constructor: {
+                        value: t,
+                        enumerable: !1,
+                        writable: !0,
+                        configurable: !0
+                    }
+                })
+            }: e.exports = function(t, e) {
+                t.super_ = e;
+                var n = function() {};
+                n.prototype = e.prototype,
+                t.prototype = new n,
+                t.prototype.constructor = t
+            }
+        },
+        {}],
+        55 : [function(e, n, r) { (function(e) { (function() {
+                    function i(t, e) {
+                        function n(t) {
+                            if (n[t] !== m) return n[t];
+                            var i;
+                            if ("bug-string-char-index" == t) i = "a" != "a" [0];
+                            else if ("json" == t) i = n("json-stringify") && n("json-parse");
+                            else {
+                                var s, a = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
+                                if ("json-stringify" == t) {
+                                    var l = e.stringify,
+                                    c = "function" == typeof l && g;
+                                    if (c) { (s = function() {
+                                            return 1
+                                        }).toJSON = s;
+                                        try {
+                                            c = "0" === l(0) && "0" === l(new r) && '""' == l(new o) && l(y) === m && l(m) === m && l() === m && "1" === l(s) && "[1]" == l([s]) && "[null]" == l([m]) && "null" == l(null) && "[null,null,null]" == l([m, y, null]) && l({
+                                                "a": [s, !0, !1, null, "\0\b\n\f\r\t"]
+                                            }) == a && "1" === l(null, s) && "[\n 1,\n 2\n]" == l([1, 2], null, 1) && '"-271821-04-20T00:00:00.000Z"' == l(new u( - 864e13)) && '"+275760-09-13T00:00:00.000Z"' == l(new u(864e13)) && '"-000001-01-01T00:00:00.000Z"' == l(new u( - 621987552e5)) && '"1969-12-31T23:59:59.999Z"' == l(new u( - 1))
+                                        } catch(t) {
+                                            c = !1
+                                        }
+                                    }
+                                    i = c
+                                }
+                                if ("json-parse" == t) {
+                                    var f = e.parse;
+                                    if ("function" == typeof f) try {
+                                        if (0 === f("0") && !f(!1)) {
+                                            s = f(a);
+                                            var h = 5 == s.a.length && 1 === s.a[0];
+                                            if (h) {
+                                                try {
+                                                    h = !f('"\t"')
+                                                } catch(t) {}
+                                                if (h) try {
+                                                    h = 1 !== f("01")
+                                                } catch(t) {}
+                                                if (h) try {
+                                                    h = 1 !== f("1.")
+                                                } catch(t) {}
+                                            }
+                                        }
+                                    } catch(t) {
+                                        h = !1
+                                    }
+                                    i = h
+                                }
+                            }
+                            return n[t] = !!i
+                        }
+                        t || (t = l.Object()),
+                        e || (e = l.Object());
+                        var r = t.Number || l.Number,
+                        o = t.String || l.String,
+                        a = t.Object || l.Object,
+                        u = t.Date || l.Date,
+                        c = t.SyntaxError || l.SyntaxError,
+                        f = t.TypeError || l.TypeError,
+                        h = t.Math || l.Math,
+                        d = t.JSON || l.JSON;
+                        "object" == typeof d && d && (e.stringify = d.stringify, e.parse = d.parse);
+                        var p, v, m, b = a.prototype,
+                        y = b.toString,
+                        g = new u( - 0xc782b5b800cec);
+                        try {
+                            g = -109252 == g.getUTCFullYear() && 0 === g.getUTCMonth() && 1 === g.getUTCDate() && 10 == g.getUTCHours() && 37 == g.getUTCMinutes() && 6 == g.getUTCSeconds() && 708 == g.getUTCMilliseconds()
+                        } catch(t) {}
+                        if (!n("json")) {
+                            var w = n("bug-string-char-index");
+                            if (!g) var x = h.floor,
+                            _ = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
+                            E = function(t, e) {
+                                return _[e] + 365 * (t - 1970) + x((t - 1969 + (e = +(e > 1))) / 4) - x((t - 1901 + e) / 100) + x((t - 1601 + e) / 400)
+                            };
+                            if ((p = b.hasOwnProperty) || (p = function(t) {
+                                var e, n = {};
+                                return (n.__proto__ = null, n.__proto__ = {
+                                    "toString": 1
+                                },
+                                n).toString != y ? p = function(t) {
+                                    var e = this.__proto__,
+                                    n = t in (this.__proto__ = null, this);
+                                    return this.__proto__ = e,
+                                    n
+                                }: (e = n.constructor, p = function(t) {
+                                    var n = (this.constructor || e).prototype;
+                                    return t in this && !(t in n && this[t] === n[t])
+                                }),
+                                n = null,
+                                p.call(this, t)
+                            }), v = function(t, e) {
+                                var n, r, i, o = 0; (n = function() {
+                                    this.valueOf = 0
+                                }).prototype.valueOf = 0,
+                                r = new n;
+                                for (i in r) p.call(r, i) && o++;
+                                return n = r = null,
+                                o ? v = 2 == o ?
+                                function(t, e) {
+                                    var n, r = {},
+                                    i = "[object Function]" == y.call(t);
+                                    for (n in t) i && "prototype" == n || p.call(r, n) || !(r[n] = 1) || !p.call(t, n) || e(n)
+                                }: function(t, e) {
+                                    var n, r, i = "[object Function]" == y.call(t);
+                                    for (n in t) i && "prototype" == n || !p.call(t, n) || (r = "constructor" === n) || e(n); (r || p.call(t, n = "constructor")) && e(n)
+                                }: (r = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"], v = function(t, e) {
+                                    var n, i, o = "[object Function]" == y.call(t),
+                                    a = !o && "function" != typeof t.constructor && s[typeof t.hasOwnProperty] && t.hasOwnProperty || p;
+                                    for (n in t) o && "prototype" == n || !a.call(t, n) || e(n);
+                                    for (i = r.length; n = r[--i]; a.call(t, n) && e(n));
+                                }),
+                                v(t, e)
+                            },
+                            !n("json-stringify")) {
+                                var j = {
+                                    92 : "\\\\",
+                                    34 : '\\"',
+                                    8 : "\\b",
+                                    12 : "\\f",
+                                    10 : "\\n",
+                                    13 : "\\r",
+                                    9 : "\\t"
+                                },
+                                S = function(t, e) {
+                                    return ("000000" + (e || 0)).slice( - t)
+                                },
+                                T = function(t) {
+                                    for (var e = '"',
+                                    n = 0,
+                                    r = t.length,
+                                    i = !w || r > 10,
+                                    o = i && (w ? t.split("") : t); n < r; n++) {
+                                        var s = t.charCodeAt(n);
+                                        switch (s) {
+                                        case 8:
+                                        case 9:
+                                        case 10:
+                                        case 12:
+                                        case 13:
+                                        case 34:
+                                        case 92:
+                                            e += j[s];
+                                            break;
+                                        default:
+                                            if (s < 32) {
+                                                e += "\\u00" + S(2, s.toString(16));
+                                                break
+                                            }
+                                            e += i ? o[n] : t.charAt(n)
+                                        }
+                                    }
+                                    return e + '"'
+                                },
+                                O = function(t, e, n, r, i, o, s) {
+                                    var a, l, u, c, h, d, b, g, w, _, j, C, N, A, k, I;
+                                    try {
+                                        a = e[t]
+                                    } catch(t) {}
+                                    if ("object" == typeof a && a) if ("[object Date]" != (l = y.call(a)) || p.call(a, "toJSON"))"function" == typeof a.toJSON && ("[object Number]" != l && "[object String]" != l && "[object Array]" != l || p.call(a, "toJSON")) && (a = a.toJSON(t));
+                                    else if (a > -1 / 0 && a < 1 / 0) {
+                                        if (E) {
+                                            for (h = x(a / 864e5), u = x(h / 365.2425) + 1970 - 1; E(u + 1, 0) <= h; u++);
+                                            for (c = x((h - E(u, 0)) / 30.42); E(u, c + 1) <= h; c++);
+                                            h = 1 + h - E(u, c),
+                                            d = (a % 864e5 + 864e5) % 864e5,
+                                            b = x(d / 36e5) % 24,
+                                            g = x(d / 6e4) % 60,
+                                            w = x(d / 1e3) % 60,
+                                            _ = d % 1e3
+                                        } else u = a.getUTCFullYear(),
+                                        c = a.getUTCMonth(),
+                                        h = a.getUTCDate(),
+                                        b = a.getUTCHours(),
+                                        g = a.getUTCMinutes(),
+                                        w = a.getUTCSeconds(),
+                                        _ = a.getUTCMilliseconds();
+                                        a = (u <= 0 || u >= 1e4 ? (u < 0 ? "-": "+") + S(6, u < 0 ? -u: u) : S(4, u)) + "-" + S(2, c + 1) + "-" + S(2, h) + "T" + S(2, b) + ":" + S(2, g) + ":" + S(2, w) + "." + S(3, _) + "Z"
+                                    } else a = null;
+                                    if (n && (a = n.call(e, t, a)), null === a) return "null";
+                                    if ("[object Boolean]" == (l = y.call(a))) return "" + a;
+                                    if ("[object Number]" == l) return a > -1 / 0 && a < 1 / 0 ? "" + a: "null";
+                                    if ("[object String]" == l) return T("" + a);
+                                    if ("object" == typeof a) {
+                                        for (A = s.length; A--;) if (s[A] === a) throw f();
+                                        if (s.push(a), j = [], k = o, o += i, "[object Array]" == l) {
+                                            for (N = 0, A = a.length; N < A; N++) C = O(N, a, n, r, i, o, s),
+                                            j.push(C === m ? "null": C);
+                                            I = j.length ? i ? "[\n" + o + j.join(",\n" + o) + "\n" + k + "]": "[" + j.join(",") + "]": "[]"
+                                        } else v(r || a,
+                                        function(t) {
+                                            var e = O(t, a, n, r, i, o, s);
+                                            e !== m && j.push(T(t) + ":" + (i ? " ": "") + e)
+                                        }),
+                                        I = j.length ? i ? "{\n" + o + j.join(",\n" + o) + "\n" + k + "}": "{" + j.join(",") + "}": "{}";
+                                        return s.pop(),
+                                        I
+                                    }
+                                };
+                                e.stringify = function(t, e, n) {
+                                    var r, i, o, a;
+                                    if (s[typeof e] && e) if ("[object Function]" == (a = y.call(e))) i = e;
+                                    else if ("[object Array]" == a) {
+                                        o = {};
+                                        for (var l, u = 0,
+                                        c = e.length; u < c; l = e[u++], ("[object String]" == (a = y.call(l)) || "[object Number]" == a) && (o[l] = 1));
+                                    }
+                                    if (n) if ("[object Number]" == (a = y.call(n))) {
+                                        if ((n -= n % 1) > 0) for (r = "", n > 10 && (n = 10); r.length < n; r += " ");
+                                    } else "[object String]" == a && (r = n.length <= 10 ? n: n.slice(0, 10));
+                                    return O("", (l = {},
+                                    l[""] = t, l), i, o, r, "", [])
+                                }
+                            }
+                            if (!n("json-parse")) {
+                                var C, N, A = o.fromCharCode,
+                                k = {
+                                    92 : "\\",
+                                    34 : '"',
+                                    47 : "/",
+                                    98 : "\b",
+                                    116 : "\t",
+                                    110 : "\n",
+                                    102 : "\f",
+                                    114 : "\r"
+                                },
+                                I = function() {
+                                    throw C = N = null,
+                                    c()
+                                },
+                                P = function() {
+                                    for (var t, e, n, r, i, o = N,
+                                    s = o.length; C < s;) switch (i = o.charCodeAt(C)) {
+                                    case 9:
+                                    case 10:
+                                    case 13:
+                                    case 32:
+                                        C++;
+                                        break;
+                                    case 123:
+                                    case 125:
+                                    case 91:
+                                    case 93:
+                                    case 58:
+                                    case 44:
+                                        return t = w ? o.charAt(C) : o[C],
+                                        C++,
+                                        t;
+                                    case 34:
+                                        for (t = "@", C++; C < s;) if ((i = o.charCodeAt(C)) < 32) I();
+                                        else if (92 == i) switch (i = o.charCodeAt(++C)) {
+                                        case 92:
+                                        case 34:
+                                        case 47:
+                                        case 98:
+                                        case 116:
+                                        case 110:
+                                        case 102:
+                                        case 114:
+                                            t += k[i],
+                                            C++;
+                                            break;
+                                        case 117:
+                                            for (e = ++C, n = C + 4; C < n; C++)(i = o.charCodeAt(C)) >= 48 && i <= 57 || i >= 97 && i <= 102 || i >= 65 && i <= 70 || I();
+                                            t += A("0x" + o.slice(e, C));
+                                            break;
+                                        default:
+                                            I()
+                                        } else {
+                                            if (34 == i) break;
+                                            for (i = o.charCodeAt(C), e = C; i >= 32 && 92 != i && 34 != i;) i = o.charCodeAt(++C);
+                                            t += o.slice(e, C)
+                                        }
+                                        if (34 == o.charCodeAt(C)) return C++,
+                                        t;
+                                        I();
+                                    default:
+                                        if (e = C, 45 == i && (r = !0, i = o.charCodeAt(++C)), i >= 48 && i <= 57) {
+                                            for (48 == i && (i = o.charCodeAt(C + 1)) >= 48 && i <= 57 && I(), r = !1; C < s && (i = o.charCodeAt(C)) >= 48 && i <= 57; C++);
+                                            if (46 == o.charCodeAt(C)) {
+                                                for (n = ++C; n < s && (i = o.charCodeAt(n)) >= 48 && i <= 57; n++);
+                                                n == C && I(),
+                                                C = n
+                                            }
+                                            if (101 == (i = o.charCodeAt(C)) || 69 == i) {
+                                                for (i = o.charCodeAt(++C), 43 != i && 45 != i || C++, n = C; n < s && (i = o.charCodeAt(n)) >= 48 && i <= 57; n++);
+                                                n == C && I(),
+                                                C = n
+                                            }
+                                            return + o.slice(e, C)
+                                        }
+                                        if (r && I(), "true" == o.slice(C, C + 4)) return C += 4,
+                                        !0;
+                                        if ("false" == o.slice(C, C + 5)) return C += 5,
+                                        !1;
+                                        if ("null" == o.slice(C, C + 4)) return C += 4,
+                                        null;
+                                        I()
+                                    }
+                                    return "$"
+                                },
+                                L = function(t) {
+                                    var e, n;
+                                    if ("$" == t && I(), "string" == typeof t) {
+                                        if ("@" == (w ? t.charAt(0) : t[0])) return t.slice(1);
+                                        if ("[" == t) {
+                                            for (e = [];
+                                            "]" != (t = P()); n || (n = !0)) n && ("," == t ? "]" == (t = P()) && I() : I()),
+                                            "," == t && I(),
+                                            e.push(L(t));
+                                            return e
+                                        }
+                                        if ("{" == t) {
+                                            for (e = {};
+                                            "}" != (t = P()); n || (n = !0)) n && ("," == t ? "}" == (t = P()) && I() : I()),
+                                            "," != t && "string" == typeof t && "@" == (w ? t.charAt(0) : t[0]) && ":" == P() || I(),
+                                            e[t.slice(1)] = L(P());
+                                            return e
+                                        }
+                                        I()
+                                    }
+                                    return t
+                                },
+                                R = function(t, e, n) {
+                                    var r = U(t, e, n);
+                                    r === m ? delete t[e] : t[e] = r
+                                },
+                                U = function(t, e, n) {
+                                    var r, i = t[e];
+                                    if ("object" == typeof i && i) if ("[object Array]" == y.call(i)) for (r = i.length; r--;) R(i, r, n);
+                                    else v(i,
+                                    function(t) {
+                                        R(i, t, n)
+                                    });
+                                    return n.call(t, e, i)
+                                };
+                                e.parse = function(t, e) {
+                                    var n, r;
+                                    return C = 0,
+                                    N = "" + t,
+                                    n = L(P()),
+                                    "$" != P() && I(),
+                                    C = N = null,
+                                    e && "[object Function]" == y.call(e) ? U((r = {},
+                                    r[""] = n, r), "", e) : n
+                                }
+                            }
+                        }
+                        return e.runInContext = i,
+                        e
+                    }
+                    var o = "function" == typeof t && t.amd,
+                    s = {
+                        "function": !0,
+                        "object": !0
+                    },
+                    a = s[typeof r] && r && !r.nodeType && r,
+                    l = s[typeof window] && window || this,
+                    u = a && s[typeof n] && n && !n.nodeType && "object" == typeof e && e;
+                    if (!u || u.global !== u && u.window !== u && u.self !== u || (l = u), a && !o) i(l, a);
+                    else {
+                        var c = l.JSON,
+                        f = l.JSON3,
+                        h = !1,
+                        d = i(l, l.JSON3 = {
+                            "noConflict": function() {
+                                return h || (h = !0, l.JSON = c, l.JSON3 = f, c = f = null),
+                                d
+                            }
+                        });
+                        l.JSON = {
+                            "parse": d.parse,
+                            "stringify": d.stringify
+                        }
+                    }
+                    o && t(function() {
+                        return d
+                    })
+                }).call(this)
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {}],
+        56 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                for (var e, n = /([^=?&]+)=?([^&]*)/g,
+                r = {}; e = n.exec(t); r[decodeURIComponent(e[1])] = decodeURIComponent(e[2]));
+                return r
+            }
+            function i(t, e) {
+                e = e || "";
+                var n = [];
+                "string" != typeof e && (e = "?");
+                for (var r in t) o.call(t, r) && n.push(encodeURIComponent(r) + "=" + encodeURIComponent(t[r]));
+                return n.length ? e + n.join("&") : ""
+            }
+            var o = Object.prototype.hasOwnProperty;
+            n.stringify = i,
+            n.parse = r
+        },
+        {}],
+        57 : [function(t, e, n) {
+            "use strict";
+            e.exports = function(t, e) {
+                if (e = e.split(":")[0], !(t = +t)) return ! 1;
+                switch (e) {
+                case "http":
+                case "ws":
+                    return 80 !== t;
+                case "https":
+                case "wss":
+                    return 443 !== t;
+                case "ftp":
+                    return 21 !== t;
+                case "gopher":
+                    return 70 !== t;
+                case "file":
+                    return ! 1
+                }
+                return 0 !== t
+            }
+        },
+        {}],
+        58 : [function(t, e, n) {
+            "use strict";
+            function r(t) {
+                var e = f.exec(t);
+                return {
+                    protocol: e[1] ? e[1].toLowerCase() : "",
+                    slashes: !!e[2],
+                    rest: e[3]
+                }
+            }
+            function i(t, e) {
+                for (var n = (e || "/").split("/").slice(0, -1).concat(t.split("/")), r = n.length, i = n[r - 1], o = !1, s = 0; r--;)"." === n[r] ? n.splice(r, 1) : ".." === n[r] ? (n.splice(r, 1), s++) : s && (0 === r && (o = !0), n.splice(r, 1), s--);
+                return o && n.unshift(""),
+                "." !== i && ".." !== i || n.push(""),
+                n.join("/")
+            }
+            function o(t, e, n) {
+                if (! (this instanceof o)) return new o(t, e, n);
+                var s, a, f, d, p, v, m = h.slice(),
+                b = typeof e,
+                y = this,
+                g = 0;
+                for ("object" !== b && "string" !== b && (n = e, e = null), n && "function" != typeof n && (n = c.parse), e = u(e), a = r(t || ""), s = !a.protocol && !a.slashes, y.slashes = a.slashes || s && e.slashes, y.protocol = a.protocol || e.protocol || "", t = a.rest, a.slashes || (m[2] = [/(.*)/, "pathname"]); g < m.length; g++) d = m[g],
+                f = d[0],
+                v = d[1],
+                f !== f ? y[v] = t: "string" == typeof f ? ~ (p = t.indexOf(f)) && ("number" == typeof d[2] ? (y[v] = t.slice(0, p), t = t.slice(p + d[2])) : (y[v] = t.slice(p), t = t.slice(0, p))) : (p = f.exec(t)) && (y[v] = p[1], t = t.slice(0, p.index)),
+                y[v] = y[v] || (s && d[3] ? e[v] || "": ""),
+                d[4] && (y[v] = y[v].toLowerCase());
+                n && (y.query = n(y.query)),
+                s && e.slashes && "/" !== y.pathname.charAt(0) && ("" !== y.pathname || "" !== e.pathname) && (y.pathname = i(y.pathname, e.pathname)),
+                l(y.port, y.protocol) || (y.host = y.hostname, y.port = ""),
+                y.username = y.password = "",
+                y.auth && (d = y.auth.split(":"), y.username = d[0] || "", y.password = d[1] || ""),
+                y.origin = y.protocol && y.host && "file:" !== y.protocol ? y.protocol + "//" + y.host: "null",
+                y.href = y.toString()
+            }
+            function s(t, e, n) {
+                var r = this;
+                switch (t) {
+                case "query":
+                    "string" == typeof e && e.length && (e = (n || c.parse)(e)),
+                    r[t] = e;
+                    break;
+                case "port":
+                    r[t] = e,
+                    l(e, r.protocol) ? e && (r.host = r.hostname + ":" + e) : (r.host = r.hostname, r[t] = "");
+                    break;
+                case "hostname":
+                    r[t] = e,
+                    r.port && (e += ":" + r.port),
+                    r.host = e;
+                    break;
+                case "host":
+                    r[t] = e,
+                    /:\d+$/.test(e) ? (e = e.split(":"), r.port = e.pop(), r.hostname = e.join(":")) : (r.hostname = e, r.port = "");
+                    break;
+                case "protocol":
+                    r.protocol = e.toLowerCase(),
+                    r.slashes = !n;
+                    break;
+                case "pathname":
+                    r.pathname = e.length && "/" !== e.charAt(0) ? "/" + e: e;
+                    break;
+                default:
+                    r[t] = e
+                }
+                for (var i = 0; i < h.length; i++) {
+                    var o = h[i];
+                    o[4] && (r[o[1]] = r[o[1]].toLowerCase())
+                }
+                return r.origin = r.protocol && r.host && "file:" !== r.protocol ? r.protocol + "//" + r.host: "null",
+                r.href = r.toString(),
+                r
+            }
+            function a(t) {
+                t && "function" == typeof t || (t = c.stringify);
+                var e, n = this,
+                r = n.protocol;
+                r && ":" !== r.charAt(r.length - 1) && (r += ":");
+                var i = r + (n.slashes ? "//": "");
+                return n.username && (i += n.username, n.password && (i += ":" + n.password), i += "@"),
+                i += n.host + n.pathname,
+                e = "object" == typeof n.query ? t(n.query) : n.query,
+                e && (i += "?" !== e.charAt(0) ? "?" + e: e),
+                n.hash && (i += n.hash),
+                i
+            }
+            var l = t("requires-port"),
+            u = t("./lolcation"),
+            c = t("querystringify"),
+            f = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\S\s]*)/i,
+            h = [["#", "hash"], ["?", "query"], ["/", "pathname"], ["@", "auth", 1], [NaN, "host", void 0, 1, 1], [/:(\d+)$/, "port", void 0, 1], [NaN, "hostname", void 0, 1, 1]];
+            o.prototype = {
+                set: s,
+                toString: a
+            },
+            o.extractProtocol = r,
+            o.location = u,
+            o.qs = c,
+            e.exports = o
+        },
+        {
+            "./lolcation": 59,
+            "querystringify": 56,
+            "requires-port": 57
+        }],
+        59 : [function(t, e, n) { (function(n) {
+                "use strict";
+                var r, i = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//,
+                o = {
+                    hash: 1,
+                    query: 1
+                };
+                e.exports = function(e) {
+                    e = e || n.location || {},
+                    r = r || t("./");
+                    var s, a = {},
+                    l = typeof e;
+                    if ("blob:" === e.protocol) a = new r(unescape(e.pathname), {});
+                    else if ("string" === l) {
+                        a = new r(e, {});
+                        for (s in o) delete a[s]
+                    } else if ("object" === l) {
+                        for (s in e) s in o || (a[s] = e[s]);
+                        void 0 === a.slashes && (a.slashes = i.test(e.href))
+                    }
+                    return a
+                }
+            }).call(this, "undefined" != typeof global ? global: "undefined" != typeof self ? self: "undefined" != typeof window ? window: {})
+        },
+        {
+            "./": 58
+        }]
+    },
+    {},
+    [1])(1)
+});
+//# sourceMappingURL=sockjs.min.js.map
diff --git a/src/main/webapp/js/stomp.min.js b/src/main/webapp/js/stomp.min.js
new file mode 100644
index 0000000..92efbd0
--- /dev/null
+++ b/src/main/webapp/js/stomp.min.js
@@ -0,0 +1,470 @@
+//Generated by CoffeeScript 1.7.1
+/*
+   Stomp Over WebSocket http://www.jmesnil.net/stomp-websocket/doc/ | Apache License V2.0
+
+   Copyright (C) 2010-2013 [Jeff Mesnil](http://jmesnil.net/)
+   Copyright (C) 2012 [FuseSource, Inc.](http://fusesource.com)
+ */
+(function() {
+    var t, e, n, i, r = {}.hasOwnProperty,
+    o = [].slice;
+    t = {
+        LF: "\n",
+        NULL: "\x00"
+    };
+    n = function() {
+        var e;
+        function n(t, e, n) {
+            this.command = t;
+            this.headers = e != null ? e: {};
+            this.body = n != null ? n: ""
+        }
+        n.prototype.toString = function() {
+            var e, i, o, s, u;
+            e = [this.command];
+            o = this.headers["content-length"] === false ? true: false;
+            if (o) {
+                delete this.headers["content-length"]
+            }
+            u = this.headers;
+            for (i in u) {
+                if (!r.call(u, i)) continue;
+                s = u[i];
+                e.push("" + i + ":" + s)
+            }
+            if (this.body && !o) {
+                e.push("content-length:" + n.sizeOfUTF8(this.body))
+            }
+            e.push(t.LF + this.body);
+            return e.join(t.LF)
+        };
+        n.sizeOfUTF8 = function(t) {
+            if (t) {
+                return encodeURI(t).match(/%..|./g).length
+            } else {
+                return 0
+            }
+        };
+        e = function(e) {
+            var i, r, o, s, u, a, c, f, h, l, p, d, g, b, m, v, y;
+            s = e.search(RegExp("" + t.LF + t.LF));
+            u = e.substring(0, s).split(t.LF);
+            o = u.shift();
+            a = {};
+            d = function(t) {
+                return t.replace(/^\s+|\s+$/g, "")
+            };
+            v = u.reverse();
+            for (g = 0, m = v.length; g < m; g++) {
+                l = v[g];
+                f = l.indexOf(":");
+                a[d(l.substring(0, f))] = d(l.substring(f + 1))
+            }
+            i = "";
+            p = s + 2;
+            if (a["content-length"]) {
+                h = parseInt(a["content-length"]);
+                i = ("" + e).substring(p, p + h)
+            } else {
+                r = null;
+                for (c = b = p, y = e.length; p <= y ? b < y: b > y; c = p <= y ? ++b: --b) {
+                    r = e.charAt(c);
+                    if (r === t.NULL) {
+                        break
+                    }
+                    i += r
+                }
+            }
+            return new n(o, a, i)
+        };
+        n.unmarshall = function(n) {
+            var i;
+            return function() {
+                var r, o, s, u;
+                s = n.split(RegExp("" + t.NULL + t.LF + "*"));
+                u = [];
+                for (r = 0, o = s.length; r < o; r++) {
+                    i = s[r];
+                    if ((i != null ? i.length: void 0) > 0) {
+                        u.push(e(i))
+                    }
+                }
+                return u
+            } ()
+        };
+        n.marshall = function(e, i, r) {
+            var o;
+            o = new n(e, i, r);
+            return o.toString() + t.NULL
+        };
+        return n
+    } ();
+    e = function() {
+        var e;
+        function r(t) {
+            this.ws = t;
+            this.ws.binaryType = "arraybuffer";
+            this.counter = 0;
+            this.connected = false;
+            this.heartbeat = {
+                outgoing: 1e4,
+                incoming: 1e4
+            };
+            this.maxWebSocketFrameSize = 16 * 1024;
+            this.subscriptions = {}
+        }
+        r.prototype.debug = function(t) {
+            var e;
+            return typeof window !== "undefined" && window !== null ? (e = window.console) != null ? e.log(t) : void 0 : void 0
+        };
+        e = function() {
+            if (Date.now) {
+                return Date.now()
+            } else {
+                return (new Date).valueOf
+            }
+        };
+        r.prototype._transmit = function(t, e, i) {
+            var r;
+            r = n.marshall(t, e, i);
+            if (typeof this.debug === "function") {
+                this.debug(">>> " + r)
+            }
+            while (true) {
+                if (r.length > this.maxWebSocketFrameSize) {
+                    this.ws.send(r.substring(0, this.maxWebSocketFrameSize));
+                    r = r.substring(this.maxWebSocketFrameSize);
+                    if (typeof this.debug === "function") {
+                        this.debug("remaining = " + r.length)
+                    }
+                } else {
+                    return this.ws.send(r)
+                }
+            }
+        };
+        r.prototype._setupHeartbeat = function(n) {
+            var r, o, s, u, a, c;
+            if ((a = n.version) !== i.VERSIONS.V1_1 && a !== i.VERSIONS.V1_2) {
+                return
+            }
+            c = function() {
+                var t, e, i, r;
+                i = n["heart-beat"].split(",");
+                r = [];
+                for (t = 0, e = i.length; t < e; t++) {
+                    u = i[t];
+                    r.push(parseInt(u))
+                }
+                return r
+            } (),
+            o = c[0],
+            r = c[1];
+            if (! (this.heartbeat.outgoing === 0 || r === 0)) {
+                s = Math.max(this.heartbeat.outgoing, r);
+                if (typeof this.debug === "function") {
+                    this.debug("send PING every " + s + "ms")
+                }
+                this.pinger = i.setInterval(s,
+                function(e) {
+                    return function() {
+                        e.ws.send(t.LF);
+                        return typeof e.debug === "function" ? e.debug(">>> PING") : void 0
+                    }
+                } (this))
+            }
+            if (! (this.heartbeat.incoming === 0 || o === 0)) {
+                s = Math.max(this.heartbeat.incoming, o);
+                if (typeof this.debug === "function") {
+                    this.debug("check PONG every " + s + "ms")
+                }
+                return this.ponger = i.setInterval(s,
+                function(t) {
+                    return function() {
+                        var n;
+                        n = e() - t.serverActivity;
+                        if (n > s * 2) {
+                            if (typeof t.debug === "function") {
+                                t.debug("did not receive server activity for the last " + n + "ms")
+                            }
+                            return t.ws.close()
+                        }
+                    }
+                } (this))
+            }
+        };
+        r.prototype._parseConnect = function() {
+            var t, e, n, i;
+            t = 1 <= arguments.length ? o.call(arguments, 0) : [];
+            i = {};
+            switch (t.length) {
+            case 2:
+                i = t[0],
+                e = t[1];
+                break;
+            case 3:
+                if (t[1] instanceof Function) {
+                    i = t[0],
+                    e = t[1],
+                    n = t[2]
+                } else {
+                    i.login = t[0],
+                    i.passcode = t[1],
+                    e = t[2]
+                }
+                break;
+            case 4:
+                i.login = t[0],
+                i.passcode = t[1],
+                e = t[2],
+                n = t[3];
+                break;
+            default:
+                i.login = t[0],
+                i.passcode = t[1],
+                e = t[2],
+                n = t[3],
+                i.host = t[4]
+            }
+            return [i, e, n]
+        };
+        r.prototype.connect = function() {
+            var r, s, u, a;
+            r = 1 <= arguments.length ? o.call(arguments, 0) : [];
+            a = this._parseConnect.apply(this, r);
+            u = a[0],
+            this.connectCallback = a[1],
+            s = a[2];
+            if (typeof this.debug === "function") {
+                this.debug("Opening Web Socket...")
+            }
+            this.ws.onmessage = function(i) {
+                return function(r) {
+                    var o, u, a, c, f, h, l, p, d, g, b, m;
+                    c = typeof ArrayBuffer !== "undefined" && r.data instanceof ArrayBuffer ? (o = new Uint8Array(r.data), typeof i.debug === "function" ? i.debug("--- got data length: " + o.length) : void 0,
+                    function() {
+                        var t, e, n;
+                        n = [];
+                        for (t = 0, e = o.length; t < e; t++) {
+                            u = o[t];
+                            n.push(String.fromCharCode(u))
+                        }
+                        return n
+                    } ().join("")) : r.data;
+                    i.serverActivity = e();
+                    if (c === t.LF) {
+                        if (typeof i.debug === "function") {
+                            i.debug("<<< PONG")
+                        }
+                        return
+                    }
+                    if (typeof i.debug === "function") {
+                        i.debug("<<< " + c)
+                    }
+                    b = n.unmarshall(c);
+                    m = [];
+                    for (d = 0, g = b.length; d < g; d++) {
+                        f = b[d];
+                        switch (f.command) {
+                        case "CONNECTED":
+                            if (typeof i.debug === "function") {
+                                i.debug("connected to server " + f.headers.server)
+                            }
+                            i.connected = true;
+                            i._setupHeartbeat(f.headers);
+                            m.push(typeof i.connectCallback === "function" ? i.connectCallback(f) : void 0);
+                            break;
+                        case "MESSAGE":
+                            p = f.headers.subscription;
+                            l = i.subscriptions[p] || i.onreceive;
+                            if (l) {
+                                a = i;
+                                h = f.headers["message-id"];
+                                f.ack = function(t) {
+                                    if (t == null) {
+                                        t = {}
+                                    }
+                                    return a.ack(h, p, t)
+                                };
+                                f.nack = function(t) {
+                                    if (t == null) {
+                                        t = {}
+                                    }
+                                    return a.nack(h, p, t)
+                                };
+                                m.push(l(f))
+                            } else {
+                                m.push(typeof i.debug === "function" ? i.debug("Unhandled received MESSAGE: " + f) : void 0)
+                            }
+                            break;
+                        case "RECEIPT":
+                            m.push(typeof i.onreceipt === "function" ? i.onreceipt(f) : void 0);
+                            break;
+                        case "ERROR":
+                            m.push(typeof s === "function" ? s(f) : void 0);
+                            break;
+                        default:
+                            m.push(typeof i.debug === "function" ? i.debug("Unhandled frame: " + f) : void 0)
+                        }
+                    }
+                    return m
+                }
+            } (this);
+            this.ws.onclose = function(t) {
+                return function() {
+                    var e;
+                    e = "Whoops! Lost connection to " + t.ws.url;
+                    if (typeof t.debug === "function") {
+                        t.debug(e)
+                    }
+                    t._cleanUp();
+                    return typeof s === "function" ? s(e) : void 0
+                }
+            } (this);
+            return this.ws.onopen = function(t) {
+                return function() {
+                    if (typeof t.debug === "function") {
+                        t.debug("Web Socket Opened...")
+                    }
+                    u["accept-version"] = i.VERSIONS.supportedVersions();
+                    u["heart-beat"] = [t.heartbeat.outgoing, t.heartbeat.incoming].join(",");
+                    return t._transmit("CONNECT", u)
+                }
+            } (this)
+        };
+        r.prototype.disconnect = function(t, e) {
+            if (e == null) {
+                e = {}
+            }
+            this._transmit("DISCONNECT", e);
+            this.ws.onclose = null;
+            this.ws.close();
+            this._cleanUp();
+            return typeof t === "function" ? t() : void 0
+        };
+        r.prototype._cleanUp = function() {
+            this.connected = false;
+            if (this.pinger) {
+                i.clearInterval(this.pinger)
+            }
+            if (this.ponger) {
+                return i.clearInterval(this.ponger)
+            }
+        };
+        r.prototype.send = function(t, e, n) {
+            if (e == null) {
+                e = {}
+            }
+            if (n == null) {
+                n = ""
+            }
+            e.destination = t;
+            return this._transmit("SEND", e, n)
+        };
+        r.prototype.subscribe = function(t, e, n) {
+            var i;
+            if (n == null) {
+                n = {}
+            }
+            if (!n.id) {
+                n.id = "sub-" + this.counter++
+            }
+            n.destination = t;
+            this.subscriptions[n.id] = e;
+            this._transmit("SUBSCRIBE", n);
+            i = this;
+            return {
+                id: n.id,
+                unsubscribe: function() {
+                    return i.unsubscribe(n.id)
+                }
+            }
+        };
+        r.prototype.unsubscribe = function(t) {
+            delete this.subscriptions[t];
+            return this._transmit("UNSUBSCRIBE", {
+                id: t
+            })
+        };
+        r.prototype.begin = function(t) {
+            var e, n;
+            n = t || "tx-" + this.counter++;
+            this._transmit("BEGIN", {
+                transaction: n
+            });
+            e = this;
+            return {
+                id: n,
+                commit: function() {
+                    return e.commit(n)
+                },
+                abort: function() {
+                    return e.abort(n)
+                }
+            }
+        };
+        r.prototype.commit = function(t) {
+            return this._transmit("COMMIT", {
+                transaction: t
+            })
+        };
+        r.prototype.abort = function(t) {
+            return this._transmit("ABORT", {
+                transaction: t
+            })
+        };
+        r.prototype.ack = function(t, e, n) {
+            if (n == null) {
+                n = {}
+            }
+            n["message-id"] = t;
+            n.subscription = e;
+            return this._transmit("ACK", n)
+        };
+        r.prototype.nack = function(t, e, n) {
+            if (n == null) {
+                n = {}
+            }
+            n["message-id"] = t;
+            n.subscription = e;
+            return this._transmit("NACK", n)
+        };
+        return r
+    } ();
+    i = {
+        VERSIONS: {
+            V1_0: "1.0",
+            V1_1: "1.1",
+            V1_2: "1.2",
+            supportedVersions: function() {
+                return "1.1,1.0"
+            }
+        },
+        client: function(t, n) {
+            var r, o;
+            if (n == null) {
+                n = ["v10.stomp", "v11.stomp"]
+            }
+            r = i.WebSocketClass || WebSocket;
+            o = new r(t, n);
+            return new e(o)
+        },
+        over: function(t) {
+            return new e(t)
+        },
+        Frame: n
+    };
+    if (typeof exports !== "undefined" && exports !== null) {
+        exports.Stomp = i
+    }
+    if (typeof window !== "undefined" && window !== null) {
+        i.setInterval = function(t, e) {
+            return window.setInterval(e, t)
+        };
+        i.clearInterval = function(t) {
+            return window.clearInterval(t)
+        };
+        window.Stomp = i
+    } else if (!exports) {
+        self.Stomp = i
+    }
+}).call(this);
\ No newline at end of file
diff --git a/src/main/webapp/view/newmap.jsp b/src/main/webapp/view/newmap.jsp
index 89b9c76..9ff1067 100644
--- a/src/main/webapp/view/newmap.jsp
+++ b/src/main/webapp/view/newmap.jsp
@@ -14,6 +14,8 @@
     <script type="text/javascript"
             src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
     <script type="text/javascript" src="/js/jquery.min.js"></script>
+    <script type="text/javascript" src="/js/sockjs.min.js"></script>
+    <script type="text/javascript" src="/js/stomp.min.js"></script>
     <script type="text/javascript" src="/js/utils.js"></script>
     <script type="text/javascript">
         if (typeof (JSON) == 'undefined') {
@@ -345,10 +347,10 @@
         <div class="charts_btn">
         </div>
     </div>
-    <%-- <div class="search_box">
-          <button id="searchBtn" type="button">������</button>
-          <textarea style="width: 200px;height:200px;" id="searchParam"></textarea>
-      </div>--%>
+    <div class="search_box">
+        <button id="searchBtn" type="button">������</button>
+        <textarea style="width: 300px;height:400px;" id="searchParam"></textarea>
+    </div>
     <!-- <div id="popup_box">
           <div id="equ_list" class="listview">
           </div>
@@ -367,6 +369,7 @@
         var moralMap = window.moralMap;
         var params = $.parseJSON($("#mapParams").html());
         moralMap['params'] = params;
+        var orgId = params["orgId"];
         var regionCode = params["regionCode"];
         var provinceCode = regionCode.toString().substring(0, 2) + "0000";
         var mapType = getUrlParam("mapType");
@@ -422,7 +425,10 @@
         function loadOverlays(url, callback) {
             //������������
             var oldMarkerList = moralMap.getHorizonMarkers();
+            var oldWindMarkerList = moralMap.getHorizonWindMarkers();
+
             moralMap.addOverlays(oldMarkerList);
+            moralMap.addOverlays(oldWindMarkerList);
             //������������
             //������������������������,������������������
             if (moralMap.isOverBounds() || moralMap.getOverlays().length == 0) {
@@ -480,7 +486,9 @@
                             }
                         }
                         var moralMask = new moralMap.Equipment(obj);
+                        var moralDeviceWind = new moralMap.Device(obj);
                         moralMap.addOverlay(moralMask);
+                        moralMap.addOverlay(moralDeviceWind);
                     }
                 }
             }
@@ -629,7 +637,31 @@
                 }
             }
         );
-        //������������
+
+        var ws;
+        if (typeof (WebSocket) === "undefined") {
+            alert("������������������������WebSocket");
+        } else {
+            ws = new WebSocket('ws://47.96.15.25:8080/screen/webSocket/' + orgId + '&' + regionCode);
+            ws.onopen = function () {
+            };
+
+            //������������������
+            ws.onmessage = function (msg) {
+                // $("#searchParam").val(JSON.parse(msg.data));
+                moralMap.refreshWindDir(JSON.parse(JSON.parse(msg.data)));
+                if (moralMap.showSensors && typeof (moralMap.showSensors) == "function") {
+                    moralMap.showSensors(JSON.parse(JSON.parse(msg.data)));
+                }
+            };
+
+            //������������
+            ws.onclose = function () {
+            };
+            //���������������������
+            ws.onerror = function () {
+            };
+        }
 
     })(jQuery);
     var _intervalNum = -1;
@@ -738,14 +770,14 @@
     function callJS(jsonData) {
         var jsonData = JSON.parse(jsonData);
         var methodName = jsonData.methodName;
-        // $("#searchParam").val(JSON.stringify(jsonData));
+        $("#searchParam").val(JSON.stringify(jsonData));
         if ("JumpBaiduMap" == methodName) {
             moralMap.callJS(jsonData);
         } else if ("RefreshState" == methodName) {
             var states = jsonData.states;
             moralMap.refreshState(states);
         } else if ("DeliverSensors" == methodName) {
-            moralMap.showSensors(jsonData);
+            // moralMap.showSensors(jsonData);
         }
     }
 </script>

--
Gitblit v1.8.0