diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 844037ed..7d513763 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,7 +42,7 @@ You also need to use the formatting tool so that your code has the same coding s ## 7. Commit your changes ```bash git add . -git commit -m 'some description of the changes' +git commit -m_cv_mutex 'some description of the changes' ``` You can do as many commits as you want: we will squash them into a single commit. diff --git a/docs/html/classcpp__redis_1_1client-members.html b/docs/html/classcpp__redis_1_1client-members.html index 7a2ded3b..d4fcbe5f 100644 --- a/docs/html/classcpp__redis_1_1client-members.html +++ b/docs/html/classcpp__redis_1_1client-members.html @@ -75,7 +75,7 @@

This is the complete list of members for cpp_redis::client, including all inherited members.

- + @@ -188,8 +188,8 @@ - - + + @@ -233,7 +233,7 @@ - + @@ -355,10 +355,10 @@ - - - - + + + + @@ -369,8 +369,8 @@ - - + + diff --git a/docs/html/classcpp__redis_1_1client.html b/docs/html/classcpp__redis_1_1client.html index 25b43e5d..d2e68f7a 100644 --- a/docs/html/classcpp__redis_1_1client.html +++ b/docs/html/classcpp__redis_1_1client.html @@ -111,7 +111,7 @@ server_default } - - + - + @@ -176,7 +176,7 @@ - + @@ -621,7 +621,7 @@ client &  +std::future< reply >  @@ -954,16 +954,16 @@ std::future< reply >  +client &  +std::future< reply >  +client &  +std::future< reply >  @@ -996,10 +996,10 @@ std::future< reply >  +client &  +std::future< reply >  @@ -1524,7 +1524,7 @@ std::future< reply >  - + @@ -2096,7 +2096,7 @@

add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)cpp_redis::client
add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)cpp_redis::client
aggregate_method enum m_namecpp_redis::client
aggregate_method_to_string(aggregate_method method) constcpp_redis::client
append(const std::string &key, const std::string &value, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
config_rewrite() (defined in cpp_redis::client)cpp_redis::client
config_set(const std::string &param, const std::string &val, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
config_set(const std::string &param, const std::string &val) (defined in cpp_redis::client)cpp_redis::client
connect(const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)cpp_redis::client
connect(const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)cpp_redis::client
connect(const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)cpp_redis::client
connect(const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)cpp_redis::client
connect_callback_t typedefcpp_redis::client
connect_state enum m_namecpp_redis::client
dbsize(const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
geoadd(const std::string &key, const std::vector< std::tuple< std::string, std::string, std::string >> &long_lat_memb) (defined in cpp_redis::client)cpp_redis::client
geodist(const std::string &key, const std::string &member_1, const std::string &member_2, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
geodist(const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
geodist(const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit="m") (defined in cpp_redis::client)cpp_redis::client
geodist(const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit="m_cv_mutex") (defined in cpp_redis::client)cpp_redis::client
geohash(const std::string &key, const std::vector< std::string > &members, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
geohash(const std::string &key, const std::vector< std::string > &members) (defined in cpp_redis::client)cpp_redis::client
geopos(const std::string &key, const std::vector< std::string > &members, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
overflow_type_to_string(overflow_type type) constcpp_redis::client
persist(const std::string &key, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
persist(const std::string &key) (defined in cpp_redis::client)cpp_redis::client
pexpire(const std::string &key, int milliseconds, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
pexpire(const std::string &key, int milliseconds) (defined in cpp_redis::client)cpp_redis::client
pexpireat(const std::string &key, int milliseconds_timestamp, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
pexpireat(const std::string &key, int milliseconds_timestamp) (defined in cpp_redis::client)cpp_redis::client
pexpire(const std::string &key, int ms, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
pexpire(const std::string &key, int ms) (defined in cpp_redis::client)cpp_redis::client
pexpireat(const std::string &key, int ms_timestamp, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
pexpireat(const std::string &key, int ms_timestamp) (defined in cpp_redis::client)cpp_redis::client
pfadd(const std::string &key, const std::vector< std::string > &elements, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
pfadd(const std::string &key, const std::vector< std::string > &elements) (defined in cpp_redis::client)cpp_redis::client
pfcount(const std::vector< std::string > &keys, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
ping() (defined in cpp_redis::client)cpp_redis::client
ping(const std::string &message, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
ping(const std::string &message) (defined in cpp_redis::client)cpp_redis::client
psetex(const std::string &key, int milliseconds, const std::string &val, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
psetex(const std::string &key, int milliseconds, const std::string &val) (defined in cpp_redis::client)cpp_redis::client
psetex(const std::string &key, int ms, const std::string &val, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
psetex(const std::string &key, int ms, const std::string &val) (defined in cpp_redis::client)cpp_redis::client
pttl(const std::string &key, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
pttl(const std::string &key) (defined in cpp_redis::client)cpp_redis::client
publish(const std::string &channel, const std::string &message, const reply_callback_t &reply_callback) (defined in cpp_redis::client)cpp_redis::client
 
enum  geo_unit { m, +
enum  geo_unit { m_cv_mutex, km, ft, mi @@ -153,9 +153,9 @@ clientoperator= (const client &)=delete
 assignment operator
 
void connect (const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)
void connect (const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)
 
void connect (const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)
void connect (const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)
 
bool is_connected () const
 
template<class Rep , class Period >
clientsync_commit (const std::chrono::duration< Rep, Period > &timeout)
 
void add_sentinel (const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)
void add_sentinel (const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)
 
const sentinelget_sentinel () const
 
geodist (const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit, const reply_callback_t &reply_callback)
 
-std::future< replygeodist (const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit="m")
geodist (const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit="m_cv_mutex")
 
clientgeoradius (const std::string &key, double longitude, double latitude, double radius, geo_unit unit, bool with_coord, bool with_dist, bool with_hash, bool asc_order, const reply_callback_t &reply_callback)
persist (const std::string &key)
 
-clientpexpire (const std::string &key, int milliseconds, const reply_callback_t &reply_callback)
pexpire (const std::string &key, int ms, const reply_callback_t &reply_callback)
 
-std::future< replypexpire (const std::string &key, int milliseconds)
pexpire (const std::string &key, int ms)
 
-clientpexpireat (const std::string &key, int milliseconds_timestamp, const reply_callback_t &reply_callback)
pexpireat (const std::string &key, int ms_timestamp, const reply_callback_t &reply_callback)
 
-std::future< replypexpireat (const std::string &key, int milliseconds_timestamp)
pexpireat (const std::string &key, int ms_timestamp)
 
clientpfadd (const std::string &key, const std::vector< std::string > &elements, const reply_callback_t &reply_callback)
ping (const std::string &message)
 
-clientpsetex (const std::string &key, int milliseconds, const std::string &val, const reply_callback_t &reply_callback)
psetex (const std::string &key, int ms, const std::string &val, const reply_callback_t &reply_callback)
 
-std::future< replypsetex (const std::string &key, int milliseconds, const std::string &val)
psetex (const std::string &key, int ms, const std::string &val)
 
clientpublish (const std::string &channel, const std::string &message, const reply_callback_t &reply_callback)
xinfo_stream (const std::string &key)
 
clientxlen (const std::string &key, const reply_callback_t &reply_callback)
 Returns the number of entries inside a stream. If the specified key does not exist the command returns zero, as if the stream was empty. However note that unlike other Redis types, zero-length streams are possible, so you should call TYPE or EXISTS in order to check if a key exists or not. Streams are not auto-deleted once they have no entries inside (for instance after an XDEL call), because the stream may have consumer groups associated with it. More...
 Returns the number of entries inside a stream. If the specified key does not exist the command returns zero, as if the stream was empty. However note that unlike other Redis types, zero-size streams are possible, so you should call TYPE or EXISTS in order to check if a key exists or not. Streams are not auto-deleted once they have no entries inside (for instance after an XDEL call), because the stream may have consumer groups associated with it. More...
 
std::future< replyxlen (const std::string &key)
 
- +
enum cpp_redis::client::connect_stateenum cpp_redis::connect_state
@@ -2220,7 +2220,7 @@

std::uint32_t  - timeout_msecs = 0  + timeout_ms = 0  @@ -2234,7 +2234,7 @@

hostsentinel host portsentinel port - timeout_msecsmaximum time to connect + timeout_msmaximum time to connect @@ -2458,7 +2458,7 @@

std::uint32_t  - timeout_msecs = 0, + timeout_ms = 0, @@ -2470,7 +2470,7 @@

std::uint32_t  - reconnect_interval_msecs = 0  + reconnect_interval_ms = 0  @@ -2485,9 +2485,9 @@

hosthost to be connected to portport to be connected to connect_callbackconnect handler to be called on connect events (may be null) - timeout_msecsmaximum time to connect + timeout_msmaximum time to connect max_reconnectsmaximum attempts of reconnection if connection dropped - reconnect_interval_msecstime between two attempts of reconnection + reconnect_interval_mstime between two attempts of reconnection @@ -2516,7 +2516,7 @@

std::uint32_t  - timeout_msecs = 0, + timeout_ms = 0, @@ -2528,7 +2528,7 @@

std::uint32_t  - reconnect_interval_msecs = 0  + reconnect_interval_ms = 0  @@ -2542,9 +2542,9 @@

m_namesentinel m_name connect_callbackconnect handler to be called on connect events (may be null) - timeout_msecsmaximum time to connect + timeout_msmaximum time to connect max_reconnectsmaximum attempts of reconnection if connection dropped - reconnect_interval_msecstime between two attempts of reconnection + reconnect_interval_mstime between two attempts of reconnection @@ -2988,7 +2988,7 @@

-

Returns the number of entries inside a stream. If the specified key does not exist the command returns zero, as if the stream was empty. However note that unlike other Redis types, zero-length streams are possible, so you should call TYPE or EXISTS in order to check if a key exists or not. Streams are not auto-deleted once they have no entries inside (for instance after an XDEL call), because the stream may have consumer groups associated with it.

+

Returns the number of entries inside a stream. If the specified key does not exist the command returns zero, as if the stream was empty. However note that unlike other Redis types, zero-size streams are possible, so you should call TYPE or EXISTS in order to check if a key exists or not. Streams are not auto-deleted once they have no entries inside (for instance after an XDEL call), because the stream may have consumer groups associated with it.

Parameters
diff --git a/docs/html/classcpp__redis_1_1network_1_1redis__connection-members.html b/docs/html/classcpp__redis_1_1network_1_1redis__connection-members.html index 829075b6..e7c8d349 100644 --- a/docs/html/classcpp__redis_1_1network_1_1redis__connection-members.html +++ b/docs/html/classcpp__redis_1_1network_1_1redis__connection-members.html @@ -76,7 +76,7 @@

This is the complete list of members for cpp_redis::network::redis_connection, including all inherited members.

key
- + diff --git a/docs/html/classcpp__redis_1_1network_1_1redis__connection.html b/docs/html/classcpp__redis_1_1network_1_1redis__connection.html index d528a711..d680491b 100644 --- a/docs/html/classcpp__redis_1_1network_1_1redis__connection.html +++ b/docs/html/classcpp__redis_1_1network_1_1redis__connection.html @@ -106,7 +106,7 @@ redis_connection &  - + @@ -239,7 +239,7 @@

- + @@ -255,7 +255,7 @@

port

- +
commit(void)cpp_redis::network::redis_connection
connect(const std::string &host="127.0.0.1", std::size_t port=6379, const disconnection_handler_t &disconnection_handler=nullptr, const reply_callback_t &reply_callback=nullptr, std::uint32_t timeout_msecs=0)cpp_redis::network::redis_connection
connect(const std::string &host="127.0.0.1", std::size_t port=6379, const disconnection_handler_t &disconnection_handler=nullptr, const reply_callback_t &reply_callback=nullptr, std::uint32_t timeout_ms=0)cpp_redis::network::redis_connection
disconnect(bool wait_for_removal=false)cpp_redis::network::redis_connection
disconnection_handler_t typedefcpp_redis::network::redis_connection
is_connected(void) constcpp_redis::network::redis_connection
operator= (const redis_connection &)=delete
 assignment operator
 
void connect (const std::string &host="127.0.0.1", std::size_t port=6379, const disconnection_handler_t &disconnection_handler=nullptr, const reply_callback_t &reply_callback=nullptr, std::uint32_t timeout_msecs=0)
void connect (const std::string &host="127.0.0.1", std::size_t port=6379, const disconnection_handler_t &disconnection_handler=nullptr, const reply_callback_t &reply_callback=nullptr, std::uint32_t timeout_ms=0)
 
void disconnect (bool wait_for_removal=false)
 
std::uint32_t timeout_msecs = 0 timeout_ms = 0 
port to be connected to
disconnection_handlerhandler to be called in case of disconnection
reply_callbackhandler to be called once a reply is ready
timeout_msecsmax time to connect (in ms)
timeout_msmax time to connect (in ms)
diff --git a/docs/html/classcpp__redis_1_1network_1_1tcp__client-members.html b/docs/html/classcpp__redis_1_1network_1_1tcp__client-members.html index 4eec736c..6bd6cfb0 100644 --- a/docs/html/classcpp__redis_1_1network_1_1tcp__client-members.html +++ b/docs/html/classcpp__redis_1_1network_1_1tcp__client-members.html @@ -79,7 +79,7 @@ async_read_callback_t typedefcpp_redis::network::tcp_client_iface async_write(write_request &request)cpp_redis::network::tcp_clientvirtual async_write_callback_t typedefcpp_redis::network::tcp_client_iface - connect(const std::string &addr, std::uint32_t port, std::uint32_t timeout_msecs)cpp_redis::network::tcp_clientvirtual + connect(const std::string &addr, std::uint32_t port, std::uint32_t timeout_ms)cpp_redis::network::tcp_clientvirtual disconnect(bool wait_for_removal=false)cpp_redis::network::tcp_clientvirtual disconnection_handler_t typedefcpp_redis::network::tcp_client_iface is_connected(void) constcpp_redis::network::tcp_clientvirtual diff --git a/docs/html/classcpp__redis_1_1network_1_1tcp__client.html b/docs/html/classcpp__redis_1_1network_1_1tcp__client.html index 0e9ccfa9..2daacc72 100644 --- a/docs/html/classcpp__redis_1_1network_1_1tcp__client.html +++ b/docs/html/classcpp__redis_1_1network_1_1tcp__client.html @@ -97,7 +97,7 @@  ~tcp_client (void)=default  dtor
  -void connect (const std::string &addr, std::uint32_t port, std::uint32_t timeout_msecs) +void connect (const std::string &addr, std::uint32_t port, std::uint32_t timeout_ms)   void disconnect (bool wait_for_removal=false)   @@ -229,7 +229,7 @@

std::uint32_t  - timeout_msecs  + timeout_ms  @@ -248,7 +248,7 @@

addrhost to be connected to portport to be connected to - timeout_msecsmax time to connect in ms + timeout_msmax time to connect in ms diff --git a/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface-members.html b/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface-members.html index e1b14378..322d43fe 100644 --- a/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface-members.html +++ b/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface-members.html @@ -79,7 +79,7 @@ async_read_callback_t typedefcpp_redis::network::tcp_client_iface async_write(write_request &request)=0cpp_redis::network::tcp_client_ifacepure virtual async_write_callback_t typedefcpp_redis::network::tcp_client_iface - connect(const std::string &addr, std::uint32_t port, std::uint32_t timeout_msecs=0)=0cpp_redis::network::tcp_client_ifacepure virtual + connect(const std::string &addr, std::uint32_t port, std::uint32_t timeout_ms=0)=0cpp_redis::network::tcp_client_ifacepure virtual disconnect(bool wait_for_removal=false)=0cpp_redis::network::tcp_client_ifacepure virtual disconnection_handler_t typedefcpp_redis::network::tcp_client_iface is_connected(void) const =0cpp_redis::network::tcp_client_ifacepure virtual diff --git a/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface.html b/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface.html index fe107561..8a468548 100644 --- a/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface.html +++ b/docs/html/classcpp__redis_1_1network_1_1tcp__client__iface.html @@ -119,7 +119,7 @@ virtual ~tcp_client_iface (void)=default  dtor
  -virtual void connect (const std::string &addr, std::uint32_t port, std::uint32_t timeout_msecs=0)=0 +virtual void connect (const std::string &addr, std::uint32_t port, std::uint32_t timeout_ms=0)=0   virtual void disconnect (bool wait_for_removal=false)=0   @@ -276,7 +276,7 @@

std::uint32_t  - timeout_msecs = 0  + timeout_ms = 0  @@ -295,7 +295,7 @@

addrhost to be connected to portport to be connected to - timeout_msecsmax time to connect in ms + timeout_msmax time to connect in ms diff --git a/docs/html/classcpp__redis_1_1sentinel-members.html b/docs/html/classcpp__redis_1_1sentinel-members.html index 88957416..ce3618a4 100644 --- a/docs/html/classcpp__redis_1_1sentinel-members.html +++ b/docs/html/classcpp__redis_1_1sentinel-members.html @@ -75,11 +75,11 @@

This is the complete list of members for cpp_redis::sentinel, including all inherited members.

- + - + diff --git a/docs/html/classcpp__redis_1_1sentinel.html b/docs/html/classcpp__redis_1_1sentinel.html index 377a9d91..efb848b8 100644 --- a/docs/html/classcpp__redis_1_1sentinel.html +++ b/docs/html/classcpp__redis_1_1sentinel.html @@ -120,7 +120,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -286,7 +286,7 @@

- + @@ -300,7 +300,7 @@

- +
add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)cpp_redis::sentinel
add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)cpp_redis::sentinel
ckquorum(const std::string &m_name, const reply_callback_t &reply_callback=nullptr) (defined in cpp_redis::sentinel)cpp_redis::sentinel
clear_sentinels(void)cpp_redis::sentinel
commit(void)cpp_redis::sentinel
connect(const std::string &host, std::size_t port, const sentinel_disconnect_handler_t &disconnect_handler=nullptr, std::uint32_t timeout_msecs=0)cpp_redis::sentinel
connect(const std::string &host, std::size_t port, const sentinel_disconnect_handler_t &disconnect_handler=nullptr, std::uint32_t timeout_ms=0)cpp_redis::sentinel
connect_sentinel(const sentinel_disconnect_handler_t &disconnect_handler=nullptr)cpp_redis::sentinel
disconnect(bool wait_for_removal=false)cpp_redis::sentinel
failover(const std::string &m_name, const reply_callback_t &reply_callback=nullptr) (defined in cpp_redis::sentinel)cpp_redis::sentinel
template<class Rep , class Period >
sentinelsync_commit (const std::chrono::duration< Rep, Period > &timeout)
 
sentineladd_sentinel (const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)
sentineladd_sentinel (const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)
 
void clear_sentinels (void)
 
 
void connect_sentinel (const sentinel_disconnect_handler_t &disconnect_handler=nullptr)
 
void connect (const std::string &host, std::size_t port, const sentinel_disconnect_handler_t &disconnect_handler=nullptr, std::uint32_t timeout_msecs=0)
void connect (const std::string &host, std::size_t port, const sentinel_disconnect_handler_t &disconnect_handler=nullptr, std::uint32_t timeout_ms=0)
 
bool get_master_addr_by_name (const std::string &m_name, std::string &host, std::size_t &port, bool autoconnect=true)
 
std::uint32_t timeout_msecs = 0 timeout_ms = 0 
hostsentinel host
portsentinel port
timeout_msecsmaximum time to connect
timeout_msmaximum time to connect
@@ -375,7 +375,7 @@

std::uint32_t  - timeout_msecs = 0  + timeout_ms = 0  @@ -389,7 +389,7 @@

hosthost to be connected to portport to be connected to - timeout_msecsmaximum time to connect + timeout_msmaximum time to connect disconnect_handlerhandler to be called whenever disconnection occurs diff --git a/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def-members.html b/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def-members.html index 2e7a552d..d222eb06 100644 --- a/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def-members.html +++ b/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def-members.html @@ -77,9 +77,9 @@ - - - + + +
get_host(void) constcpp_redis::sentinel::sentinel_definline
get_port(void) constcpp_redis::sentinel::sentinel_definline
get_timeout_msecs(void) constcpp_redis::sentinel::sentinel_definline
sentinel_def(const std::string &host, std::size_t port, std::uint32_t timeout_msecs)cpp_redis::sentinel::sentinel_definline
set_timeout_msecs(std::uint32_t timeout_msecs)cpp_redis::sentinel::sentinel_definline
get_timeout_ms(void) constcpp_redis::sentinel::sentinel_definline
sentinel_def(const std::string &host, std::size_t port, std::uint32_t timeout_ms)cpp_redis::sentinel::sentinel_definline
set_timeout_ms(std::uint32_t timeout_ms)cpp_redis::sentinel::sentinel_definline
~sentinel_def(void)=defaultcpp_redis::sentinel::sentinel_def
diff --git a/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def.html b/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def.html index ed77c2e6..bedd7c7b 100644 --- a/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def.html +++ b/docs/html/classcpp__redis_1_1sentinel_1_1sentinel__def.html @@ -81,7 +81,7 @@

Public Member Functions

sentinel_def (const std::string &host, std::size_t port, std::uint32_t timeout_msecs) + sentinel_def (const std::string &host, std::size_t port, std::uint32_t timeout_ms)  ctor
  @@ -92,9 +92,9 @@   size_t get_port (void) const   -std::uint32_t get_timeout_msecs (void) const +std::uint32_t get_timeout_ms (void) const   -void set_timeout_msecs (std::uint32_t timeout_msecs) +void set_timeout_ms (std::uint32_t timeout_ms)  

Detailed Description

@@ -155,7 +155,7 @@

-

◆ get_timeout_msecs()

+

◆ get_timeout_ms()

@@ -164,7 +164,7 @@

- + @@ -182,7 +182,7 @@

-

◆ set_timeout_msecs()

+

◆ set_timeout_ms()

@@ -191,10 +191,10 @@

std::uint32_t cpp_redis::sentinel::sentinel_def::get_timeout_msecs std::uint32_t cpp_redis::sentinel::sentinel_def::get_timeout_ms ( void  )
- + - +
void cpp_redis::sentinel::sentinel_def::set_timeout_msecs void cpp_redis::sentinel::sentinel_def::set_timeout_ms ( std::uint32_t timeout_msecs)timeout_ms)
@@ -204,9 +204,9 @@

-

set connect timeout for sentinel in msecs

Parameters
+

set connect timeout for sentinel in ms

Parameters
- +
timeout_msecsnew value
timeout_msnew value
diff --git a/docs/html/classcpp__redis_1_1subscriber-members.html b/docs/html/classcpp__redis_1_1subscriber-members.html index 77eeb3c2..7bc05e59 100644 --- a/docs/html/classcpp__redis_1_1subscriber-members.html +++ b/docs/html/classcpp__redis_1_1subscriber-members.html @@ -76,13 +76,13 @@

This is the complete list of members for cpp_redis::subscriber, including all inherited members.

- + - - + + diff --git a/docs/html/classcpp__redis_1_1subscriber.html b/docs/html/classcpp__redis_1_1subscriber.html index fbbe38b4..c0b6d6b6 100644 --- a/docs/html/classcpp__redis_1_1subscriber.html +++ b/docs/html/classcpp__redis_1_1subscriber.html @@ -127,10 +127,10 @@ subscriber &  - + - + @@ -159,7 +159,7 @@ - + @@ -293,7 +293,7 @@

- + @@ -307,7 +307,7 @@

- +
acknowledgement_callback_t typedefcpp_redis::subscriber
add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)cpp_redis::subscriber
add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)cpp_redis::subscriber
auth(const std::string &password, const reply_callback_t &reply_callback=nullptr)cpp_redis::subscriber
cancel_reconnect()cpp_redis::subscriber
clear_sentinels()cpp_redis::subscriber
commit()cpp_redis::subscriber
connect(const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)cpp_redis::subscriber
connect(const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)cpp_redis::subscriber
connect(const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)cpp_redis::subscriber
connect(const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)cpp_redis::subscriber
connect_callback_t typedefcpp_redis::subscriber
connect_state enum m_namecpp_redis::subscriber
disconnect(bool wait_for_removal=false)cpp_redis::subscriber
operator= (const subscriber &)=delete
 assignment operator
 
void connect (const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)
void connect (const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)
 Connect to redis server. More...
 
void connect (const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)
void connect (const std::string &m_name, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)
 Connect to redis server. More...
 
bool is_connected () const
 
subscribercommit ()
 
void add_sentinel (const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)
void add_sentinel (const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)
 
const sentinelget_sentinel () const
 
std::uint32_t timeout_msecs = 0 timeout_ms = 0 
hostsentinel host
portsentinel port
timeout_msecsmaximum time to connect
timeout_msmaximum time to connect
@@ -417,7 +417,7 @@

std::uint32_t  - timeout_msecs = 0, + timeout_ms = 0, @@ -429,7 +429,7 @@

std::uint32_t  - reconnect_interval_msecs = 0  + reconnect_interval_ms = 0  @@ -445,9 +445,9 @@

hosthost to be connected to portport to be connected to connect_callbackconnect handler to be called on connect events (may be null) - timeout_msecsmaximum time to connect + timeout_msmaximum time to connect max_reconnectsmaximum attempts of reconnection if connection dropped - reconnect_interval_msecstime between two attempts of reconnection + reconnect_interval_mstime between two attempts of reconnection @@ -476,7 +476,7 @@

std::uint32_t  - timeout_msecs = 0, + timeout_ms = 0, @@ -488,7 +488,7 @@

std::uint32_t  - reconnect_interval_msecs = 0  + reconnect_interval_ms = 0  @@ -503,9 +503,9 @@

m_namesentinel m_name connect_callbackconnect handler to be called on connect events (may be null) - timeout_msecsmaximum time to connect + timeout_msmaximum time to connect max_reconnectsmaximum attempts of reconnection if connection dropped - reconnect_interval_msecstime between two attempts of reconnection + reconnect_interval_mstime between two attempts of reconnection diff --git a/docs/html/client_8hpp_source.html b/docs/html/client_8hpp_source.html index 1981bd86..3311685f 100644 --- a/docs/html/client_8hpp_source.html +++ b/docs/html/client_8hpp_source.html @@ -72,7 +72,7 @@
client.hpp

-
1 // The MIT License (MIT)
2 //
3 // Copyright (c) 2015-2017 Simon Ninon <simon.ninon@gmail.com>
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in all
13 // copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 // SOFTWARE.
22 
23 #pragma once
24 
25 #include <atomic>
26 #include <condition_variable>
27 #include <functional>
28 #include <future>
29 #include <map>
30 #include <mutex>
31 #include <queue>
32 #include <string>
33 #include <vector>
34 
35 #include <cpp_redis/core/sentinel.hpp>
36 #include <cpp_redis/helpers/variadic_template.hpp>
37 #include <cpp_redis/misc/logger.hpp>
38 #include <cpp_redis/network/redis_connection.hpp>
39 #include <cpp_redis/network/tcp_client_iface.hpp>
40 
41 namespace cpp_redis {
42 
48  class client {
49  public:
54  enum class client_type {
55  normal,
56  master,
57  pubsub,
58  slave
59  };
60 
71  enum class connect_state {
72  dropped,
73  start,
74  sleeping,
75  ok,
76  failed,
77  lookup_failed,
78  stopped
79  };
80 
81  public:
82 #ifndef __CPP_REDIS_USE_CUSTOM_TCP_CLIENT
83 
85  client();
86 
87 #endif /* __CPP_REDIS_USE_CUSTOM_TCP_CLIENT */
88 
94  explicit client(const std::shared_ptr<network::tcp_client_iface> &tcp_client);
95 
97  ~client();
98 
100  client(const client &) = delete;
101 
103  client &operator=(const client &) = delete;
104 
105  public:
109  typedef std::function<void(const std::string &host, std::size_t port, connect_state status)> connect_callback_t;
110 
121  void connect(
122  const std::string &host = "127.0.0.1",
123  std::size_t port = 6379,
124  const connect_callback_t &connect_callback = nullptr,
125  std::uint32_t timeout_msecs = 0,
126  std::int32_t max_reconnects = 0,
127  std::uint32_t reconnect_interval_msecs = 0);
128 
138  void connect(
139  const std::string &m_name,
140  const connect_callback_t &connect_callback = nullptr,
141  std::uint32_t timeout_msecs = 0,
142  std::int32_t max_reconnects = 0,
143  std::uint32_t reconnect_interval_msecs = 0);
144 
148  bool is_connected() const;
149 
155  void disconnect(bool wait_for_removal = false);
156 
160  bool is_reconnecting() const;
161 
165  void cancel_reconnect();
166 
167  public:
172  typedef std::function<void(reply &)> reply_callback_t;
173 
183  client &send(const std::vector<std::string> &redis_cmd, const reply_callback_t &callback);
184 
192  std::future<reply> send(const std::vector<std::string> &redis_cmd);
193 
202  client &commit();
203 
210  client &sync_commit();
211 
218  template<class Rep, class Period>
219  client &
220  sync_commit(const std::chrono::duration<Rep, Period> &timeout) {
223  if (!is_reconnecting()) {
224  try_commit();
225  }
226 
227  std::unique_lock<std::mutex> lock_callback(m_callbacks_mutex);
228  __CPP_REDIS_LOG(debug, "cpp_redis::client waiting for callbacks to complete");
229  if (!m_sync_condvar.wait_for(lock_callback, timeout,
230  [=] { return m_callbacks_running == 0 && m_commands.empty(); })) {
231  __CPP_REDIS_LOG(debug, "cpp_redis::client finished waiting for callback");
232  } else {
233  __CPP_REDIS_LOG(debug, "cpp_redis::client timed out waiting for callback");
234  }
235 
236  return *this;
237  }
238 
239  private:
243  bool should_reconnect() const;
244 
248  void resend_failed_commands();
249 
253  void sleep_before_next_reconnect_attempt();
254 
259  void reconnect();
260 
264  void re_auth();
265 
269  void re_select();
270 
271  private:
279  void unprotected_send(const std::vector<std::string> &redis_cmd, const reply_callback_t &callback);
280 
288  void unprotected_auth(const std::string &password, const reply_callback_t &reply_callback);
289 
297  void unprotected_select(int index, const reply_callback_t &reply_callback);
298 
299  public:
307  void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_msecs = 0);
308 
314  const sentinel &get_sentinel() const;
315 
323 
327  void clear_sentinels();
328 
329  public:
335  enum class aggregate_method {
336  sum,
337  min,
338  max,
339  server_default
340  };
341 
348  std::string aggregate_method_to_string(aggregate_method method) const;
349 
350  public:
355  enum class geo_unit {
356  m,
357  km,
358  ft,
359  mi
360  };
361 
368  std::string geo_unit_to_string(geo_unit unit) const;
369 
370  public:
376  enum class overflow_type {
377  wrap,
378  sat,
379  fail,
380  server_default
381  };
382 
389  std::string overflow_type_to_string(overflow_type type) const;
390 
391  public:
397  get,
398  set,
399  incrby
400  };
401 
408  std::string
410 
411  public:
420 
424  std::string type;
425 
429  int offset;
430 
434  int value;
435 
440 
449  static bitfield_operation
450  get(const std::string &type, int offset, overflow_type overflow = overflow_type::server_default);
451 
461  static bitfield_operation
462  set(const std::string &type, int offset, int value, overflow_type overflow = overflow_type::server_default);
463 
473  static bitfield_operation incrby(const std::string &type, int offset, int increment,
474  overflow_type overflow = overflow_type::server_default);
475  };
476 
477  public:
478  client &
479  append(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
480 
481  std::future<reply> append(const std::string &key, const std::string &value);
482 
483  client &auth(const std::string &password, const reply_callback_t &reply_callback);
484 
485  std::future<reply> auth(const std::string &password);
486 
487  client &bgrewriteaof(const reply_callback_t &reply_callback);
488 
489  std::future<reply> bgrewriteaof();
490 
491  client &bgsave(const reply_callback_t &reply_callback);
492 
493  std::future<reply> bgsave();
494 
495  client &bitcount(const std::string &key, const reply_callback_t &reply_callback);
496 
497  std::future<reply> bitcount(const std::string &key);
498 
499  client &bitcount(const std::string &key, int start, int end, const reply_callback_t &reply_callback);
500 
501  std::future<reply> bitcount(const std::string &key, int start, int end);
502 
503  client &bitfield(const std::string &key, const std::vector<bitfield_operation> &operations,
504  const reply_callback_t &reply_callback);
505 
506  std::future<reply> bitfield(const std::string &key, const std::vector<bitfield_operation> &operations);
507 
508  client &bitop(const std::string &operation, const std::string &destkey, const std::vector<std::string> &keys,
509  const reply_callback_t &reply_callback);
510 
511  std::future<reply>
512  bitop(const std::string &operation, const std::string &destkey, const std::vector<std::string> &keys);
513 
514  client &bitpos(const std::string &key, int bit, const reply_callback_t &reply_callback);
515 
516  std::future<reply> bitpos(const std::string &key, int bit);
517 
518  client &bitpos(const std::string &key, int bit, int start, const reply_callback_t &reply_callback);
519 
520  std::future<reply> bitpos(const std::string &key, int bit, int start);
521 
522  client &bitpos(const std::string &key, int bit, int start, int end, const reply_callback_t &reply_callback);
523 
524  std::future<reply> bitpos(const std::string &key, int bit, int start, int end);
525 
526  client &blpop(const std::vector<std::string> &keys, int timeout, const reply_callback_t &reply_callback);
527 
528  std::future<reply> blpop(const std::vector<std::string> &keys, int timeout);
529 
530  client &brpop(const std::vector<std::string> &keys, int timeout, const reply_callback_t &reply_callback);
531 
532  std::future<reply> brpop(const std::vector<std::string> &keys, int timeout);
533 
534  client &
535  brpoplpush(const std::string &src, const std::string &dst, int timeout, const reply_callback_t &reply_callback);
536 
537  std::future<reply> brpoplpush(const std::string &src, const std::string &dst, int timeout);
538 
539  template<typename T, typename... Ts>
540  client &client_kill(const std::string &host, int port, const T &arg, const Ts &... args);
541 
542  client &client_kill(const std::string &host, int port);
543 
544  template<typename... Ts>
545  client &client_kill(const char *host, int port, const Ts &... args);
546 
547  template<typename T, typename... Ts>
548  client &client_kill(const T &, const Ts &...);
549 
550  template<typename T, typename... Ts>
551  std::future<reply> client_kill_future(T, const Ts...);
552 
553  client &client_list(const reply_callback_t &reply_callback);
554 
555  std::future<reply> client_list();
556 
557  client &client_getname(const reply_callback_t &reply_callback);
558 
559  std::future<reply> client_getname();
560 
561  client &client_pause(int timeout, const reply_callback_t &reply_callback);
562 
563  std::future<reply> client_pause(int timeout);
564 
565  client &client_reply(const std::string &mode, const reply_callback_t &reply_callback);
566 
567  std::future<reply> client_reply(const std::string &mode);
568 
569  client &client_setname(const std::string &m_name, const reply_callback_t &reply_callback);
570 
571  std::future<reply> client_setname(const std::string &m_name);
572 
573  client &cluster_addslots(const std::vector<std::string> &p_slots, const reply_callback_t &reply_callback);
574 
575  std::future<reply> cluster_addslots(const std::vector<std::string> &p_slots);
576 
577  client &cluster_count_failure_reports(const std::string &node_id, const reply_callback_t &reply_callback);
578 
579  std::future<reply> cluster_count_failure_reports(const std::string &node_id);
580 
581  client &cluster_countkeysinslot(const std::string &slot, const reply_callback_t &reply_callback);
582 
583  std::future<reply> cluster_countkeysinslot(const std::string &slot);
584 
585  client &cluster_delslots(const std::vector<std::string> &p_slots, const reply_callback_t &reply_callback);
586 
587  std::future<reply> cluster_delslots(const std::vector<std::string> &p_slots);
588 
589  client &cluster_failover(const reply_callback_t &reply_callback);
590 
591  std::future<reply> cluster_failover();
592 
593  client &cluster_failover(const std::string &mode, const reply_callback_t &reply_callback);
594 
595  std::future<reply> cluster_failover(const std::string &mode);
596 
597  client &cluster_forget(const std::string &node_id, const reply_callback_t &reply_callback);
598 
599  std::future<reply> cluster_forget(const std::string &node_id);
600 
601  client &cluster_getkeysinslot(const std::string &slot, int count, const reply_callback_t &reply_callback);
602 
603  std::future<reply> cluster_getkeysinslot(const std::string &slot, int count);
604 
605  client &cluster_info(const reply_callback_t &reply_callback);
606 
607  std::future<reply> cluster_info();
608 
609  client &cluster_keyslot(const std::string &key, const reply_callback_t &reply_callback);
610 
611  std::future<reply> cluster_keyslot(const std::string &key);
612 
613  client &cluster_meet(const std::string &ip, int port, const reply_callback_t &reply_callback);
614 
615  std::future<reply> cluster_meet(const std::string &ip, int port);
616 
617  client &cluster_nodes(const reply_callback_t &reply_callback);
618 
619  std::future<reply> cluster_nodes();
620 
621  client &cluster_replicate(const std::string &node_id, const reply_callback_t &reply_callback);
622 
623  std::future<reply> cluster_replicate(const std::string &node_id);
624 
625  client &cluster_reset(const reply_callback_t &reply_callback);
626 
627  client &cluster_reset(const std::string &mode, const reply_callback_t &reply_callback);
628 
629  std::future<reply> cluster_reset(const std::string &mode = "soft");
630 
631  client &cluster_saveconfig(const reply_callback_t &reply_callback);
632 
633  std::future<reply> cluster_saveconfig();
634 
635  client &cluster_set_config_epoch(const std::string &epoch, const reply_callback_t &reply_callback);
636 
637  std::future<reply> cluster_set_config_epoch(const std::string &epoch);
638 
639  client &cluster_setslot(const std::string &slot, const std::string &mode, const reply_callback_t &reply_callback);
640 
641  std::future<reply> cluster_setslot(const std::string &slot, const std::string &mode);
642 
643  client &cluster_setslot(const std::string &slot, const std::string &mode, const std::string &node_id,
644  const reply_callback_t &reply_callback);
645 
646  std::future<reply> cluster_setslot(const std::string &slot, const std::string &mode, const std::string &node_id);
647 
648  client &cluster_slaves(const std::string &node_id, const reply_callback_t &reply_callback);
649 
650  std::future<reply> cluster_slaves(const std::string &node_id);
651 
652  client &cluster_slots(const reply_callback_t &reply_callback);
653 
654  std::future<reply> cluster_slots();
655 
656  client &command(const reply_callback_t &reply_callback);
657 
658  std::future<reply> command();
659 
660  client &command_count(const reply_callback_t &reply_callback);
661 
662  std::future<reply> command_count();
663 
664  client &command_getkeys(const reply_callback_t &reply_callback);
665 
666  std::future<reply> command_getkeys();
667 
668  client &command_info(const std::vector<std::string> &command_name, const reply_callback_t &reply_callback);
669 
670  std::future<reply> command_info(const std::vector<std::string> &command_name);
671 
672  client &config_get(const std::string &param, const reply_callback_t &reply_callback);
673 
674  std::future<reply> config_get(const std::string &param);
675 
676  client &config_rewrite(const reply_callback_t &reply_callback);
677 
678  std::future<reply> config_rewrite();
679 
680  client &config_set(const std::string &param, const std::string &val, const reply_callback_t &reply_callback);
681 
682  std::future<reply> config_set(const std::string &param, const std::string &val);
683 
684  client &config_resetstat(const reply_callback_t &reply_callback);
685 
686  std::future<reply> config_resetstat();
687 
688  client &dbsize(const reply_callback_t &reply_callback);
689 
690  std::future<reply> dbsize();
691 
692  client &debug_object(const std::string &key, const reply_callback_t &reply_callback);
693 
694  std::future<reply> debug_object(const std::string &key);
695 
696  client &debug_segfault(const reply_callback_t &reply_callback);
697 
698  std::future<reply> debug_segfault();
699 
700  client &decr(const std::string &key, const reply_callback_t &reply_callback);
701 
702  std::future<reply> decr(const std::string &key);
703 
704  client &decrby(const std::string &key, int val, const reply_callback_t &reply_callback);
705 
706  std::future<reply> decrby(const std::string &key, int val);
707 
708  client &del(const std::vector<std::string> &key, const reply_callback_t &reply_callback);
709 
710  std::future<reply> del(const std::vector<std::string> &key);
711 
712  client &discard(const reply_callback_t &reply_callback);
713 
714  std::future<reply> discard();
715 
716  client &dump(const std::string &key, const reply_callback_t &reply_callback);
717 
718  std::future<reply> dump(const std::string &key);
719 
720  client &echo(const std::string &msg, const reply_callback_t &reply_callback);
721 
722  std::future<reply> echo(const std::string &msg);
723 
724  client &eval(const std::string &script, int numkeys, const std::vector<std::string> &keys,
725  const std::vector<std::string> &args, const reply_callback_t &reply_callback);
726 
727  std::future<reply> eval(const std::string &script, int numkeys, const std::vector<std::string> &keys,
728  const std::vector<std::string> &args);
729 
730  client &evalsha(const std::string &sha1, int numkeys, const std::vector<std::string> &keys,
731  const std::vector<std::string> &args, const reply_callback_t &reply_callback);
732 
733  std::future<reply> evalsha(const std::string &sha1, int numkeys, const std::vector<std::string> &keys,
734  const std::vector<std::string> &args);
735 
736  client &exec(const reply_callback_t &reply_callback);
737 
738  std::future<reply> exec();
739 
740  client &exists(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
741 
742  std::future<reply> exists(const std::vector<std::string> &keys);
743 
744  client &expire(const std::string &key, int seconds, const reply_callback_t &reply_callback);
745 
746  std::future<reply> expire(const std::string &key, int seconds);
747 
748  client &expireat(const std::string &key, int timestamp, const reply_callback_t &reply_callback);
749 
750  std::future<reply> expireat(const std::string &key, int timestamp);
751 
752  client &flushall(const reply_callback_t &reply_callback);
753 
754  std::future<reply> flushall();
755 
756  client &flushdb(const reply_callback_t &reply_callback);
757 
758  std::future<reply> flushdb();
759 
760  client &geoadd(const std::string &key,
761  const std::vector<std::tuple<std::string, std::string, std::string>> &long_lat_memb,
762  const reply_callback_t &reply_callback);
763 
764  std::future<reply> geoadd(const std::string &key,
765  const std::vector<std::tuple<std::string, std::string, std::string>> &long_lat_memb);
766 
767  client &
768  geohash(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
769 
770  std::future<reply> geohash(const std::string &key, const std::vector<std::string> &members);
771 
772  client &
773  geopos(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
774 
775  std::future<reply> geopos(const std::string &key, const std::vector<std::string> &members);
776 
777  client &geodist(const std::string &key, const std::string &member_1, const std::string &member_2,
778  const reply_callback_t &reply_callback);
779 
780  client &
781  geodist(const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit,
782  const reply_callback_t &reply_callback);
783 
784  std::future<reply> geodist(const std::string &key, const std::string &member_1, const std::string &member_2,
785  const std::string &unit = "m");
786 
787  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
788  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
789  const reply_callback_t &reply_callback);
790 
791  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
792  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
793  const reply_callback_t &reply_callback);
794 
795  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
796  bool with_coord, bool with_dist, bool with_hash, bool asc_order, const std::string &store_key,
797  const reply_callback_t &reply_callback);
798 
799  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
800  bool with_coord, bool with_dist, bool with_hash, bool asc_order, const std::string &store_key,
801  const std::string &storedist_key, const reply_callback_t &reply_callback);
802 
803  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
804  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
805  const std::string &store_key, const reply_callback_t &reply_callback);
806 
807  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
808  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
809  const std::string &store_key, const std::string &storedist_key,
810  const reply_callback_t &reply_callback);
811 
812  std::future<reply>
813  georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
814  bool with_coord = false, bool with_dist = false, bool with_hash = false, bool asc_order = false,
815  std::size_t count = 0, const std::string &store_key = "", const std::string &storedist_key = "");
816 
817  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
818  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
819  const reply_callback_t &reply_callback);
820 
821  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
822  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
823  const reply_callback_t &reply_callback);
824 
825  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
826  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
827  const std::string &store_key, const reply_callback_t &reply_callback);
828 
829  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
830  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
831  const std::string &store_key, const std::string &storedist_key,
832  const reply_callback_t &reply_callback);
833 
834  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
835  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
836  const std::string &store_key, const reply_callback_t &reply_callback);
837 
838  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
839  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
840  const std::string &store_key, const std::string &storedist_key,
841  const reply_callback_t &reply_callback);
842 
843  std::future<reply>
844  georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
845  bool with_coord = false, bool with_dist = false, bool with_hash = false, bool asc_order = false,
846  std::size_t count = 0, const std::string &store_key = "",
847  const std::string &storedist_key = "");
848 
849  client &get(const std::string &key, const reply_callback_t &reply_callback);
850 
851  std::future<reply> get(const std::string &key);
852 
853  client &getbit(const std::string &key, int offset, const reply_callback_t &reply_callback);
854 
855  std::future<reply> getbit(const std::string &key, int offset);
856 
857  client &getrange(const std::string &key, int start, int end, const reply_callback_t &reply_callback);
858 
859  std::future<reply> getrange(const std::string &key, int start, int end);
860 
861  client &getset(const std::string &key, const std::string &val, const reply_callback_t &reply_callback);
862 
863  std::future<reply> getset(const std::string &key, const std::string &val);
864 
865  client &
866  hdel(const std::string &key, const std::vector<std::string> &fields, const reply_callback_t &reply_callback);
867 
868  std::future<reply> hdel(const std::string &key, const std::vector<std::string> &fields);
869 
870  client &hexists(const std::string &key, const std::string &field, const reply_callback_t &reply_callback);
871 
872  std::future<reply> hexists(const std::string &key, const std::string &field);
873 
874  client &hget(const std::string &key, const std::string &field, const reply_callback_t &reply_callback);
875 
876  std::future<reply> hget(const std::string &key, const std::string &field);
877 
878  client &hgetall(const std::string &key, const reply_callback_t &reply_callback);
879 
880  std::future<reply> hgetall(const std::string &key);
881 
882  client &
883  hincrby(const std::string &key, const std::string &field, int incr, const reply_callback_t &reply_callback);
884 
885  std::future<reply> hincrby(const std::string &key, const std::string &field, int incr);
886 
887  client &hincrbyfloat(const std::string &key, const std::string &field, float incr,
888  const reply_callback_t &reply_callback);
889 
890  std::future<reply> hincrbyfloat(const std::string &key, const std::string &field, float incr);
891 
892  client &hkeys(const std::string &key, const reply_callback_t &reply_callback);
893 
894  std::future<reply> hkeys(const std::string &key);
895 
896  client &hlen(const std::string &key, const reply_callback_t &reply_callback);
897 
898  std::future<reply> hlen(const std::string &key);
899 
900  client &
901  hmget(const std::string &key, const std::vector<std::string> &fields, const reply_callback_t &reply_callback);
902 
903  std::future<reply> hmget(const std::string &key, const std::vector<std::string> &fields);
904 
905  client &hmset(const std::string &key, const std::vector<std::pair<std::string, std::string>> &field_val,
906  const reply_callback_t &reply_callback);
907 
908  std::future<reply>
909  hmset(const std::string &key, const std::vector<std::pair<std::string, std::string>> &field_val);
910 
911  client &hscan(const std::string &key, std::size_t cursor, const reply_callback_t &reply_callback);
912 
913  std::future<reply> hscan(const std::string &key, std::size_t cursor);
914 
915  client &hscan(const std::string &key, std::size_t cursor, const std::string &pattern,
916  const reply_callback_t &reply_callback);
917 
918  std::future<reply> hscan(const std::string &key, std::size_t cursor, const std::string &pattern);
919 
920  client &
921  hscan(const std::string &key, std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
922 
923  std::future<reply> hscan(const std::string &key, std::size_t cursor, std::size_t count);
924 
925  client &hscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count,
926  const reply_callback_t &reply_callback);
927 
928  std::future<reply>
929  hscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count);
930 
931  client &hset(const std::string &key, const std::string &field, const std::string &value,
932  const reply_callback_t &reply_callback);
933 
934  std::future<reply> hset(const std::string &key, const std::string &field, const std::string &value);
935 
936  client &hsetnx(const std::string &key, const std::string &field, const std::string &value,
937  const reply_callback_t &reply_callback);
938 
939  std::future<reply> hsetnx(const std::string &key, const std::string &field, const std::string &value);
940 
941  client &hstrlen(const std::string &key, const std::string &field, const reply_callback_t &reply_callback);
942 
943  std::future<reply> hstrlen(const std::string &key, const std::string &field);
944 
945  client &hvals(const std::string &key, const reply_callback_t &reply_callback);
946 
947  std::future<reply> hvals(const std::string &key);
948 
949  client &incr(const std::string &key, const reply_callback_t &reply_callback);
950 
951  std::future<reply> incr(const std::string &key);
952 
953  client &incrby(const std::string &key, int incr, const reply_callback_t &reply_callback);
954 
955  std::future<reply> incrby(const std::string &key, int incr);
956 
957  client &incrbyfloat(const std::string &key, float incr, const reply_callback_t &reply_callback);
958 
959  std::future<reply> incrbyfloat(const std::string &key, float incr);
960 
961  client &info(const reply_callback_t &reply_callback);
962 
963  client &info(const std::string &section, const reply_callback_t &reply_callback);
964 
965  std::future<reply> info(const std::string &section = "default");
966 
967  client &keys(const std::string &pattern, const reply_callback_t &reply_callback);
968 
969  std::future<reply> keys(const std::string &pattern);
970 
971  client &lastsave(const reply_callback_t &reply_callback);
972 
973  std::future<reply> lastsave();
974 
975  client &lindex(const std::string &key, int index, const reply_callback_t &reply_callback);
976 
977  std::future<reply> lindex(const std::string &key, int index);
978 
979  client &linsert(const std::string &key, const std::string &before_after, const std::string &pivot,
980  const std::string &value, const reply_callback_t &reply_callback);
981 
982  std::future<reply> linsert(const std::string &key, const std::string &before_after, const std::string &pivot,
983  const std::string &value);
984 
985  client &llen(const std::string &key, const reply_callback_t &reply_callback);
986 
987  std::future<reply> llen(const std::string &key);
988 
989  client &lpop(const std::string &key, const reply_callback_t &reply_callback);
990 
991  std::future<reply> lpop(const std::string &key);
992 
993  client &
994  lpush(const std::string &key, const std::vector<std::string> &values, const reply_callback_t &reply_callback);
995 
996  std::future<reply> lpush(const std::string &key, const std::vector<std::string> &values);
997 
998  client &lpushx(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
999 
1000  std::future<reply> lpushx(const std::string &key, const std::string &value);
1001 
1002  client &lrange(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1003 
1004  std::future<reply> lrange(const std::string &key, int start, int stop);
1005 
1006  client &lrem(const std::string &key, int count, const std::string &value, const reply_callback_t &reply_callback);
1007 
1008  std::future<reply> lrem(const std::string &key, int count, const std::string &value);
1009 
1010  client &lset(const std::string &key, int index, const std::string &value, const reply_callback_t &reply_callback);
1011 
1012  std::future<reply> lset(const std::string &key, int index, const std::string &value);
1013 
1014  client &ltrim(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1015 
1016  std::future<reply> ltrim(const std::string &key, int start, int stop);
1017 
1018  client &mget(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1019 
1020  std::future<reply> mget(const std::vector<std::string> &keys);
1021 
1022  client &
1023  migrate(const std::string &host, int port, const std::string &key, const std::string &dest_db, int timeout,
1024  const reply_callback_t &reply_callback);
1025 
1026  client &
1027  migrate(const std::string &host, int port, const std::string &key, const std::string &dest_db, int timeout,
1028  bool copy, bool replace, const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1029 
1030  std::future<reply>
1031  migrate(const std::string &host, int port, const std::string &key, const std::string &dest_db, int timeout,
1032  bool copy = false, bool replace = false, const std::vector<std::string> &keys = {});
1033 
1034  client &monitor(const reply_callback_t &reply_callback);
1035 
1036  std::future<reply> monitor();
1037 
1038  client &move(const std::string &key, const std::string &db, const reply_callback_t &reply_callback);
1039 
1040  std::future<reply> move(const std::string &key, const std::string &db);
1041 
1042  client &
1043  mset(const std::vector<std::pair<std::string, std::string>> &key_vals, const reply_callback_t &reply_callback);
1044 
1045  std::future<reply> mset(const std::vector<std::pair<std::string, std::string>> &key_vals);
1046 
1047  client &
1048  msetnx(const std::vector<std::pair<std::string, std::string>> &key_vals, const reply_callback_t &reply_callback);
1049 
1050  std::future<reply> msetnx(const std::vector<std::pair<std::string, std::string>> &key_vals);
1051 
1052  client &multi(const reply_callback_t &reply_callback);
1053 
1054  std::future<reply> multi();
1055 
1056  client &object(const std::string &subcommand, const std::vector<std::string> &args,
1057  const reply_callback_t &reply_callback);
1058 
1059  std::future<reply> object(const std::string &subcommand, const std::vector<std::string> &args);
1060 
1061  client &persist(const std::string &key, const reply_callback_t &reply_callback);
1062 
1063  std::future<reply> persist(const std::string &key);
1064 
1065  client &pexpire(const std::string &key, int milliseconds, const reply_callback_t &reply_callback);
1066 
1067  std::future<reply> pexpire(const std::string &key, int milliseconds);
1068 
1069  client &pexpireat(const std::string &key, int milliseconds_timestamp, const reply_callback_t &reply_callback);
1070 
1071  std::future<reply> pexpireat(const std::string &key, int milliseconds_timestamp);
1072 
1073  client &
1074  pfadd(const std::string &key, const std::vector<std::string> &elements, const reply_callback_t &reply_callback);
1075 
1076  std::future<reply> pfadd(const std::string &key, const std::vector<std::string> &elements);
1077 
1078  client &pfcount(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1079 
1080  std::future<reply> pfcount(const std::vector<std::string> &keys);
1081 
1082  client &pfmerge(const std::string &destkey, const std::vector<std::string> &sourcekeys,
1083  const reply_callback_t &reply_callback);
1084 
1085  std::future<reply> pfmerge(const std::string &destkey, const std::vector<std::string> &sourcekeys);
1086 
1087  client &ping(const reply_callback_t &reply_callback);
1088 
1089  std::future<reply> ping();
1090 
1091  client &ping(const std::string &message, const reply_callback_t &reply_callback);
1092 
1093  std::future<reply> ping(const std::string &message);
1094 
1095  client &
1096  psetex(const std::string &key, int milliseconds, const std::string &val, const reply_callback_t &reply_callback);
1097 
1098  std::future<reply> psetex(const std::string &key, int milliseconds, const std::string &val);
1099 
1100  client &publish(const std::string &channel, const std::string &message, const reply_callback_t &reply_callback);
1101 
1102  std::future<reply> publish(const std::string &channel, const std::string &message);
1103 
1104  client &pubsub(const std::string &subcommand, const std::vector<std::string> &args,
1105  const reply_callback_t &reply_callback);
1106 
1107  std::future<reply> pubsub(const std::string &subcommand, const std::vector<std::string> &args);
1108 
1109  client &pttl(const std::string &key, const reply_callback_t &reply_callback);
1110 
1111  std::future<reply> pttl(const std::string &key);
1112 
1113  client &quit(const reply_callback_t &reply_callback);
1114 
1115  std::future<reply> quit();
1116 
1117  client &randomkey(const reply_callback_t &reply_callback);
1118 
1119  std::future<reply> randomkey();
1120 
1121  client &readonly(const reply_callback_t &reply_callback);
1122 
1123  std::future<reply> readonly();
1124 
1125  client &readwrite(const reply_callback_t &reply_callback);
1126 
1127  std::future<reply> readwrite();
1128 
1129  client &rename(const std::string &key, const std::string &newkey, const reply_callback_t &reply_callback);
1130 
1131  std::future<reply> rename(const std::string &key, const std::string &newkey);
1132 
1133  client &renamenx(const std::string &key, const std::string &newkey, const reply_callback_t &reply_callback);
1134 
1135  std::future<reply> renamenx(const std::string &key, const std::string &newkey);
1136 
1137  client &restore(const std::string &key, int ttl, const std::string &serialized_value,
1138  const reply_callback_t &reply_callback);
1139 
1140  std::future<reply> restore(const std::string &key, int ttl, const std::string &serialized_value);
1141 
1142  client &restore(const std::string &key, int ttl, const std::string &serialized_value, const std::string &replace,
1143  const reply_callback_t &reply_callback);
1144 
1145  std::future<reply>
1146  restore(const std::string &key, int ttl, const std::string &serialized_value, const std::string &replace);
1147 
1148  client &role(const reply_callback_t &reply_callback);
1149 
1150  std::future<reply> role();
1151 
1152  client &rpop(const std::string &key, const reply_callback_t &reply_callback);
1153 
1154  std::future<reply> rpop(const std::string &key);
1155 
1156  client &
1157  rpoplpush(const std::string &source, const std::string &destination, const reply_callback_t &reply_callback);
1158 
1159  std::future<reply> rpoplpush(const std::string &src, const std::string &dst);
1160 
1161  client &
1162  rpush(const std::string &key, const std::vector<std::string> &values, const reply_callback_t &reply_callback);
1163 
1164  std::future<reply> rpush(const std::string &key, const std::vector<std::string> &values);
1165 
1166  client &rpushx(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1167 
1168  std::future<reply> rpushx(const std::string &key, const std::string &value);
1169 
1170  client &
1171  sadd(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
1172 
1173  std::future<reply> sadd(const std::string &key, const std::vector<std::string> &members);
1174 
1175  client &save(const reply_callback_t &reply_callback);
1176 
1177  std::future<reply> save();
1178 
1179  client &scan(std::size_t cursor, const reply_callback_t &reply_callback);
1180 
1181  std::future<reply> scan(std::size_t cursor);
1182 
1183  client &scan(std::size_t cursor, const std::string &pattern, const reply_callback_t &reply_callback);
1184 
1185  std::future<reply> scan(std::size_t cursor, const std::string &pattern);
1186 
1187  client &scan(std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
1188 
1189  std::future<reply> scan(std::size_t cursor, std::size_t count);
1190 
1191  client &
1192  scan(std::size_t cursor, const std::string &pattern, std::size_t count, const reply_callback_t &reply_callback);
1193 
1194  std::future<reply> scan(std::size_t cursor, const std::string &pattern, std::size_t count);
1195 
1196  client &scard(const std::string &key, const reply_callback_t &reply_callback);
1197 
1198  std::future<reply> scard(const std::string &key);
1199 
1200  client &script_debug(const std::string &mode, const reply_callback_t &reply_callback);
1201 
1202  std::future<reply> script_debug(const std::string &mode);
1203 
1204  client &script_exists(const std::vector<std::string> &scripts, const reply_callback_t &reply_callback);
1205 
1206  std::future<reply> script_exists(const std::vector<std::string> &scripts);
1207 
1208  client &script_flush(const reply_callback_t &reply_callback);
1209 
1210  std::future<reply> script_flush();
1211 
1212  client &script_kill(const reply_callback_t &reply_callback);
1213 
1214  std::future<reply> script_kill();
1215 
1216  client &script_load(const std::string &script, const reply_callback_t &reply_callback);
1217 
1218  std::future<reply> script_load(const std::string &script);
1219 
1220  client &sdiff(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1221 
1222  std::future<reply> sdiff(const std::vector<std::string> &keys);
1223 
1224  client &sdiffstore(const std::string &destination, const std::vector<std::string> &keys,
1225  const reply_callback_t &reply_callback);
1226 
1227  std::future<reply> sdiffstore(const std::string &dst, const std::vector<std::string> &keys);
1228 
1229  client &select(int index, const reply_callback_t &reply_callback);
1230 
1231  std::future<reply> select(int index);
1232 
1233  client &set(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1234 
1235  std::future<reply> set(const std::string &key, const std::string &value);
1236 
1237  client &set_advanced(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1238 
1239  client &set_advanced(const std::string &key, const std::string &value, bool ex, int ex_sec, bool px, int px_milli,
1240  bool nx, bool xx, const reply_callback_t &reply_callback);
1241 
1242  std::future<reply>
1243  set_advanced(const std::string &key, const std::string &value, bool ex = false, int ex_sec = 0, bool px = false,
1244  int px_milli = 0, bool nx = false, bool xx = false);
1245 
1246  client &
1247  setbit_(const std::string &key, int offset, const std::string &value, const reply_callback_t &reply_callback);
1248 
1249  std::future<reply> setbit_(const std::string &key, int offset, const std::string &value);
1250 
1251  client &
1252  setex(const std::string &key, int seconds, const std::string &value, const reply_callback_t &reply_callback);
1253 
1254  std::future<reply> setex(const std::string &key, int seconds, const std::string &value);
1255 
1256  client &setnx(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1257 
1258  std::future<reply> setnx(const std::string &key, const std::string &value);
1259 
1260  client &
1261  setrange(const std::string &key, int offset, const std::string &value, const reply_callback_t &reply_callback);
1262 
1263  std::future<reply> setrange(const std::string &key, int offset, const std::string &value);
1264 
1265  client &shutdown(const reply_callback_t &reply_callback);
1266 
1267  std::future<reply> shutdown();
1268 
1269  client &shutdown(const std::string &save, const reply_callback_t &reply_callback);
1270 
1271  std::future<reply> shutdown(const std::string &save);
1272 
1273  client &sinter(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1274 
1275  std::future<reply> sinter(const std::vector<std::string> &keys);
1276 
1277  client &sinterstore(const std::string &destination, const std::vector<std::string> &keys,
1278  const reply_callback_t &reply_callback);
1279 
1280  std::future<reply> sinterstore(const std::string &dst, const std::vector<std::string> &keys);
1281 
1282  client &sismember(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1283 
1284  std::future<reply> sismember(const std::string &key, const std::string &member);
1285 
1286  client &slaveof(const std::string &host, int port, const reply_callback_t &reply_callback);
1287 
1288  std::future<reply> slaveof(const std::string &host, int port);
1289 
1290  client &slowlog(std::string subcommand, const reply_callback_t &reply_callback);
1291 
1292  std::future<reply> slowlog(const std::string &subcommand);
1293 
1294  client &
1295  slowlog(std::string subcommand, const std::string &argument, const reply_callback_t &reply_callback);
1296 
1297  std::future<reply> slowlog(const std::string &subcommand, const std::string &argument);
1298 
1299  client &smembers(const std::string &key, const reply_callback_t &reply_callback);
1300 
1301  std::future<reply> smembers(const std::string &key);
1302 
1303  client &smove(const std::string &source, const std::string &destination, const std::string &member,
1304  const reply_callback_t &reply_callback);
1305 
1306  std::future<reply> smove(const std::string &src, const std::string &dst, const std::string &member);
1307 
1308  client &sort(const std::string &key, const reply_callback_t &reply_callback);
1309 
1310  std::future<reply> sort(const std::string &key);
1311 
1312  client &sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1313  const reply_callback_t &reply_callback);
1314 
1315  std::future<reply>
1316  sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha);
1317 
1318  client &
1319  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1320  bool asc_order, bool alpha, const reply_callback_t &reply_callback);
1321 
1322  std::future<reply>
1323  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1324  bool asc_order, bool alpha);
1325 
1326  client &sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1327  bool asc_order, bool alpha, const reply_callback_t &reply_callback);
1328 
1329  std::future<reply>
1330  sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1331  bool asc_order, bool alpha);
1332 
1333  client &sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1334  const std::string &store_dest, const reply_callback_t &reply_callback);
1335 
1336  std::future<reply>
1337  sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1338  const std::string &store_dest);
1339 
1340  client &
1341  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1342  bool asc_order, bool alpha, const std::string &store_dest, const reply_callback_t &reply_callback);
1343 
1344  std::future<reply>
1345  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1346  bool asc_order, bool alpha, const std::string &store_dest);
1347 
1348  client &sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1349  bool asc_order, bool alpha, const std::string &store_dest, const reply_callback_t &reply_callback);
1350 
1351  std::future<reply>
1352  sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1353  bool asc_order, bool alpha, const std::string &store_dest);
1354 
1355  client &sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1356  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1357  const reply_callback_t &reply_callback);
1358 
1359  std::future<reply>
1360  sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1361  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha);
1362 
1363  client &sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1364  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1365  const std::string &store_dest, const reply_callback_t &reply_callback);
1366 
1367  std::future<reply>
1368  sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1369  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha, const std::string &store_dest);
1370 
1371  client &spop(const std::string &key, const reply_callback_t &reply_callback);
1372 
1373  std::future<reply> spop(const std::string &key);
1374 
1375  client &spop(const std::string &key, int count, const reply_callback_t &reply_callback);
1376 
1377  std::future<reply> spop(const std::string &key, int count);
1378 
1379  client &srandmember(const std::string &key, const reply_callback_t &reply_callback);
1380 
1381  std::future<reply> srandmember(const std::string &key);
1382 
1383  client &srandmember(const std::string &key, int count, const reply_callback_t &reply_callback);
1384 
1385  std::future<reply> srandmember(const std::string &key, int count);
1386 
1387  client &
1388  srem(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
1389 
1390  std::future<reply> srem(const std::string &key, const std::vector<std::string> &members);
1391 
1392  client &sscan(const std::string &key, std::size_t cursor, const reply_callback_t &reply_callback);
1393 
1394  std::future<reply> sscan(const std::string &key, std::size_t cursor);
1395 
1396  client &sscan(const std::string &key, std::size_t cursor, const std::string &pattern,
1397  const reply_callback_t &reply_callback);
1398 
1399  std::future<reply> sscan(const std::string &key, std::size_t cursor, const std::string &pattern);
1400 
1401  client &
1402  sscan(const std::string &key, std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
1403 
1404  std::future<reply> sscan(const std::string &key, std::size_t cursor, std::size_t count);
1405 
1406  client &sscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count,
1407  const reply_callback_t &reply_callback);
1408 
1409  std::future<reply>
1410  sscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count);
1411 
1412  client &strlen(const std::string &key, const reply_callback_t &reply_callback);
1413 
1414  std::future<reply> strlen(const std::string &key);
1415 
1416  client &sunion(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1417 
1418  std::future<reply> sunion(const std::vector<std::string> &keys);
1419 
1420  client &sunionstore(const std::string &destination, const std::vector<std::string> &keys,
1421  const reply_callback_t &reply_callback);
1422 
1423  std::future<reply> sunionstore(const std::string &dst, const std::vector<std::string> &keys);
1424 
1425  client &sync(const reply_callback_t &reply_callback);
1426 
1427  std::future<reply> sync();
1428 
1429  client &time(const reply_callback_t &reply_callback);
1430 
1431  std::future<reply> time();
1432 
1433  client &ttl(const std::string &key, const reply_callback_t &reply_callback);
1434 
1435  std::future<reply> ttl(const std::string &key);
1436 
1437  client &type(const std::string &key, const reply_callback_t &reply_callback);
1438 
1439  std::future<reply> type(const std::string &key);
1440 
1441  client &unwatch(const reply_callback_t &reply_callback);
1442 
1443  std::future<reply> unwatch();
1444 
1445  client &wait(int numslaves, int timeout, const reply_callback_t &reply_callback);
1446 
1447  std::future<reply> wait(int numslaves, int timeout);
1448 
1449  client &watch(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1450 
1451  std::future<reply> watch(const std::vector<std::string> &keys);
1452 
1453  client &xack(const std::string &key, const std::string &group, const std::vector<std::string> &id_members,
1454  const reply_callback_t &reply_callback);
1455 
1456  std::future<reply>
1457  xack(const std::string &key, const std::string &group, const std::vector<std::string> &id_members);
1458 
1459  client &
1460  xadd(const std::string &key, const std::string &id, const std::multimap<std::string, std::string> &field_members,
1461  const reply_callback_t &reply_callback);
1462 
1463  std::future<reply>
1464  xadd(const std::string &key, const std::string &id, const std::multimap<std::string, std::string> &field_members);
1465 
1466  client &xclaim(const std::string &key, const std::string &group, const std::string &consumer, int min_idle_time,
1467  const std::vector<std::string> &id_members, const reply_callback_t &reply_callback);
1468 
1469  std::future<reply>
1470  xclaim(const std::string &key, const std::string &group, const std::string &consumer, const int &min_idle_time,
1471  const std::vector<std::string> &id_members);
1472 
1473  client &
1474  xdel(const std::string &key, const std::vector<std::string> &id_members, const reply_callback_t &reply_callback);
1475 
1476  std::future<reply> xdel(const std::string &key, const std::vector<std::string> &id_members);
1477 
1478  client &
1479  xgroup_create(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1480 
1481  client &
1482  xgroup_create(const std::string &key, const std::string &group_name, const std::string &id,
1483  const reply_callback_t &reply_callback);
1484 
1485  std::future<reply>
1486  xgroup_create(const std::string &key, const std::string &group_name, const std::string &id = "$");
1487 
1488  client &
1489  xgroup_set_id(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1490 
1491  client &
1492  xgroup_set_id(const std::string &key, const std::string &group_name, const std::string &id,
1493  const reply_callback_t &reply_callback);
1494 
1495  std::future<reply>
1496  xgroup_set_id(const std::string &key, const std::string &group_name, const std::string &id = "$");
1497 
1498  client &
1499  xgroup_destroy(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1500 
1501  std::future<reply> xgroup_destroy(const std::string &key, const std::string &group_name);
1502 
1503  client &
1504  xgroup_del_consumer(const std::string &key, const std::string &group_name, const std::string &consumer_name,
1505  const reply_callback_t &reply_callback);
1506 
1507  std::future<reply>
1508  xgroup_del_consumer(const std::string &key, const std::string &group_name, const std::string &consumer_name);
1509 
1516  client & xinfo_consumers(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1517 
1524  std::future<reply> xinfo_consumers(const std::string &key, const std::string &group_name);
1525 
1532  client & xinfo_groups(const std::string &key, const reply_callback_t &reply_callback);
1533 
1539  std::future<reply> xinfo_groups(const std::string &key);
1540 
1541  client & xinfo_stream(const std::string &key, const reply_callback_t &reply_callback);
1542  std::future<reply> xinfo_stream(const std::string &key);
1543 
1553  client & xlen(const std::string &key, const reply_callback_t &reply_callback);
1559  std::future<reply> xlen(const std::string &key);
1560 
1561  client &zadd(const std::string &key, const std::vector<std::string> &options,
1562  const std::multimap<std::string, std::string> &score_members,
1563  const reply_callback_t &reply_callback);
1564 
1565  std::future<reply> zadd(const std::string &key, const std::vector<std::string> &options,
1566  const std::multimap<std::string, std::string> &score_members);
1567 
1568  client &zcard(const std::string &key, const reply_callback_t &reply_callback);
1569 
1570  std::future<reply> zcard(const std::string &key);
1571 
1572  client &zcount(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1573 
1574  std::future<reply> zcount(const std::string &key, int min, int max);
1575 
1576  client &zcount(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1577 
1578  std::future<reply> zcount(const std::string &key, double min, double max);
1579 
1580  client &zcount(const std::string &key, const std::string &min, const std::string &max,
1581  const reply_callback_t &reply_callback);
1582 
1583  std::future<reply> zcount(const std::string &key, const std::string &min, const std::string &max);
1584 
1585  client &
1586  zincrby(const std::string &key, int incr, const std::string &member, const reply_callback_t &reply_callback);
1587 
1588  std::future<reply> zincrby(const std::string &key, int incr, const std::string &member);
1589 
1590  client &
1591  zincrby(const std::string &key, double incr, const std::string &member, const reply_callback_t &reply_callback);
1592 
1593  std::future<reply> zincrby(const std::string &key, double incr, const std::string &member);
1594 
1595  client &zincrby(const std::string &key, const std::string &incr, const std::string &member,
1596  const reply_callback_t &reply_callback);
1597 
1598  std::future<reply> zincrby(const std::string &key, const std::string &incr, const std::string &member);
1599 
1600  client &zinterstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1601  std::vector<std::size_t> weights, aggregate_method method,
1602  const reply_callback_t &reply_callback);
1603 
1604  std::future<reply>
1605  zinterstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1606  std::vector<std::size_t> weights, aggregate_method method);
1607 
1608  client &zlexcount(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1609 
1610  std::future<reply> zlexcount(const std::string &key, int min, int max);
1611 
1612  client &zlexcount(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1613 
1614  std::future<reply> zlexcount(const std::string &key, double min, double max);
1615 
1616  client &zlexcount(const std::string &key, const std::string &min, const std::string &max,
1617  const reply_callback_t &reply_callback);
1618 
1619  std::future<reply> zlexcount(const std::string &key, const std::string &min, const std::string &max);
1620 
1621  client &zrange(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1622 
1623  client &
1624  zrange(const std::string &key, int start, int stop, bool withscores, const reply_callback_t &reply_callback);
1625 
1626  std::future<reply> zrange(const std::string &key, int start, int stop, bool withscores = false);
1627 
1628  client &zrange(const std::string &key, double start, double stop, const reply_callback_t &reply_callback);
1629 
1630  client &zrange(const std::string &key, double start, double stop, bool withscores,
1631  const reply_callback_t &reply_callback);
1632 
1633  std::future<reply> zrange(const std::string &key, double start, double stop, bool withscores = false);
1634 
1635  client &zrange(const std::string &key, const std::string &start, const std::string &stop,
1636  const reply_callback_t &reply_callback);
1637 
1638  client &zrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores,
1639  const reply_callback_t &reply_callback);
1640 
1641  std::future<reply>
1642  zrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores = false);
1643 
1644  client &zrangebylex(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1645 
1646  client &
1647  zrangebylex(const std::string &key, int min, int max, bool withscores, const reply_callback_t &reply_callback);
1648 
1649  std::future<reply> zrangebylex(const std::string &key, int min, int max, bool withscores = false);
1650 
1651  client &zrangebylex(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1652 
1653  client &zrangebylex(const std::string &key, double min, double max, bool withscores,
1654  const reply_callback_t &reply_callback);
1655 
1656  std::future<reply> zrangebylex(const std::string &key, double min, double max, bool withscores = false);
1657 
1658  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max,
1659  const reply_callback_t &reply_callback);
1660 
1661  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, bool withscores,
1662  const reply_callback_t &reply_callback);
1663 
1664  std::future<reply>
1665  zrangebylex(const std::string &key, const std::string &min, const std::string &max, bool withscores = false);
1666 
1667  client &zrangebylex(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1668  const reply_callback_t &reply_callback);
1669 
1670  client &
1671  zrangebylex(const std::string &key, int min, int max, std::size_t offset, std::size_t count, bool withscores,
1672  const reply_callback_t &reply_callback);
1673 
1674  std::future<reply> zrangebylex(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1675  bool withscores = false);
1676 
1677  client &zrangebylex(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1678  const reply_callback_t &reply_callback);
1679 
1680  client &zrangebylex(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1681  bool withscores, const reply_callback_t &reply_callback);
1682 
1683  std::future<reply>
1684  zrangebylex(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1685  bool withscores = false);
1686 
1687  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1688  std::size_t count, const reply_callback_t &reply_callback);
1689 
1690  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1691  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1692 
1693  std::future<reply>
1694  zrangebylex(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1695  std::size_t count, bool withscores = false);
1696 
1697  client &zrangebyscore(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1698 
1699  client &
1700  zrangebyscore(const std::string &key, int min, int max, bool withscores, const reply_callback_t &reply_callback);
1701 
1702  std::future<reply> zrangebyscore(const std::string &key, int min, int max, bool withscores = false);
1703 
1704  client &zrangebyscore(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1705 
1706  client &zrangebyscore(const std::string &key, double min, double max, bool withscores,
1707  const reply_callback_t &reply_callback);
1708 
1709  std::future<reply> zrangebyscore(const std::string &key, double min, double max, bool withscores = false);
1710 
1711  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max,
1712  const reply_callback_t &reply_callback);
1713 
1714  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, bool withscores,
1715  const reply_callback_t &reply_callback);
1716 
1717  std::future<reply>
1718  zrangebyscore(const std::string &key, const std::string &min, const std::string &max, bool withscores = false);
1719 
1720  client &zrangebyscore(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1721  const reply_callback_t &reply_callback);
1722 
1723  client &
1724  zrangebyscore(const std::string &key, int min, int max, std::size_t offset, std::size_t count, bool withscores,
1725  const reply_callback_t &reply_callback);
1726 
1727  std::future<reply> zrangebyscore(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1728  bool withscores = false);
1729 
1730  client &zrangebyscore(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1731  const reply_callback_t &reply_callback);
1732 
1733  client &zrangebyscore(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1734  bool withscores, const reply_callback_t &reply_callback);
1735 
1736  std::future<reply>
1737  zrangebyscore(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1738  bool withscores = false);
1739 
1740  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1741  std::size_t count, const reply_callback_t &reply_callback);
1742 
1743  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1744  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1745 
1746  std::future<reply>
1747  zrangebyscore(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1748  std::size_t count, bool withscores = false);
1749 
1750  client &zrank(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1751 
1752  std::future<reply> zrank(const std::string &key, const std::string &member);
1753 
1754  client &
1755  zrem(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
1756 
1757  std::future<reply> zrem(const std::string &key, const std::vector<std::string> &members);
1758 
1759  client &zremrangebylex(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1760 
1761  std::future<reply> zremrangebylex(const std::string &key, int min, int max);
1762 
1763  client &zremrangebylex(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1764 
1765  std::future<reply> zremrangebylex(const std::string &key, double min, double max);
1766 
1767  client &zremrangebylex(const std::string &key, const std::string &min, const std::string &max,
1768  const reply_callback_t &reply_callback);
1769 
1770  std::future<reply> zremrangebylex(const std::string &key, const std::string &min, const std::string &max);
1771 
1772  client &zremrangebyrank(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1773 
1774  std::future<reply> zremrangebyrank(const std::string &key, int start, int stop);
1775 
1776  client &
1777  zremrangebyrank(const std::string &key, double start, double stop, const reply_callback_t &reply_callback);
1778 
1779  std::future<reply> zremrangebyrank(const std::string &key, double start, double stop);
1780 
1781  client &zremrangebyrank(const std::string &key, const std::string &start, const std::string &stop,
1782  const reply_callback_t &reply_callback);
1783 
1784  std::future<reply> zremrangebyrank(const std::string &key, const std::string &start, const std::string &stop);
1785 
1786  client &zremrangebyscore(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1787 
1788  std::future<reply> zremrangebyscore(const std::string &key, int min, int max);
1789 
1790  client &zremrangebyscore(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1791 
1792  std::future<reply> zremrangebyscore(const std::string &key, double min, double max);
1793 
1794  client &zremrangebyscore(const std::string &key, const std::string &min, const std::string &max,
1795  const reply_callback_t &reply_callback);
1796 
1797  std::future<reply> zremrangebyscore(const std::string &key, const std::string &min, const std::string &max);
1798 
1799  client &zrevrange(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1800 
1801  client &
1802  zrevrange(const std::string &key, int start, int stop, bool withscores, const reply_callback_t &reply_callback);
1803 
1804  std::future<reply> zrevrange(const std::string &key, int start, int stop, bool withscores = false);
1805 
1806  client &zrevrange(const std::string &key, double start, double stop, const reply_callback_t &reply_callback);
1807 
1808  client &zrevrange(const std::string &key, double start, double stop, bool withscores,
1809  const reply_callback_t &reply_callback);
1810 
1811  std::future<reply> zrevrange(const std::string &key, double start, double stop, bool withscores = false);
1812 
1813  client &zrevrange(const std::string &key, const std::string &start, const std::string &stop,
1814  const reply_callback_t &reply_callback);
1815 
1816  client &zrevrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores,
1817  const reply_callback_t &reply_callback);
1818 
1819  std::future<reply>
1820  zrevrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores = false);
1821 
1822  client &zrevrangebylex(const std::string &key, int max, int min, const reply_callback_t &reply_callback);
1823 
1824  client &
1825  zrevrangebylex(const std::string &key, int max, int min, bool withscores, const reply_callback_t &reply_callback);
1826 
1827  std::future<reply> zrevrangebylex(const std::string &key, int max, int min, bool withscores = false);
1828 
1829  client &zrevrangebylex(const std::string &key, double max, double min, const reply_callback_t &reply_callback);
1830 
1831  client &zrevrangebylex(const std::string &key, double max, double min, bool withscores,
1832  const reply_callback_t &reply_callback);
1833 
1834  std::future<reply> zrevrangebylex(const std::string &key, double max, double min, bool withscores = false);
1835 
1836  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min,
1837  const reply_callback_t &reply_callback);
1838 
1839  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, bool withscores,
1840  const reply_callback_t &reply_callback);
1841 
1842  std::future<reply>
1843  zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, bool withscores = false);
1844 
1845  client &zrevrangebylex(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1846  const reply_callback_t &reply_callback);
1847 
1848  client &
1849  zrevrangebylex(const std::string &key, int max, int min, std::size_t offset, std::size_t count, bool withscores,
1850  const reply_callback_t &reply_callback);
1851 
1852  std::future<reply> zrevrangebylex(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1853  bool withscores = false);
1854 
1855  client &zrevrangebylex(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1856  const reply_callback_t &reply_callback);
1857 
1858  client &zrevrangebylex(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1859  bool withscores, const reply_callback_t &reply_callback);
1860 
1861  std::future<reply>
1862  zrevrangebylex(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1863  bool withscores = false);
1864 
1865  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1866  std::size_t count, const reply_callback_t &reply_callback);
1867 
1868  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1869  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1870 
1871  std::future<reply>
1872  zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1873  std::size_t count, bool withscores = false);
1874 
1875  client &zrevrangebyscore(const std::string &key, int max, int min, const reply_callback_t &reply_callback);
1876 
1877  client &zrevrangebyscore(const std::string &key, int max, int min, bool withscores,
1878  const reply_callback_t &reply_callback);
1879 
1880  std::future<reply> zrevrangebyscore(const std::string &key, int max, int min, bool withscores = false);
1881 
1882  client &zrevrangebyscore(const std::string &key, double max, double min, const reply_callback_t &reply_callback);
1883 
1884  client &zrevrangebyscore(const std::string &key, double max, double min, bool withscores,
1885  const reply_callback_t &reply_callback);
1886 
1887  std::future<reply> zrevrangebyscore(const std::string &key, double max, double min, bool withscores = false);
1888 
1889  client &zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min,
1890  const reply_callback_t &reply_callback);
1891 
1892  client &zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, bool withscores,
1893  const reply_callback_t &reply_callback);
1894 
1895  std::future<reply>
1896  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, bool withscores = false);
1897 
1898  client &zrevrangebyscore(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1899  const reply_callback_t &reply_callback);
1900 
1901  client &
1902  zrevrangebyscore(const std::string &key, int max, int min, std::size_t offset, std::size_t count, bool withscores,
1903  const reply_callback_t &reply_callback);
1904 
1905  std::future<reply>
1906  zrevrangebyscore(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1907  bool withscores = false);
1908 
1909  client &zrevrangebyscore(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1910  const reply_callback_t &reply_callback);
1911 
1912  client &zrevrangebyscore(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1913  bool withscores, const reply_callback_t &reply_callback);
1914 
1915  std::future<reply>
1916  zrevrangebyscore(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1917  bool withscores = false);
1918 
1919  client &
1920  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1921  std::size_t count, const reply_callback_t &reply_callback);
1922 
1923  client &
1924  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1925  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1926 
1927  std::future<reply>
1928  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1929  std::size_t count, bool withscores = false);
1930 
1931  client &zrevrank(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1932 
1933  std::future<reply> zrevrank(const std::string &key, const std::string &member);
1934 
1935  client &zscan(const std::string &key, std::size_t cursor, const reply_callback_t &reply_callback);
1936 
1937  std::future<reply> zscan(const std::string &key, std::size_t cursor);
1938 
1939  client &zscan(const std::string &key, std::size_t cursor, const std::string &pattern,
1940  const reply_callback_t &reply_callback);
1941 
1942  std::future<reply> zscan(const std::string &key, std::size_t cursor, const std::string &pattern);
1943 
1944  client &
1945  zscan(const std::string &key, std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
1946 
1947  std::future<reply> zscan(const std::string &key, std::size_t cursor, std::size_t count);
1948 
1949  client &zscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count,
1950  const reply_callback_t &reply_callback);
1951 
1952  std::future<reply>
1953  zscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count);
1954 
1955  client &zscore(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1956 
1957  std::future<reply> zscore(const std::string &key, const std::string &member);
1958 
1959  client &zunionstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1960  std::vector<std::size_t> weights, aggregate_method method,
1961  const reply_callback_t &reply_callback);
1962 
1963  std::future<reply>
1964  zunionstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1965  std::vector<std::size_t> weights, aggregate_method method);
1966 
1967  private:
1969  template<typename T>
1970  typename std::enable_if<std::is_same<T, client_type>::value>::type
1971  client_kill_unpack_arg(std::vector<std::string> &redis_cmd, reply_callback_t &, client_type type);
1972 
1973  template<typename T>
1974  typename std::enable_if<std::is_same<T, bool>::value>::type
1975  client_kill_unpack_arg(std::vector<std::string> &redis_cmd, reply_callback_t &, bool skip);
1976 
1977  template<typename T>
1978  typename std::enable_if<std::is_integral<T>::value>::type
1979  client_kill_unpack_arg(std::vector<std::string> &redis_cmd, reply_callback_t &, uint64_t id);
1980 
1981  template<typename T>
1982  typename std::enable_if<std::is_class<T>::value>::type
1983  client_kill_unpack_arg(std::vector<std::string> &, reply_callback_t &reply_callback, const T &cb);
1984 
1985  template<typename T, typename... Ts>
1986  void
1987  client_kill_impl(std::vector<std::string> &redis_cmd, reply_callback_t &reply, const T &arg, const Ts &... args);
1988 
1989  template<typename T>
1990  void
1991  client_kill_impl(std::vector<std::string> &redis_cmd, reply_callback_t &reply, const T &arg);
1992 
1993  private:
1995  client &
1996  sort(const std::string &key, const std::string &by_pattern, bool limit, std::size_t offset, std::size_t count,
1997  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha, const std::string &store_dest,
1998  const reply_callback_t &reply_callback);
1999 
2001  client &zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, bool limit,
2002  std::size_t offset, std::size_t count, bool withscores,
2003  const reply_callback_t &reply_callback);
2004 
2006  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, bool limit,
2007  std::size_t offset, std::size_t count, bool withscores,
2008  const reply_callback_t &reply_callback);
2009 
2011  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, bool limit,
2012  std::size_t offset, std::size_t count, bool withscores,
2013  const reply_callback_t &reply_callback);
2014 
2016  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, bool limit,
2017  std::size_t offset, std::size_t count, bool withscores,
2018  const reply_callback_t &reply_callback);
2019 
2020  private:
2027  void connection_receive_handler(network::redis_connection &connection, reply &reply);
2028 
2034  void connection_disconnection_handler(network::redis_connection &connection);
2035 
2039  void clear_callbacks();
2040 
2045  void try_commit();
2046 
2048  std::future<reply> exec_cmd(const std::function<client &(const reply_callback_t &)> &f);
2049 
2050  private:
2054  struct command_request {
2055  std::vector<std::string> command;
2056  reply_callback_t callback;
2057  };
2058 
2059  private:
2063  std::string m_redis_server;
2067  std::size_t m_redis_port = 0;
2071  std::string m_master_name;
2075  std::string m_password;
2079  int m_database_index = 0;
2080 
2084  network::redis_connection m_client;
2085 
2089  cpp_redis::sentinel m_sentinel;
2090 
2094  std::uint32_t m_connect_timeout_msecs = 0;
2098  std::int32_t m_max_reconnects = 0;
2102  std::int32_t m_current_reconnect_attempts = 0;
2106  std::uint32_t m_reconnect_interval_msecs = 0;
2107 
2111  std::atomic_bool m_reconnecting;
2115  std::atomic_bool m_cancel;
2116 
2120  std::queue<command_request> m_commands;
2121 
2125  connect_callback_t m_connect_callback;
2126 
2130  std::mutex m_callbacks_mutex;
2131 
2135  std::condition_variable m_sync_condvar;
2136 
2140  std::atomic<unsigned int> m_callbacks_running;
2141  }; // namespace cpp_redis
2142 
2143 } // namespace cpp_redis
2144 
2145 #include <cpp_redis/impl/client.ipp>
Definition: redis_connection.hpp:45
+
1 // The MIT License (MIT)
2 //
3 // Copyright (c) 2015-2017 Simon Ninon <simon.ninon@gmail.com>
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in all
13 // copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 // SOFTWARE.
22 
23 #pragma once
24 
25 #include <atomic>
26 #include <condition_variable>
27 #include <functional>
28 #include <future>
29 #include <map>
30 #include <mutex>
31 #include <queue>
32 #include <string>
33 #include <vector>
34 
35 #include <cpp_redis/core/sentinel.hpp>
36 #include <cpp_redis/helpers/variadic_template.hpp>
37 #include <cpp_redis/misc/logger.hpp>
38 #include <cpp_redis/network/redis_connection.hpp>
39 #include <cpp_redis/network/tcp_client_iface.hpp>
40 
41 namespace cpp_redis {
42 
48  class client {
49  public:
54  enum class client_type {
55  normal,
56  master,
57  pubsub,
58  slave
59  };
60 
71  enum class connect_state {
72  dropped,
73  start,
74  sleeping,
75  ok,
76  failed,
77  lookup_failed,
78  stopped
79  };
80 
81  public:
82 #ifndef __CPP_REDIS_USE_CUSTOM_TCP_CLIENT
83 
85  client();
86 
87 #endif /* __CPP_REDIS_USE_CUSTOM_TCP_CLIENT */
88 
94  explicit client(const std::shared_ptr<network::tcp_client_iface> &tcp_client);
95 
97  ~client();
98 
100  client(const client &) = delete;
101 
103  client &operator=(const client &) = delete;
104 
105  public:
109  typedef std::function<void(const std::string &host, std::size_t port, connect_state status)> connect_callback_t;
110 
121  void connect(
122  const std::string &host = "127.0.0.1",
123  std::size_t port = 6379,
124  const connect_callback_t &connect_callback = nullptr,
125  std::uint32_t timeout_ms = 0,
126  std::int32_t max_reconnects = 0,
127  std::uint32_t reconnect_interval_ms = 0);
128 
138  void connect(
139  const std::string &m_name,
140  const connect_callback_t &connect_callback = nullptr,
141  std::uint32_t timeout_ms = 0,
142  std::int32_t max_reconnects = 0,
143  std::uint32_t reconnect_interval_ms = 0);
144 
148  bool is_connected() const;
149 
155  void disconnect(bool wait_for_removal = false);
156 
160  bool is_reconnecting() const;
161 
165  void cancel_reconnect();
166 
167  public:
172  typedef std::function<void(reply &)> reply_callback_t;
173 
183  client &send(const std::vector<std::string> &redis_cmd, const reply_callback_t &callback);
184 
192  std::future<reply> send(const std::vector<std::string> &redis_cmd);
193 
202  client &commit();
203 
210  client &sync_commit();
211 
218  template<class Rep, class Period>
219  client &
220  sync_commit(const std::chrono::duration<Rep, Period> &timeout) {
223  if (!is_reconnecting()) {
224  try_commit();
225  }
226 
227  std::unique_lock<std::mutex> lock_callback(m_callbacks_mutex);
228  __CPP_REDIS_LOG(debug, "cpp_redis::client waiting for callbacks to complete");
229  if (!m_sync_condvar.wait_for(lock_callback, timeout,
230  [=] { return m_callbacks_running == 0 && m_commands.empty(); })) {
231  __CPP_REDIS_LOG(debug, "cpp_redis::client finished waiting for callback");
232  } else {
233  __CPP_REDIS_LOG(debug, "cpp_redis::client timed out waiting for callback");
234  }
235 
236  return *this;
237  }
238 
239  private:
243  bool should_reconnect() const;
244 
248  void resend_failed_commands();
249 
253  void sleep_before_next_reconnect_attempt();
254 
259  void reconnect();
260 
264  void re_auth();
265 
269  void re_select();
270 
271  private:
279  void unprotected_send(const std::vector<std::string> &redis_cmd, const reply_callback_t &callback);
280 
288  void unprotected_auth(const std::string &password, const reply_callback_t &reply_callback);
289 
297  void unprotected_select(int index, const reply_callback_t &reply_callback);
298 
299  public:
307  void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms = 0);
308 
314  const sentinel &get_sentinel() const;
315 
323 
327  void clear_sentinels();
328 
329  public:
335  enum class aggregate_method {
336  sum,
337  min,
338  max,
339  server_default
340  };
341 
348  std::string aggregate_method_to_string(aggregate_method method) const;
349 
350  public:
355  enum class geo_unit {
356  m_cv_mutex,
357  km,
358  ft,
359  mi
360  };
361 
368  std::string geo_unit_to_string(geo_unit unit) const;
369 
370  public:
376  enum class overflow_type {
377  wrap,
378  sat,
379  fail,
380  server_default
381  };
382 
389  std::string overflow_type_to_string(overflow_type type) const;
390 
391  public:
397  get,
398  set,
399  incrby
400  };
401 
408  std::string
410 
411  public:
420 
424  std::string type;
425 
429  int offset;
430 
434  int value;
435 
440 
449  static bitfield_operation
450  get(const std::string &type, int offset, overflow_type overflow = overflow_type::server_default);
451 
461  static bitfield_operation
462  set(const std::string &type, int offset, int value, overflow_type overflow = overflow_type::server_default);
463 
473  static bitfield_operation incrby(const std::string &type, int offset, int increment,
474  overflow_type overflow = overflow_type::server_default);
475  };
476 
477  public:
478  client &
479  append(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
480 
481  std::future<reply> append(const std::string &key, const std::string &value);
482 
483  client &auth(const std::string &password, const reply_callback_t &reply_callback);
484 
485  std::future<reply> auth(const std::string &password);
486 
487  client &bgrewriteaof(const reply_callback_t &reply_callback);
488 
489  std::future<reply> bgrewriteaof();
490 
491  client &bgsave(const reply_callback_t &reply_callback);
492 
493  std::future<reply> bgsave();
494 
495  client &bitcount(const std::string &key, const reply_callback_t &reply_callback);
496 
497  std::future<reply> bitcount(const std::string &key);
498 
499  client &bitcount(const std::string &key, int start, int end, const reply_callback_t &reply_callback);
500 
501  std::future<reply> bitcount(const std::string &key, int start, int end);
502 
503  client &bitfield(const std::string &key, const std::vector<bitfield_operation> &operations,
504  const reply_callback_t &reply_callback);
505 
506  std::future<reply> bitfield(const std::string &key, const std::vector<bitfield_operation> &operations);
507 
508  client &bitop(const std::string &operation, const std::string &destkey, const std::vector<std::string> &keys,
509  const reply_callback_t &reply_callback);
510 
511  std::future<reply>
512  bitop(const std::string &operation, const std::string &destkey, const std::vector<std::string> &keys);
513 
514  client &bitpos(const std::string &key, int bit, const reply_callback_t &reply_callback);
515 
516  std::future<reply> bitpos(const std::string &key, int bit);
517 
518  client &bitpos(const std::string &key, int bit, int start, const reply_callback_t &reply_callback);
519 
520  std::future<reply> bitpos(const std::string &key, int bit, int start);
521 
522  client &bitpos(const std::string &key, int bit, int start, int end, const reply_callback_t &reply_callback);
523 
524  std::future<reply> bitpos(const std::string &key, int bit, int start, int end);
525 
526  client &blpop(const std::vector<std::string> &keys, int timeout, const reply_callback_t &reply_callback);
527 
528  std::future<reply> blpop(const std::vector<std::string> &keys, int timeout);
529 
530  client &brpop(const std::vector<std::string> &keys, int timeout, const reply_callback_t &reply_callback);
531 
532  std::future<reply> brpop(const std::vector<std::string> &keys, int timeout);
533 
534  client &
535  brpoplpush(const std::string &src, const std::string &dst, int timeout, const reply_callback_t &reply_callback);
536 
537  std::future<reply> brpoplpush(const std::string &src, const std::string &dst, int timeout);
538 
539  template<typename T, typename... Ts>
540  client &client_kill(const std::string &host, int port, const T &arg, const Ts &... args);
541 
542  client &client_kill(const std::string &host, int port);
543 
544  template<typename... Ts>
545  client &client_kill(const char *host, int port, const Ts &... args);
546 
547  template<typename T, typename... Ts>
548  client &client_kill(const T &, const Ts &...);
549 
550  template<typename T, typename... Ts>
551  std::future<reply> client_kill_future(T, const Ts...);
552 
553  client &client_list(const reply_callback_t &reply_callback);
554 
555  std::future<reply> client_list();
556 
557  client &client_getname(const reply_callback_t &reply_callback);
558 
559  std::future<reply> client_getname();
560 
561  client &client_pause(int timeout, const reply_callback_t &reply_callback);
562 
563  std::future<reply> client_pause(int timeout);
564 
565  client &client_reply(const std::string &mode, const reply_callback_t &reply_callback);
566 
567  std::future<reply> client_reply(const std::string &mode);
568 
569  client &client_setname(const std::string &m_name, const reply_callback_t &reply_callback);
570 
571  std::future<reply> client_setname(const std::string &m_name);
572 
573  client &cluster_addslots(const std::vector<std::string> &p_slots, const reply_callback_t &reply_callback);
574 
575  std::future<reply> cluster_addslots(const std::vector<std::string> &p_slots);
576 
577  client &cluster_count_failure_reports(const std::string &node_id, const reply_callback_t &reply_callback);
578 
579  std::future<reply> cluster_count_failure_reports(const std::string &node_id);
580 
581  client &cluster_countkeysinslot(const std::string &slot, const reply_callback_t &reply_callback);
582 
583  std::future<reply> cluster_countkeysinslot(const std::string &slot);
584 
585  client &cluster_delslots(const std::vector<std::string> &p_slots, const reply_callback_t &reply_callback);
586 
587  std::future<reply> cluster_delslots(const std::vector<std::string> &p_slots);
588 
589  client &cluster_failover(const reply_callback_t &reply_callback);
590 
591  std::future<reply> cluster_failover();
592 
593  client &cluster_failover(const std::string &mode, const reply_callback_t &reply_callback);
594 
595  std::future<reply> cluster_failover(const std::string &mode);
596 
597  client &cluster_forget(const std::string &node_id, const reply_callback_t &reply_callback);
598 
599  std::future<reply> cluster_forget(const std::string &node_id);
600 
601  client &cluster_getkeysinslot(const std::string &slot, int count, const reply_callback_t &reply_callback);
602 
603  std::future<reply> cluster_getkeysinslot(const std::string &slot, int count);
604 
605  client &cluster_info(const reply_callback_t &reply_callback);
606 
607  std::future<reply> cluster_info();
608 
609  client &cluster_keyslot(const std::string &key, const reply_callback_t &reply_callback);
610 
611  std::future<reply> cluster_keyslot(const std::string &key);
612 
613  client &cluster_meet(const std::string &ip, int port, const reply_callback_t &reply_callback);
614 
615  std::future<reply> cluster_meet(const std::string &ip, int port);
616 
617  client &cluster_nodes(const reply_callback_t &reply_callback);
618 
619  std::future<reply> cluster_nodes();
620 
621  client &cluster_replicate(const std::string &node_id, const reply_callback_t &reply_callback);
622 
623  std::future<reply> cluster_replicate(const std::string &node_id);
624 
625  client &cluster_reset(const reply_callback_t &reply_callback);
626 
627  client &cluster_reset(const std::string &mode, const reply_callback_t &reply_callback);
628 
629  std::future<reply> cluster_reset(const std::string &mode = "soft");
630 
631  client &cluster_saveconfig(const reply_callback_t &reply_callback);
632 
633  std::future<reply> cluster_saveconfig();
634 
635  client &cluster_set_config_epoch(const std::string &epoch, const reply_callback_t &reply_callback);
636 
637  std::future<reply> cluster_set_config_epoch(const std::string &epoch);
638 
639  client &cluster_setslot(const std::string &slot, const std::string &mode, const reply_callback_t &reply_callback);
640 
641  std::future<reply> cluster_setslot(const std::string &slot, const std::string &mode);
642 
643  client &cluster_setslot(const std::string &slot, const std::string &mode, const std::string &node_id,
644  const reply_callback_t &reply_callback);
645 
646  std::future<reply> cluster_setslot(const std::string &slot, const std::string &mode, const std::string &node_id);
647 
648  client &cluster_slaves(const std::string &node_id, const reply_callback_t &reply_callback);
649 
650  std::future<reply> cluster_slaves(const std::string &node_id);
651 
652  client &cluster_slots(const reply_callback_t &reply_callback);
653 
654  std::future<reply> cluster_slots();
655 
656  client &command(const reply_callback_t &reply_callback);
657 
658  std::future<reply> command();
659 
660  client &command_count(const reply_callback_t &reply_callback);
661 
662  std::future<reply> command_count();
663 
664  client &command_getkeys(const reply_callback_t &reply_callback);
665 
666  std::future<reply> command_getkeys();
667 
668  client &command_info(const std::vector<std::string> &command_name, const reply_callback_t &reply_callback);
669 
670  std::future<reply> command_info(const std::vector<std::string> &command_name);
671 
672  client &config_get(const std::string &param, const reply_callback_t &reply_callback);
673 
674  std::future<reply> config_get(const std::string &param);
675 
676  client &config_rewrite(const reply_callback_t &reply_callback);
677 
678  std::future<reply> config_rewrite();
679 
680  client &config_set(const std::string &param, const std::string &val, const reply_callback_t &reply_callback);
681 
682  std::future<reply> config_set(const std::string &param, const std::string &val);
683 
684  client &config_resetstat(const reply_callback_t &reply_callback);
685 
686  std::future<reply> config_resetstat();
687 
688  client &dbsize(const reply_callback_t &reply_callback);
689 
690  std::future<reply> dbsize();
691 
692  client &debug_object(const std::string &key, const reply_callback_t &reply_callback);
693 
694  std::future<reply> debug_object(const std::string &key);
695 
696  client &debug_segfault(const reply_callback_t &reply_callback);
697 
698  std::future<reply> debug_segfault();
699 
700  client &decr(const std::string &key, const reply_callback_t &reply_callback);
701 
702  std::future<reply> decr(const std::string &key);
703 
704  client &decrby(const std::string &key, int val, const reply_callback_t &reply_callback);
705 
706  std::future<reply> decrby(const std::string &key, int val);
707 
708  client &del(const std::vector<std::string> &key, const reply_callback_t &reply_callback);
709 
710  std::future<reply> del(const std::vector<std::string> &key);
711 
712  client &discard(const reply_callback_t &reply_callback);
713 
714  std::future<reply> discard();
715 
716  client &dump(const std::string &key, const reply_callback_t &reply_callback);
717 
718  std::future<reply> dump(const std::string &key);
719 
720  client &echo(const std::string &msg, const reply_callback_t &reply_callback);
721 
722  std::future<reply> echo(const std::string &msg);
723 
724  client &eval(const std::string &script, int numkeys, const std::vector<std::string> &keys,
725  const std::vector<std::string> &args, const reply_callback_t &reply_callback);
726 
727  std::future<reply> eval(const std::string &script, int numkeys, const std::vector<std::string> &keys,
728  const std::vector<std::string> &args);
729 
730  client &evalsha(const std::string &sha1, int numkeys, const std::vector<std::string> &keys,
731  const std::vector<std::string> &args, const reply_callback_t &reply_callback);
732 
733  std::future<reply> evalsha(const std::string &sha1, int numkeys, const std::vector<std::string> &keys,
734  const std::vector<std::string> &args);
735 
736  client &exec(const reply_callback_t &reply_callback);
737 
738  std::future<reply> exec();
739 
740  client &exists(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
741 
742  std::future<reply> exists(const std::vector<std::string> &keys);
743 
744  client &expire(const std::string &key, int seconds, const reply_callback_t &reply_callback);
745 
746  std::future<reply> expire(const std::string &key, int seconds);
747 
748  client &expireat(const std::string &key, int timestamp, const reply_callback_t &reply_callback);
749 
750  std::future<reply> expireat(const std::string &key, int timestamp);
751 
752  client &flushall(const reply_callback_t &reply_callback);
753 
754  std::future<reply> flushall();
755 
756  client &flushdb(const reply_callback_t &reply_callback);
757 
758  std::future<reply> flushdb();
759 
760  client &geoadd(const std::string &key,
761  const std::vector<std::tuple<std::string, std::string, std::string>> &long_lat_memb,
762  const reply_callback_t &reply_callback);
763 
764  std::future<reply> geoadd(const std::string &key,
765  const std::vector<std::tuple<std::string, std::string, std::string>> &long_lat_memb);
766 
767  client &
768  geohash(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
769 
770  std::future<reply> geohash(const std::string &key, const std::vector<std::string> &members);
771 
772  client &
773  geopos(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
774 
775  std::future<reply> geopos(const std::string &key, const std::vector<std::string> &members);
776 
777  client &geodist(const std::string &key, const std::string &member_1, const std::string &member_2,
778  const reply_callback_t &reply_callback);
779 
780  client &
781  geodist(const std::string &key, const std::string &member_1, const std::string &member_2, const std::string &unit,
782  const reply_callback_t &reply_callback);
783 
784  std::future<reply> geodist(const std::string &key, const std::string &member_1, const std::string &member_2,
785  const std::string &unit = "m_cv_mutex");
786 
787  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
788  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
789  const reply_callback_t &reply_callback);
790 
791  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
792  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
793  const reply_callback_t &reply_callback);
794 
795  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
796  bool with_coord, bool with_dist, bool with_hash, bool asc_order, const std::string &store_key,
797  const reply_callback_t &reply_callback);
798 
799  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
800  bool with_coord, bool with_dist, bool with_hash, bool asc_order, const std::string &store_key,
801  const std::string &storedist_key, const reply_callback_t &reply_callback);
802 
803  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
804  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
805  const std::string &store_key, const reply_callback_t &reply_callback);
806 
807  client &georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
808  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
809  const std::string &store_key, const std::string &storedist_key,
810  const reply_callback_t &reply_callback);
811 
812  std::future<reply>
813  georadius(const std::string &key, double longitude, double latitude, double radius, geo_unit unit,
814  bool with_coord = false, bool with_dist = false, bool with_hash = false, bool asc_order = false,
815  std::size_t count = 0, const std::string &store_key = "", const std::string &storedist_key = "");
816 
817  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
818  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
819  const reply_callback_t &reply_callback);
820 
821  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
822  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
823  const reply_callback_t &reply_callback);
824 
825  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
826  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
827  const std::string &store_key, const reply_callback_t &reply_callback);
828 
829  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
830  bool with_coord, bool with_dist, bool with_hash, bool asc_order,
831  const std::string &store_key, const std::string &storedist_key,
832  const reply_callback_t &reply_callback);
833 
834  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
835  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
836  const std::string &store_key, const reply_callback_t &reply_callback);
837 
838  client &georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
839  bool with_coord, bool with_dist, bool with_hash, bool asc_order, std::size_t count,
840  const std::string &store_key, const std::string &storedist_key,
841  const reply_callback_t &reply_callback);
842 
843  std::future<reply>
844  georadiusbymember(const std::string &key, const std::string &member, double radius, geo_unit unit,
845  bool with_coord = false, bool with_dist = false, bool with_hash = false, bool asc_order = false,
846  std::size_t count = 0, const std::string &store_key = "",
847  const std::string &storedist_key = "");
848 
849  client &get(const std::string &key, const reply_callback_t &reply_callback);
850 
851  std::future<reply> get(const std::string &key);
852 
853  client &getbit(const std::string &key, int offset, const reply_callback_t &reply_callback);
854 
855  std::future<reply> getbit(const std::string &key, int offset);
856 
857  client &getrange(const std::string &key, int start, int end, const reply_callback_t &reply_callback);
858 
859  std::future<reply> getrange(const std::string &key, int start, int end);
860 
861  client &getset(const std::string &key, const std::string &val, const reply_callback_t &reply_callback);
862 
863  std::future<reply> getset(const std::string &key, const std::string &val);
864 
865  client &
866  hdel(const std::string &key, const std::vector<std::string> &fields, const reply_callback_t &reply_callback);
867 
868  std::future<reply> hdel(const std::string &key, const std::vector<std::string> &fields);
869 
870  client &hexists(const std::string &key, const std::string &field, const reply_callback_t &reply_callback);
871 
872  std::future<reply> hexists(const std::string &key, const std::string &field);
873 
874  client &hget(const std::string &key, const std::string &field, const reply_callback_t &reply_callback);
875 
876  std::future<reply> hget(const std::string &key, const std::string &field);
877 
878  client &hgetall(const std::string &key, const reply_callback_t &reply_callback);
879 
880  std::future<reply> hgetall(const std::string &key);
881 
882  client &
883  hincrby(const std::string &key, const std::string &field, int incr, const reply_callback_t &reply_callback);
884 
885  std::future<reply> hincrby(const std::string &key, const std::string &field, int incr);
886 
887  client &hincrbyfloat(const std::string &key, const std::string &field, float incr,
888  const reply_callback_t &reply_callback);
889 
890  std::future<reply> hincrbyfloat(const std::string &key, const std::string &field, float incr);
891 
892  client &hkeys(const std::string &key, const reply_callback_t &reply_callback);
893 
894  std::future<reply> hkeys(const std::string &key);
895 
896  client &hlen(const std::string &key, const reply_callback_t &reply_callback);
897 
898  std::future<reply> hlen(const std::string &key);
899 
900  client &
901  hmget(const std::string &key, const std::vector<std::string> &fields, const reply_callback_t &reply_callback);
902 
903  std::future<reply> hmget(const std::string &key, const std::vector<std::string> &fields);
904 
905  client &hmset(const std::string &key, const std::vector<std::pair<std::string, std::string>> &field_val,
906  const reply_callback_t &reply_callback);
907 
908  std::future<reply>
909  hmset(const std::string &key, const std::vector<std::pair<std::string, std::string>> &field_val);
910 
911  client &hscan(const std::string &key, std::size_t cursor, const reply_callback_t &reply_callback);
912 
913  std::future<reply> hscan(const std::string &key, std::size_t cursor);
914 
915  client &hscan(const std::string &key, std::size_t cursor, const std::string &pattern,
916  const reply_callback_t &reply_callback);
917 
918  std::future<reply> hscan(const std::string &key, std::size_t cursor, const std::string &pattern);
919 
920  client &
921  hscan(const std::string &key, std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
922 
923  std::future<reply> hscan(const std::string &key, std::size_t cursor, std::size_t count);
924 
925  client &hscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count,
926  const reply_callback_t &reply_callback);
927 
928  std::future<reply>
929  hscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count);
930 
931  client &hset(const std::string &key, const std::string &field, const std::string &value,
932  const reply_callback_t &reply_callback);
933 
934  std::future<reply> hset(const std::string &key, const std::string &field, const std::string &value);
935 
936  client &hsetnx(const std::string &key, const std::string &field, const std::string &value,
937  const reply_callback_t &reply_callback);
938 
939  std::future<reply> hsetnx(const std::string &key, const std::string &field, const std::string &value);
940 
941  client &hstrlen(const std::string &key, const std::string &field, const reply_callback_t &reply_callback);
942 
943  std::future<reply> hstrlen(const std::string &key, const std::string &field);
944 
945  client &hvals(const std::string &key, const reply_callback_t &reply_callback);
946 
947  std::future<reply> hvals(const std::string &key);
948 
949  client &incr(const std::string &key, const reply_callback_t &reply_callback);
950 
951  std::future<reply> incr(const std::string &key);
952 
953  client &incrby(const std::string &key, int incr, const reply_callback_t &reply_callback);
954 
955  std::future<reply> incrby(const std::string &key, int incr);
956 
957  client &incrbyfloat(const std::string &key, float incr, const reply_callback_t &reply_callback);
958 
959  std::future<reply> incrbyfloat(const std::string &key, float incr);
960 
961  client &info(const reply_callback_t &reply_callback);
962 
963  client &info(const std::string &section, const reply_callback_t &reply_callback);
964 
965  std::future<reply> info(const std::string &section = "default");
966 
967  client &keys(const std::string &pattern, const reply_callback_t &reply_callback);
968 
969  std::future<reply> keys(const std::string &pattern);
970 
971  client &lastsave(const reply_callback_t &reply_callback);
972 
973  std::future<reply> lastsave();
974 
975  client &lindex(const std::string &key, int index, const reply_callback_t &reply_callback);
976 
977  std::future<reply> lindex(const std::string &key, int index);
978 
979  client &linsert(const std::string &key, const std::string &before_after, const std::string &pivot,
980  const std::string &value, const reply_callback_t &reply_callback);
981 
982  std::future<reply> linsert(const std::string &key, const std::string &before_after, const std::string &pivot,
983  const std::string &value);
984 
985  client &llen(const std::string &key, const reply_callback_t &reply_callback);
986 
987  std::future<reply> llen(const std::string &key);
988 
989  client &lpop(const std::string &key, const reply_callback_t &reply_callback);
990 
991  std::future<reply> lpop(const std::string &key);
992 
993  client &
994  lpush(const std::string &key, const std::vector<std::string> &values, const reply_callback_t &reply_callback);
995 
996  std::future<reply> lpush(const std::string &key, const std::vector<std::string> &values);
997 
998  client &lpushx(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
999 
1000  std::future<reply> lpushx(const std::string &key, const std::string &value);
1001 
1002  client &lrange(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1003 
1004  std::future<reply> lrange(const std::string &key, int start, int stop);
1005 
1006  client &lrem(const std::string &key, int count, const std::string &value, const reply_callback_t &reply_callback);
1007 
1008  std::future<reply> lrem(const std::string &key, int count, const std::string &value);
1009 
1010  client &lset(const std::string &key, int index, const std::string &value, const reply_callback_t &reply_callback);
1011 
1012  std::future<reply> lset(const std::string &key, int index, const std::string &value);
1013 
1014  client &ltrim(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1015 
1016  std::future<reply> ltrim(const std::string &key, int start, int stop);
1017 
1018  client &mget(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1019 
1020  std::future<reply> mget(const std::vector<std::string> &keys);
1021 
1022  client &
1023  migrate(const std::string &host, int port, const std::string &key, const std::string &dest_db, int timeout,
1024  const reply_callback_t &reply_callback);
1025 
1026  client &
1027  migrate(const std::string &host, int port, const std::string &key, const std::string &dest_db, int timeout,
1028  bool copy, bool replace, const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1029 
1030  std::future<reply>
1031  migrate(const std::string &host, int port, const std::string &key, const std::string &dest_db, int timeout,
1032  bool copy = false, bool replace = false, const std::vector<std::string> &keys = {});
1033 
1034  client &monitor(const reply_callback_t &reply_callback);
1035 
1036  std::future<reply> monitor();
1037 
1038  client &move(const std::string &key, const std::string &db, const reply_callback_t &reply_callback);
1039 
1040  std::future<reply> move(const std::string &key, const std::string &db);
1041 
1042  client &
1043  mset(const std::vector<std::pair<std::string, std::string>> &key_vals, const reply_callback_t &reply_callback);
1044 
1045  std::future<reply> mset(const std::vector<std::pair<std::string, std::string>> &key_vals);
1046 
1047  client &
1048  msetnx(const std::vector<std::pair<std::string, std::string>> &key_vals, const reply_callback_t &reply_callback);
1049 
1050  std::future<reply> msetnx(const std::vector<std::pair<std::string, std::string>> &key_vals);
1051 
1052  client &multi(const reply_callback_t &reply_callback);
1053 
1054  std::future<reply> multi();
1055 
1056  client &object(const std::string &subcommand, const std::vector<std::string> &args,
1057  const reply_callback_t &reply_callback);
1058 
1059  std::future<reply> object(const std::string &subcommand, const std::vector<std::string> &args);
1060 
1061  client &persist(const std::string &key, const reply_callback_t &reply_callback);
1062 
1063  std::future<reply> persist(const std::string &key);
1064 
1065  client &pexpire(const std::string &key, int ms, const reply_callback_t &reply_callback);
1066 
1067  std::future<reply> pexpire(const std::string &key, int ms);
1068 
1069  client &pexpireat(const std::string &key, int ms_timestamp, const reply_callback_t &reply_callback);
1070 
1071  std::future<reply> pexpireat(const std::string &key, int ms_timestamp);
1072 
1073  client &
1074  pfadd(const std::string &key, const std::vector<std::string> &elements, const reply_callback_t &reply_callback);
1075 
1076  std::future<reply> pfadd(const std::string &key, const std::vector<std::string> &elements);
1077 
1078  client &pfcount(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1079 
1080  std::future<reply> pfcount(const std::vector<std::string> &keys);
1081 
1082  client &pfmerge(const std::string &destkey, const std::vector<std::string> &sourcekeys,
1083  const reply_callback_t &reply_callback);
1084 
1085  std::future<reply> pfmerge(const std::string &destkey, const std::vector<std::string> &sourcekeys);
1086 
1087  client &ping(const reply_callback_t &reply_callback);
1088 
1089  std::future<reply> ping();
1090 
1091  client &ping(const std::string &message, const reply_callback_t &reply_callback);
1092 
1093  std::future<reply> ping(const std::string &message);
1094 
1095  client &
1096  psetex(const std::string &key, int ms, const std::string &val, const reply_callback_t &reply_callback);
1097 
1098  std::future<reply> psetex(const std::string &key, int ms, const std::string &val);
1099 
1100  client &publish(const std::string &channel, const std::string &message, const reply_callback_t &reply_callback);
1101 
1102  std::future<reply> publish(const std::string &channel, const std::string &message);
1103 
1104  client &pubsub(const std::string &subcommand, const std::vector<std::string> &args,
1105  const reply_callback_t &reply_callback);
1106 
1107  std::future<reply> pubsub(const std::string &subcommand, const std::vector<std::string> &args);
1108 
1109  client &pttl(const std::string &key, const reply_callback_t &reply_callback);
1110 
1111  std::future<reply> pttl(const std::string &key);
1112 
1113  client &quit(const reply_callback_t &reply_callback);
1114 
1115  std::future<reply> quit();
1116 
1117  client &randomkey(const reply_callback_t &reply_callback);
1118 
1119  std::future<reply> randomkey();
1120 
1121  client &readonly(const reply_callback_t &reply_callback);
1122 
1123  std::future<reply> readonly();
1124 
1125  client &readwrite(const reply_callback_t &reply_callback);
1126 
1127  std::future<reply> readwrite();
1128 
1129  client &rename(const std::string &key, const std::string &newkey, const reply_callback_t &reply_callback);
1130 
1131  std::future<reply> rename(const std::string &key, const std::string &newkey);
1132 
1133  client &renamenx(const std::string &key, const std::string &newkey, const reply_callback_t &reply_callback);
1134 
1135  std::future<reply> renamenx(const std::string &key, const std::string &newkey);
1136 
1137  client &restore(const std::string &key, int ttl, const std::string &serialized_value,
1138  const reply_callback_t &reply_callback);
1139 
1140  std::future<reply> restore(const std::string &key, int ttl, const std::string &serialized_value);
1141 
1142  client &restore(const std::string &key, int ttl, const std::string &serialized_value, const std::string &replace,
1143  const reply_callback_t &reply_callback);
1144 
1145  std::future<reply>
1146  restore(const std::string &key, int ttl, const std::string &serialized_value, const std::string &replace);
1147 
1148  client &role(const reply_callback_t &reply_callback);
1149 
1150  std::future<reply> role();
1151 
1152  client &rpop(const std::string &key, const reply_callback_t &reply_callback);
1153 
1154  std::future<reply> rpop(const std::string &key);
1155 
1156  client &
1157  rpoplpush(const std::string &source, const std::string &destination, const reply_callback_t &reply_callback);
1158 
1159  std::future<reply> rpoplpush(const std::string &src, const std::string &dst);
1160 
1161  client &
1162  rpush(const std::string &key, const std::vector<std::string> &values, const reply_callback_t &reply_callback);
1163 
1164  std::future<reply> rpush(const std::string &key, const std::vector<std::string> &values);
1165 
1166  client &rpushx(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1167 
1168  std::future<reply> rpushx(const std::string &key, const std::string &value);
1169 
1170  client &
1171  sadd(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
1172 
1173  std::future<reply> sadd(const std::string &key, const std::vector<std::string> &members);
1174 
1175  client &save(const reply_callback_t &reply_callback);
1176 
1177  std::future<reply> save();
1178 
1179  client &scan(std::size_t cursor, const reply_callback_t &reply_callback);
1180 
1181  std::future<reply> scan(std::size_t cursor);
1182 
1183  client &scan(std::size_t cursor, const std::string &pattern, const reply_callback_t &reply_callback);
1184 
1185  std::future<reply> scan(std::size_t cursor, const std::string &pattern);
1186 
1187  client &scan(std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
1188 
1189  std::future<reply> scan(std::size_t cursor, std::size_t count);
1190 
1191  client &
1192  scan(std::size_t cursor, const std::string &pattern, std::size_t count, const reply_callback_t &reply_callback);
1193 
1194  std::future<reply> scan(std::size_t cursor, const std::string &pattern, std::size_t count);
1195 
1196  client &scard(const std::string &key, const reply_callback_t &reply_callback);
1197 
1198  std::future<reply> scard(const std::string &key);
1199 
1200  client &script_debug(const std::string &mode, const reply_callback_t &reply_callback);
1201 
1202  std::future<reply> script_debug(const std::string &mode);
1203 
1204  client &script_exists(const std::vector<std::string> &scripts, const reply_callback_t &reply_callback);
1205 
1206  std::future<reply> script_exists(const std::vector<std::string> &scripts);
1207 
1208  client &script_flush(const reply_callback_t &reply_callback);
1209 
1210  std::future<reply> script_flush();
1211 
1212  client &script_kill(const reply_callback_t &reply_callback);
1213 
1214  std::future<reply> script_kill();
1215 
1216  client &script_load(const std::string &script, const reply_callback_t &reply_callback);
1217 
1218  std::future<reply> script_load(const std::string &script);
1219 
1220  client &sdiff(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1221 
1222  std::future<reply> sdiff(const std::vector<std::string> &keys);
1223 
1224  client &sdiffstore(const std::string &destination, const std::vector<std::string> &keys,
1225  const reply_callback_t &reply_callback);
1226 
1227  std::future<reply> sdiffstore(const std::string &dst, const std::vector<std::string> &keys);
1228 
1229  client &select(int index, const reply_callback_t &reply_callback);
1230 
1231  std::future<reply> select(int index);
1232 
1233  client &set(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1234 
1235  std::future<reply> set(const std::string &key, const std::string &value);
1236 
1237  client &set_advanced(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1238 
1239  client &set_advanced(const std::string &key, const std::string &value, bool ex, int ex_sec, bool px, int px_milli,
1240  bool nx, bool xx, const reply_callback_t &reply_callback);
1241 
1242  std::future<reply>
1243  set_advanced(const std::string &key, const std::string &value, bool ex = false, int ex_sec = 0, bool px = false,
1244  int px_milli = 0, bool nx = false, bool xx = false);
1245 
1246  client &
1247  setbit_(const std::string &key, int offset, const std::string &value, const reply_callback_t &reply_callback);
1248 
1249  std::future<reply> setbit_(const std::string &key, int offset, const std::string &value);
1250 
1251  client &
1252  setex(const std::string &key, int seconds, const std::string &value, const reply_callback_t &reply_callback);
1253 
1254  std::future<reply> setex(const std::string &key, int seconds, const std::string &value);
1255 
1256  client &setnx(const std::string &key, const std::string &value, const reply_callback_t &reply_callback);
1257 
1258  std::future<reply> setnx(const std::string &key, const std::string &value);
1259 
1260  client &
1261  setrange(const std::string &key, int offset, const std::string &value, const reply_callback_t &reply_callback);
1262 
1263  std::future<reply> setrange(const std::string &key, int offset, const std::string &value);
1264 
1265  client &shutdown(const reply_callback_t &reply_callback);
1266 
1267  std::future<reply> shutdown();
1268 
1269  client &shutdown(const std::string &save, const reply_callback_t &reply_callback);
1270 
1271  std::future<reply> shutdown(const std::string &save);
1272 
1273  client &sinter(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1274 
1275  std::future<reply> sinter(const std::vector<std::string> &keys);
1276 
1277  client &sinterstore(const std::string &destination, const std::vector<std::string> &keys,
1278  const reply_callback_t &reply_callback);
1279 
1280  std::future<reply> sinterstore(const std::string &dst, const std::vector<std::string> &keys);
1281 
1282  client &sismember(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1283 
1284  std::future<reply> sismember(const std::string &key, const std::string &member);
1285 
1286  client &slaveof(const std::string &host, int port, const reply_callback_t &reply_callback);
1287 
1288  std::future<reply> slaveof(const std::string &host, int port);
1289 
1290  client &slowlog(std::string subcommand, const reply_callback_t &reply_callback);
1291 
1292  std::future<reply> slowlog(const std::string &subcommand);
1293 
1294  client &
1295  slowlog(std::string subcommand, const std::string &argument, const reply_callback_t &reply_callback);
1296 
1297  std::future<reply> slowlog(const std::string &subcommand, const std::string &argument);
1298 
1299  client &smembers(const std::string &key, const reply_callback_t &reply_callback);
1300 
1301  std::future<reply> smembers(const std::string &key);
1302 
1303  client &smove(const std::string &source, const std::string &destination, const std::string &member,
1304  const reply_callback_t &reply_callback);
1305 
1306  std::future<reply> smove(const std::string &src, const std::string &dst, const std::string &member);
1307 
1308  client &sort(const std::string &key, const reply_callback_t &reply_callback);
1309 
1310  std::future<reply> sort(const std::string &key);
1311 
1312  client &sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1313  const reply_callback_t &reply_callback);
1314 
1315  std::future<reply>
1316  sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha);
1317 
1318  client &
1319  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1320  bool asc_order, bool alpha, const reply_callback_t &reply_callback);
1321 
1322  std::future<reply>
1323  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1324  bool asc_order, bool alpha);
1325 
1326  client &sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1327  bool asc_order, bool alpha, const reply_callback_t &reply_callback);
1328 
1329  std::future<reply>
1330  sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1331  bool asc_order, bool alpha);
1332 
1333  client &sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1334  const std::string &store_dest, const reply_callback_t &reply_callback);
1335 
1336  std::future<reply>
1337  sort(const std::string &key, const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1338  const std::string &store_dest);
1339 
1340  client &
1341  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1342  bool asc_order, bool alpha, const std::string &store_dest, const reply_callback_t &reply_callback);
1343 
1344  std::future<reply>
1345  sort(const std::string &key, std::size_t offset, std::size_t count, const std::vector<std::string> &get_patterns,
1346  bool asc_order, bool alpha, const std::string &store_dest);
1347 
1348  client &sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1349  bool asc_order, bool alpha, const std::string &store_dest, const reply_callback_t &reply_callback);
1350 
1351  std::future<reply>
1352  sort(const std::string &key, const std::string &by_pattern, const std::vector<std::string> &get_patterns,
1353  bool asc_order, bool alpha, const std::string &store_dest);
1354 
1355  client &sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1356  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1357  const reply_callback_t &reply_callback);
1358 
1359  std::future<reply>
1360  sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1361  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha);
1362 
1363  client &sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1364  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha,
1365  const std::string &store_dest, const reply_callback_t &reply_callback);
1366 
1367  std::future<reply>
1368  sort(const std::string &key, const std::string &by_pattern, std::size_t offset, std::size_t count,
1369  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha, const std::string &store_dest);
1370 
1371  client &spop(const std::string &key, const reply_callback_t &reply_callback);
1372 
1373  std::future<reply> spop(const std::string &key);
1374 
1375  client &spop(const std::string &key, int count, const reply_callback_t &reply_callback);
1376 
1377  std::future<reply> spop(const std::string &key, int count);
1378 
1379  client &srandmember(const std::string &key, const reply_callback_t &reply_callback);
1380 
1381  std::future<reply> srandmember(const std::string &key);
1382 
1383  client &srandmember(const std::string &key, int count, const reply_callback_t &reply_callback);
1384 
1385  std::future<reply> srandmember(const std::string &key, int count);
1386 
1387  client &
1388  srem(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
1389 
1390  std::future<reply> srem(const std::string &key, const std::vector<std::string> &members);
1391 
1392  client &sscan(const std::string &key, std::size_t cursor, const reply_callback_t &reply_callback);
1393 
1394  std::future<reply> sscan(const std::string &key, std::size_t cursor);
1395 
1396  client &sscan(const std::string &key, std::size_t cursor, const std::string &pattern,
1397  const reply_callback_t &reply_callback);
1398 
1399  std::future<reply> sscan(const std::string &key, std::size_t cursor, const std::string &pattern);
1400 
1401  client &
1402  sscan(const std::string &key, std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
1403 
1404  std::future<reply> sscan(const std::string &key, std::size_t cursor, std::size_t count);
1405 
1406  client &sscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count,
1407  const reply_callback_t &reply_callback);
1408 
1409  std::future<reply>
1410  sscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count);
1411 
1412  client &strlen(const std::string &key, const reply_callback_t &reply_callback);
1413 
1414  std::future<reply> strlen(const std::string &key);
1415 
1416  client &sunion(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1417 
1418  std::future<reply> sunion(const std::vector<std::string> &keys);
1419 
1420  client &sunionstore(const std::string &destination, const std::vector<std::string> &keys,
1421  const reply_callback_t &reply_callback);
1422 
1423  std::future<reply> sunionstore(const std::string &dst, const std::vector<std::string> &keys);
1424 
1425  client &sync(const reply_callback_t &reply_callback);
1426 
1427  std::future<reply> sync();
1428 
1429  client &time(const reply_callback_t &reply_callback);
1430 
1431  std::future<reply> time();
1432 
1433  client &ttl(const std::string &key, const reply_callback_t &reply_callback);
1434 
1435  std::future<reply> ttl(const std::string &key);
1436 
1437  client &type(const std::string &key, const reply_callback_t &reply_callback);
1438 
1439  std::future<reply> type(const std::string &key);
1440 
1441  client &unwatch(const reply_callback_t &reply_callback);
1442 
1443  std::future<reply> unwatch();
1444 
1445  client &wait(int numslaves, int timeout, const reply_callback_t &reply_callback);
1446 
1447  std::future<reply> wait(int numslaves, int timeout);
1448 
1449  client &watch(const std::vector<std::string> &keys, const reply_callback_t &reply_callback);
1450 
1451  std::future<reply> watch(const std::vector<std::string> &keys);
1452 
1453  client &xack(const std::string &key, const std::string &group, const std::vector<std::string> &id_members,
1454  const reply_callback_t &reply_callback);
1455 
1456  std::future<reply>
1457  xack(const std::string &key, const std::string &group, const std::vector<std::string> &id_members);
1458 
1459  client &
1460  xadd(const std::string &key, const std::string &id, const std::multimap<std::string, std::string> &field_members,
1461  const reply_callback_t &reply_callback);
1462 
1463  std::future<reply>
1464  xadd(const std::string &key, const std::string &id, const std::multimap<std::string, std::string> &field_members);
1465 
1466  client &xclaim(const std::string &key, const std::string &group, const std::string &consumer, int min_idle_time,
1467  const std::vector<std::string> &id_members, const reply_callback_t &reply_callback);
1468 
1469  std::future<reply>
1470  xclaim(const std::string &key, const std::string &group, const std::string &consumer, const int &min_idle_time,
1471  const std::vector<std::string> &id_members);
1472 
1473  client &
1474  xdel(const std::string &key, const std::vector<std::string> &id_members, const reply_callback_t &reply_callback);
1475 
1476  std::future<reply> xdel(const std::string &key, const std::vector<std::string> &id_members);
1477 
1478  client &
1479  xgroup_create(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1480 
1481  client &
1482  xgroup_create(const std::string &key, const std::string &group_name, const std::string &id,
1483  const reply_callback_t &reply_callback);
1484 
1485  std::future<reply>
1486  xgroup_create(const std::string &key, const std::string &group_name, const std::string &id = "$");
1487 
1488  client &
1489  xgroup_set_id(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1490 
1491  client &
1492  xgroup_set_id(const std::string &key, const std::string &group_name, const std::string &id,
1493  const reply_callback_t &reply_callback);
1494 
1495  std::future<reply>
1496  xgroup_set_id(const std::string &key, const std::string &group_name, const std::string &id = "$");
1497 
1498  client &
1499  xgroup_destroy(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1500 
1501  std::future<reply> xgroup_destroy(const std::string &key, const std::string &group_name);
1502 
1503  client &
1504  xgroup_del_consumer(const std::string &key, const std::string &group_name, const std::string &consumer_name,
1505  const reply_callback_t &reply_callback);
1506 
1507  std::future<reply>
1508  xgroup_del_consumer(const std::string &key, const std::string &group_name, const std::string &consumer_name);
1509 
1516  client & xinfo_consumers(const std::string &key, const std::string &group_name, const reply_callback_t &reply_callback);
1517 
1524  std::future<reply> xinfo_consumers(const std::string &key, const std::string &group_name);
1525 
1532  client & xinfo_groups(const std::string &key, const reply_callback_t &reply_callback);
1533 
1539  std::future<reply> xinfo_groups(const std::string &key);
1540 
1541  client & xinfo_stream(const std::string &key, const reply_callback_t &reply_callback);
1542  std::future<reply> xinfo_stream(const std::string &key);
1543 
1553  client & xlen(const std::string &key, const reply_callback_t &reply_callback);
1559  std::future<reply> xlen(const std::string &key);
1560 
1561  client &zadd(const std::string &key, const std::vector<std::string> &options,
1562  const std::multimap<std::string, std::string> &score_members,
1563  const reply_callback_t &reply_callback);
1564 
1565  std::future<reply> zadd(const std::string &key, const std::vector<std::string> &options,
1566  const std::multimap<std::string, std::string> &score_members);
1567 
1568  client &zcard(const std::string &key, const reply_callback_t &reply_callback);
1569 
1570  std::future<reply> zcard(const std::string &key);
1571 
1572  client &zcount(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1573 
1574  std::future<reply> zcount(const std::string &key, int min, int max);
1575 
1576  client &zcount(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1577 
1578  std::future<reply> zcount(const std::string &key, double min, double max);
1579 
1580  client &zcount(const std::string &key, const std::string &min, const std::string &max,
1581  const reply_callback_t &reply_callback);
1582 
1583  std::future<reply> zcount(const std::string &key, const std::string &min, const std::string &max);
1584 
1585  client &
1586  zincrby(const std::string &key, int incr, const std::string &member, const reply_callback_t &reply_callback);
1587 
1588  std::future<reply> zincrby(const std::string &key, int incr, const std::string &member);
1589 
1590  client &
1591  zincrby(const std::string &key, double incr, const std::string &member, const reply_callback_t &reply_callback);
1592 
1593  std::future<reply> zincrby(const std::string &key, double incr, const std::string &member);
1594 
1595  client &zincrby(const std::string &key, const std::string &incr, const std::string &member,
1596  const reply_callback_t &reply_callback);
1597 
1598  std::future<reply> zincrby(const std::string &key, const std::string &incr, const std::string &member);
1599 
1600  client &zinterstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1601  std::vector<std::size_t> weights, aggregate_method method,
1602  const reply_callback_t &reply_callback);
1603 
1604  std::future<reply>
1605  zinterstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1606  std::vector<std::size_t> weights, aggregate_method method);
1607 
1608  client &zlexcount(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1609 
1610  std::future<reply> zlexcount(const std::string &key, int min, int max);
1611 
1612  client &zlexcount(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1613 
1614  std::future<reply> zlexcount(const std::string &key, double min, double max);
1615 
1616  client &zlexcount(const std::string &key, const std::string &min, const std::string &max,
1617  const reply_callback_t &reply_callback);
1618 
1619  std::future<reply> zlexcount(const std::string &key, const std::string &min, const std::string &max);
1620 
1621  client &zrange(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1622 
1623  client &
1624  zrange(const std::string &key, int start, int stop, bool withscores, const reply_callback_t &reply_callback);
1625 
1626  std::future<reply> zrange(const std::string &key, int start, int stop, bool withscores = false);
1627 
1628  client &zrange(const std::string &key, double start, double stop, const reply_callback_t &reply_callback);
1629 
1630  client &zrange(const std::string &key, double start, double stop, bool withscores,
1631  const reply_callback_t &reply_callback);
1632 
1633  std::future<reply> zrange(const std::string &key, double start, double stop, bool withscores = false);
1634 
1635  client &zrange(const std::string &key, const std::string &start, const std::string &stop,
1636  const reply_callback_t &reply_callback);
1637 
1638  client &zrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores,
1639  const reply_callback_t &reply_callback);
1640 
1641  std::future<reply>
1642  zrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores = false);
1643 
1644  client &zrangebylex(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1645 
1646  client &
1647  zrangebylex(const std::string &key, int min, int max, bool withscores, const reply_callback_t &reply_callback);
1648 
1649  std::future<reply> zrangebylex(const std::string &key, int min, int max, bool withscores = false);
1650 
1651  client &zrangebylex(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1652 
1653  client &zrangebylex(const std::string &key, double min, double max, bool withscores,
1654  const reply_callback_t &reply_callback);
1655 
1656  std::future<reply> zrangebylex(const std::string &key, double min, double max, bool withscores = false);
1657 
1658  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max,
1659  const reply_callback_t &reply_callback);
1660 
1661  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, bool withscores,
1662  const reply_callback_t &reply_callback);
1663 
1664  std::future<reply>
1665  zrangebylex(const std::string &key, const std::string &min, const std::string &max, bool withscores = false);
1666 
1667  client &zrangebylex(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1668  const reply_callback_t &reply_callback);
1669 
1670  client &
1671  zrangebylex(const std::string &key, int min, int max, std::size_t offset, std::size_t count, bool withscores,
1672  const reply_callback_t &reply_callback);
1673 
1674  std::future<reply> zrangebylex(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1675  bool withscores = false);
1676 
1677  client &zrangebylex(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1678  const reply_callback_t &reply_callback);
1679 
1680  client &zrangebylex(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1681  bool withscores, const reply_callback_t &reply_callback);
1682 
1683  std::future<reply>
1684  zrangebylex(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1685  bool withscores = false);
1686 
1687  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1688  std::size_t count, const reply_callback_t &reply_callback);
1689 
1690  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1691  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1692 
1693  std::future<reply>
1694  zrangebylex(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1695  std::size_t count, bool withscores = false);
1696 
1697  client &zrangebyscore(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1698 
1699  client &
1700  zrangebyscore(const std::string &key, int min, int max, bool withscores, const reply_callback_t &reply_callback);
1701 
1702  std::future<reply> zrangebyscore(const std::string &key, int min, int max, bool withscores = false);
1703 
1704  client &zrangebyscore(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1705 
1706  client &zrangebyscore(const std::string &key, double min, double max, bool withscores,
1707  const reply_callback_t &reply_callback);
1708 
1709  std::future<reply> zrangebyscore(const std::string &key, double min, double max, bool withscores = false);
1710 
1711  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max,
1712  const reply_callback_t &reply_callback);
1713 
1714  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, bool withscores,
1715  const reply_callback_t &reply_callback);
1716 
1717  std::future<reply>
1718  zrangebyscore(const std::string &key, const std::string &min, const std::string &max, bool withscores = false);
1719 
1720  client &zrangebyscore(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1721  const reply_callback_t &reply_callback);
1722 
1723  client &
1724  zrangebyscore(const std::string &key, int min, int max, std::size_t offset, std::size_t count, bool withscores,
1725  const reply_callback_t &reply_callback);
1726 
1727  std::future<reply> zrangebyscore(const std::string &key, int min, int max, std::size_t offset, std::size_t count,
1728  bool withscores = false);
1729 
1730  client &zrangebyscore(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1731  const reply_callback_t &reply_callback);
1732 
1733  client &zrangebyscore(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1734  bool withscores, const reply_callback_t &reply_callback);
1735 
1736  std::future<reply>
1737  zrangebyscore(const std::string &key, double min, double max, std::size_t offset, std::size_t count,
1738  bool withscores = false);
1739 
1740  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1741  std::size_t count, const reply_callback_t &reply_callback);
1742 
1743  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1744  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1745 
1746  std::future<reply>
1747  zrangebyscore(const std::string &key, const std::string &min, const std::string &max, std::size_t offset,
1748  std::size_t count, bool withscores = false);
1749 
1750  client &zrank(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1751 
1752  std::future<reply> zrank(const std::string &key, const std::string &member);
1753 
1754  client &
1755  zrem(const std::string &key, const std::vector<std::string> &members, const reply_callback_t &reply_callback);
1756 
1757  std::future<reply> zrem(const std::string &key, const std::vector<std::string> &members);
1758 
1759  client &zremrangebylex(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1760 
1761  std::future<reply> zremrangebylex(const std::string &key, int min, int max);
1762 
1763  client &zremrangebylex(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1764 
1765  std::future<reply> zremrangebylex(const std::string &key, double min, double max);
1766 
1767  client &zremrangebylex(const std::string &key, const std::string &min, const std::string &max,
1768  const reply_callback_t &reply_callback);
1769 
1770  std::future<reply> zremrangebylex(const std::string &key, const std::string &min, const std::string &max);
1771 
1772  client &zremrangebyrank(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1773 
1774  std::future<reply> zremrangebyrank(const std::string &key, int start, int stop);
1775 
1776  client &
1777  zremrangebyrank(const std::string &key, double start, double stop, const reply_callback_t &reply_callback);
1778 
1779  std::future<reply> zremrangebyrank(const std::string &key, double start, double stop);
1780 
1781  client &zremrangebyrank(const std::string &key, const std::string &start, const std::string &stop,
1782  const reply_callback_t &reply_callback);
1783 
1784  std::future<reply> zremrangebyrank(const std::string &key, const std::string &start, const std::string &stop);
1785 
1786  client &zremrangebyscore(const std::string &key, int min, int max, const reply_callback_t &reply_callback);
1787 
1788  std::future<reply> zremrangebyscore(const std::string &key, int min, int max);
1789 
1790  client &zremrangebyscore(const std::string &key, double min, double max, const reply_callback_t &reply_callback);
1791 
1792  std::future<reply> zremrangebyscore(const std::string &key, double min, double max);
1793 
1794  client &zremrangebyscore(const std::string &key, const std::string &min, const std::string &max,
1795  const reply_callback_t &reply_callback);
1796 
1797  std::future<reply> zremrangebyscore(const std::string &key, const std::string &min, const std::string &max);
1798 
1799  client &zrevrange(const std::string &key, int start, int stop, const reply_callback_t &reply_callback);
1800 
1801  client &
1802  zrevrange(const std::string &key, int start, int stop, bool withscores, const reply_callback_t &reply_callback);
1803 
1804  std::future<reply> zrevrange(const std::string &key, int start, int stop, bool withscores = false);
1805 
1806  client &zrevrange(const std::string &key, double start, double stop, const reply_callback_t &reply_callback);
1807 
1808  client &zrevrange(const std::string &key, double start, double stop, bool withscores,
1809  const reply_callback_t &reply_callback);
1810 
1811  std::future<reply> zrevrange(const std::string &key, double start, double stop, bool withscores = false);
1812 
1813  client &zrevrange(const std::string &key, const std::string &start, const std::string &stop,
1814  const reply_callback_t &reply_callback);
1815 
1816  client &zrevrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores,
1817  const reply_callback_t &reply_callback);
1818 
1819  std::future<reply>
1820  zrevrange(const std::string &key, const std::string &start, const std::string &stop, bool withscores = false);
1821 
1822  client &zrevrangebylex(const std::string &key, int max, int min, const reply_callback_t &reply_callback);
1823 
1824  client &
1825  zrevrangebylex(const std::string &key, int max, int min, bool withscores, const reply_callback_t &reply_callback);
1826 
1827  std::future<reply> zrevrangebylex(const std::string &key, int max, int min, bool withscores = false);
1828 
1829  client &zrevrangebylex(const std::string &key, double max, double min, const reply_callback_t &reply_callback);
1830 
1831  client &zrevrangebylex(const std::string &key, double max, double min, bool withscores,
1832  const reply_callback_t &reply_callback);
1833 
1834  std::future<reply> zrevrangebylex(const std::string &key, double max, double min, bool withscores = false);
1835 
1836  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min,
1837  const reply_callback_t &reply_callback);
1838 
1839  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, bool withscores,
1840  const reply_callback_t &reply_callback);
1841 
1842  std::future<reply>
1843  zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, bool withscores = false);
1844 
1845  client &zrevrangebylex(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1846  const reply_callback_t &reply_callback);
1847 
1848  client &
1849  zrevrangebylex(const std::string &key, int max, int min, std::size_t offset, std::size_t count, bool withscores,
1850  const reply_callback_t &reply_callback);
1851 
1852  std::future<reply> zrevrangebylex(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1853  bool withscores = false);
1854 
1855  client &zrevrangebylex(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1856  const reply_callback_t &reply_callback);
1857 
1858  client &zrevrangebylex(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1859  bool withscores, const reply_callback_t &reply_callback);
1860 
1861  std::future<reply>
1862  zrevrangebylex(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1863  bool withscores = false);
1864 
1865  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1866  std::size_t count, const reply_callback_t &reply_callback);
1867 
1868  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1869  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1870 
1871  std::future<reply>
1872  zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1873  std::size_t count, bool withscores = false);
1874 
1875  client &zrevrangebyscore(const std::string &key, int max, int min, const reply_callback_t &reply_callback);
1876 
1877  client &zrevrangebyscore(const std::string &key, int max, int min, bool withscores,
1878  const reply_callback_t &reply_callback);
1879 
1880  std::future<reply> zrevrangebyscore(const std::string &key, int max, int min, bool withscores = false);
1881 
1882  client &zrevrangebyscore(const std::string &key, double max, double min, const reply_callback_t &reply_callback);
1883 
1884  client &zrevrangebyscore(const std::string &key, double max, double min, bool withscores,
1885  const reply_callback_t &reply_callback);
1886 
1887  std::future<reply> zrevrangebyscore(const std::string &key, double max, double min, bool withscores = false);
1888 
1889  client &zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min,
1890  const reply_callback_t &reply_callback);
1891 
1892  client &zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, bool withscores,
1893  const reply_callback_t &reply_callback);
1894 
1895  std::future<reply>
1896  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, bool withscores = false);
1897 
1898  client &zrevrangebyscore(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1899  const reply_callback_t &reply_callback);
1900 
1901  client &
1902  zrevrangebyscore(const std::string &key, int max, int min, std::size_t offset, std::size_t count, bool withscores,
1903  const reply_callback_t &reply_callback);
1904 
1905  std::future<reply>
1906  zrevrangebyscore(const std::string &key, int max, int min, std::size_t offset, std::size_t count,
1907  bool withscores = false);
1908 
1909  client &zrevrangebyscore(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1910  const reply_callback_t &reply_callback);
1911 
1912  client &zrevrangebyscore(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1913  bool withscores, const reply_callback_t &reply_callback);
1914 
1915  std::future<reply>
1916  zrevrangebyscore(const std::string &key, double max, double min, std::size_t offset, std::size_t count,
1917  bool withscores = false);
1918 
1919  client &
1920  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1921  std::size_t count, const reply_callback_t &reply_callback);
1922 
1923  client &
1924  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1925  std::size_t count, bool withscores, const reply_callback_t &reply_callback);
1926 
1927  std::future<reply>
1928  zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, std::size_t offset,
1929  std::size_t count, bool withscores = false);
1930 
1931  client &zrevrank(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1932 
1933  std::future<reply> zrevrank(const std::string &key, const std::string &member);
1934 
1935  client &zscan(const std::string &key, std::size_t cursor, const reply_callback_t &reply_callback);
1936 
1937  std::future<reply> zscan(const std::string &key, std::size_t cursor);
1938 
1939  client &zscan(const std::string &key, std::size_t cursor, const std::string &pattern,
1940  const reply_callback_t &reply_callback);
1941 
1942  std::future<reply> zscan(const std::string &key, std::size_t cursor, const std::string &pattern);
1943 
1944  client &
1945  zscan(const std::string &key, std::size_t cursor, std::size_t count, const reply_callback_t &reply_callback);
1946 
1947  std::future<reply> zscan(const std::string &key, std::size_t cursor, std::size_t count);
1948 
1949  client &zscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count,
1950  const reply_callback_t &reply_callback);
1951 
1952  std::future<reply>
1953  zscan(const std::string &key, std::size_t cursor, const std::string &pattern, std::size_t count);
1954 
1955  client &zscore(const std::string &key, const std::string &member, const reply_callback_t &reply_callback);
1956 
1957  std::future<reply> zscore(const std::string &key, const std::string &member);
1958 
1959  client &zunionstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1960  std::vector<std::size_t> weights, aggregate_method method,
1961  const reply_callback_t &reply_callback);
1962 
1963  std::future<reply>
1964  zunionstore(const std::string &destination, std::size_t numkeys, const std::vector<std::string> &keys,
1965  std::vector<std::size_t> weights, aggregate_method method);
1966 
1967  private:
1969  template<typename T>
1970  typename std::enable_if<std::is_same<T, client_type>::value>::type
1971  client_kill_unpack_arg(std::vector<std::string> &redis_cmd, reply_callback_t &, client_type type);
1972 
1973  template<typename T>
1974  typename std::enable_if<std::is_same<T, bool>::value>::type
1975  client_kill_unpack_arg(std::vector<std::string> &redis_cmd, reply_callback_t &, bool skip);
1976 
1977  template<typename T>
1978  typename std::enable_if<std::is_integral<T>::value>::type
1979  client_kill_unpack_arg(std::vector<std::string> &redis_cmd, reply_callback_t &, uint64_t id);
1980 
1981  template<typename T>
1982  typename std::enable_if<std::is_class<T>::value>::type
1983  client_kill_unpack_arg(std::vector<std::string> &, reply_callback_t &reply_callback, const T &cb);
1984 
1985  template<typename T, typename... Ts>
1986  void
1987  client_kill_impl(std::vector<std::string> &redis_cmd, reply_callback_t &reply, const T &arg, const Ts &... args);
1988 
1989  template<typename T>
1990  void
1991  client_kill_impl(std::vector<std::string> &redis_cmd, reply_callback_t &reply, const T &arg);
1992 
1993  private:
1995  client &
1996  sort(const std::string &key, const std::string &by_pattern, bool limit, std::size_t offset, std::size_t count,
1997  const std::vector<std::string> &get_patterns, bool asc_order, bool alpha, const std::string &store_dest,
1998  const reply_callback_t &reply_callback);
1999 
2001  client &zrevrangebyscore(const std::string &key, const std::string &max, const std::string &min, bool limit,
2002  std::size_t offset, std::size_t count, bool withscores,
2003  const reply_callback_t &reply_callback);
2004 
2006  client &zrangebyscore(const std::string &key, const std::string &min, const std::string &max, bool limit,
2007  std::size_t offset, std::size_t count, bool withscores,
2008  const reply_callback_t &reply_callback);
2009 
2011  client &zrevrangebylex(const std::string &key, const std::string &max, const std::string &min, bool limit,
2012  std::size_t offset, std::size_t count, bool withscores,
2013  const reply_callback_t &reply_callback);
2014 
2016  client &zrangebylex(const std::string &key, const std::string &min, const std::string &max, bool limit,
2017  std::size_t offset, std::size_t count, bool withscores,
2018  const reply_callback_t &reply_callback);
2019 
2020  private:
2027  void connection_receive_handler(network::redis_connection &connection, reply &reply);
2028 
2034  void connection_disconnection_handler(network::redis_connection &connection);
2035 
2039  void clear_callbacks();
2040 
2045  void try_commit();
2046 
2048  std::future<reply> exec_cmd(const std::function<client &(const reply_callback_t &)> &f);
2049 
2050  private:
2054  struct command_request {
2055  std::vector<std::string> command;
2056  reply_callback_t callback;
2057  };
2058 
2059  private:
2063  std::string m_redis_server;
2067  std::size_t m_redis_port = 0;
2071  std::string m_master_name;
2075  std::string m_password;
2079  int m_database_index = 0;
2080 
2084  network::redis_connection m_client;
2085 
2089  cpp_redis::sentinel m_sentinel;
2090 
2094  std::uint32_t m_connect_timeout_ms = 0;
2098  std::int32_t m_max_reconnects = 0;
2102  std::int32_t m_current_reconnect_attempts = 0;
2106  std::uint32_t m_reconnect_interval_ms = 0;
2107 
2111  std::atomic_bool m_reconnecting;
2115  std::atomic_bool m_cancel;
2116 
2120  std::queue<command_request> m_commands;
2121 
2125  connect_callback_t m_connect_callback;
2126 
2130  std::mutex m_callbacks_mutex;
2131 
2135  std::condition_variable m_sync_condvar;
2136 
2140  std::atomic<unsigned int> m_callbacks_running;
2141  }; // namespace cpp_redis
2142 
2143 } // namespace cpp_redis
2144 
2145 #include <cpp_redis/impl/client.ipp>
Definition: redis_connection.hpp:45
client & commit()
Definition: client.hpp:48
@@ -94,8 +94,8 @@
std::string aggregate_method_to_string(aggregate_method method) const
client & sync_commit(const std::chrono::duration< Rep, Period > &timeout)
Definition: client.hpp:220
std::string geo_unit_to_string(geo_unit unit) const
-
connect_state
Definition: client.hpp:71
-
void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_msecs=0)
+
connect_state
Definition: client.hpp:71
+
void add_sentinel(const std::string &host, std::size_t port, std::uint32_t timeout_ms=0)
std::string type
Definition: client.hpp:424
std::string overflow_type_to_string(overflow_type type) const
void disconnect(bool wait_for_removal=false)
@@ -107,7 +107,7 @@
client & xinfo_groups(const std::string &key, const reply_callback_t &reply_callback)
std::string bitfield_operation_type_to_string(bitfield_operation_type operation) const
overflow_type overflow
Definition: client.hpp:439
-
void connect(const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_msecs=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_msecs=0)
+
void connect(const std::string &host="127.0.0.1", std::size_t port=6379, const connect_callback_t &connect_callback=nullptr, std::uint32_t timeout_ms=0, std::int32_t max_reconnects=0, std::uint32_t reconnect_interval_ms=0)
client_type
Definition: client.hpp:54
std::future< reply > client_kill_future(T, const Ts...)
Definition: client.ipp:122
int offset
Definition: client.hpp:429
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js index c1ce1226..869d1765 100644 --- a/docs/html/dynsections.js +++ b/docs/html/dynsections.js @@ -114,7 +114,7 @@ function toggleInherit(id) $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); } else { rows.css('display','table-row'); // using show() causes jump in firefox - $(img).attr('src',src.substring(0,src.length-10)+'open.png'); + $(img).attr('src',src.substring(0,src.size-10)+'open.png'); } } /* @license-end */ diff --git a/docs/html/functions_func_g.html b/docs/html/functions_func_g.html index 99994f68..7991e73f 100644 --- a/docs/html/functions_func_g.html +++ b/docs/html/functions_func_g.html @@ -112,7 +112,7 @@

- g -

  • get_simple_string() : cpp_redis::builders::simple_string_builder
  • -
  • get_timeout_msecs() +
  • get_timeout_ms() : cpp_redis::sentinel::sentinel_def
  • get_type() diff --git a/docs/html/functions_func_m.html b/docs/html/functions_func_m.html index fc2bbf5c..82550615 100644 --- a/docs/html/functions_func_m.html +++ b/docs/html/functions_func_m.html @@ -63,7 +63,7 @@
      -

    - m -

      +

      - m_cv_mutex -

      • master() : cpp_redis::sentinel
      • diff --git a/docs/html/functions_func_s.html b/docs/html/functions_func_s.html index a8273caf..45a3cf44 100644 --- a/docs/html/functions_func_s.html +++ b/docs/html/functions_func_s.html @@ -89,7 +89,7 @@

        - s -

          : cpp_redis::network::tcp_client , cpp_redis::network::tcp_client_iface -
        • set_timeout_msecs() +
        • set_timeout_ms() : cpp_redis::sentinel::sentinel_def
        • simple_string_builder() diff --git a/docs/html/functions_g.html b/docs/html/functions_g.html index 3a493f42..ca6386d1 100644 --- a/docs/html/functions_g.html +++ b/docs/html/functions_g.html @@ -115,7 +115,7 @@

          - g -

          • get_simple_string() : cpp_redis::builders::simple_string_builder
          • -
          • get_timeout_msecs() +
          • get_timeout_ms() : cpp_redis::sentinel::sentinel_def
          • get_type() diff --git a/docs/html/functions_m.html b/docs/html/functions_m.html index e6fd8179..00389d0f 100644 --- a/docs/html/functions_m.html +++ b/docs/html/functions_m.html @@ -63,7 +63,7 @@
            Here is a list of all class members with links to the classes they belong to:
            -

            - m -

              +

              - m_cv_mutex -

              • m_array_size : cpp_redis::builders::array_builder
              • @@ -113,7 +113,7 @@

                - m -

                  : cpp_redis::client , cpp_redis::subscriber -
                • m_connect_timeout_msecs +
                • m_connect_timeout_ms : cpp_redis::client , cpp_redis::subscriber
                • @@ -179,7 +179,7 @@

                  - m -

                  • m_psubscribed_channels_mutex : cpp_redis::subscriber
                  • -
                  • m_reconnect_interval_msecs +
                  • m_reconnect_interval_ms : cpp_redis::client , cpp_redis::subscriber
                  • diff --git a/docs/html/functions_s.html b/docs/html/functions_s.html index 08aec6ee..cfb189b1 100644 --- a/docs/html/functions_s.html +++ b/docs/html/functions_s.html @@ -92,7 +92,7 @@

                    - s -

                      : cpp_redis::network::tcp_client , cpp_redis::network::tcp_client_iface -
                    • set_timeout_msecs() +
                    • set_timeout_ms() : cpp_redis::sentinel::sentinel_def
                    • simple_string_builder() diff --git a/docs/html/jquery.js b/docs/html/jquery.js index 6c582d58..0d9e7f8e 100644 --- a/docs/html/jquery.js +++ b/docs/html/jquery.js @@ -41,14 +41,14 @@ * * Date: Mon Nov 21 21:11:03 2011 -0500 */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
                      a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
                      ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
                      t
                      ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
                      ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
                      a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
                      ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
                      t
                      ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
                      ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

                      ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
                      ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
                      ","
                      "],thead:[1,"","
                      "],tr:[2,"","
                      "],td:[3,"","
                      "],col:[2,"","
                      "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
                      ","
                      "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
                      ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.m_name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{m_name:bv.m_name,value:by.replace(bs,"\r\n")}}):{m_name:bv.m_name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.m_name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

                      ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
                      ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/
                      ",""],legend:[1,"
                      ","
                      "],thead:[1,"
                      ","
                      "],tr:[2,"","
                      "],td:[3,"","
                      "],col:[2,"","
                      "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
                      ","
                      "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
                      ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.m_name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{m_name:bv.m_name,value:by.replace(bs,"\r\n")}}):{m_name:bv.m_name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.m_name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m_cv_mutex||!a8.createElement){m_cv_mutex=(a8.contentWindow||a8.contentDocument).document;m_cv_mutex.write((av.compatMode==="CSS1Compat"?"":"")+"");m_cv_mutex.close()}bv=m_cv_mutex.createElement(bx);m_cv_mutex.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -57,7 +57,7 @@ * * http://docs.jquery.com/UI */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.m_name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m_cv_mutex,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m_cv_mutex,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m_cv_mutex,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m_cv_mutex,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.m_name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! * jQuery UI Widget 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -78,7 +78,7 @@ * Depends: * jquery.ui.widget.js */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
                      ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
                      ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
                      ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m_cv_mutex=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m_cv_mutex,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m_cv_mutex={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m_cv_mutex=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m_cv_mutex.sizeDiff.height,k=e?0:m_cv_mutex.sizeDiff.width;var n={width:(m_cv_mutex.helper.width()-k),height:(m_cv_mutex.helper.height()-f)},j=(parseInt(m_cv_mutex.element.css("left"),10)+(m_cv_mutex.position.left-m_cv_mutex.originalPosition.left))||null,l=(parseInt(m_cv_mutex.element.css("top"),10)+(m_cv_mutex.position.top-m_cv_mutex.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m_cv_mutex.helper.height(m_cv_mutex.size.height);m_cv_mutex.helper.width(m_cv_mutex.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m_cv_mutex){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m_cv_mutex&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m_cv_mutex,n){c(m_cv_mutex).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m_cv_mutex,n){e(m_cv_mutex,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m_cv_mutex=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m_cv_mutex&&k?{top:m_cv_mutex,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m_cv_mutex=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m_cv_mutex),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m_cv_mutex=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m_cv_mutex=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m_cv_mutex.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m_cv_mutex.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m_cv_mutex){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ * @@ -86,14 +86,14 @@ * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('