From 899152a530ac9aaf2d65f89d9c20c6b1e5e12861 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sun, 25 Aug 2024 20:26:41 +0200 Subject: [PATCH 01/14] Remove config.h from Git; must be adapted by the user A template for the config file is provided in src/config.h.template. It must be copied to src/config.h and adapted for force users to set their own station call sign. --- impl/README.md | 22 ++++++++++++++++++++++ impl/src/{config.h => config.h.template} | 4 ++++ 2 files changed, 26 insertions(+) create mode 100644 impl/README.md rename impl/src/{config.h => config.h.template} (95%) diff --git a/impl/README.md b/impl/README.md new file mode 100644 index 0000000..c230fbe --- /dev/null +++ b/impl/README.md @@ -0,0 +1,22 @@ +# Hamnet70 Implementation + +This directory contains an implementation of the Hamnet70 protocol. + +Before you can compile and use this code, some additional steps are necessary: + +1. Copy `src/config.h.template` to `src/config.h` and set the following variables: + - `MY_CALL`: the station call sign (i.e. your amateur radio call sign). + This will be encoded into the address fields of outgoing packets. +2. Install dependencies: + - _libliquid_ compiled with _libfec_ support + - _libfec_ + - _fftw3_ + - _libhackrf_ + +After everything is prepared, compile the code using `./make.sh`. +Parameters to this script are forwarded to `make` so you can speed things up a little with `./make.sh -j4` (on a CPU with 4 threads). + +When compiled, you have two options for running Hamnet70: + +1. In digipeater (base station) mode: `build/hamnet70 -c`. This will broadcast beacons and wait for clients to connect. +2. In client mode: `build/hamnet70`. This will wait for a beacon to arrive and connect to it. diff --git a/impl/src/config.h b/impl/src/config.h.template similarity index 95% rename from impl/src/config.h rename to impl/src/config.h.template index 4abb898..b9ffc23 100644 --- a/impl/src/config.h +++ b/impl/src/config.h.template @@ -9,6 +9,10 @@ #include +/*** LAYER 2 CONFIG ***/ + +#define MY_CALL undefined // define MY_CALL to your call sign as a C string, e.g. "DL5TKL" + /*** TIMING CONFIG ***/ #define TX_SWITCH_BACKOFF_PREAMBLE_MS 42 // only relevant if packet cannot be decoded (maximum packet duration) -- 2.44.2 From fc9e5c5229bfa2bbb9709266f248d0e9aa4a29de Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sun, 25 Aug 2024 22:26:56 +0200 Subject: [PATCH 02/14] Combine layer2_rx and layer2_tx in a new connection module The new module is not used yet, but this is a preparation for the future multi-client networking support. --- impl/CMakeLists.txt | 2 + impl/src/layer2/connection.c | 297 +++++++++++++++++++++++++++++++++++ impl/src/layer2/connection.h | 126 +++++++++++++++ impl/src/layer2/ham64.c | 16 ++ impl/src/layer2/ham64.h | 8 + impl/src/layer2/layer2_rx.c | 1 - impl/src/results.h | 21 +-- 7 files changed, 460 insertions(+), 11 deletions(-) create mode 100644 impl/src/layer2/connection.c create mode 100644 impl/src/layer2/connection.h diff --git a/impl/CMakeLists.txt b/impl/CMakeLists.txt index 554c6e1..a819d87 100644 --- a/impl/CMakeLists.txt +++ b/impl/CMakeLists.txt @@ -53,6 +53,8 @@ set(sources src/layer2/layer2_rx.h src/layer2/ham64.c src/layer2/ham64.h + src/layer2/connection.c + src/layer2/connection.h src/sdr/sdr.c src/sdr/sdr.h ) diff --git a/impl/src/layer2/connection.c b/impl/src/layer2/connection.c new file mode 100644 index 0000000..87e00ab --- /dev/null +++ b/impl/src/layer2/connection.c @@ -0,0 +1,297 @@ +#include +#include + +#include "connection.h" + +#include "config.h" +#include "layer2/ham64.h" +#include "results.h" + +#define SEQ_NR_MASK 0xF + +result_t connection_init(connection_ctx_t *ctx, const ham64_t *my_addr, const ham64_t *peer_addr) +{ + ctx->last_acked_seq = 0; + ctx->next_expected_seq = 0; + + packet_queue_init(&ctx->packet_queue); + ctx->next_packet_index = 0; + ctx->next_seq_nr = 0; + + ctx->my_addr = *my_addr; + ctx->peer_addr = *peer_addr; + + ctx->conn_state = CONN_STATE_INITIALIZED; + + return OK; +} + + +void connection_destroy(connection_ctx_t *ctx) +{ + ctx->conn_state = CONN_STATE_UNINITIALIZED; + packet_queue_destroy(&ctx->packet_queue); +} + + +result_t connection_handle_packet(connection_ctx_t *ctx, const uint8_t *buf, size_t buf_len) +{ + // check the CRC + size_t packet_size = buf_len - crc_sizeof_key(PAYLOAD_CRC_SCHEME); + + if(!crc_check_key(PAYLOAD_CRC_SCHEME, (unsigned char*)buf, packet_size)) { + LOG(LVL_ERR, "payload CRC check failed!"); + return ERR_INTEGRITY; + } + + // decode the header + layer2_packet_header_t header; + + if(!layer2_decode_packet_header(buf, buf_len, &header)) { + LOG(LVL_ERR, "Header could not be decoded!"); + return ERR_INTEGRITY; + } + + // check if the packet really should be handled by us + if(!ham64_is_equal(&header.src_addr, &ctx->peer_addr)) { + char fmt_src_addr[HAM64_FMT_MAX_LEN]; + char fmt_peer_addr[HAM64_FMT_MAX_LEN]; + + ham64_format(&header.src_addr, fmt_src_addr); + ham64_format(&ctx->peer_addr, fmt_peer_addr); + + LOG(LVL_ERR, "Packet has the wrong source address: got %s, expected %s", + fmt_src_addr, fmt_peer_addr); + + return ERR_INVALID_ADDRESS; + } + + if(!ham64_is_equal(&header.dst_addr, &ctx->my_addr)) { + char fmt_dst_addr[HAM64_FMT_MAX_LEN]; + char fmt_my_addr[HAM64_FMT_MAX_LEN]; + + ham64_format(&header.dst_addr, fmt_dst_addr); + ham64_format(&ctx->my_addr, fmt_my_addr); + + LOG(LVL_ERR, "Packet has the wrong destination address: got %s, expected %s", + fmt_dst_addr, fmt_my_addr); + + return ERR_INVALID_ADDRESS; + } + + LOG(LVL_DEBUG, "Handling %s packet with rx_seq_nr %u, tx_seq_nr %u.", + layer2_msg_type_to_string(header.msg_type), header.rx_seq_nr, header.tx_seq_nr); + + ctx->last_acked_seq = header.rx_seq_nr; + + + switch(header.msg_type) { + case L2_MSG_TYPE_EMPTY: + LOG(LVL_DEBUG, "Empty packet: accepted ACK for %u.", ctx->last_acked_seq); + return OK; // do not ACK and call back + + case L2_MSG_TYPE_CONN_MGMT: + case L2_MSG_TYPE_CONNECTIONLESS: + LOG(LVL_WARN, "Message type %s is not implemented yet.", layer2_msg_type_to_string(header.msg_type)); + return OK; + + case L2_MSG_TYPE_DATA: + break; + + default: + LOG(LVL_ERR, "Invalid message type %d.", header.msg_type); + return ERR_INVALID_STATE; + } + + if(ctx->next_expected_seq != header.tx_seq_nr) { + LOG(LVL_ERR, "Expected sequence number %u, received %u.", ctx->next_expected_seq, header.tx_seq_nr); + return ERR_SEQUENCE; + } + + ctx->next_expected_seq++; + ctx->next_expected_seq &= 0xF; + + LOG(LVL_INFO, "Received ACK for seq_nr %u in packet seq_nr %u.", header.rx_seq_nr, header.tx_seq_nr); + + // handle the acknowledgement internally + connection_handle_ack(ctx, header.rx_seq_nr); + + size_t header_size = layer2_get_encoded_header_size(&header); + + // extract the payload and forward it to the tun device + const uint8_t *payload = buf + header_size; + size_t payload_len = packet_size - header_size; + + ctx->data_cb(ctx, payload, payload_len); + + return OK; +} + + +uint8_t connection_get_next_expected_seq(const connection_ctx_t *ctx) +{ + return ctx->next_expected_seq; +} + + +uint8_t connection_get_last_acked_seq(const connection_ctx_t *ctx) +{ + return ctx->last_acked_seq; +} + + +result_t connection_enqueue_packet(connection_ctx_t *ctx, uint8_t *buf, size_t buf_len) +{ + layer2_packet_header_t header; + + if(packet_queue_get_free_space(&ctx->packet_queue) == 0) { + return ERR_NO_MEM; + } + + header.dst_addr = ctx->peer_addr; + header.src_addr = ctx->my_addr; + header.msg_type = L2_MSG_TYPE_DATA; + header.rx_seq_nr = 0; // will be filled in layer2_tx_encode_next_packet() + header.tx_request = 0; + header.tx_seq_nr = ctx->next_seq_nr; + + // create a persistent copy of the packet data. + // TODO: possibly this copy operation can be removed by passing a malloc'd buffer in. + uint8_t *packetbuf = malloc(buf_len); + if(!packetbuf) { + LOG(LVL_ERR, "malloc failed."); + return ERR_NO_MEM; + } + + memcpy(packetbuf, buf, buf_len); + + packet_queue_add(&ctx->packet_queue, &header, packetbuf, buf_len); + + LOG(LVL_INFO, "Added packet tx_seq %u to queue -> %zu entries", + header.tx_seq_nr, packet_queue_get_used_space(&ctx->packet_queue)); + + ctx->next_seq_nr++; + ctx->next_seq_nr &= SEQ_NR_MASK; + + return OK; +} + + +result_t connection_add_empty_packet(connection_ctx_t *ctx, bool tx_request) +{ + layer2_packet_header_t header; + + header.dst_addr.addr[0] = 0xFFFF; + header.dst_addr.length = 1; + header.src_addr.addr[0] = 0x0001; + header.src_addr.length = 1; + header.msg_type = L2_MSG_TYPE_EMPTY; + header.rx_seq_nr = 0; // will be filled in layer2_tx_encode_next_packet() + header.tx_seq_nr = 0; // not used in empty packets + header.tx_request = tx_request; + + if (!packet_queue_add(&ctx->packet_queue, &header, NULL, 0)) { + return ERR_NO_MEM; + } + + return OK; +} + + +size_t connection_encode_next_packet(connection_ctx_t *ctx, uint8_t ack_seq_nr, uint8_t *buf, size_t buf_len) +{ + const packet_queue_entry_t *entry = packet_queue_get(&ctx->packet_queue, ctx->next_packet_index); + + if(!entry) { + // no more entries + return 0; + } + + unsigned int crc_size = crc_sizeof_key(PAYLOAD_CRC_SCHEME); + + assert(buf_len >= LAYER2_PACKET_HEADER_ENCODED_SIZE_MAX + crc_size + entry->data_len); + + layer2_packet_header_t header = entry->header; + header.rx_seq_nr = ack_seq_nr; + + // encode the header + LOG(LVL_DEBUG, "Encoding packet with rx_seq_nr %u, tx_seq_nr %u.", header.rx_seq_nr, header.tx_seq_nr); + + size_t packet_size = layer2_encode_packet_header(&header, buf); + + // add the payload data + if(entry->data) { + memcpy(buf + packet_size, entry->data, entry->data_len); + } + + packet_size += entry->data_len; + + // calculate CRC of everything and append it to the packet + crc_append_key(PAYLOAD_CRC_SCHEME, buf, packet_size); + + packet_size += crc_size; + + ctx->next_packet_index++; + + return packet_size; +} + + +void connection_restart_tx(connection_ctx_t *ctx) +{ + ctx->next_packet_index = 0; +} + + +void connection_tx_clean_empty_packet(connection_ctx_t *ctx) +{ + const packet_queue_entry_t *entry = packet_queue_get(&ctx->packet_queue, 0); + if(entry && entry->header.msg_type == L2_MSG_TYPE_EMPTY) { + packet_queue_delete(&ctx->packet_queue, 1); + + if(ctx->next_packet_index > 0) { + ctx->next_packet_index--; + } + } +} + + +void connection_handle_ack(connection_ctx_t *ctx, uint8_t acked_seq) +{ + ctx->next_packet_index = 0; + + size_t packets_to_remove = 0; + size_t packets_available = packet_queue_get_used_space(&ctx->packet_queue); + + for(size_t i = 0; i < packets_available; i++) { + const packet_queue_entry_t *entry = packet_queue_get(&ctx->packet_queue, i); + + if(entry->header.tx_seq_nr == acked_seq) { + break; + } + + packets_to_remove++; + } + + packet_queue_delete(&ctx->packet_queue, packets_to_remove); + + packets_available = packet_queue_get_used_space(&ctx->packet_queue); + + LOG(LVL_DEBUG, "handling ack for seq_nr %u, removing %zu packets, %zu packets remaining.", acked_seq, packets_to_remove, packets_available); + + if(packets_available == 0) { + // no packets left in queue, but an acknowledgement must be + // transmitted. Add an empty packet to do that. + result_t res = connection_add_empty_packet(ctx, false); + if (res != OK) { + LOG(LVL_WARN, "Failed to add empty packet: %d.", res); + } + } +} + + +bool connection_can_transmit(const connection_ctx_t *ctx) +{ + return (packet_queue_get_used_space(&ctx->packet_queue) != 0) + && (packet_queue_get(&ctx->packet_queue, ctx->next_packet_index) != NULL); +} diff --git a/impl/src/layer2/connection.h b/impl/src/layer2/connection.h new file mode 100644 index 0000000..d975f58 --- /dev/null +++ b/impl/src/layer2/connection.h @@ -0,0 +1,126 @@ +/* + * This file contains functions to handle a single layer 2 connection. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Copyright (C) 2024 Thomas Kolb + */ + +#ifndef CONNECTION_H +#define CONNECTION_H + +#include +#include + +#include "packet_queue.h" + +struct connection_ctx_s; + +typedef enum { + CONN_STATE_UNINITIALIZED, //!< Uninitialized. Cannot be used in any way + CONN_STATE_INITIALIZED, //!< Initialized, no packets processed yet + CONN_STATE_CONNECTING, //!< Connection request sent, no two-way communication yet + CONN_STATE_ESTABLISHED, //!< Connection is established + CONN_STATE_CLOSED //!< Connection has been closed (gracefully or by timeout) +} connection_state_t; + +/*!\brief Type for a callback function that is called when a data packet was received. */ +typedef void (*connection_data_callback_t)(struct connection_ctx_s *conn, const uint8_t *data, size_t len); + +typedef struct connection_ctx_s { + connection_state_t conn_state; //!< State of the connection. + + connection_data_callback_t data_cb; //!< Callback function for received data packets. + + ham64_t my_addr; //!< The local link layer address. + ham64_t peer_addr; //!< The link layer address of the peer. + + uint8_t last_acked_seq; //!< Next sequence number expected by the peer (from last Ack). + uint8_t next_expected_seq; //!< Next sequence number expected by us. + + packet_queue_t packet_queue; //!< Transmission packet queue. + + size_t next_packet_index; //!< Index in the packet queue of the next packet to transmit. + uint8_t next_seq_nr; //!< Sequence number to tag the next transmitted packet with. +} connection_ctx_t; + + +/*!\brief Initialize the layer 2 connection context. + * + * \param ctx The connection context to initialize. + * \param my_addr The local link layer address. + * \param peer_addr The remote link layer address. + * \returns OK if everything worked or a fitting error code. + */ +result_t connection_init(connection_ctx_t *ctx, const ham64_t *my_addr, const ham64_t *peer_addr); + +/*!\brief Destroy the given layer 2 connection context. + */ +void connection_destroy(connection_ctx_t *ctx); + +/*!\brief Handle a received packet. + * + * \param ctx The receiver context. + * \param buf Where to write the encoded packet data. + * \param buf_len Space available in the buffer. + * \returns A result code from the packet handling procedure. + */ +result_t connection_handle_packet(connection_ctx_t *ctx, const uint8_t *buf, size_t buf_len); + +/*!\brief Return the sequence number expected next by our side. + */ +uint8_t connection_get_next_expected_seq(const connection_ctx_t *ctx); + +/*!\brief Return the sequence number expected next by the other side. + */ +uint8_t connection_get_last_acked_seq(const connection_ctx_t *ctx); + +/*!\brief Enqueue a packet for transmission. + * \param ctx The connection context. + */ +result_t connection_enqueue_packet(connection_ctx_t *ctx, uint8_t *buf, size_t buf_len); + +/*!\brief Add an empty packet to ensure an acknowledgement is sent. + * \param ctx The connection context. + * \param tx_request Value of the TX Request field in the packet. + */ +result_t connection_add_empty_packet(connection_ctx_t *ctx, bool tx_request); + +/*!\brief Encode the next packet for transmission. + * + * \note + * If no more packets are available, this function returns zero. In that case, + * either \ref connection_restart() or \ref connection_handle_ack() must be + * called to handle retransmits correctly. + * + * \param ctx The connection context. + * \param ack_seq_nr The received sequence number to send as an acknowledgement. + * \param buf Where to write the encoded packet data. + * \param buf_len Space available in the buffer. + * \returns The number of bytes written to buf or zero if no packet was available. + */ +size_t connection_encode_next_packet(connection_ctx_t *ctx, uint8_t ack_seq_nr, uint8_t *buf, size_t buf_len); + +/*!\brief Restart the transmission from the beginning of the packet queue. + */ +void connection_restart_tx(connection_ctx_t *ctx); + +/*!\brief Remove the first packet from the queue if it is an empty packet. + */ +void connection_tx_clean_empty_packet(connection_ctx_t *ctx); + +/*!\brief Handle acknowledgements. + * \details + * Removes all packets before the given sequence number from the queue. + * + * \param ctx The connection context. + * \param acked_seq The acknowledged (= next expected) sequence number. + * \param do_ack Whether an empty packet shall be generated if the queue is empty. + */ +void connection_handle_ack(connection_ctx_t *ctx, uint8_t acked_seq); + +/*!\brief Check if there are packets queued for transmission. + */ +bool connection_can_transmit(const connection_ctx_t *ctx); + +#endif // CONNECTION_H diff --git a/impl/src/layer2/ham64.c b/impl/src/layer2/ham64.c index b4301ca..5d00292 100644 --- a/impl/src/layer2/ham64.c +++ b/impl/src/layer2/ham64.c @@ -187,3 +187,19 @@ void ham64_format(const ham64_t *ham64, char *out) out[5*ham64->length - 1] = '\0'; } + + +bool ham64_is_equal(const ham64_t *a, const ham64_t *b) +{ + if(a->length != b->length) { + return false; + } + + for(uint8_t i = 0; i < a->length; i++) { + if(a->addr[i] != b->addr[i]) { + return false; + } + } + + return true; +} diff --git a/impl/src/layer2/ham64.h b/impl/src/layer2/ham64.h index 71082cb..35798f5 100644 --- a/impl/src/layer2/ham64.h +++ b/impl/src/layer2/ham64.h @@ -9,6 +9,7 @@ #include #include +#include // buffer size required for the string representation of a maximum-length HAM64 // address, including terminating zero. @@ -62,4 +63,11 @@ const char *ham64_addr_type_to_string(ham64_addr_type_t addr_type); */ void ham64_format(const ham64_t *ham64, char *out); +/*!\brief Check if two ham64 addresses are equal. + * \param a Pointer to the first address. + * \param b Pointer to the second address. + * \returns True if a and b are equal, false otherwise. + */ +bool ham64_is_equal(const ham64_t *a, const ham64_t *b); + #endif // HAM64_H diff --git a/impl/src/layer2/layer2_rx.c b/impl/src/layer2/layer2_rx.c index 31dfa9b..bf504f4 100644 --- a/impl/src/layer2/layer2_rx.c +++ b/impl/src/layer2/layer2_rx.c @@ -6,7 +6,6 @@ */ #include -#include #include #include diff --git a/impl/src/results.h b/impl/src/results.h index 60f38c3..cb847f4 100644 --- a/impl/src/results.h +++ b/impl/src/results.h @@ -11,16 +11,17 @@ typedef enum { OK, - ERR_INVALID_STATE, - ERR_INVALID_PARAM, // invalid / nonsense parameters given - ERR_NO_MEM, // not enough memory or allocation error - ERR_SIZE, // a given size is invalid - ERR_LIQUID, // an error occurred in the LiquidDSP library. - ERR_SYSCALL, // a syscall failed. Use errno to determine the cause. - ERR_SOAPY, // an error occurred in the SoapySDR library. - ERR_SDR, // an error occurred in the SDR interface. - ERR_INTEGRITY, // an integrity check failed (e.g. CRC of received packet is wrong) - ERR_SEQUENCE, // an unexpected packet was received + ERR_INVALID_STATE, // module or context is in an invalid state + ERR_INVALID_PARAM, // invalid / nonsense parameters given + ERR_INVALID_ADDRESS, // invalid address received or given + ERR_NO_MEM, // not enough memory or allocation error + ERR_SIZE, // a given size is invalid + ERR_LIQUID, // an error occurred in the LiquidDSP library. + ERR_SYSCALL, // a syscall failed. Use errno to determine the cause. + ERR_SOAPY, // an error occurred in the SoapySDR library. + ERR_SDR, // an error occurred in the SDR interface. + ERR_INTEGRITY, // an integrity check failed (e.g. CRC of received packet is wrong) + ERR_SEQUENCE, // an unexpected packet was received } result_t; #ifdef DEBUG_LIQUID -- 2.44.2 From 79c340c20dc937ba6185c815c26243d29e2c21ef Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sun, 25 Aug 2024 23:27:22 +0200 Subject: [PATCH 03/14] connection: add state checks --- impl/src/layer2/connection.c | 78 ++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/impl/src/layer2/connection.c b/impl/src/layer2/connection.c index 87e00ab..ea25c51 100644 --- a/impl/src/layer2/connection.c +++ b/impl/src/layer2/connection.c @@ -29,6 +29,10 @@ result_t connection_init(connection_ctx_t *ctx, const ham64_t *my_addr, const ha void connection_destroy(connection_ctx_t *ctx) { + if(ctx->conn_state == CONN_STATE_UNINITIALIZED) { + return; + } + ctx->conn_state = CONN_STATE_UNINITIALIZED; packet_queue_destroy(&ctx->packet_queue); } @@ -36,6 +40,20 @@ void connection_destroy(connection_ctx_t *ctx) result_t connection_handle_packet(connection_ctx_t *ctx, const uint8_t *buf, size_t buf_len) { + // check the connection state + switch(ctx->conn_state) { + case CONN_STATE_UNINITIALIZED: + case CONN_STATE_INITIALIZED: + case CONN_STATE_CLOSED: + LOG(LVL_ERR, "Trying to pass packet to connection in state %u", ctx->conn_state); + return ERR_INVALID_STATE; + + case CONN_STATE_CONNECTING: + case CONN_STATE_ESTABLISHED: + // in these states, packets can be handled + break; + } + // check the CRC size_t packet_size = buf_len - crc_sizeof_key(PAYLOAD_CRC_SCHEME); @@ -142,6 +160,20 @@ uint8_t connection_get_last_acked_seq(const connection_ctx_t *ctx) result_t connection_enqueue_packet(connection_ctx_t *ctx, uint8_t *buf, size_t buf_len) { + // check the connection state + switch(ctx->conn_state) { + case CONN_STATE_UNINITIALIZED: + case CONN_STATE_INITIALIZED: + case CONN_STATE_CLOSED: + case CONN_STATE_CONNECTING: + LOG(LVL_ERR, "Trying to enqueue packet in inactive state %u", ctx->conn_state); + return ERR_INVALID_STATE; + + case CONN_STATE_ESTABLISHED: + // in these states, packets can be handled + break; + } + layer2_packet_header_t header; if(packet_queue_get_free_space(&ctx->packet_queue) == 0) { @@ -179,6 +211,20 @@ result_t connection_enqueue_packet(connection_ctx_t *ctx, uint8_t *buf, size_t b result_t connection_add_empty_packet(connection_ctx_t *ctx, bool tx_request) { + // check the connection state + switch(ctx->conn_state) { + case CONN_STATE_UNINITIALIZED: + case CONN_STATE_INITIALIZED: + case CONN_STATE_CLOSED: + case CONN_STATE_CONNECTING: + LOG(LVL_ERR, "Trying to add empty packet in inactive state %u", ctx->conn_state); + return ERR_INVALID_STATE; + + case CONN_STATE_ESTABLISHED: + // in these states, packets can be handled + break; + } + layer2_packet_header_t header; header.dst_addr.addr[0] = 0xFFFF; @@ -200,6 +246,20 @@ result_t connection_add_empty_packet(connection_ctx_t *ctx, bool tx_request) size_t connection_encode_next_packet(connection_ctx_t *ctx, uint8_t ack_seq_nr, uint8_t *buf, size_t buf_len) { + // check the connection state + switch(ctx->conn_state) { + case CONN_STATE_UNINITIALIZED: + case CONN_STATE_INITIALIZED: + case CONN_STATE_CLOSED: + LOG(LVL_ERR, "Trying to encode packet in inactive state %u", ctx->conn_state); + return ERR_INVALID_STATE; + + case CONN_STATE_CONNECTING: + case CONN_STATE_ESTABLISHED: + // in these states, packets may be present for transmission + break; + } + const packet_queue_entry_t *entry = packet_queue_get(&ctx->packet_queue, ctx->next_packet_index); if(!entry) { @@ -245,6 +305,8 @@ void connection_restart_tx(connection_ctx_t *ctx) void connection_tx_clean_empty_packet(connection_ctx_t *ctx) { + assert(ctx->conn_state != CONN_STATE_UNINITIALIZED); + const packet_queue_entry_t *entry = packet_queue_get(&ctx->packet_queue, 0); if(entry && entry->header.msg_type == L2_MSG_TYPE_EMPTY) { packet_queue_delete(&ctx->packet_queue, 1); @@ -258,6 +320,20 @@ void connection_tx_clean_empty_packet(connection_ctx_t *ctx) void connection_handle_ack(connection_ctx_t *ctx, uint8_t acked_seq) { + // check the connection state + switch(ctx->conn_state) { + case CONN_STATE_UNINITIALIZED: + case CONN_STATE_INITIALIZED: + case CONN_STATE_CLOSED: + case CONN_STATE_CONNECTING: + LOG(LVL_ERR, "Trying to call connection_handle_ack() in inactive state %u", ctx->conn_state); + return; + + case CONN_STATE_ESTABLISHED: + // in these states, packets may be present for transmission + break; + } + ctx->next_packet_index = 0; size_t packets_to_remove = 0; @@ -292,6 +368,8 @@ void connection_handle_ack(connection_ctx_t *ctx, uint8_t acked_seq) bool connection_can_transmit(const connection_ctx_t *ctx) { + assert(ctx->conn_state != CONN_STATE_UNINITIALIZED); + return (packet_queue_get_used_space(&ctx->packet_queue) != 0) && (packet_queue_get(&ctx->packet_queue, ctx->next_packet_index) != NULL); } -- 2.44.2 From 10f634d144062d21e1edd91bdfeaa66bd8d6e92e Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 27 Aug 2024 18:07:12 +0200 Subject: [PATCH 04/14] doc: translate message sequence diagrams to mscgen Mermaid is more beautiful, but the tool stack is really annoying. A Chrome browser should not be necessary to generate some SVGs. --- doc/hamnet70.adoc | 125 +++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/doc/hamnet70.adoc b/doc/hamnet70.adoc index 64fb67d..23631c4 100644 --- a/doc/hamnet70.adoc +++ b/doc/hamnet70.adoc @@ -267,108 +267,109 @@ To be defined: ==== Connection Establishment -[mermaid,format=svg,svg-type=interactive] +[msc,format=svg,svg-type=interactive, scale=1.4] .Connection establishment .... -sequenceDiagram - participant digi as Digipeater - participant client as Client +msc { + digi [label="Digipeater"], + client [label="Client"]; - digi -->> client: Beacon (Broadcast) - digi -->> client: Beacon (Broadcast) - digi -->> client: Beacon (Broadcast) + digi -> client [label="Beacon (Broadcast)"]; + digi -> client [label="Beacon (Broadcast)"]; - Note over client: Decides to connect + client box client [label="Decides to connect"]; + ...; - client ->> digi: Connection Request + digi -> client [label="Beacon (Broadcast)"]; + digi <- client [label="Connection Request"]; - alt Connection accepted - digi ->> client: Connection Parameters - client ->> digi: Connection Acknowledgement - Note over digi,client: Connection established - else Connection rejected - digi ->> client: Connection Refusal - end + --- [label="Alternative 1: Connection is accepted"]; + digi -> client [label="Connection Parameters"]; + digi <- client [label="Connection Acknowledgement"]; + digi box client [label="Connection established"]; + + --- [label="Alternative 2: Connection is rejected"]; + digi -> client [label="Connection Refusal"]; +} .... ==== Communication during a Connection -[mermaid,format=svg,svg-type=interactive] +[msc,format=svg,svg-type=interactive, scale=1.4] .In-connection communication .... -sequenceDiagram - participant digi as Digipeater - participant client as Client +msc { + digi [label="Digipeater"], + client [label="Client"]; - Note over digi,client: Connection established + --- [label="Connection established"]; + digi => client [label="Up to 14 packets without Transmission Request"]; + digi -> client [label="Packet with Transmission Request"]; - loop For up to 14 packets - digi ->> client: Packet without Transmission Request - end + digi box digi [label="Start timeout timer"]; - digi ->> client: Packet with Transmission Request + --- [label="Alternative 1: Normal reply"]; - Note over digi: Start timeout timer + digi <= client [label="Up to 14 packets without Transmission Request"]; + digi <- client [label="Packet with Transmission Request"]; - alt Normal reply - loop For up to 14 packets - client ->> digi: Packet without Transmission Request - end + --- [label="Alternative 2: Partial reply"]; - client ->> digi: Packet with Transmission Request - else Partial reply - loop For up to 14 packets - client ->> digi: Packet without Transmission Request - end + digi <= client [label="Up to 14 packets without Transmission Request"]; + digi x- client [label="Packet with Transmission Request"]; + ...; + digi rbox digi [label="Timeout expired"]; - client --x digi: Packet with Transmission Request (lost) + --- [label="Alternative 3: No reply"]; - Note over digi: Timeout expired - else No reply - Note over digi: Timeout expired - end + digi x- client [label="Packets from client"]; + ...; + digi rbox digi [label="Timeout expired"]; - Note over digi: Query next client + --- [label="Finally"]; + + digi box digi [label="Query next client"]; +} .... ==== Connection Shutdown ===== Client-initiated -[mermaid,format=svg,svg-type=interactive] +[msc,format=svg,svg-type=interactive, scale=1.4] .Client-initiated shutdown .... -sequenceDiagram - participant digi as Digipeater - participant client as Client +msc { + digi [label="Digipeater"], + client [label="Client"]; - Note over digi,client: Connection established + --- [label="Connection established"]; + client box client [label="Decides to disconnect"]; + ...; + digi -> client [label="Transmission request"]; + digi <- client [label="Disconnect"]; - Note over client: Decides to disconnect - - digi ->> client: Transmission Request - client ->> digi: Disconnect - - Note over digi,client: Connection closed + --- [label="Connection closed"]; +} .... ===== Digipeater-initiated -[mermaid,format=svg,svg-type=interactive] +[msc,format=svg,svg-type=interactive, scale=1.4] .Digipeater-initiated shutdown .... -sequenceDiagram - participant digi as Digipeater - participant client as Client +msc { + digi [label="Digipeater"], + client [label="Client"]; - Note over digi,client: Connection established + --- [label="Connection established"]; + digi box digi [label="Decides to disconnect Client"]; - Note over digi: Decides to disconnect client + digi -> client [label="Disconnect request"]; + digi <- client [label="Disconnect"]; - digi ->> client: Disconnect Request - client ->> digi: Disconnect - - Note over digi,client: Connection closed + --- [label="Connection closed"]; +} .... == Higher Layer Protocols -- 2.44.2 From f6866358374e846f42e67867cb431ad18bbdb24f Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 27 Aug 2024 21:10:30 +0200 Subject: [PATCH 05/14] doc: automatic builds and deployment using Forgejo Actions Actions run in a custom Docker image built by the scripts in `doc/docker`. There are two jobs that run in sequence: - `build-doc`: builds the documentation from the AsciiDoc sources. - `deploy-doc`: Uploads the generated files to http://0fm.de --- .forgejo/workflows/doc.yaml | 24 ++++++++++++++++++++++++ doc/docker/Dockerfile | 16 ++++++++++++++++ doc/docker/build.sh | 8 ++++++++ doc/docker/test.sh | 8 ++++++++ doc/docker/upload.sh | 10 ++++++++++ 5 files changed, 66 insertions(+) create mode 100644 .forgejo/workflows/doc.yaml create mode 100644 doc/docker/Dockerfile create mode 100755 doc/docker/build.sh create mode 100755 doc/docker/test.sh create mode 100755 doc/docker/upload.sh diff --git a/.forgejo/workflows/doc.yaml b/.forgejo/workflows/doc.yaml new file mode 100644 index 0000000..827aefa --- /dev/null +++ b/.forgejo/workflows/doc.yaml @@ -0,0 +1,24 @@ +on: [push] +jobs: + build-doc: + runs-on: docker + container: + image: git.tkolb.de/amateurfunk/hamnet70/asciidoctor:1.6 + steps: + - uses: actions/checkout@v4 + - run: cd doc && make + - uses: actions/upload-artifact@v3 + with: + name: documentation + path: doc/out/ + deploy-doc: + needs: build-doc + runs-on: docker + container: + image: git.tkolb.de/amateurfunk/hamnet70/asciidoctor:1.6 + steps: + - run: mkdir ~/.ssh && echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_ed25519 && chmod 0600 ~/.ssh/id_ed25519 && echo "${{ secrets.SSH_KNOWN_HOST }}" > ~/.ssh/known_hosts + - uses: actions/download-artifact@v3 + with: + name: documentation + - run: 'rsync -e "ssh -p 2342" -r . deployment@tkolb.de:' diff --git a/doc/docker/Dockerfile b/doc/docker/Dockerfile new file mode 100644 index 0000000..60a0d7c --- /dev/null +++ b/doc/docker/Dockerfile @@ -0,0 +1,16 @@ +FROM debian:stable + +# for basic Forgejo + AsciiDoctor support +RUN apt update && apt install -y --no-install-recommends nodejs git ruby-rubygems make && apt clean + +RUN gem install asciidoctor asciidoctor-diagram + +# tools for diagram generation +RUN apt install -y --no-install-recommends mscgen && apt clean + +# tools for automatic deployment +RUN apt install -y --no-install-recommends rsync openssh-client && apt clean + +# run as unprivileged user in the container +RUN useradd -m ciuser +USER ciuser diff --git a/doc/docker/build.sh b/doc/docker/build.sh new file mode 100755 index 0000000..02cabee --- /dev/null +++ b/doc/docker/build.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker build -t git.tkolb.de/amateurfunk/hamnet70/asciidoctor:$1 . diff --git a/doc/docker/test.sh b/doc/docker/test.sh new file mode 100755 index 0000000..1a22732 --- /dev/null +++ b/doc/docker/test.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker run -v $(realpath ..):/doc -it git.tkolb.de/amateurfunk/hamnet70/asciidoctor:$1 diff --git a/doc/docker/upload.sh b/doc/docker/upload.sh new file mode 100755 index 0000000..1733dce --- /dev/null +++ b/doc/docker/upload.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker login +docker push git.tkolb.de/amateurfunk/hamnet70/asciidoctor:$1 +docker logout -- 2.44.2 From 03829e058bfe070c3c06f7d44c745e3838a5cb1a Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 27 Aug 2024 21:23:18 +0200 Subject: [PATCH 06/14] Run deployment only on main branch --- .forgejo/workflows/doc.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/doc.yaml b/.forgejo/workflows/doc.yaml index 827aefa..93a30cb 100644 --- a/.forgejo/workflows/doc.yaml +++ b/.forgejo/workflows/doc.yaml @@ -14,6 +14,7 @@ jobs: deploy-doc: needs: build-doc runs-on: docker + if: github.ref == 'refs/heads/main' container: image: git.tkolb.de/amateurfunk/hamnet70/asciidoctor:1.6 steps: -- 2.44.2 From c342cf656ee228a4d28239c6cdfa244d7283496b Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 27 Aug 2024 21:28:09 +0200 Subject: [PATCH 07/14] Move documentation docker scripts to /ci/docker --- {doc/docker => ci/docker/doc}/Dockerfile | 0 {doc/docker => ci/docker/doc}/build.sh | 0 ci/docker/doc/test.sh | 8 ++++++++ {doc/docker => ci/docker/doc}/upload.sh | 0 doc/docker/test.sh | 8 -------- 5 files changed, 8 insertions(+), 8 deletions(-) rename {doc/docker => ci/docker/doc}/Dockerfile (100%) rename {doc/docker => ci/docker/doc}/build.sh (100%) create mode 100755 ci/docker/doc/test.sh rename {doc/docker => ci/docker/doc}/upload.sh (100%) delete mode 100755 doc/docker/test.sh diff --git a/doc/docker/Dockerfile b/ci/docker/doc/Dockerfile similarity index 100% rename from doc/docker/Dockerfile rename to ci/docker/doc/Dockerfile diff --git a/doc/docker/build.sh b/ci/docker/doc/build.sh similarity index 100% rename from doc/docker/build.sh rename to ci/docker/doc/build.sh diff --git a/ci/docker/doc/test.sh b/ci/docker/doc/test.sh new file mode 100755 index 0000000..c99822c --- /dev/null +++ b/ci/docker/doc/test.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker run -v $(realpath ../../../doc):/doc -it git.tkolb.de/amateurfunk/hamnet70/asciidoctor:$1 diff --git a/doc/docker/upload.sh b/ci/docker/doc/upload.sh similarity index 100% rename from doc/docker/upload.sh rename to ci/docker/doc/upload.sh diff --git a/doc/docker/test.sh b/doc/docker/test.sh deleted file mode 100755 index 1a22732..0000000 --- a/doc/docker/test.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -if [ -z "$1" ]; then - echo "usage: $0 " - exit 1 -fi - -docker run -v $(realpath ..):/doc -it git.tkolb.de/amateurfunk/hamnet70/asciidoctor:$1 -- 2.44.2 From 1bcc8c2fea3cbecfcc5953c7a936b9baaef2bab3 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 27 Aug 2024 21:43:50 +0200 Subject: [PATCH 08/14] Add Dockerfile with hamnet70 build dependencies --- ci/docker/doc/Dockerfile | 2 +- ci/docker/impl/Dockerfile | 11 +++++++++++ ci/docker/impl/build.sh | 8 ++++++++ ci/docker/impl/test.sh | 8 ++++++++ ci/docker/impl/upload.sh | 10 ++++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ci/docker/impl/Dockerfile create mode 100755 ci/docker/impl/build.sh create mode 100755 ci/docker/impl/test.sh create mode 100755 ci/docker/impl/upload.sh diff --git a/ci/docker/doc/Dockerfile b/ci/docker/doc/Dockerfile index 60a0d7c..43932ea 100644 --- a/ci/docker/doc/Dockerfile +++ b/ci/docker/doc/Dockerfile @@ -1,7 +1,7 @@ FROM debian:stable # for basic Forgejo + AsciiDoctor support -RUN apt update && apt install -y --no-install-recommends nodejs git ruby-rubygems make && apt clean +RUN apt update && apt install -y --no-install-recommends nodejs git ruby-rubygems make ca-certificates && apt clean RUN gem install asciidoctor asciidoctor-diagram diff --git a/ci/docker/impl/Dockerfile b/ci/docker/impl/Dockerfile new file mode 100644 index 0000000..74016da --- /dev/null +++ b/ci/docker/impl/Dockerfile @@ -0,0 +1,11 @@ +FROM debian:stable + +# for Forgejo Actions +RUN apt update && apt install -y --no-install-recommends nodejs git ca-certificates && apt clean + +# Hamnet70 build dependencies +RUN apt install -y --no-install-recommends cmake make gcc libc-dev libliquid-dev libhackrf-dev libfec-dev libfftw3-dev && apt clean + +# run as unprivileged user in the container +RUN useradd -m ciuser +USER ciuser diff --git a/ci/docker/impl/build.sh b/ci/docker/impl/build.sh new file mode 100755 index 0000000..1500172 --- /dev/null +++ b/ci/docker/impl/build.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker build -t git.tkolb.de/amateurfunk/hamnet70/impl_buildenv:$1 . diff --git a/ci/docker/impl/test.sh b/ci/docker/impl/test.sh new file mode 100755 index 0000000..986308e --- /dev/null +++ b/ci/docker/impl/test.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker run -v $(realpath ../../../impl):/impl -it git.tkolb.de/amateurfunk/hamnet70/impl_buildenv:$1 diff --git a/ci/docker/impl/upload.sh b/ci/docker/impl/upload.sh new file mode 100755 index 0000000..63a7857 --- /dev/null +++ b/ci/docker/impl/upload.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +if [ -z "$1" ]; then + echo "usage: $0 " + exit 1 +fi + +docker login +docker push git.tkolb.de/amateurfunk/hamnet70/impl_buildenv:$1 +docker logout -- 2.44.2 From b46b2536e1b340605652fd1bcb05b634f320eaa1 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 27 Aug 2024 21:44:55 +0200 Subject: [PATCH 09/14] Add a CI workflow compiling the hamnet70 program --- .forgejo/workflows/impl.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .forgejo/workflows/impl.yaml diff --git a/.forgejo/workflows/impl.yaml b/.forgejo/workflows/impl.yaml new file mode 100644 index 0000000..d0d81fe --- /dev/null +++ b/.forgejo/workflows/impl.yaml @@ -0,0 +1,10 @@ +on: [push] +jobs: + build-hamnet70: + runs-on: docker + container: + image: git.tkolb.de/amateurfunk/hamnet70/impl_buildenv:1.1 + steps: + - uses: actions/checkout@v4 + - run: cd impl && cp src/config.h.template src/config.h && sed -i 's/undefined/"TESTCALL"/' src/config.h + - run: cd impl && ./make.sh -- 2.44.2 From 3f4a50bdceb104eba38c522a91ac58da5645c4f5 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Wed, 28 Aug 2024 13:42:33 +0200 Subject: [PATCH 10/14] doc: don't use external resources Embedding (only) parts of MathJax is a bit ugly ... --- doc/Makefile | 3 + doc/ext/mathjax-2.7.9/MathJax.js | 19 ++ .../config/TeX-MML-AM_HTMLorMML.js | 163 ++++++++++++++++++ .../TeX/woff/MathJax_Main-Regular.woff | Bin 0 -> 34164 bytes .../TeX/woff/MathJax_Math-Italic.woff | Bin 0 -> 19356 bytes .../TeX/woff/MathJax_Size1-Regular.woff | Bin 0 -> 5792 bytes .../TeX/woff/MathJax_Size3-Regular.woff | Bin 0 -> 3256 bytes .../TeX/woff/MathJax_Size4-Regular.woff | Bin 0 -> 5160 bytes .../jax/element/mml/optable/Arrows.js | 19 ++ .../jax/element/mml/optable/BasicLatin.js | 19 ++ .../element/mml/optable/CombDiacritMarks.js | 19 ++ .../mml/optable/CombDiactForSymbols.js | 19 ++ .../jax/element/mml/optable/Dingbats.js | 19 ++ .../element/mml/optable/GeneralPunctuation.js | 19 ++ .../element/mml/optable/GeometricShapes.js | 19 ++ .../jax/element/mml/optable/GreekAndCoptic.js | 19 ++ .../element/mml/optable/Latin1Supplement.js | 19 ++ .../element/mml/optable/LetterlikeSymbols.js | 19 ++ .../jax/element/mml/optable/MathOperators.js | 19 ++ .../element/mml/optable/MiscMathSymbolsA.js | 19 ++ .../element/mml/optable/MiscMathSymbolsB.js | 19 ++ .../mml/optable/MiscSymbolsAndArrows.js | 19 ++ .../jax/element/mml/optable/MiscTechnical.js | 19 ++ .../element/mml/optable/SpacingModLetters.js | 19 ++ .../element/mml/optable/SuppMathOperators.js | 19 ++ .../mml/optable/SupplementalArrowsA.js | 19 ++ .../mml/optable/SupplementalArrowsB.js | 19 ++ .../jax/output/HTML-CSS/fonts/TeX/fontdata.js | 19 ++ .../mathjax-2.7.9/jax/output/HTML-CSS/jax.js | 19 ++ doc/hamnet70.adoc | 1 + 30 files changed, 585 insertions(+) create mode 100644 doc/ext/mathjax-2.7.9/MathJax.js create mode 100644 doc/ext/mathjax-2.7.9/config/TeX-MML-AM_HTMLorMML.js create mode 100644 doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff create mode 100644 doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff create mode 100644 doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff create mode 100644 doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff create mode 100644 doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/Arrows.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/BasicLatin.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiacritMarks.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiactForSymbols.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/Dingbats.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeneralPunctuation.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeometricShapes.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/GreekAndCoptic.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/Latin1Supplement.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/LetterlikeSymbols.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/MathOperators.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsA.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsB.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscSymbolsAndArrows.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscTechnical.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/SpacingModLetters.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/SuppMathOperators.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsA.js create mode 100644 doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsB.js create mode 100644 doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/fonts/TeX/fontdata.js create mode 100644 doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/jax.js diff --git a/doc/Makefile b/doc/Makefile index fc2a341..205dbd9 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -3,6 +3,9 @@ OUT_DIR=out $(OUT_DIR)/hamnet70.html: hamnet70.adoc mkdir -p $(OUT_DIR) asciidoctor -D $(OUT_DIR) -r asciidoctor-diagram $< + @# Use local files to prevent privacy issues + cp -a ext/* $(OUT_DIR) + sed -i 's!src="[^"]*mathjax/[^/]*/!src="mathjax-2.7.9/!' $@ .PHONY: clean clean: diff --git a/doc/ext/mathjax-2.7.9/MathJax.js b/doc/ext/mathjax-2.7.9/MathJax.js new file mode 100644 index 0000000..e844af1 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/MathJax.js @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.9";MathJax.fileversion="2.7.9";MathJax.cdnVersion="2.7.9";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/doc/ext/mathjax-2.7.9/config/TeX-MML-AM_HTMLorMML.js b/doc/ext/mathjax-2.7.9/config/TeX-MML-AM_HTMLorMML.js new file mode 100644 index 0000000..822f57a --- /dev/null +++ b/doc/ext/mathjax-2.7.9/config/TeX-MML-AM_HTMLorMML.js @@ -0,0 +1,163 @@ +/* + * /MathJax/config/TeX-MML-AM_HTMLorMML.js + * + * Copyright (c) 2010-2018 The MathJax Consortium + * + * Part of the MathJax library. + * See http://www.mathjax.org for details. + * + * Licensed under the Apache License, Version 2.0; + * you may not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +MathJax.Hub.Config({delayJaxRegistration: true}); + +MathJax.Ajax.Preloading( + "[MathJax]/jax/input/TeX/config.js", + "[MathJax]/jax/input/MathML/config.js", + "[MathJax]/jax/input/AsciiMath/config.js", + "[MathJax]/jax/output/HTML-CSS/config.js", + "[MathJax]/jax/output/NativeMML/config.js", + "[MathJax]/jax/output/PreviewHTML/config.js", + "[MathJax]/config/MMLorHTML.js", + "[MathJax]/extensions/tex2jax.js", + "[MathJax]/extensions/mml2jax.js", + "[MathJax]/extensions/asciimath2jax.js", + "[MathJax]/extensions/MathEvents.js", + "[MathJax]/extensions/MathZoom.js", + "[MathJax]/extensions/MathMenu.js", + "[MathJax]/jax/element/mml/jax.js", + "[MathJax]/extensions/toMathML.js", + "[MathJax]/extensions/TeX/noErrors.js", + "[MathJax]/extensions/TeX/noUndefined.js", + "[MathJax]/jax/input/TeX/jax.js", + "[MathJax]/extensions/TeX/AMSmath.js", + "[MathJax]/extensions/TeX/AMSsymbols.js", + "[MathJax]/jax/input/MathML/jax.js", + "[MathJax]/jax/input/AsciiMath/jax.js", + "[MathJax]/jax/output/PreviewHTML/jax.js", + "[MathJax]/extensions/fast-preview.js", + "[MathJax]/extensions/AssistiveMML.js", + "[MathJax]/extensions/a11y/accessibility-menu.js" +); + +MathJax.Hub.Config({ + extensions: ['[a11y]/accessibility-menu.js'] +}); + +MathJax.InputJax.TeX=MathJax.InputJax({id:"TeX",version:"2.7.9",directory:MathJax.InputJax.directory+"/TeX",extensionDir:MathJax.InputJax.extensionDir+"/TeX",config:{TagSide:"right",TagIndent:"0.8em",MultLineWidth:"85%",equationNumbers:{autoNumber:"none",formatNumber:function(a){return a},formatTag:function(a){return"("+a+")"},formatID:function(a){return"mjx-eqn-"+String(a).replace(/\s/g,"_")},formatURL:function(b,a){return a+"#"+encodeURIComponent(b)},useLabelIds:true}},resetEquationNumbers:function(){}});MathJax.InputJax.TeX.Register("math/tex");MathJax.InputJax.TeX.loadComplete("config.js"); +MathJax.InputJax.MathML=MathJax.InputJax({id:"MathML",version:"2.7.9",directory:MathJax.InputJax.directory+"/MathML",extensionDir:MathJax.InputJax.extensionDir+"/MathML",entityDir:MathJax.InputJax.directory+"/MathML/entities",config:{useMathMLspacing:false}});MathJax.InputJax.MathML.Register("math/mml");MathJax.InputJax.MathML.loadComplete("config.js"); +MathJax.InputJax.AsciiMath=MathJax.InputJax({id:"AsciiMath",version:"2.7.9",directory:MathJax.InputJax.directory+"/AsciiMath",extensionDir:MathJax.InputJax.extensionDir+"/AsciiMath",config:{fixphi:true,useMathMLspacing:true,displaystyle:true,decimalsign:"."}});MathJax.InputJax.AsciiMath.Register("math/asciimath");MathJax.InputJax.AsciiMath.loadComplete("config.js"); +MathJax.OutputJax["HTML-CSS"]=MathJax.OutputJax({id:"HTML-CSS",version:"2.7.9",directory:MathJax.OutputJax.directory+"/HTML-CSS",extensionDir:MathJax.OutputJax.extensionDir+"/HTML-CSS",autoloadDir:MathJax.OutputJax.directory+"/HTML-CSS/autoload",fontDir:MathJax.OutputJax.directory+"/HTML-CSS/fonts",webfontDir:MathJax.OutputJax.fontDir+"/HTML-CSS",config:{noReflows:true,matchFontHeight:true,scale:100,minScaleAdjust:50,availableFonts:["STIX","TeX"],preferredFont:"TeX",webFont:"TeX",imageFont:"TeX",undefinedFamily:"STIXGeneral,'Arial Unicode MS',serif",mtextFontInherit:false,EqnChunk:(MathJax.Hub.Browser.isMobile?10:50),EqnChunkFactor:1.5,EqnChunkDelay:100,linebreaks:{automatic:false,width:"container"},styles:{".MathJax_Display":{"text-align":"center",margin:"1em 0em"},".MathJax .merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"1px 3px","font-style":"normal","font-size":"90%"},".MathJax .MJX-monospace":{"font-family":"monospace"},".MathJax .MJX-sans-serif":{"font-family":"sans-serif"},"#MathJax_Tooltip":{"background-color":"InfoBackground",color:"InfoText",border:"1px solid black","box-shadow":"2px 2px 5px #AAAAAA","-webkit-box-shadow":"2px 2px 5px #AAAAAA","-moz-box-shadow":"2px 2px 5px #AAAAAA","-khtml-box-shadow":"2px 2px 5px #AAAAAA",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')",padding:"3px 4px","z-index":401}}}});if(MathJax.Hub.Browser.isMSIE&&document.documentMode>=9){delete MathJax.OutputJax["HTML-CSS"].config.styles["#MathJax_Tooltip"].filter}if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax["HTML-CSS"].Register("jax/mml")}MathJax.Hub.Register.StartupHook("End Config",[function(b,c){var a=b.Insert({minBrowserVersion:{Firefox:3,Opera:9.52,MSIE:6,Chrome:0.3,Safari:2,Konqueror:4},inlineMathDelimiters:["$","$"],displayMathDelimiters:["$$","$$"],multilineDisplay:true,minBrowserTranslate:function(f){var e=b.getJaxFor(f),k=["[Math]"],j;var h=document.createElement("span",{className:"MathJax_Preview"});if(e.inputJax==="TeX"){if(e.root.Get("displaystyle")){j=a.displayMathDelimiters;k=[j[0]+e.originalText+j[1]];if(a.multilineDisplay){k=k[0].split(/\n/)}}else{j=a.inlineMathDelimiters;k=[j[0]+e.originalText.replace(/^\s+/,"").replace(/\s+$/,"")+j[1]]}}for(var g=0,d=k.length;g0)},patternQuote:function(a){return a.replace(/([\^$(){}+*?\-|\[\]\:\\])/g,"\\$1")},endPattern:function(a){return new RegExp(this.patternQuote(a)+"|\\\\.|[{}]","g")},sortLength:function(d,c){if(d.length!==c.length){return c.length-d.length}return(d==c?0:(d/i,"").replace(/<\?xml:namespace .*?\/>/i,"");b=b.replace(/ /g," ")}MathJax.HTML.setScript(a,b);d.removeChild(e)}else{var c=MathJax.HTML.Element("span");c.appendChild(e);MathJax.HTML.setScript(a,c.innerHTML)}if(this.config.preview!=="none"){this.createPreview(e,a)}},ProcessMathFlattened:function(f){var d=f.parentNode;if(!d||d.className===MathJax.Hub.config.preRemoveClass){return}var b=document.createElement("script");b.type="math/mml";d.insertBefore(b,f);var c="",e,a=f;while(f&&f.nodeName!=="/MATH"){e=f;f=f.nextSibling;c+=this.NodeHTML(e);e.parentNode.removeChild(e)}if(f&&f.nodeName==="/MATH"){f.parentNode.removeChild(f)}b.text=c+"";if(this.config.preview!=="none"){this.createPreview(a,b)}},NodeHTML:function(e){var c,b,a;if(e.nodeName==="#text"){c=this.quoteHTML(e.nodeValue)}else{if(e.nodeName==="#comment"){c=""}else{c="<"+e.nodeName.toLowerCase();for(b=0,a=e.attributes.length;b";if(e.outerHTML!=null&&e.outerHTML.match(/(.<\/[A-Z]+>|\/>)$/)){for(b=0,a=e.childNodes.length;b"}}}return c},OuterHTML:function(d){if(d.nodeName.charAt(0)==="#"){return this.NodeHTML(d)}if(!this.AttributeBug){return d.outerHTML}var c=this.NodeHTML(d);for(var b=0,a=d.childNodes.length;b";return c},quoteHTML:function(a){if(a==null){a=""}return a.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""")},createPreview:function(g,f){var e=this.config.preview;if(e==="none"){return}var i=false;var c=MathJax.Hub.config.preRemoveClass;if((f.previousSibling||{}).className===c){return}if(e==="mathml"){i=true;if(this.MathTagBug){e="alttext"}else{e=g.cloneNode(true)}}if(e==="alttext"||e==="altimg"){i=true;var d=this.filterPreview(g.getAttribute("alttext"));if(e==="alttext"){if(d!=null){e=MathJax.HTML.TextNode(d)}else{e=null}}else{var a=g.getAttribute("altimg");if(a!=null){var b={width:g.getAttribute("altimg-width"),height:g.getAttribute("altimg-height")};e=MathJax.HTML.Element("img",{src:a,alt:d,style:b})}else{e=null}}}if(e){var h;if(i){h=MathJax.HTML.Element("span",{className:c});h.appendChild(e)}else{h=MathJax.HTML.Element("span",{className:c},e)}f.parentNode.insertBefore(h,f)}},filterPreview:function(a){return a},InitBrowser:function(){var b=MathJax.HTML.Element("span",{id:"<",className:"mathjax",innerHTML:"x"});var a=b.outerHTML||"";this.AttributeBug=a!==""&&!(a.match(/id="<"/)&&a.match(/class="mathjax"/)&&a.match(/<\/math>/));this.MathTagBug=b.childNodes.length>1;this.CleanupHTML=MathJax.Hub.Browser.isMSIE}};MathJax.Hub.Register.PreProcessor(["PreProcess",MathJax.Extension.mml2jax],5);MathJax.Ajax.loadComplete("[MathJax]/extensions/mml2jax.js"); +MathJax.Extension.asciimath2jax={version:"2.7.9",config:{delimiters:[["`","`"]],skipTags:["script","noscript","style","textarea","pre","code","annotation","annotation-xml"],ignoreClass:"asciimath2jax_ignore",processClass:"asciimath2jax_process",preview:"AsciiMath"},ignoreTags:{br:(MathJax.Hub.Browser.isMSIE&&document.documentMode<9?"\n":" "),wbr:"","#comment":""},PreProcess:function(a){if(!this.configured){this.config=MathJax.Hub.CombineConfig("asciimath2jax",this.config);if(this.config.Augment){MathJax.Hub.Insert(this,this.config.Augment)}this.configured=true}if(typeof(a)==="string"){a=document.getElementById(a)}if(!a){a=document.body}if(this.createPatterns()){this.scanElement(a,a.nextSibling)}},createPatterns:function(){var d=[],c,a,b=this.config;this.match={};if(b.delimiters.length===0){return false}for(c=0,a=b.delimiters.length;c0){this.HoverFadeTimer(q,q.hover.inc);return}s.parentNode.removeChild(s);if(r){r.parentNode.removeChild(r)}if(q.hover.remove){clearTimeout(q.hover.remove)}delete q.hover},HoverFadeTimer:function(q,s,r){q.hover.inc=s;if(!q.hover.timer){q.hover.timer=setTimeout(g(["HoverFade",this,q]),(r||o.fadeDelay))}},HoverMenu:function(q){if(!q){q=window.event}return b[this.jax].ContextMenu(q,this.math,true)},ClearHover:function(q){if(q.hover.remove){clearTimeout(q.hover.remove)}if(q.hover.timer){clearTimeout(q.hover.timer)}f.ClearHoverTimer();delete q.hover},Px:function(q){if(Math.abs(q)<0.006){return"0px"}return q.toFixed(2).replace(/\.?0+$/,"")+"px"},getImages:function(){if(k.discoverable){var q=new Image();q.src=o.button.src}}};var a=c.Touch={last:0,delay:500,start:function(r){var q=new Date().getTime();var s=(q-a.lastt){z.style.height=t+"px";z.style.width=(x.zW+this.scrollSize)+"px"}if(z.offsetWidth>l){z.style.width=l+"px";z.style.height=(x.zH+this.scrollSize)+"px"}}if(this.operaPositionBug){z.style.width=Math.min(l,x.zW)+"px"}if(z.offsetWidth>m&&z.offsetWidth-m=9);h.msiePositionBug=!m;h.msieSizeBug=l.versionAtLeast("7.0")&&(!document.documentMode||n===7||n===8);h.msieZIndexBug=(n<=7);h.msieInlineBlockAlignBug=(n<=7);h.msieTrapEventBug=!window.addEventListener;if(document.compatMode==="BackCompat"){h.scrollSize=52}if(m){delete i.styles["#MathJax_Zoom"].filter}},Opera:function(l){h.operaPositionBug=true;h.operaRefreshBug=true}});h.topImg=(h.msieInlineBlockAlignBug?d.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}):d.Element("span",{style:{width:0,height:0,display:"inline-block"}}));if(h.operaPositionBug||h.msieTopBug){h.topImg.style.border="1px solid"}MathJax.Callback.Queue(["StartupHook",MathJax.Hub.Register,"Begin Styles",{}],["Styles",f,i.styles],["Post",a.Startup.signal,"MathZoom Ready"],["loadComplete",f,"[MathJax]/extensions/MathZoom.js"])})(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.OutputJax["HTML-CSS"],MathJax.OutputJax.NativeMML); +(function(f,o,q,e,r){var p="2.7.9";var d=MathJax.Callback.Signal("menu");MathJax.Extension.MathMenu={version:p,signal:d};var t=function(u){return MathJax.Localization._.apply(MathJax.Localization,[["MathMenu",u]].concat([].slice.call(arguments,1)))};var i=MathJax.Object.isArray;var a=f.Browser.isPC,l=f.Browser.isMSIE,m=((document.documentMode||0)>8);var j=(a?null:"5px");var s=f.CombineConfig("MathMenu",{delay:150,showRenderer:true,showMathPlayer:true,showFontMenu:false,showContext:false,showDiscoverable:false,showLocale:true,showLocaleURL:false,semanticsAnnotations:{TeX:["TeX","LaTeX","application/x-tex"],StarMath:["StarMath 5.0"],Maple:["Maple"],ContentMathML:["MathML-Content","application/mathml-content+xml"],OpenMath:["OpenMath"]},windowSettings:{status:"no",toolbar:"no",locationbar:"no",menubar:"no",directories:"no",personalbar:"no",resizable:"yes",scrollbars:"yes",width:400,height:300,left:Math.round((screen.width-400)/2),top:Math.round((screen.height-300)/3)},styles:{"#MathJax_About":{position:"fixed",left:"50%",width:"auto","text-align":"center",border:"3px outset",padding:"1em 2em","background-color":"#DDDDDD",color:"black",cursor:"default","font-family":"message-box","font-size":"120%","font-style":"normal","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":"15px","-webkit-border-radius":"15px","-moz-border-radius":"15px","-khtml-border-radius":"15px","box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},"#MathJax_About.MathJax_MousePost":{outline:"none"},".MathJax_Menu":{position:"absolute","background-color":"white",color:"black",width:"auto",padding:(a?"2px":"5px 0px"),border:"1px solid #CCCCCC",margin:0,cursor:"default",font:"menu","text-align":"left","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":j,"-webkit-border-radius":j,"-moz-border-radius":j,"-khtml-border-radius":j,"box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},".MathJax_MenuItem":{padding:(a?"2px 2em":"1px 2em"),background:"transparent"},".MathJax_MenuArrow":{position:"absolute",right:".5em","padding-top":".25em",color:"#666666","font-family":(l?"'Arial unicode MS'":null),"font-size":".75em"},".MathJax_MenuActive .MathJax_MenuArrow":{color:"white"},".MathJax_MenuArrow.RTL":{left:".5em",right:"auto"},".MathJax_MenuCheck":{position:"absolute",left:".7em","font-family":(l?"'Arial unicode MS'":null)},".MathJax_MenuCheck.RTL":{right:".7em",left:"auto"},".MathJax_MenuRadioCheck":{position:"absolute",left:(a?"1em":".7em")},".MathJax_MenuRadioCheck.RTL":{right:(a?"1em":".7em"),left:"auto"},".MathJax_MenuLabel":{padding:(a?"2px 2em 4px 1.33em":"1px 2em 3px 1.33em"),"font-style":"italic"},".MathJax_MenuRule":{"border-top":(a?"1px solid #CCCCCC":"1px solid #DDDDDD"),margin:(a?"4px 1px 0px":"4px 3px")},".MathJax_MenuDisabled":{color:"GrayText"},".MathJax_MenuActive":{"background-color":(a?"Highlight":"#606872"),color:(a?"HighlightText":"white")},".MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus":{"background-color":"#E8E8E8"},".MathJax_ContextMenu:focus":{outline:"none"},".MathJax_ContextMenu .MathJax_MenuItem:focus":{outline:"none"},"#MathJax_AboutClose":{top:".2em",right:".2em"},".MathJax_Menu .MathJax_MenuClose":{top:"-10px",left:"-10px"},".MathJax_MenuClose":{position:"absolute",cursor:"pointer",display:"inline-block",border:"2px solid #AAA","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","font-family":"'Courier New',Courier","font-size":"24px",color:"#F0F0F0"},".MathJax_MenuClose span":{display:"block","background-color":"#AAA",border:"1.5px solid","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","line-height":0,padding:"8px 0 6px"},".MathJax_MenuClose:hover":{color:"white!important",border:"2px solid #CCC!important"},".MathJax_MenuClose:hover span":{"background-color":"#CCC!important"},".MathJax_MenuClose:hover:focus":{outline:"none"}}});var n,k,b;f.Register.StartupHook("MathEvents Ready",function(){n=MathJax.Extension.MathEvents.Event.False;k=MathJax.Extension.MathEvents.Hover;b=MathJax.Extension.MathEvents.Event.KEY});var h=MathJax.Object.Subclass({Keydown:function(u,v){switch(u.keyCode){case b.ESCAPE:this.Remove(u,v);break;case b.RIGHT:this.Right(u,v);break;case b.LEFT:this.Left(u,v);break;case b.UP:this.Up(u,v);break;case b.DOWN:this.Down(u,v);break;case b.RETURN:case b.SPACE:this.Space(u,v);break;default:return;break}return n(u)},Escape:function(u,v){},Right:function(u,v){},Left:function(u,v){},Up:function(u,v){},Down:function(u,v){},Space:function(u,v){}},{});var g=MathJax.Menu=h.Subclass({version:p,items:[],posted:false,title:null,margin:5,Init:function(u){this.items=[].slice.call(arguments,0)},With:function(u){if(u){f.Insert(this,u)}return this},Post:function(M,E,B){if(!M){M=window.event||{}}var I=document.getElementById("MathJax_MenuFrame");if(!I){I=g.Background(this);delete c.lastItem;delete c.lastMenu;delete g.skipUp;d.Post(["post",g.jax]);g.isRTL=(MathJax.Localization.fontDirection()==="rtl")}var v=o.Element("div",{onmouseup:g.Mouseup,ondblclick:n,ondragstart:n,onselectstart:n,oncontextmenu:n,menuItem:this,className:"MathJax_Menu",onkeydown:g.Keydown,role:"menu"});if(M.type==="contextmenu"||M.type==="mouseover"){v.className+=" MathJax_ContextMenu"}if(!B){MathJax.Localization.setCSS(v)}for(var N=0,K=this.items.length;NA-this.margin){H=A-v.offsetWidth-this.margin}if(g.isMobile){H=Math.max(5,H-Math.floor(v.offsetWidth/2));F-=20}g.skipUp=M.isContextMenu}else{var z="left",J=E.offsetWidth;H=(g.isMobile?30:J-2);F=0;while(E&&E!==I){H+=E.offsetLeft;F+=E.offsetTop;E=E.parentNode}if(!g.isMobile){if((g.isRTL&&H-J-v.offsetWidth>this.margin)||(!g.isRTL&&H+v.offsetWidth>A-this.margin)){z="right";H=Math.max(this.margin,H-J-v.offsetWidth+6)}}if(!a){v.style["borderRadiusTop"+z]=0;v.style["WebkitBorderRadiusTop"+z]=0;v.style["MozBorderRadiusTop"+z]=0;v.style["KhtmlBorderRadiusTop"+z]=0}}v.style.left=H+"px";v.style.top=F+"px";if(document.selection&&document.selection.empty){document.selection.empty()}var G=window.pageXOffset||document.documentElement.scrollLeft;var D=window.pageYOffset||document.documentElement.scrollTop;g.Focus(v);if(M.type==="keydown"){g.skipMouseoverFromKey=true;setTimeout(function(){delete g.skipMouseoverFromKey},s.delay)}window.scrollTo(G,D);return n(M)},Remove:function(u,v){d.Post(["unpost",g.jax]);var w=document.getElementById("MathJax_MenuFrame");if(w){w.parentNode.removeChild(w);if(this.msieFixedPositionBug){detachEvent("onresize",g.Resize)}}if(g.jax.hover){delete g.jax.hover.nofade;k.UnHover(g.jax)}g.Unfocus(v);if(u.type==="mousedown"){g.CurrentNode().blur()}return n(u)},Find:function(u){return this.FindN(1,u,[].slice.call(arguments,1))},FindId:function(u){return this.FindN(0,u,[].slice.call(arguments,1))},FindN:function(y,v,x){for(var w=0,u=this.items.length;w0){u.oldTabIndex=u.tabIndex}u.tabIndex=-1}},SetTabIndex:function(){var v=g.AllNodes();for(var w=0,u;u=v[w];w++){if(u.oldTabIndex!==undefined){u.tabIndex=u.oldTabIndex;delete u.oldTabIndex}else{u.tabIndex=f.getTabOrder(u)}}},Mod:function(u,v){return((u%v)+v)%v},IndexOf:(Array.prototype.indexOf?function(u,v,w){return u.indexOf(v,w)}:function(u,x,y){for(var w=(y||0),v=u.length;w=0&&c.GetMenuNode(w).menuItem!==v[u].menuItem){v[u].menuItem.posted=false;v[u].parentNode.removeChild(v[u]);u--}},Touchstart:function(u,v){return this.TouchEvent(u,v,"Mousedown")},Touchend:function(u,v){return this.TouchEvent(u,v,"Mouseup")},TouchEvent:function(v,w,u){if(this!==c.lastItem){if(c.lastMenu){g.Event(v,c.lastMenu,"Mouseout")}g.Event(v,w,"Mouseover",true);c.lastItem=this;c.lastMenu=w}if(this.nativeTouch){return null}g.Event(v,w,u);return false},Remove:function(u,v){v=v.parentNode.menuItem;return v.Remove(u,v)},With:function(u){if(u){f.Insert(this,u)}return this},isRTL:function(){return g.isRTL},rtlClass:function(){return(this.isRTL()?" RTL":"")}},{GetMenuNode:function(u){return u.parentNode}});g.ENTRY=g.ITEM.Subclass({role:"menuitem",Attributes:function(u){u=f.Insert({onmouseover:g.Mouseover,onmouseout:g.Mouseout,onmousedown:g.Mousedown,onkeydown:g.Keydown,"aria-disabled":!!this.disabled},u);u=this.SUPER(arguments).Attributes.call(this,u);if(this.disabled){u.className+=" MathJax_MenuDisabled"}return u},MoveVertical:function(u,E,w){var x=c.GetMenuNode(E);var D=[];for(var z=0,C=x.menuItem.items,y;y=C[z];z++){if(!y.hidden){D.push(y)}}var B=g.IndexOf(D,this);if(B===-1){return}var A=D.length;var v=x.childNodes;do{B=g.Mod(w(B),A)}while(D[B].hidden||!v[B].role||v[B].role==="separator");this.Deactivate(E);D[B].Activate(u,v[B])},Up:function(v,u){this.MoveVertical(v,u,function(w){return w-1})},Down:function(v,u){this.MoveVertical(v,u,function(w){return w+1})},Right:function(v,u){this.MoveHorizontal(v,u,g.Right,!this.isRTL())},Left:function(v,u){this.MoveHorizontal(v,u,g.Left,this.isRTL())},MoveHorizontal:function(A,z,u,B){var x=c.GetMenuNode(z);if(x.menuItem===g.menu&&A.shiftKey){u(A,z)}if(B){return}if(x.menuItem!==g.menu){this.Deactivate(z)}var v=x.previousSibling.childNodes;var y=v.length;while(y--){var w=v[y];if(w.menuItem.submenu&&w.menuItem.submenu===x.menuItem){g.Focus(w);break}}this.RemoveSubmenus(z)},Space:function(u,v){this.Mouseup(u,v)},Activate:function(u,v){this.Deactivate(v);if(!this.disabled){v.className+=" MathJax_MenuActive"}this.DeactivateSubmenus(v);g.Focus(v)},Deactivate:function(u){u.className=u.className.replace(/ MathJax_MenuActive/,"")}});g.ITEM.COMMAND=g.ENTRY.Subclass({action:function(){},Init:function(u,w,v){if(!i(u)){u=[u,u]}this.name=u;this.action=w;this.With(v)},Label:function(u,v){return[this.Name()]},Mouseup:function(u,v){if(!this.disabled){this.Remove(u,v);d.Post(["command",this]);this.action.call(this,u)}return n(u)}});g.ITEM.SUBMENU=g.ENTRY.Subclass({submenu:null,marker:"\u25BA",markerRTL:"\u25C4",Attributes:function(u){u=f.Insert({"aria-haspopup":"true"},u);u=this.SUPER(arguments).Attributes.call(this,u);return u},Init:function(u,w){if(!i(u)){u=[u,u]}this.name=u;var v=1;if(!(w instanceof g.ITEM)){this.With(w),v++}this.submenu=g.apply(g,[].slice.call(arguments,v))},Label:function(u,v){this.submenu.posted=false;return[this.Name()+" ",["span",{className:"MathJax_MenuArrow"+this.rtlClass()},[this.isRTL()?this.markerRTL:this.marker]]]},Timer:function(u,v){this.ClearTimer();u={type:u.type,clientX:u.clientX,clientY:u.clientY};this.timer=setTimeout(e(["Mouseup",this,u,v]),s.delay)},ClearTimer:function(){if(this.timer){clearTimeout(this.timer)}},Touchend:function(v,x){var w=this.submenu.posted;var u=this.SUPER(arguments).Touchend.apply(this,arguments);if(w){this.Deactivate(x);delete c.lastItem;delete c.lastMenu}return u},Mouseout:function(u,v){if(!this.submenu.posted){this.Deactivate(v)}this.ClearTimer()},Mouseover:function(u,v){this.Activate(u,v)},Mouseup:function(u,v){if(!this.disabled){if(!this.submenu.posted){this.ClearTimer();this.submenu.Post(u,v,this.ltr);g.Focus(v)}else{this.DeactivateSubmenus(v)}}return n(u)},Activate:function(u,v){if(!this.disabled){this.Deactivate(v);v.className+=" MathJax_MenuActive"}if(!this.submenu.posted){this.DeactivateSubmenus(v);if(!g.isMobile){this.Timer(u,v)}}g.Focus(v)},MoveVertical:function(w,v,u){this.ClearTimer();this.SUPER(arguments).MoveVertical.apply(this,arguments)},MoveHorizontal:function(w,y,v,x){if(!x){this.SUPER(arguments).MoveHorizontal.apply(this,arguments);return}if(this.disabled){return}if(!this.submenu.posted){this.Activate(w,y);return}var u=c.GetMenuNode(y).nextSibling.childNodes;if(u.length>0){this.submenu.items[0].Activate(w,u[0])}}});g.ITEM.RADIO=g.ENTRY.Subclass({variable:null,marker:(a?"\u25CF":"\u2713"),role:"menuitemradio",Attributes:function(v){var u=s.settings[this.variable]===this.value?"true":"false";v=f.Insert({"aria-checked":u},v);v=this.SUPER(arguments).Attributes.call(this,v);return v},Init:function(v,u,w){if(!i(v)){v=[v,v]}this.name=v;this.variable=u;this.With(w);if(this.value==null){this.value=this.name[0]}},Label:function(v,w){var u={className:"MathJax_MenuRadioCheck"+this.rtlClass()};if(s.settings[this.variable]!==this.value){u={style:{display:"none"}}}return[["span",u,[this.marker]]," "+this.Name()]},Mouseup:function(x,y){if(!this.disabled){var z=y.parentNode.childNodes;for(var v=0,u=z.length;v/g,">");var y=t("EqSource","MathJax Equation Source");if(g.isMobile){u.document.open();u.document.write(""+y+"");u.document.write("
"+z+"
");u.document.write("
");u.document.write("");u.document.close()}else{u.document.open();u.document.write(""+y+"");u.document.write("
"+z+"
");u.document.write("");u.document.close();var v=u.document.body.firstChild;setTimeout(function(){var B=(u.outerHeight-u.innerHeight)||30,A=(u.outerWidth-u.innerWidth)||30,w,E;A=Math.max(140,Math.min(Math.floor(0.5*screen.width),v.offsetWidth+A+25));B=Math.max(40,Math.min(Math.floor(0.5*screen.height),v.offsetHeight+B+25));if(g.prototype.msieHeightBug){B+=35}u.resizeTo(A,B);var D;try{D=x.screenX}catch(C){}if(x&&D!=null){w=Math.max(0,Math.min(x.screenX-Math.floor(A/2),screen.width-A-20));E=Math.max(0,Math.min(x.screenY-Math.floor(B/2),screen.height-B-20));u.moveTo(w,E)}},50)}};g.Scale=function(){var z=["CommonHTML","HTML-CSS","SVG","NativeMML","PreviewHTML"],u=z.length,y=100,w,v;for(w=0;w7;g.Augment({margin:20,msieBackgroundBug:((document.documentMode||0)<9),msieFixedPositionBug:(v||!w),msieAboutBug:v,msieHeightBug:((document.documentMode||0)<9)});if(m){delete s.styles["#MathJax_About"].filter;delete s.styles[".MathJax_Menu"].filter}},Firefox:function(u){g.skipMouseover=u.isMobile&&u.versionAtLeast("6.0");g.skipMousedown=u.isMobile}});g.isMobile=f.Browser.isMobile;g.noContextMenu=f.Browser.noContextMenu;g.CreateLocaleMenu=function(){if(!g.menu){return}var z=g.menu.Find("Language").submenu,w=z.items;var v=[],B=MathJax.Localization.strings;for(var A in B){if(B.hasOwnProperty(A)){v.push(A)}}v=v.sort();z.items=[];for(var x=0,u=v.length;x0||this.Get("scriptlevel")>0)&&g>=0){return""}return this.TEXSPACELENGTH[Math.abs(g)]},TEXSPACELENGTH:["",a.LENGTH.THINMATHSPACE,a.LENGTH.MEDIUMMATHSPACE,a.LENGTH.THICKMATHSPACE],TEXSPACE:[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]],autoDefault:function(e){return""},isSpacelike:function(){return false},isEmbellished:function(){return false},Core:function(){return this},CoreMO:function(){return this},childIndex:function(g){if(g==null){return}for(var f=0,e=this.data.length;f=55296&&e.charCodeAt(0)<56320)?a.VARIANT.ITALIC:a.VARIANT.NORMAL)}return""},setTeXclass:function(f){this.getPrevClass(f);var e=this.data.join("");if(e.length>1&&e.match(/^[a-z][a-z0-9]*$/i)&&this.texClass===a.TEXCLASS.ORD){this.texClass=a.TEXCLASS.OP;this.autoOP=true}return this}});a.mn=a.mbase.Subclass({type:"mn",isToken:true,texClass:a.TEXCLASS.ORD,defaults:{mathvariant:a.INHERIT,mathsize:a.INHERIT,mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT}});a.mo=a.mbase.Subclass({type:"mo",isToken:true,defaults:{mathvariant:a.INHERIT,mathsize:a.INHERIT,mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT,form:a.AUTO,fence:a.AUTO,separator:a.AUTO,lspace:a.AUTO,rspace:a.AUTO,stretchy:a.AUTO,symmetric:a.AUTO,maxsize:a.AUTO,minsize:a.AUTO,largeop:a.AUTO,movablelimits:a.AUTO,accent:a.AUTO,linebreak:a.LINEBREAK.AUTO,lineleading:a.INHERIT,linebreakstyle:a.AUTO,linebreakmultchar:a.INHERIT,indentalign:a.INHERIT,indentshift:a.INHERIT,indenttarget:a.INHERIT,indentalignfirst:a.INHERIT,indentshiftfirst:a.INHERIT,indentalignlast:a.INHERIT,indentshiftlast:a.INHERIT,texClass:a.AUTO},defaultDef:{form:a.FORM.INFIX,fence:false,separator:false,lspace:a.LENGTH.THICKMATHSPACE,rspace:a.LENGTH.THICKMATHSPACE,stretchy:false,symmetric:false,maxsize:a.SIZE.INFINITY,minsize:"0em",largeop:false,movablelimits:false,accent:false,linebreak:a.LINEBREAK.AUTO,lineleading:"1ex",linebreakstyle:"before",indentalign:a.INDENTALIGN.AUTO,indentshift:"0",indenttarget:"",indentalignfirst:a.INDENTALIGN.INDENTALIGN,indentshiftfirst:a.INDENTSHIFT.INDENTSHIFT,indentalignlast:a.INDENTALIGN.INDENTALIGN,indentshiftlast:a.INDENTSHIFT.INDENTSHIFT,texClass:a.TEXCLASS.REL},SPACE_ATTR:{lspace:1,rspace:2},useMMLspacing:3,hasMMLspacing:function(){if(this.useMMLspacing){return true}return this.form&&(this.OPTABLE[this.form]||{})[this.data.join("")]},autoDefault:function(g,n){var l=this.def;if(!l){if(g==="form"){return this.getForm()}var k=this.data.join("");var f=[this.Get("form"),a.FORM.INFIX,a.FORM.POSTFIX,a.FORM.PREFIX];for(var h=0,e=f.length;h=55296&&k<56320){k=(((k-55296)<<10)+(j.charCodeAt(1)-56320))+65536}for(var g=0,e=this.RANGES.length;g=0;e--){if(this.data[0]&&!this.data[e].isSpacelike()){return this.data[e]}}return null},Core:function(){if(!(this.isEmbellished())||typeof(this.core)==="undefined"){return this}return this.data[this.core]},CoreMO:function(){if(!(this.isEmbellished())||typeof(this.core)==="undefined"){return this}return this.data[this.core].CoreMO()},toString:function(){if(this.inferred){return"["+this.data.join(",")+"]"}return this.SUPER(arguments).toString.call(this)},setTeXclass:function(g){var f,e=this.data.length;if((this.open||this.close)&&(!g||!g.fnOP)){this.getPrevClass(g);g=null;for(f=0;f0){e++}return e},adjustChild_texprimestyle:function(e){if(e==this.den){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setSeparateTeXclasses});a.msqrt=a.mbase.Subclass({type:"msqrt",inferRow:true,linebreakContainer:true,texClass:a.TEXCLASS.ORD,setTeXclass:a.mbase.setSeparateTeXclasses,adjustChild_texprimestyle:function(e){return true}});a.mroot=a.mbase.Subclass({type:"mroot",linebreakContainer:true,texClass:a.TEXCLASS.ORD,adjustChild_displaystyle:function(e){if(e===1){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(f){var e=this.Get("scriptlevel");if(f===1){e+=2}return e},adjustChild_texprimestyle:function(e){if(e===0){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setSeparateTeXclasses});a.mstyle=a.mbase.Subclass({type:"mstyle",isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,inferRow:true,defaults:{scriptlevel:a.INHERIT,displaystyle:a.INHERIT,scriptsizemultiplier:Math.sqrt(1/2),scriptminsize:"8pt",mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT,infixlinebreakstyle:a.LINEBREAKSTYLE.BEFORE,decimalseparator:"."},adjustChild_scriptlevel:function(g){var f=this.scriptlevel;if(f==null){f=this.Get("scriptlevel")}else{if(String(f).match(/^ *[-+]/)){var e=this.Get("scriptlevel",null,true);f=e+parseInt(f)}}return f},inheritFromMe:true,noInherit:{mpadded:{width:true,height:true,depth:true,lspace:true,voffset:true},mtable:{width:true,height:true,depth:true,align:true}},getRemoved:{fontfamily:"fontFamily",fontweight:"fontWeight",fontstyle:"fontStyle",fontsize:"fontSize"},setTeXclass:a.mbase.setChildTeXclass});a.merror=a.mbase.Subclass({type:"merror",inferRow:true,linebreakContainer:true,texClass:a.TEXCLASS.ORD});a.mpadded=a.mbase.Subclass({type:"mpadded",inferRow:true,isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,width:"",height:"",depth:"",lspace:0,voffset:0},setTeXclass:a.mbase.setChildTeXclass});a.mphantom=a.mbase.Subclass({type:"mphantom",texClass:a.TEXCLASS.ORD,inferRow:true,isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,setTeXclass:a.mbase.setChildTeXclass});a.mfenced=a.mbase.Subclass({type:"mfenced",defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,open:"(",close:")",separators:","},addFakeNodes:function(){var f=this.getValues("open","close","separators");f.open=f.open.replace(/[ \t\n\r]/g,"");f.close=f.close.replace(/[ \t\n\r]/g,"");f.separators=f.separators.replace(/[ \t\n\r]/g,"");if(f.open!==""){this.SetData("open",a.mo(f.open).With({fence:true,form:a.FORM.PREFIX,texClass:a.TEXCLASS.OPEN}))}if(f.separators!==""){while(f.separators.length0){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(f){var e=this.Get("scriptlevel");if(f>0){e++}return e},adjustChild_texprimestyle:function(e){if(e===this.sub){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setBaseTeXclasses});a.msub=a.msubsup.Subclass({type:"msub"});a.msup=a.msubsup.Subclass({type:"msup",sub:2,sup:1});a.mmultiscripts=a.msubsup.Subclass({type:"mmultiscripts",adjustChild_texprimestyle:function(e){if(e%2===1){return true}return this.Get("texprimestyle")}});a.mprescripts=a.mbase.Subclass({type:"mprescripts"});a.none=a.mbase.Subclass({type:"none"});a.munderover=a.mbase.Subclass({type:"munderover",base:0,under:1,over:2,sub:1,sup:2,ACCENTS:["","accentunder","accent"],linebreakContainer:true,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,accent:a.AUTO,accentunder:a.AUTO,align:a.ALIGN.CENTER,texClass:a.AUTO,subscriptshift:"",superscriptshift:""},autoDefault:function(e){if(e==="texClass"){return(this.isEmbellished()?this.CoreMO().Get(e):a.TEXCLASS.ORD)}if(e==="accent"&&this.data[this.over]){return this.data[this.over].CoreMO().Get("accent")}if(e==="accentunder"&&this.data[this.under]){return this.data[this.under].CoreMO().Get("accent")}return false},adjustChild_displaystyle:function(e){if(e>0){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(g){var f=this.Get("scriptlevel");var e=(this.data[this.base]&&!this.Get("displaystyle")&&this.data[this.base].CoreMO().Get("movablelimits"));if(g==this.under&&(e||!this.Get("accentunder"))){f++}if(g==this.over&&(e||!this.Get("accent"))){f++}return f},adjustChild_texprimestyle:function(e){if(e===this.base&&this.data[this.over]){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setBaseTeXclasses});a.munder=a.munderover.Subclass({type:"munder"});a.mover=a.munderover.Subclass({type:"mover",over:1,under:2,sup:1,sub:2,ACCENTS:["","accent","accentunder"]});a.mtable=a.mbase.Subclass({type:"mtable",defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,align:a.ALIGN.AXIS,rowalign:a.ALIGN.BASELINE,columnalign:a.ALIGN.CENTER,groupalign:"{left}",alignmentscope:true,columnwidth:a.WIDTH.AUTO,width:a.WIDTH.AUTO,rowspacing:"1ex",columnspacing:".8em",rowlines:a.LINES.NONE,columnlines:a.LINES.NONE,frame:a.LINES.NONE,framespacing:"0.4em 0.5ex",equalrows:false,equalcolumns:false,displaystyle:false,side:a.SIDE.RIGHT,minlabelspacing:"0.8em",texClass:a.TEXCLASS.ORD,useHeight:1},adjustChild_displaystyle:function(){return(this.displaystyle!=null?this.displaystyle:this.defaults.displaystyle)},inheritFromMe:true,noInherit:{mover:{align:true},munder:{align:true},munderover:{align:true},mtable:{align:true,rowalign:true,columnalign:true,groupalign:true,alignmentscope:true,columnwidth:true,width:true,rowspacing:true,columnspacing:true,rowlines:true,columnlines:true,frame:true,framespacing:true,equalrows:true,equalcolumns:true,displaystyle:true,side:true,minlabelspacing:true,texClass:true,useHeight:1}},linebreakContainer:true,Append:function(){for(var f=0,e=arguments.length;f>10)+55296)+String.fromCharCode((e&1023)+56320)}});a.xml=a.mbase.Subclass({type:"xml",Init:function(){this.div=document.createElement("div");return this.SUPER(arguments).Init.apply(this,arguments)},Append:function(){for(var f=0,e=arguments.length;f":d.REL,"?":[1,1,b.CLOSE],"\\":d.ORD,"^":d.ORD11,_:d.ORD11,"|":[2,2,b.ORD,{fence:true,stretchy:true,symmetric:true}],"#":d.ORD,"$":d.ORD,"\u002E":[0,3,b.PUNCT,{separator:true}],"\u02B9":d.ORD,"\u0300":d.ACCENT,"\u0301":d.ACCENT,"\u0303":d.WIDEACCENT,"\u0304":d.ACCENT,"\u0306":d.ACCENT,"\u0307":d.ACCENT,"\u0308":d.ACCENT,"\u030C":d.ACCENT,"\u0332":d.WIDEACCENT,"\u0338":d.REL4,"\u2015":[0,0,b.ORD,{stretchy:true}],"\u2017":[0,0,b.ORD,{stretchy:true}],"\u2020":d.BIN3,"\u2021":d.BIN3,"\u20D7":d.ACCENT,"\u2111":d.ORD,"\u2113":d.ORD,"\u2118":d.ORD,"\u211C":d.ORD,"\u2205":d.ORD,"\u221E":d.ORD,"\u2305":d.BIN3,"\u2306":d.BIN3,"\u2322":d.REL4,"\u2323":d.REL4,"\u2329":d.OPEN,"\u232A":d.CLOSE,"\u23AA":d.ORD,"\u23AF":[0,0,b.ORD,{stretchy:true}],"\u23B0":d.OPEN,"\u23B1":d.CLOSE,"\u2500":d.ORD,"\u25EF":d.BIN3,"\u2660":d.ORD,"\u2661":d.ORD,"\u2662":d.ORD,"\u2663":d.ORD,"\u3008":d.OPEN,"\u3009":d.CLOSE,"\uFE37":d.WIDEACCENT,"\uFE38":d.WIDEACCENT}}},{OPTYPES:d});var c=a.mo.prototype.OPTABLE;c.infix["^"]=d.WIDEREL;c.infix._=d.WIDEREL;c.prefix["\u2223"]=d.OPEN;c.prefix["\u2225"]=d.OPEN;c.postfix["\u2223"]=d.CLOSE;c.postfix["\u2225"]=d.CLOSE})(MathJax.ElementJax.mml);MathJax.ElementJax.mml.loadComplete("jax.js"); +MathJax.Hub.Register.LoadHook("[MathJax]/jax/element/mml/jax.js",function(){var c="2.7.9";var a=MathJax.ElementJax.mml,b=MathJax.Hub.config.menuSettings;a.mbase.Augment({toMathML:function(l){var h=(this.inferred&&this.parent.inferRow);if(l==null){l=""}var f=this.type,e=this.toMathMLattributes();if(f==="mspace"){return l+"<"+f+e+" />"}var k=[],j=(this.isToken?"":l+(h?"":" "));for(var g=0,d=this.data.length;g")}}}if(this.isToken||this.isChars){return l+"<"+f+e+">"+k.join("")+""}if(h){return k.join("\n")}if(k.length===0||(k.length===1&&k[0]==="")){return l+"<"+f+e+" />"}return l+"<"+f+e+">\n"+k.join("\n")+"\n"+l+""},toMathMLattributes:function(){var j=(this.type==="mstyle"?a.math.prototype.defaults:this.defaults);var h=(this.attrNames||a.copyAttributeNames),g=a.skipAttributes,l=a.copyAttributes;var e=[];if(this.type==="math"&&(!this.attr||!("xmlns" in this.attr))){e.push('xmlns="http://www.w3.org/1998/Math/MathML"')}if(!this.attrNames){for(var k in j){if(!g[k]&&!l[k]&&j.hasOwnProperty(k)){if(this[k]!=null&&this[k]!==j[k]){if(this.Get(k,null,1)!==this[k]){e.push(k+'="'+this.toMathMLattribute(this[k])+'"')}}}}}for(var f=0,d=h.length;f126||(k<32&&k!==10&&k!==13&&k!==9)){f[g]="&#x"+k.toString(16).toUpperCase()+";"}else{var j={"&":"&","<":"<",">":">",'"':"""}[f[g]];if(j){f[g]=j}}}else{if(g+11);var p=this.type,k=this.toMathMLattributes();var j=[],o=d+(g?" "+(n?" ":""):"")+" ";for(var h=0,f=this.data.length;h")}}if(j.length===0||(j.length===1&&j[0]==="")){if(!g){return"<"+p+k+" />"}j.push(o+"")}if(g){if(n){j.unshift(d+" ");j.push(d+" ")}j.unshift(d+" ");var l=e.originalText.replace(/[&<>]/g,function(i){return{">":">","<":"<","&":"&"}[i]});j.push(d+' '+l+"");j.push(d+" ")}return d+"<"+p+k+">\n"+j.join("\n")+"\n"+d+""}});a.msubsup.Augment({toMathML:function(j){var f=this.type;if(this.data[this.sup]==null){f="msub"}if(this.data[this.sub]==null){f="msup"}var e=this.toMathMLattributes();delete this.data[0].inferred;var h=[];for(var g=0,d=this.data.length;g\n"+h.join("\n")+"\n"+j+""}});a.munderover.Augment({toMathML:function(k){var f=this.type;var j=this.data[this.base];if(j&&j.isa(a.TeXAtom)&&j.movablelimits&&!j.Get("displaystyle")){type="msubsup";if(this.data[this.under]==null){f="msup"}if(this.data[this.over]==null){f="msub"}}else{if(this.data[this.under]==null){f="mover"}if(this.data[this.over]==null){f="munder"}}var e=this.toMathMLattributes();delete this.data[0].inferred;var h=[];for(var g=0,d=this.data.length;g\n"+h.join("\n")+"\n"+k+""}});a.TeXAtom.Augment({toMathML:function(e){var d=this.toMathMLattributes();if(!d&&this.data[0].data.length===1){return e.substr(2)+this.data[0].toMathML(e)}return e+"\n"+this.data[0].toMathML(e+" ")+"\n"+e+""}});a.chars.Augment({toMathML:function(d){return(d||"")+this.toMathMLquote(this.toString())}});a.entity.Augment({toMathML:function(d){return(d||"")+"&"+this.toMathMLquote(this.data[0])+";"}});a.xml.Augment({toMathML:function(d){return(d||"")+this.toString()}});MathJax.Hub.Register.StartupHook("TeX mathchoice Ready",function(){a.TeXmathchoice.Augment({toMathML:function(d){return this.Core().toMathML(d)}})});MathJax.Hub.Startup.signal.Post("toMathML Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/toMathML.js"); +(function(b,e){var d="2.7.9";var a=b.CombineConfig("TeX.noErrors",{disabled:false,multiLine:true,inlineDelimiters:["",""],style:{"font-size":"90%","text-align":"left",color:"black",padding:"1px 3px",border:"1px solid"}});var c="\u00A0";MathJax.Extension["TeX/noErrors"]={version:d,config:a};b.Register.StartupHook("TeX Jax Ready",function(){var f=MathJax.InputJax.TeX.formatError;MathJax.InputJax.TeX.Augment({formatError:function(j,i,k,g){if(a.disabled){return f.apply(this,arguments)}var h=j.message.replace(/\n.*/,"");b.signal.Post(["TeX Jax - parse error",h,i,k,g]);var m=a.inlineDelimiters;var l=(k||a.multiLine);if(!k){i=m[0]+i+m[1]}if(l){i=i.replace(/ /g,c)}else{i=i.replace(/\n/g," ")}return MathJax.ElementJax.mml.merror(i).With({isError:true,multiLine:l})}})});b.Register.StartupHook("HTML-CSS Jax Config",function(){b.Config({"HTML-CSS":{styles:{".MathJax .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("HTML-CSS Jax Ready",function(){var g=MathJax.ElementJax.mml;var h=MathJax.OutputJax["HTML-CSS"];var f=g.math.prototype.toHTML,i=g.merror.prototype.toHTML;g.math.Augment({toHTML:function(j,k){var l=this.data[0];if(l&&l.data[0]&&l.data[0].isError){j.style.fontSize="";j=this.HTMLcreateSpan(j);j.bbox=l.data[0].toHTML(j).bbox}else{j=f.apply(this,arguments)}return j}});g.merror.Augment({toHTML:function(p){if(!this.isError){return i.apply(this,arguments)}p=this.HTMLcreateSpan(p);p.className="noError";if(this.multiLine){p.style.display="inline-block"}var r=this.data[0].data[0].data.join("").split(/\n/);for(var o=0,l=r.length;o1){var n=(q.h+q.d)/2,j=h.TeX.x_height/2;p.parentNode.style.verticalAlign=h.Em(q.d+(j-n));q.h=j+n;q.d=n-j}p.bbox={h:q.h,d:q.d,w:k,lw:0,rw:k};return p}})});b.Register.StartupHook("SVG Jax Config",function(){b.Config({SVG:{styles:{".MathJax_SVG .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("SVG Jax Ready",function(){var g=MathJax.ElementJax.mml;var f=g.math.prototype.toSVG,h=g.merror.prototype.toSVG;g.math.Augment({toSVG:function(i,j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){i=k.data[0].toSVG(i)}else{i=f.apply(this,arguments)}return i}});g.merror.Augment({toSVG:function(n){if(!this.isError||this.Parent().type!=="math"){return h.apply(this,arguments)}n=e.addElement(n,"span",{className:"noError",isMathJax:true});if(this.multiLine){n.style.display="inline-block"}var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,j=o.length;l1){var k=n.offsetHeight/2;n.style.verticalAlign=(-k+(k/j))+"px"}return n}})});b.Register.StartupHook("NativeMML Jax Ready",function(){var h=MathJax.ElementJax.mml;var g=MathJax.Extension["TeX/noErrors"].config;var f=h.math.prototype.toNativeMML,i=h.merror.prototype.toNativeMML;h.math.Augment({toNativeMML:function(j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){j=k.data[0].toNativeMML(j)}else{j=f.apply(this,arguments)}return j}});h.merror.Augment({toNativeMML:function(n){if(!this.isError){return i.apply(this,arguments)}n=n.appendChild(document.createElement("span"));var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,k=o.length;l1){n.style.verticalAlign="middle"}}for(var p in g.style){if(g.style.hasOwnProperty(p)){var j=p.replace(/-./g,function(m){return m.charAt(1).toUpperCase()});n.style[j]=g.style[p]}}return n}})});b.Register.StartupHook("PreviewHTML Jax Config",function(){b.Config({PreviewHTML:{styles:{".MathJax_PHTML .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("PreviewHTML Jax Ready",function(){var f=MathJax.ElementJax.mml;var h=MathJax.HTML;var g=f.merror.prototype.toPreviewHTML;f.merror.Augment({toPreviewHTML:function(l){if(!this.isError){return g.apply(this,arguments)}l=this.PHTMLcreateSpan(l);l.className="noError";if(this.multiLine){l.style.display="inline-block"}var n=this.data[0].data[0].data.join("").split(/\n/);for(var k=0,j=n.length;k1){var l=1.2*j/2;o.h=l+0.25;o.d=l-0.25;n.style.verticalAlign=g.Em(0.45-l)}else{o.h=1;o.d=0.2+2/g.em}return n}})});b.Startup.signal.Post("TeX noErrors Ready")})(MathJax.Hub,MathJax.HTML);MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noErrors.js"); +MathJax.Extension["TeX/noUndefined"]={version:"2.7.9",config:MathJax.Hub.CombineConfig("TeX.noUndefined",{disabled:false,attributes:{mathcolor:"red"}})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.Extension["TeX/noUndefined"].config;var a=MathJax.ElementJax.mml;var c=MathJax.InputJax.TeX.Parse.prototype.csUndefined;MathJax.InputJax.TeX.Parse.Augment({csUndefined:function(d){if(b.disabled){return c.apply(this,arguments)}MathJax.Hub.signal.Post(["TeX Jax - undefined control sequence",d]);this.Push(a.mtext(d).With(b.attributes))}});MathJax.Hub.Startup.signal.Post("TeX noUndefined Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noUndefined.js"); +(function(d,c,j){var i,h="\u00A0";var k=function(m){return MathJax.Localization._.apply(MathJax.Localization,[["TeX",m]].concat([].slice.call(arguments,1)))};var f=MathJax.Object.isArray;var e=MathJax.Object.Subclass({Init:function(n,m){this.global={isInner:m};this.data=[b.start(this.global)];if(n){this.data[0].env=n}this.env=this.data[0].env},Push:function(){var o,n,p,q;for(o=0,n=arguments.length;o":"27E9","\\lt":"27E8","\\gt":"27E9","/":"/","|":["|",{texClass:i.TEXCLASS.ORD}],".":"","\\\\":"\\","\\lmoustache":"23B0","\\rmoustache":"23B1","\\lgroup":"27EE","\\rgroup":"27EF","\\arrowvert":"23D0","\\Arrowvert":"2016","\\bracevert":"23AA","\\Vert":["2016",{texClass:i.TEXCLASS.ORD}],"\\|":["2016",{texClass:i.TEXCLASS.ORD}],"\\vert":["|",{texClass:i.TEXCLASS.ORD}],"\\uparrow":"2191","\\downarrow":"2193","\\updownarrow":"2195","\\Uparrow":"21D1","\\Downarrow":"21D3","\\Updownarrow":"21D5","\\backslash":"\\","\\rangle":"27E9","\\langle":"27E8","\\rbrace":"}","\\lbrace":"{","\\}":"}","\\{":"{","\\rceil":"2309","\\lceil":"2308","\\rfloor":"230B","\\lfloor":"230A","\\lbrack":"[","\\rbrack":"]"},macros:{displaystyle:["SetStyle","D",true,0],textstyle:["SetStyle","T",false,0],scriptstyle:["SetStyle","S",false,1],scriptscriptstyle:["SetStyle","SS",false,2],rm:["SetFont",i.VARIANT.NORMAL],mit:["SetFont",i.VARIANT.ITALIC],oldstyle:["SetFont",i.VARIANT.OLDSTYLE],cal:["SetFont",i.VARIANT.CALIGRAPHIC],it:["SetFont","-tex-mathit"],bf:["SetFont",i.VARIANT.BOLD],bbFont:["SetFont",i.VARIANT.DOUBLESTRUCK],scr:["SetFont",i.VARIANT.SCRIPT],frak:["SetFont",i.VARIANT.FRAKTUR],sf:["SetFont",i.VARIANT.SANSSERIF],tt:["SetFont",i.VARIANT.MONOSPACE],tiny:["SetSize",0.5],Tiny:["SetSize",0.6],scriptsize:["SetSize",0.7],small:["SetSize",0.85],normalsize:["SetSize",1],large:["SetSize",1.2],Large:["SetSize",1.44],LARGE:["SetSize",1.73],huge:["SetSize",2.07],Huge:["SetSize",2.49],arcsin:["NamedFn"],arccos:["NamedFn"],arctan:["NamedFn"],arg:["NamedFn"],cos:["NamedFn"],cosh:["NamedFn"],cot:["NamedFn"],coth:["NamedFn"],csc:["NamedFn"],deg:["NamedFn"],det:"NamedOp",dim:["NamedFn"],exp:["NamedFn"],gcd:"NamedOp",hom:["NamedFn"],inf:"NamedOp",ker:["NamedFn"],lg:["NamedFn"],lim:"NamedOp",liminf:["NamedOp","lim inf"],limsup:["NamedOp","lim sup"],ln:["NamedFn"],log:["NamedFn"],max:"NamedOp",min:"NamedOp",Pr:"NamedOp",sec:["NamedFn"],sin:["NamedFn"],sinh:["NamedFn"],sup:"NamedOp",tan:["NamedFn"],tanh:["NamedFn"],limits:["Limits",1],nolimits:["Limits",0],overline:["UnderOver","00AF",null,1],underline:["UnderOver","005F"],overbrace:["UnderOver","23DE",1],underbrace:["UnderOver","23DF",1],overparen:["UnderOver","23DC"],underparen:["UnderOver","23DD"],overrightarrow:["UnderOver","2192"],underrightarrow:["UnderOver","2192"],overleftarrow:["UnderOver","2190"],underleftarrow:["UnderOver","2190"],overleftrightarrow:["UnderOver","2194"],underleftrightarrow:["UnderOver","2194"],overset:"Overset",underset:"Underset",stackrel:["Macro","\\mathrel{\\mathop{#2}\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",middle:"Middle",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft:"MoveLeftRight",moveright:"MoveLeftRight",",":["Spacer",i.LENGTH.THINMATHSPACE],":":["Spacer",i.LENGTH.MEDIUMMATHSPACE],">":["Spacer",i.LENGTH.MEDIUMMATHSPACE],";":["Spacer",i.LENGTH.THICKMATHSPACE],"!":["Spacer",i.LENGTH.NEGATIVETHINMATHSPACE],enspace:["Spacer",".5em"],quad:["Spacer","1em"],qquad:["Spacer","2em"],thinspace:["Spacer",i.LENGTH.THINMATHSPACE],negthinspace:["Spacer",i.LENGTH.NEGATIVETHINMATHSPACE],hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",rule:"rule",Rule:["Rule"],Space:["Rule","blank"],big:["MakeBig",i.TEXCLASS.ORD,0.85],Big:["MakeBig",i.TEXCLASS.ORD,1.15],bigg:["MakeBig",i.TEXCLASS.ORD,1.45],Bigg:["MakeBig",i.TEXCLASS.ORD,1.75],bigl:["MakeBig",i.TEXCLASS.OPEN,0.85],Bigl:["MakeBig",i.TEXCLASS.OPEN,1.15],biggl:["MakeBig",i.TEXCLASS.OPEN,1.45],Biggl:["MakeBig",i.TEXCLASS.OPEN,1.75],bigr:["MakeBig",i.TEXCLASS.CLOSE,0.85],Bigr:["MakeBig",i.TEXCLASS.CLOSE,1.15],biggr:["MakeBig",i.TEXCLASS.CLOSE,1.45],Biggr:["MakeBig",i.TEXCLASS.CLOSE,1.75],bigm:["MakeBig",i.TEXCLASS.REL,0.85],Bigm:["MakeBig",i.TEXCLASS.REL,1.15],biggm:["MakeBig",i.TEXCLASS.REL,1.45],Biggm:["MakeBig",i.TEXCLASS.REL,1.75],mathord:["TeXAtom",i.TEXCLASS.ORD],mathop:["TeXAtom",i.TEXCLASS.OP],mathopen:["TeXAtom",i.TEXCLASS.OPEN],mathclose:["TeXAtom",i.TEXCLASS.CLOSE],mathbin:["TeXAtom",i.TEXCLASS.BIN],mathrel:["TeXAtom",i.TEXCLASS.REL],mathpunct:["TeXAtom",i.TEXCLASS.PUNCT],mathinner:["TeXAtom",i.TEXCLASS.INNER],vcenter:["TeXAtom",i.TEXCLASS.VCENTER],mathchoice:["Extension","mathchoice"],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",strut:"Strut",mathstrut:["Macro","\\vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute:["Accent","00B4"],grave:["Accent","0060"],ddot:["Accent","00A8"],tilde:["Accent","007E"],bar:["Accent","00AF"],breve:["Accent","02D8"],check:["Accent","02C7"],hat:["Accent","005E"],vec:["Accent","2192"],dot:["Accent","02D9"],widetilde:["Accent","007E",1],widehat:["Accent","005E",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em",null,true],eqalign:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D"],displaylines:["Matrix",null,null,"center",null,".5em","D"],cr:"Cr","\\":"CrLaTeX",newline:["CrLaTeX",true],hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D",null,"right"],leqalignno:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D",null,"left"],hfill:"HFill",hfil:"HFill",hfilll:"HFill",bmod:["Macro",'\\mmlToken{mo}[lspace="thickmathspace" rspace="thickmathspace"]{mod}'],pmod:["Macro","\\pod{\\mmlToken{mi}{mod}\\kern 6mu #1}",1],mod:["Macro","\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}\\mmlToken{mi}{mod}\\,\\,#1",1],pod:["Macro","\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)",1],iff:["Macro","\\;\\Longleftrightarrow\\;"],skew:["Macro","{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}",3],mathcal:["Macro","{\\cal #1}",1],mathscr:["Macro","{\\scr #1}",1],mathrm:["Macro","{\\rm #1}",1],mathbf:["Macro","{\\bf #1}",1],mathbb:["Macro","{\\bbFont #1}",1],Bbb:["Macro","{\\bbFont #1}",1],mathit:["Macro","{\\it #1}",1],mathfrak:["Macro","{\\frak #1}",1],mathsf:["Macro","{\\sf #1}",1],mathtt:["Macro","{\\tt #1}",1],textrm:["Macro","\\mathord{\\rm\\text{#1}}",1],textit:["Macro","\\mathord{\\it\\text{#1}}",1],textbf:["Macro","\\mathord{\\bf\\text{#1}}",1],textsf:["Macro","\\mathord{\\sf\\text{#1}}",1],texttt:["Macro","\\mathord{\\tt\\text{#1}}",1],pmb:["Macro","\\rlap{#1}\\kern1px{#1}",1],TeX:["Macro","T\\kern-.14em\\lower.5ex{E}\\kern-.115em X"],LaTeX:["Macro","L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX"]," ":["Macro","\\text{ }"],not:"Not",dots:"Dots",space:"Tilde","\u00A0":"Tilde",begin:"BeginEnd",end:"BeginEnd",newcommand:["Extension","newcommand"],renewcommand:["Extension","newcommand"],newenvironment:["Extension","newcommand"],renewenvironment:["Extension","newcommand"],def:["Extension","newcommand"],let:["Extension","newcommand"],verb:["Extension","verb"],boldsymbol:["Extension","boldsymbol"],tag:["Extension","AMSmath"],notag:["Extension","AMSmath"],label:["Extension","AMSmath"],ref:["Extension","AMSmath"],eqref:["Extension","AMSmath"],nonumber:["Macro","\\notag"],unicode:["Extension","unicode"],color:"Color",href:["Extension","HTML"],"class":["Extension","HTML"],style:["Extension","HTML"],cssId:["Extension","HTML"],bbox:["Extension","bbox"],mmlToken:"MmlToken",require:"Require"},environment:{array:["AlignedArray"],matrix:["Array",null,null,null,"c"],pmatrix:["Array",null,"(",")","c"],bmatrix:["Array",null,"[","]","c"],Bmatrix:["Array",null,"\\{","\\}","c"],vmatrix:["Array",null,"\\vert","\\vert","c"],Vmatrix:["Array",null,"\\Vert","\\Vert","c"],cases:["Array",null,"\\{",".","ll",null,".2em","T"],equation:[null,"Equation"],"equation*":[null,"Equation"],eqnarray:["ExtensionEnv",null,"AMSmath"],"eqnarray*":["ExtensionEnv",null,"AMSmath"],align:["ExtensionEnv",null,"AMSmath"],"align*":["ExtensionEnv",null,"AMSmath"],aligned:["ExtensionEnv",null,"AMSmath"],multline:["ExtensionEnv",null,"AMSmath"],"multline*":["ExtensionEnv",null,"AMSmath"],split:["ExtensionEnv",null,"AMSmath"],gather:["ExtensionEnv",null,"AMSmath"],"gather*":["ExtensionEnv",null,"AMSmath"],gathered:["ExtensionEnv",null,"AMSmath"],alignat:["ExtensionEnv",null,"AMSmath"],"alignat*":["ExtensionEnv",null,"AMSmath"],alignedat:["ExtensionEnv",null,"AMSmath"]},p_height:1.2/0.85});if(this.config.Macros){var m=this.config.Macros;for(var n in m){if(m.hasOwnProperty(n)){if(typeof(m[n])==="string"){g.macros[n]=["Macro",m[n]]}else{g.macros[n]=["Macro"].concat(m[n])}g.macros[n].isUser=true}}}};var a=MathJax.Object.Subclass({Init:function(n,o){this.string=n;this.i=0;this.macroCount=0;var m;if(o){m={};for(var p in o){if(o.hasOwnProperty(p)){m[p]=o[p]}}}this.stack=d.Stack(m,!!o);this.Parse();this.Push(b.stop())},Parse:function(){var o,m;while(this.i=55296&&m<56320){o+=this.string.charAt(this.i++)}if(g.special.hasOwnProperty(o)){this[g.special[o]](o)}else{if(g.letter.test(o)){this.Variable(o)}else{if(g.digit.test(o)){this.Number(o)}else{this.Other(o)}}}}},Push:function(){this.stack.Push.apply(this.stack,arguments)},mml:function(){if(this.stack.Top().type!=="mml"){return null}return this.stack.Top().data[0]},mmlToken:function(m){return m},ControlSequence:function(p){var m=this.GetCS(),o=this.csFindMacro(m);if(o){if(!f(o)){o=[o]}var n=o[0];if(!(n instanceof Function)){n=this[n]}n.apply(this,[p+m].concat(o.slice(1)))}else{if(g.mathchar0mi.hasOwnProperty(m)){this.csMathchar0mi(m,g.mathchar0mi[m])}else{if(g.mathchar0mo.hasOwnProperty(m)){this.csMathchar0mo(m,g.mathchar0mo[m])}else{if(g.mathchar7.hasOwnProperty(m)){this.csMathchar7(m,g.mathchar7[m])}else{if(g.delimiter.hasOwnProperty("\\"+m)){this.csDelimiter(m,g.delimiter["\\"+m])}else{this.csUndefined(p+m)}}}}}},csFindMacro:function(m){return(g.macros.hasOwnProperty(m)?g.macros[m]:null)},csMathchar0mi:function(m,o){var n={mathvariant:i.VARIANT.ITALIC};if(f(o)){n=o[1];o=o[0]}this.Push(this.mmlToken(i.mi(i.entity("#x"+o)).With(n)))},csMathchar0mo:function(m,o){var n={stretchy:false};if(f(o)){n=o[1];n.stretchy=false;o=o[0]}this.Push(this.mmlToken(i.mo(i.entity("#x"+o)).With(n)))},csMathchar7:function(m,o){var n={mathvariant:i.VARIANT.NORMAL};if(f(o)){n=o[1];o=o[0]}if(this.stack.env.font){n.mathvariant=this.stack.env.font}this.Push(this.mmlToken(i.mi(i.entity("#x"+o)).With(n)))},csDelimiter:function(m,o){var n={};if(f(o)){n=o[1];o=o[0]}if(o.length===4){o=i.entity("#x"+o)}else{o=i.chars(o)}this.Push(this.mmlToken(i.mo(o).With({fence:false,stretchy:false}).With(n)))},csUndefined:function(m){d.Error(["UndefinedControlSequence","Undefined control sequence %1",m])},Variable:function(n){var m={};if(this.stack.env.font){m.mathvariant=this.stack.env.font}this.Push(this.mmlToken(i.mi(i.chars(n)).With(m)))},Number:function(p){var m,o=this.string.slice(this.i-1).match(g.number);if(o){m=i.mn(o[0].replace(/[{}]/g,""));this.i+=o[0].length-1}else{m=i.mo(i.chars(p))}if(this.stack.env.font){m.mathvariant=this.stack.env.font}this.Push(this.mmlToken(m))},Open:function(m){this.Push(b.open())},Close:function(m){this.Push(b.close())},Tilde:function(m){this.Push(i.mtext(i.chars(h)))},Space:function(m){},Superscript:function(r){if(this.GetNext().match(/\d/)){this.string=this.string.substr(0,this.i+1)+" "+this.string.substr(this.i+1)}var q,o,p=this.stack.Top();if(p.type==="prime"){o=p.data[0];q=p.data[1];this.stack.Pop()}else{o=this.stack.Prev();if(!o){o=i.mi("")}}if(o.isEmbellishedWrapper){o=o.data[0].data[0]}var n=o.movesupsub,m=o.sup;if((o.type==="msubsup"&&o.data[o.sup])||(o.type==="munderover"&&o.data[o.over]&&!o.subsupOK)){d.Error(["DoubleExponent","Double exponent: use braces to clarify"])}if(o.type!=="msubsup"){if(n){if(o.type!=="munderover"||o.data[o.over]){if(o.movablelimits&&o.isa(i.mi)){o=this.mi2mo(o)}o=i.munderover(o,null,null).With({movesupsub:true})}m=o.over}else{o=i.msubsup(o,null,null);m=o.sup}}this.Push(b.subsup(o).With({position:m,primes:q,movesupsub:n}))},Subscript:function(r){if(this.GetNext().match(/\d/)){this.string=this.string.substr(0,this.i+1)+" "+this.string.substr(this.i+1)}var q,o,p=this.stack.Top();if(p.type==="prime"){o=p.data[0];q=p.data[1];this.stack.Pop()}else{o=this.stack.Prev();if(!o){o=i.mi("")}}if(o.isEmbellishedWrapper){o=o.data[0].data[0]}var n=o.movesupsub,m=o.sub;if((o.type==="msubsup"&&o.data[o.sub])||(o.type==="munderover"&&o.data[o.under]&&!o.subsupOK)){d.Error(["DoubleSubscripts","Double subscripts: use braces to clarify"])}if(o.type!=="msubsup"){if(n){if(o.type!=="munderover"||o.data[o.under]){if(o.movablelimits&&o.isa(i.mi)){o=this.mi2mo(o)}o=i.munderover(o,null,null).With({movesupsub:true})}m=o.under}else{o=i.msubsup(o,null,null);m=o.sub}}this.Push(b.subsup(o).With({position:m,primes:q,movesupsub:n}))},PRIME:"\u2032",SMARTQUOTE:"\u2019",Prime:function(o){var n=this.stack.Prev();if(!n){n=i.mi()}if(n.type==="msubsup"&&n.data[n.sup]){d.Error(["DoubleExponentPrime","Prime causes double exponent: use braces to clarify"])}var m="";this.i--;do{m+=this.PRIME;this.i++,o=this.GetNext()}while(o==="'"||o===this.SMARTQUOTE);m=["","\u2032","\u2033","\u2034","\u2057"][m.length]||m;this.Push(b.prime(n,this.mmlToken(i.mo(m))))},mi2mo:function(m){var n=i.mo();n.Append.apply(n,m.data);var o;for(o in n.defaults){if(n.defaults.hasOwnProperty(o)&&m[o]!=null){n[o]=m[o]}}for(o in i.copyAttributes){if(i.copyAttributes.hasOwnProperty(o)&&m[o]!=null){n[o]=m[o]}}n.lspace=n.rspace="0";n.useMMLspacing&=~(n.SPACE_ATTR.lspace|n.SPACE_ATTR.rspace);return n},Comment:function(m){while(this.id.config.MAXMACROS){d.Error(["MaxMacroSub1","MathJax maximum macro substitution count exceeded; is there a recursive macro call?"])}},Matrix:function(n,p,v,r,u,o,m,w,t){var s=this.GetNext();if(s===""){d.Error(["MissingArgFor","Missing argument for %1",n])}if(s==="{"){this.i++}else{this.string=s+"}"+this.string.slice(this.i+1);this.i=0}var q=b.array().With({requireClose:true,arraydef:{rowspacing:(o||"4pt"),columnspacing:(u||"1em")}});if(w){q.isCases=true}if(t){q.isNumbered=true;q.arraydef.side=t}if(p||v){q.open=p;q.close=v}if(m==="D"){q.arraydef.displaystyle=true}if(r!=null){q.arraydef.columnalign=r}this.Push(q)},Entry:function(p){this.Push(b.cell().With({isEntry:true,name:p}));if(this.stack.Top().isCases){var o=this.string;var t=0,s=-1,q=this.i,n=o.length;while(qd.config.MAXMACROS){d.Error(["MaxMacroSub2","MathJax maximum substitution count exceeded; is there a recursive latex environment?"])}if(q[0]&&this[q[0]]){n=this[q[0]].apply(this,[n].concat(q.slice(2)))}}this.Push(n)},envFindName:function(m){return(g.environment.hasOwnProperty(m)?g.environment[m]:null)},Equation:function(m,n){return n},ExtensionEnv:function(n,m){this.Extension(n.name,m,"environment")},Array:function(n,p,u,s,t,o,m,q){if(!s){s=this.GetArgument("\\begin{"+n.name+"}")}var v=("c"+s).replace(/[^clr|:]/g,"").replace(/[^|:]([|:])+/g,"$1");s=s.replace(/[^clr]/g,"").split("").join(" ");s=s.replace(/l/g,"left").replace(/r/g,"right").replace(/c/g,"center");var r=b.array().With({arraydef:{columnalign:s,columnspacing:(t||"1em"),rowspacing:(o||"4pt")}});if(v.match(/[|:]/)){if(v.charAt(0).match(/[|:]/)){r.frame.push("left");r.frame.dashed=v.charAt(0)===":"}if(v.charAt(v.length-1).match(/[|:]/)){r.frame.push("right")}v=v.substr(1,v.length-2);r.arraydef.columnlines=v.split("").join(" ").replace(/[^|: ]/g,"none").replace(/\|/g,"solid").replace(/:/g,"dashed")}if(p){r.open=this.convertDelimiter(p)}if(u){r.close=this.convertDelimiter(u)}if(m==="D"){r.arraydef.displaystyle=true}else{if(m){r.arraydef.displaystyle=false}}if(m==="S"){r.arraydef.scriptlevel=1}if(q){r.arraydef.useHeight=false}this.Push(n);return r},AlignedArray:function(m){var n=this.GetBrackets("\\begin{"+m.name+"}");return this.setArrayAlign(this.Array.apply(this,arguments),n)},setArrayAlign:function(n,m){m=this.trimSpaces(m||"");if(m==="t"){n.arraydef.align="baseline 1"}else{if(m==="b"){n.arraydef.align="baseline -1"}else{if(m==="c"){n.arraydef.align="center"}else{if(m){n.arraydef.align=m}}}}return n},convertDelimiter:function(m){if(m){m=(g.delimiter.hasOwnProperty(m)?g.delimiter[m]:null)}if(m==null){return null}if(f(m)){m=m[0]}if(m.length===4){m=String.fromCharCode(parseInt(m,16))}return m},trimSpaces:function(n){if(typeof(n)!="string"){return n}var m=n.replace(/^\s+|\s+$/g,"");if(m.match(/\\$/)&&n.match(/ $/)){m+=" "}return m},nextIsSpace:function(){return this.string.charAt(this.i).match(/\s/)},GetNext:function(){while(this.nextIsSpace()){this.i++}return this.string.charAt(this.i)},GetCS:function(){var m=this.string.slice(this.i).match(/^([a-z]+|.) ?/i);if(m){this.i+=m[1].length;return m[1]}else{this.i++;return" "}},GetArgument:function(n,o){switch(this.GetNext()){case"":if(!o){d.Error(["MissingArgFor","Missing argument for %1",n])}return null;case"}":if(!o){d.Error(["ExtraCloseMissingOpen","Extra close brace or missing open brace"])}return null;case"\\":this.i++;return"\\"+this.GetCS();case"{":var m=++this.i,p=1;while(this.i1){n=[i.mrow.apply(i,n)]}}return n},InternalText:function(n,m){n=n.replace(/^\s+/,h).replace(/\s+$/,h);return i.mtext(i.chars(n)).With(m)},setDef:function(m,n){n.isUser=true;g.macros[m]=n},setEnv:function(m,n){n.isUser=true;g.environment[m]=n},SubstituteArgs:function(n,m){var q="";var p="";var r;var o=0;while(on.length){d.Error(["IllegalMacroParam","Illegal macro parameter reference"])}p=this.AddArgs(this.AddArgs(p,q),n[r-1]);q=""}}else{q+=r}}}return this.AddArgs(p,q)},AddArgs:function(n,m){if(m.match(/^[a-z]/i)&&n.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)){n+=" "}if(n.length+m.length>d.config.MAXBUFFER){d.Error(["MaxBufferSize","MathJax internal buffer size exceeded; is there a recursive macro call?"])}return n+m}});d.Augment({Stack:e,Parse:a,Definitions:g,Startup:l,config:{MAXMACROS:10000,MAXBUFFER:5*1024},sourceMenuTitle:["TeXCommands","TeX Commands"],annotationEncoding:"application/x-tex",prefilterHooks:MathJax.Callback.Hooks(true),postfilterHooks:MathJax.Callback.Hooks(true),Config:function(){this.SUPER(arguments).Config.apply(this,arguments);if(this.config.equationNumbers.autoNumber!=="none"){if(!this.config.extensions){this.config.extensions=[]}this.config.extensions.push("AMSmath.js")}},Translate:function(m){var n,o=false,q=MathJax.HTML.getScript(m);var s=(m.type.replace(/\n/g," ").match(/(;|\s|\n)mode\s*=\s*display(;|\s|\n|$)/)!=null);var r={math:q,display:s,script:m};var t=this.prefilterHooks.Execute(r);if(t){return t}q=r.math;try{n=d.Parse(q).mml()}catch(p){if(!p.texError){throw p}n=this.formatError(p,q,s,m);o=true}if(n.isa(i.mtable)&&n.displaystyle==="inherit"){n.displaystyle=s}if(n.inferred){n=i.apply(MathJax.ElementJax,n.data)}else{n=i(n)}if(s){n.root.display="block"}if(o){n.texError=true}r.math=n;return this.postfilterHooks.Execute(r)||r.math},prefilterMath:function(n,o,m){return n},postfilterMath:function(n,o,m){this.combineRelations(n.root);return n},formatError:function(p,o,q,m){var n=p.message.replace(/\n.*/,"");c.signal.Post(["TeX Jax - parse error",n,o,q,m]);return i.Error(n)},Error:function(m){if(f(m)){m=k.apply(k,m)}throw c.Insert(Error(m),{texError:true})},Macro:function(m,n,o){g.macros[m]=["Macro"].concat([].slice.call(arguments,1));g.macros[m].isUser=true},fenced:function(o,n,p){var m=i.mrow().With({open:o,close:p,texClass:i.TEXCLASS.INNER});m.Append(i.mo(o).With({fence:true,stretchy:true,symmetric:true,texClass:i.TEXCLASS.OPEN}));if(n.type==="mrow"&&n.inferred){m.Append.apply(m,n.data)}else{m.Append(n)}m.Append(i.mo(p).With({fence:true,stretchy:true,symmetric:true,texClass:i.TEXCLASS.CLOSE}));return m},fixedFence:function(o,n,p){var m=i.mrow().With({open:o,close:p,texClass:i.TEXCLASS.ORD});if(o){m.Append(this.mathPalette(o,"l"))}if(n.type==="mrow"){m.Append.apply(m,n.data)}else{m.Append(n)}if(p){m.Append(this.mathPalette(p,"r"))}return m},mathPalette:function(p,n){if(p==="{"||p==="}"){p="\\"+p}var o="{\\bigg"+n+" "+p+"}",m="{\\big"+n+" "+p+"}";return d.Parse("\\mathchoice"+o+m+m+m,{}).mml()},combineRelations:function(q){var r,n,p,o;for(r=0,n=q.data.length;r0){p+="rl";o.push("0em 0em");q--}o=o.join(" ");if(i){return this.AMSarray(l,j,i,p,o)}var m=this.AMSarray(l,j,i,p,o);return this.setArrayAlign(m,k)},EquationBegin:function(i,j){this.checkEqnEnv();this.stack.global.forcetag=(j&&a.autoNumber!=="none");return i},EquationStar:function(i,j){this.stack.global.tagged=true;return j},checkEqnEnv:function(){if(this.stack.global.eqnenv){h.Error(["ErroneousNestingEq","Erroneous nesting of equation structures"])}this.stack.global.eqnenv=true},MultiIntegral:function(j,m){var l=this.GetNext();if(l==="\\"){var k=this.i;l=this.GetArgument(j);this.i=k;if(l==="\\limits"){if(j==="\\idotsint"){m="\\!\\!\\mathop{\\,\\,"+m+"}"}else{m="\\!\\!\\!\\mathop{\\,\\,\\,"+m+"}"}}}this.string=m+" "+this.string.slice(this.i);this.i=0},xArrow:function(k,o,n,i){var m={width:"+"+(n+i)+"mu",lspace:n+"mu"};var p=this.GetBrackets(k),q=this.ParseArg(k);var s=b.mo(b.chars(String.fromCharCode(o))).With({stretchy:true,texClass:b.TEXCLASS.REL});var j=b.munderover(s);j.SetData(j.over,b.mpadded(q).With(m).With({voffset:".15em"}));if(p){p=h.Parse(p,this.stack.env).mml();j.SetData(j.under,b.mpadded(p).With(m).With({voffset:"-.24em"}))}this.Push(j.With({subsupOK:true}))},GetDelimiterArg:function(i){var j=this.trimSpaces(this.GetArgument(i));if(j==""){return null}if(j in d.delimiter){return j}h.Error(["MissingOrUnrecognizedDelim","Missing or unrecognized delimiter for %1",i])},GetStar:function(){var i=(this.GetNext()==="*");if(i){this.i++}return i}});f.Augment({autoTag:function(){var j=this.global;if(!j.notag){g.number++;j.tagID=a.formatNumber(g.number.toString());var i=h.Parse("\\text{"+a.formatTag(j.tagID)+"}",{}).mml();j.tag=b.mtd(i).With({id:a.formatID(j.tagID)})}},getTag:function(){var m=this.global,k=m.tag;m.tagged=true;if(m.label){if(a.useLabelIds){k.id=a.formatID(m.label)}g.eqlabels[m.label]={tag:m.tagID,id:k.id}}if(document.getElementById(k.id)||g.IDs[k.id]||g.eqIDs[k.id]){var l=0,j;do{l++;j=k.id+"_"+l}while(document.getElementById(j)||g.IDs[j]||g.eqIDs[j]);k.id=j;if(m.label){g.eqlabels[m.label].id=j}}g.eqIDs[k.id]=1;this.clearTag();return k},clearTag:function(){var i=this.global;delete i.tag;delete i.tagID;delete i.label},fixInitialMO:function(l){for(var k=0,j=l.length;k element, not %1","<"+j.firstChild.nodeName+">"])}var i={math:j.firstChild,script:e};c.DOMfilterHooks.Execute(i);this.mml=this.MakeMML(i.math)},MakeMML:function(h){var i=String(h.getAttribute("class")||"");var f,g=h.nodeName.toLowerCase().replace(/^[a-z]+:/,"");var e=(i.match(/(^| )MJX-TeXAtom-([^ ]*)/));if(e){f=this.TeXAtom(e[2],e[2]==="OP"&&!i.match(/MJX-fixedlimits/))}else{if(!(a[g]&&a[g].isa&&a[g].isa(a.mbase))){MathJax.Hub.signal.Post(["MathML Jax - unknown node type",g]);return a.Error(b("UnknownNodeType","Unknown node type: %1",g))}else{f=a[g]()}}this.AddAttributes(f,h);this.CheckClass(f,f["class"]);this.AddChildren(f,h);if(c.config.useMathMLspacing){f.useMMLspacing=8}return f},TeXAtom:function(g,f){var e=a.TeXAtom().With({texClass:a.TEXCLASS[g]});if(f){e.movesupsub=e.movablelimits=true}return e},CheckClass:function(f,h){h=(h||"").split(/ /);var j=[];for(var g=0,e=h.length;g=2){var l=e.data[0],n=e.data[e.data.length-1];if(l.type==="mo"&&l.Get("fence")&&n.type==="mo"&&n.Get("fence")){if(l.data[0]){e.open=l.data.join("")}if(n.data[0]){e.close=n.data.join("")}}}},preProcessMath:function(f){if(f.match(/^<[a-z]+:/i)&&!f.match(/^<[^<>]* xmlns:/)){f=f.replace(/^<([a-z]+)(:math)/i,'<$1$2 xmlns:$1="http://www.w3.org/1998/Math/MathML"')}var e=f.match(/^(])+)>)/i);if(e&&e[2].match(/ (?!xmlns=)[a-z]+=\"http:/i)){f=e[1].replace(/ (?!xmlns=)([a-z]+=(['"])http:.*?\2)/ig," xmlns:$1 $1")+f.substr(e[0].length)}if(f.match(/^]/i)&&!f.match(/^<[^<>]* xmlns=/)){f=f.replace(/^<(math)/i,'\s*$/,"$2");return f.replace(/&([a-z][a-z0-9]*);/ig,this.replaceEntity)},trimSpace:function(e){return e.replace(/[\t\n\r]/g," ").replace(/^ +/,"").replace(/ +$/,"").replace(/ +/g," ")},replaceEntity:function(g,f){if(f.match(/^(lt|amp|quot)$/)){return g}if(c.Parse.Entity[f]){return c.Parse.Entity[f]}var h=f.charAt(0).toLowerCase();var e=f.match(/^[a-zA-Z](fr|scr|opf)$/);if(e){h=e[1]}if(!c.Parse.loaded[h]){c.Parse.loaded[h]=true;MathJax.Hub.RestartAfter(MathJax.Ajax.Require(c.entityDir+"/"+h+".js"))}return g}},{loaded:[]});c.Augment({sourceMenuTitle:["OriginalMathML","Original MathML"],prefilterHooks:MathJax.Callback.Hooks(true),DOMfilterHooks:MathJax.Callback.Hooks(true),postfilterHooks:MathJax.Callback.Hooks(true),Translate:function(e){if(!this.ParseXML){this.ParseXML=this.createParser()}var f,h,i={script:e};if(e.firstChild&&e.firstChild.nodeName.toLowerCase().replace(/^[a-z]+:/,"")==="math"){i.math=e.firstChild}else{h=MathJax.HTML.getScript(e);if(d.isMSIE){h=h.replace(/( )+$/,"")}i.math=h}var j=this.prefilterHooks.Execute(i);if(j){return j}h=i.math;try{f=c.Parse(h,e).mml}catch(g){if(!g.mathmlError){throw g}f=this.formatError(g,h,e)}i.math=a(f);return this.postfilterHooks.Execute(i)||i.math},prefilterMath:function(f,e){return f},prefilterMathML:function(f,e){return f},formatError:function(h,g,e){var f=h.message.replace(/\n.*/,"");MathJax.Hub.signal.Post(["MathML Jax - parse error",f,g,e]);return a.Error(f)},Error:function(e){if(MathJax.Object.isArray(e)){e=b.apply(b,e)}throw MathJax.Hub.Insert(Error(e),{mathmlError:true})},parseDOM:function(e){return this.parser.parseFromString(e,"text/xml")},parseMS:function(e){return(this.parser.loadXML(e)?this.parser:null)},parseDIV:function(e){this.div.innerHTML="
"+e.replace(/<([a-z]+)([^>]*)\/>/g,"<$1$2>")+"
";var f=this.div.firstChild;this.div.innerHTML="";return f},parseError:function(e){return null},createMSParser:function(){var j=null;var f=["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument.2.0","Microsoft.XMLDOM"];for(var g=0,e=f.length;g=ab-1){this.lastChild=ae}this.childNodes[ad]=ae;ae.nextSibling=ac.nextSibling;ac.nextSibling=ac.parent=null;return ac},hasChildNodes:function(ab){return(this.childNodes.length>0)},toString:function(){return"{"+this.childNodes.join("")+"}"}});var x=function(){g=MathJax.ElementJax.mml;var ab=g.mbase.prototype.Init;g.mbase.Augment({firstChild:null,lastChild:null,nodeValue:null,nextSibling:null,Init:function(){var ac=ab.apply(this,arguments)||this;ac.childNodes=ac.data;ac.nodeName=ac.type;return ac},appendChild:function(af){if(af.parent){af.parent.removeChild(af)}var ad=arguments;if(af.isa(X)){ad=af.childNodes;af.data=af.childNodes=[];af.firstChild=af.lastChild=null}for(var ae=0,ac=ad.length;ae=ac-1){this.lastChild=af}this.SetData(ae,af);af.nextSibling=ad.nextSibling;ad.nextSibling=ad.parent=null;return ad},hasChildNodes:function(ac){return(this.childNodes.length>0)},setAttribute:function(ac,ad){this[ac]=ad}})};var Q={};var e={getElementById:true,createElementNS:function(ac,ab){var ad=g[ab]();if(ab==="mo"&&aa.config.useMathMLspacing){ad.useMMLspacing=128}return ad},createTextNode:function(ab){return g.chars(ab).With({nodeValue:ab})},createDocumentFragment:function(){return X()}};var J={appName:"MathJax"};var C="blue";var o=true;var v=true;var d=".";var f=true;var l=(J.appName.slice(0,9)=="Microsoft");function E(ab){if(l){return e.createElement(ab)}else{return e.createElementNS("http://www.w3.org/1999/xhtml",ab)}}var W="http://www.w3.org/1998/Math/MathML";function P(ab){if(l){return e.createElement("m:"+ab)}else{return e.createElementNS(W,ab)}}function O(ab,ad){var ac;if(l){ac=e.createElement("m:"+ab)}else{ac=e.createElementNS(W,ab)}if(ad){ac.appendChild(ad)}return ac}function u(ab,ac){z.push({input:ab,tag:"mo",output:ac,tex:null,ttype:V});B()}function r(ab){z.push(ab);B()}var D=["\uD835\uDC9C","\u212C","\uD835\uDC9E","\uD835\uDC9F","\u2130","\u2131","\uD835\uDCA2","\u210B","\u2110","\uD835\uDCA5","\uD835\uDCA6","\u2112","\u2133","\uD835\uDCA9","\uD835\uDCAA","\uD835\uDCAB","\uD835\uDCAC","\u211B","\uD835\uDCAE","\uD835\uDCAF","\uD835\uDCB0","\uD835\uDCB1","\uD835\uDCB2","\uD835\uDCB3","\uD835\uDCB4","\uD835\uDCB5","\uD835\uDCB6","\uD835\uDCB7","\uD835\uDCB8","\uD835\uDCB9","\u212F","\uD835\uDCBB","\u210A","\uD835\uDCBD","\uD835\uDCBE","\uD835\uDCBF","\uD835\uDCC0","\uD835\uDCC1","\uD835\uDCC2","\uD835\uDCC3","\u2134","\uD835\uDCC5","\uD835\uDCC6","\uD835\uDCC7","\uD835\uDCC8","\uD835\uDCC9","\uD835\uDCCA","\uD835\uDCCB","\uD835\uDCCC","\uD835\uDCCD","\uD835\uDCCE","\uD835\uDCCF"];var H=["\uD835\uDD04","\uD835\uDD05","\u212D","\uD835\uDD07","\uD835\uDD08","\uD835\uDD09","\uD835\uDD0A","\u210C","\u2111","\uD835\uDD0D","\uD835\uDD0E","\uD835\uDD0F","\uD835\uDD10","\uD835\uDD11","\uD835\uDD12","\uD835\uDD13","\uD835\uDD14","\u211C","\uD835\uDD16","\uD835\uDD17","\uD835\uDD18","\uD835\uDD19","\uD835\uDD1A","\uD835\uDD1B","\uD835\uDD1C","\u2128","\uD835\uDD1E","\uD835\uDD1F","\uD835\uDD20","\uD835\uDD21","\uD835\uDD22","\uD835\uDD23","\uD835\uDD24","\uD835\uDD25","\uD835\uDD26","\uD835\uDD27","\uD835\uDD28","\uD835\uDD29","\uD835\uDD2A","\uD835\uDD2B","\uD835\uDD2C","\uD835\uDD2D","\uD835\uDD2E","\uD835\uDD2F","\uD835\uDD30","\uD835\uDD31","\uD835\uDD32","\uD835\uDD33","\uD835\uDD34","\uD835\uDD35","\uD835\uDD36","\uD835\uDD37"];var w=["\uD835\uDD38","\uD835\uDD39","\u2102","\uD835\uDD3B","\uD835\uDD3C","\uD835\uDD3D","\uD835\uDD3E","\u210D","\uD835\uDD40","\uD835\uDD41","\uD835\uDD42","\uD835\uDD43","\uD835\uDD44","\u2115","\uD835\uDD46","\u2119","\u211A","\u211D","\uD835\uDD4A","\uD835\uDD4B","\uD835\uDD4C","\uD835\uDD4D","\uD835\uDD4E","\uD835\uDD4F","\uD835\uDD50","\u2124","\uD835\uDD52","\uD835\uDD53","\uD835\uDD54","\uD835\uDD55","\uD835\uDD56","\uD835\uDD57","\uD835\uDD58","\uD835\uDD59","\uD835\uDD5A","\uD835\uDD5B","\uD835\uDD5C","\uD835\uDD5D","\uD835\uDD5E","\uD835\uDD5F","\uD835\uDD60","\uD835\uDD61","\uD835\uDD62","\uD835\uDD63","\uD835\uDD64","\uD835\uDD65","\uD835\uDD66","\uD835\uDD67","\uD835\uDD68","\uD835\uDD69","\uD835\uDD6A","\uD835\uDD6B"];var c=0,A=1,U=2,i=3,b=4,h=5,a=6,L=7,V=8,m=9,Y=10,K=15;var k={input:'"',tag:"mtext",output:"mbox",tex:null,ttype:Y};var z=[{input:"alpha",tag:"mi",output:"\u03B1",tex:null,ttype:c},{input:"beta",tag:"mi",output:"\u03B2",tex:null,ttype:c},{input:"chi",tag:"mi",output:"\u03C7",tex:null,ttype:c},{input:"delta",tag:"mi",output:"\u03B4",tex:null,ttype:c},{input:"Delta",tag:"mo",output:"\u0394",tex:null,ttype:c},{input:"epsi",tag:"mi",output:"\u03B5",tex:"epsilon",ttype:c},{input:"varepsilon",tag:"mi",output:"\u025B",tex:null,ttype:c},{input:"eta",tag:"mi",output:"\u03B7",tex:null,ttype:c},{input:"gamma",tag:"mi",output:"\u03B3",tex:null,ttype:c},{input:"Gamma",tag:"mo",output:"\u0393",tex:null,ttype:c},{input:"iota",tag:"mi",output:"\u03B9",tex:null,ttype:c},{input:"kappa",tag:"mi",output:"\u03BA",tex:null,ttype:c},{input:"lambda",tag:"mi",output:"\u03BB",tex:null,ttype:c},{input:"Lambda",tag:"mo",output:"\u039B",tex:null,ttype:c},{input:"lamda",tag:"mi",output:"\u03BB",tex:null,ttype:c},{input:"Lamda",tag:"mo",output:"\u039B",tex:null,ttype:c},{input:"mu",tag:"mi",output:"\u03BC",tex:null,ttype:c},{input:"nu",tag:"mi",output:"\u03BD",tex:null,ttype:c},{input:"omega",tag:"mi",output:"\u03C9",tex:null,ttype:c},{input:"Omega",tag:"mo",output:"\u03A9",tex:null,ttype:c},{input:"phi",tag:"mi",output:f?"\u03D5":"\u03C6",tex:null,ttype:c},{input:"varphi",tag:"mi",output:f?"\u03C6":"\u03D5",tex:null,ttype:c},{input:"Phi",tag:"mo",output:"\u03A6",tex:null,ttype:c},{input:"pi",tag:"mi",output:"\u03C0",tex:null,ttype:c},{input:"Pi",tag:"mo",output:"\u03A0",tex:null,ttype:c},{input:"psi",tag:"mi",output:"\u03C8",tex:null,ttype:c},{input:"Psi",tag:"mi",output:"\u03A8",tex:null,ttype:c},{input:"rho",tag:"mi",output:"\u03C1",tex:null,ttype:c},{input:"sigma",tag:"mi",output:"\u03C3",tex:null,ttype:c},{input:"Sigma",tag:"mo",output:"\u03A3",tex:null,ttype:c},{input:"tau",tag:"mi",output:"\u03C4",tex:null,ttype:c},{input:"theta",tag:"mi",output:"\u03B8",tex:null,ttype:c},{input:"vartheta",tag:"mi",output:"\u03D1",tex:null,ttype:c},{input:"Theta",tag:"mo",output:"\u0398",tex:null,ttype:c},{input:"upsilon",tag:"mi",output:"\u03C5",tex:null,ttype:c},{input:"xi",tag:"mi",output:"\u03BE",tex:null,ttype:c},{input:"Xi",tag:"mo",output:"\u039E",tex:null,ttype:c},{input:"zeta",tag:"mi",output:"\u03B6",tex:null,ttype:c},{input:"*",tag:"mo",output:"\u22C5",tex:"cdot",ttype:c},{input:"**",tag:"mo",output:"\u2217",tex:"ast",ttype:c},{input:"***",tag:"mo",output:"\u22C6",tex:"star",ttype:c},{input:"//",tag:"mo",output:"/",tex:null,ttype:c},{input:"\\\\",tag:"mo",output:"\\",tex:"backslash",ttype:c},{input:"setminus",tag:"mo",output:"\\",tex:null,ttype:c},{input:"xx",tag:"mo",output:"\u00D7",tex:"times",ttype:c},{input:"|><",tag:"mo",output:"\u22C9",tex:"ltimes",ttype:c},{input:"><|",tag:"mo",output:"\u22CA",tex:"rtimes",ttype:c},{input:"|><|",tag:"mo",output:"\u22C8",tex:"bowtie",ttype:c},{input:"-:",tag:"mo",output:"\u00F7",tex:"div",ttype:c},{input:"divide",tag:"mo",output:"-:",tex:null,ttype:V},{input:"@",tag:"mo",output:"\u2218",tex:"circ",ttype:c},{input:"o+",tag:"mo",output:"\u2295",tex:"oplus",ttype:c},{input:"ox",tag:"mo",output:"\u2297",tex:"otimes",ttype:c},{input:"o.",tag:"mo",output:"\u2299",tex:"odot",ttype:c},{input:"sum",tag:"mo",output:"\u2211",tex:null,ttype:L},{input:"prod",tag:"mo",output:"\u220F",tex:null,ttype:L},{input:"^^",tag:"mo",output:"\u2227",tex:"wedge",ttype:c},{input:"^^^",tag:"mo",output:"\u22C0",tex:"bigwedge",ttype:L},{input:"vv",tag:"mo",output:"\u2228",tex:"vee",ttype:c},{input:"vvv",tag:"mo",output:"\u22C1",tex:"bigvee",ttype:L},{input:"nn",tag:"mo",output:"\u2229",tex:"cap",ttype:c},{input:"nnn",tag:"mo",output:"\u22C2",tex:"bigcap",ttype:L},{input:"uu",tag:"mo",output:"\u222A",tex:"cup",ttype:c},{input:"uuu",tag:"mo",output:"\u22C3",tex:"bigcup",ttype:L},{input:"!=",tag:"mo",output:"\u2260",tex:"ne",ttype:c},{input:":=",tag:"mo",output:":=",tex:null,ttype:c},{input:"lt",tag:"mo",output:"<",tex:null,ttype:c},{input:"<=",tag:"mo",output:"\u2264",tex:"le",ttype:c},{input:"lt=",tag:"mo",output:"\u2264",tex:"leq",ttype:c},{input:"gt",tag:"mo",output:">",tex:null,ttype:c},{input:">=",tag:"mo",output:"\u2265",tex:"ge",ttype:c},{input:"gt=",tag:"mo",output:"\u2265",tex:"geq",ttype:c},{input:"-<",tag:"mo",output:"\u227A",tex:"prec",ttype:c},{input:"-lt",tag:"mo",output:"\u227A",tex:null,ttype:c},{input:">-",tag:"mo",output:"\u227B",tex:"succ",ttype:c},{input:"-<=",tag:"mo",output:"\u2AAF",tex:"preceq",ttype:c},{input:">-=",tag:"mo",output:"\u2AB0",tex:"succeq",ttype:c},{input:"in",tag:"mo",output:"\u2208",tex:null,ttype:c},{input:"!in",tag:"mo",output:"\u2209",tex:"notin",ttype:c},{input:"sub",tag:"mo",output:"\u2282",tex:"subset",ttype:c},{input:"sup",tag:"mo",output:"\u2283",tex:"supset",ttype:c},{input:"sube",tag:"mo",output:"\u2286",tex:"subseteq",ttype:c},{input:"supe",tag:"mo",output:"\u2287",tex:"supseteq",ttype:c},{input:"-=",tag:"mo",output:"\u2261",tex:"equiv",ttype:c},{input:"~=",tag:"mo",output:"\u2245",tex:"cong",ttype:c},{input:"~~",tag:"mo",output:"\u2248",tex:"approx",ttype:c},{input:"prop",tag:"mo",output:"\u221D",tex:"propto",ttype:c},{input:"and",tag:"mtext",output:"and",tex:null,ttype:a},{input:"or",tag:"mtext",output:"or",tex:null,ttype:a},{input:"not",tag:"mo",output:"\u00AC",tex:"neg",ttype:c},{input:"=>",tag:"mo",output:"\u21D2",tex:"implies",ttype:c},{input:"if",tag:"mo",output:"if",tex:null,ttype:a},{input:"<=>",tag:"mo",output:"\u21D4",tex:"iff",ttype:c},{input:"AA",tag:"mo",output:"\u2200",tex:"forall",ttype:c},{input:"EE",tag:"mo",output:"\u2203",tex:"exists",ttype:c},{input:"_|_",tag:"mo",output:"\u22A5",tex:"bot",ttype:c},{input:"TT",tag:"mo",output:"\u22A4",tex:"top",ttype:c},{input:"|--",tag:"mo",output:"\u22A2",tex:"vdash",ttype:c},{input:"|==",tag:"mo",output:"\u22A8",tex:"models",ttype:c},{input:"(",tag:"mo",output:"(",tex:"left(",ttype:b},{input:")",tag:"mo",output:")",tex:"right)",ttype:h},{input:"[",tag:"mo",output:"[",tex:"left[",ttype:b},{input:"]",tag:"mo",output:"]",tex:"right]",ttype:h},{input:"{",tag:"mo",output:"{",tex:null,ttype:b},{input:"}",tag:"mo",output:"}",tex:null,ttype:h},{input:"|",tag:"mo",output:"|",tex:null,ttype:m},{input:":|:",tag:"mo",output:"|",tex:null,ttype:c},{input:"|:",tag:"mo",output:"|",tex:null,ttype:b},{input:":|",tag:"mo",output:"|",tex:null,ttype:h},{input:"(:",tag:"mo",output:"\u2329",tex:"langle",ttype:b},{input:":)",tag:"mo",output:"\u232A",tex:"rangle",ttype:h},{input:"<<",tag:"mo",output:"\u2329",tex:null,ttype:b},{input:">>",tag:"mo",output:"\u232A",tex:null,ttype:h},{input:"{:",tag:"mo",output:"{:",tex:null,ttype:b,invisible:true},{input:":}",tag:"mo",output:":}",tex:null,ttype:h,invisible:true},{input:"int",tag:"mo",output:"\u222B",tex:null,ttype:c},{input:"dx",tag:"mi",output:"{:d x:}",tex:null,ttype:V},{input:"dy",tag:"mi",output:"{:d y:}",tex:null,ttype:V},{input:"dz",tag:"mi",output:"{:d z:}",tex:null,ttype:V},{input:"dt",tag:"mi",output:"{:d t:}",tex:null,ttype:V},{input:"oint",tag:"mo",output:"\u222E",tex:null,ttype:c},{input:"del",tag:"mo",output:"\u2202",tex:"partial",ttype:c},{input:"grad",tag:"mo",output:"\u2207",tex:"nabla",ttype:c},{input:"+-",tag:"mo",output:"\u00B1",tex:"pm",ttype:c},{input:"O/",tag:"mo",output:"\u2205",tex:"emptyset",ttype:c},{input:"oo",tag:"mo",output:"\u221E",tex:"infty",ttype:c},{input:"aleph",tag:"mo",output:"\u2135",tex:null,ttype:c},{input:"...",tag:"mo",output:"...",tex:"ldots",ttype:c},{input:":.",tag:"mo",output:"\u2234",tex:"therefore",ttype:c},{input:":'",tag:"mo",output:"\u2235",tex:"because",ttype:c},{input:"/_",tag:"mo",output:"\u2220",tex:"angle",ttype:c},{input:"/_\\",tag:"mo",output:"\u25B3",tex:"triangle",ttype:c},{input:"'",tag:"mo",output:"\u2032",tex:"prime",ttype:c},{input:"tilde",tag:"mover",output:"~",tex:null,ttype:A,acc:true},{input:"\\ ",tag:"mo",output:"\u00A0",tex:null,ttype:c},{input:"frown",tag:"mo",output:"\u2322",tex:null,ttype:c},{input:"quad",tag:"mo",output:"\u00A0\u00A0",tex:null,ttype:c},{input:"qquad",tag:"mo",output:"\u00A0\u00A0\u00A0\u00A0",tex:null,ttype:c},{input:"cdots",tag:"mo",output:"\u22EF",tex:null,ttype:c},{input:"vdots",tag:"mo",output:"\u22EE",tex:null,ttype:c},{input:"ddots",tag:"mo",output:"\u22F1",tex:null,ttype:c},{input:"diamond",tag:"mo",output:"\u22C4",tex:null,ttype:c},{input:"square",tag:"mo",output:"\u25A1",tex:null,ttype:c},{input:"|__",tag:"mo",output:"\u230A",tex:"lfloor",ttype:c},{input:"__|",tag:"mo",output:"\u230B",tex:"rfloor",ttype:c},{input:"|~",tag:"mo",output:"\u2308",tex:"lceiling",ttype:c},{input:"~|",tag:"mo",output:"\u2309",tex:"rceiling",ttype:c},{input:"CC",tag:"mo",output:"\u2102",tex:null,ttype:c},{input:"NN",tag:"mo",output:"\u2115",tex:null,ttype:c},{input:"QQ",tag:"mo",output:"\u211A",tex:null,ttype:c},{input:"RR",tag:"mo",output:"\u211D",tex:null,ttype:c},{input:"ZZ",tag:"mo",output:"\u2124",tex:null,ttype:c},{input:"f",tag:"mi",output:"f",tex:null,ttype:A,func:true},{input:"g",tag:"mi",output:"g",tex:null,ttype:A,func:true},{input:"lim",tag:"mo",output:"lim",tex:null,ttype:L},{input:"Lim",tag:"mo",output:"Lim",tex:null,ttype:L},{input:"sin",tag:"mo",output:"sin",tex:null,ttype:A,func:true},{input:"cos",tag:"mo",output:"cos",tex:null,ttype:A,func:true},{input:"tan",tag:"mo",output:"tan",tex:null,ttype:A,func:true},{input:"sinh",tag:"mo",output:"sinh",tex:null,ttype:A,func:true},{input:"cosh",tag:"mo",output:"cosh",tex:null,ttype:A,func:true},{input:"tanh",tag:"mo",output:"tanh",tex:null,ttype:A,func:true},{input:"cot",tag:"mo",output:"cot",tex:null,ttype:A,func:true},{input:"sec",tag:"mo",output:"sec",tex:null,ttype:A,func:true},{input:"csc",tag:"mo",output:"csc",tex:null,ttype:A,func:true},{input:"arcsin",tag:"mo",output:"arcsin",tex:null,ttype:A,func:true},{input:"arccos",tag:"mo",output:"arccos",tex:null,ttype:A,func:true},{input:"arctan",tag:"mo",output:"arctan",tex:null,ttype:A,func:true},{input:"coth",tag:"mo",output:"coth",tex:null,ttype:A,func:true},{input:"sech",tag:"mo",output:"sech",tex:null,ttype:A,func:true},{input:"csch",tag:"mo",output:"csch",tex:null,ttype:A,func:true},{input:"exp",tag:"mo",output:"exp",tex:null,ttype:A,func:true},{input:"abs",tag:"mo",output:"abs",tex:null,ttype:A,rewriteleftright:["|","|"]},{input:"norm",tag:"mo",output:"norm",tex:null,ttype:A,rewriteleftright:["\u2225","\u2225"]},{input:"floor",tag:"mo",output:"floor",tex:null,ttype:A,rewriteleftright:["\u230A","\u230B"]},{input:"ceil",tag:"mo",output:"ceil",tex:null,ttype:A,rewriteleftright:["\u2308","\u2309"]},{input:"log",tag:"mo",output:"log",tex:null,ttype:A,func:true},{input:"ln",tag:"mo",output:"ln",tex:null,ttype:A,func:true},{input:"det",tag:"mo",output:"det",tex:null,ttype:A,func:true},{input:"dim",tag:"mo",output:"dim",tex:null,ttype:c},{input:"mod",tag:"mo",output:"mod",tex:null,ttype:c},{input:"gcd",tag:"mo",output:"gcd",tex:null,ttype:A,func:true},{input:"lcm",tag:"mo",output:"lcm",tex:null,ttype:A,func:true},{input:"lub",tag:"mo",output:"lub",tex:null,ttype:c},{input:"glb",tag:"mo",output:"glb",tex:null,ttype:c},{input:"min",tag:"mo",output:"min",tex:null,ttype:L},{input:"max",tag:"mo",output:"max",tex:null,ttype:L},{input:"Sin",tag:"mo",output:"Sin",tex:null,ttype:A,func:true},{input:"Cos",tag:"mo",output:"Cos",tex:null,ttype:A,func:true},{input:"Tan",tag:"mo",output:"Tan",tex:null,ttype:A,func:true},{input:"Arcsin",tag:"mo",output:"Arcsin",tex:null,ttype:A,func:true},{input:"Arccos",tag:"mo",output:"Arccos",tex:null,ttype:A,func:true},{input:"Arctan",tag:"mo",output:"Arctan",tex:null,ttype:A,func:true},{input:"Sinh",tag:"mo",output:"Sinh",tex:null,ttype:A,func:true},{input:"Cosh",tag:"mo",output:"Cosh",tex:null,ttype:A,func:true},{input:"Tanh",tag:"mo",output:"Tanh",tex:null,ttype:A,func:true},{input:"Cot",tag:"mo",output:"Cot",tex:null,ttype:A,func:true},{input:"Sec",tag:"mo",output:"Sec",tex:null,ttype:A,func:true},{input:"Csc",tag:"mo",output:"Csc",tex:null,ttype:A,func:true},{input:"Log",tag:"mo",output:"Log",tex:null,ttype:A,func:true},{input:"Ln",tag:"mo",output:"Ln",tex:null,ttype:A,func:true},{input:"Abs",tag:"mo",output:"abs",tex:null,ttype:A,notexcopy:true,rewriteleftright:["|","|"]},{input:"uarr",tag:"mo",output:"\u2191",tex:"uparrow",ttype:c},{input:"darr",tag:"mo",output:"\u2193",tex:"downarrow",ttype:c},{input:"rarr",tag:"mo",output:"\u2192",tex:"rightarrow",ttype:c},{input:"->",tag:"mo",output:"\u2192",tex:"to",ttype:c},{input:">->",tag:"mo",output:"\u21A3",tex:"rightarrowtail",ttype:c},{input:"->>",tag:"mo",output:"\u21A0",tex:"twoheadrightarrow",ttype:c},{input:">->>",tag:"mo",output:"\u2916",tex:"twoheadrightarrowtail",ttype:c},{input:"|->",tag:"mo",output:"\u21A6",tex:"mapsto",ttype:c},{input:"larr",tag:"mo",output:"\u2190",tex:"leftarrow",ttype:c},{input:"harr",tag:"mo",output:"\u2194",tex:"leftrightarrow",ttype:c},{input:"rArr",tag:"mo",output:"\u21D2",tex:"Rightarrow",ttype:c},{input:"lArr",tag:"mo",output:"\u21D0",tex:"Leftarrow",ttype:c},{input:"hArr",tag:"mo",output:"\u21D4",tex:"Leftrightarrow",ttype:c},{input:"sqrt",tag:"msqrt",output:"sqrt",tex:null,ttype:A},{input:"root",tag:"mroot",output:"root",tex:null,ttype:U},{input:"frac",tag:"mfrac",output:"/",tex:null,ttype:U},{input:"/",tag:"mfrac",output:"/",tex:null,ttype:i},{input:"stackrel",tag:"mover",output:"stackrel",tex:null,ttype:U},{input:"overset",tag:"mover",output:"stackrel",tex:null,ttype:U},{input:"underset",tag:"munder",output:"stackrel",tex:null,ttype:U},{input:"_",tag:"msub",output:"_",tex:null,ttype:i},{input:"^",tag:"msup",output:"^",tex:null,ttype:i},{input:"hat",tag:"mover",output:"\u005E",tex:null,ttype:A,acc:true},{input:"bar",tag:"mover",output:"\u00AF",tex:"overline",ttype:A,acc:true},{input:"vec",tag:"mover",output:"\u2192",tex:null,ttype:A,acc:true},{input:"dot",tag:"mover",output:".",tex:null,ttype:A,acc:true},{input:"ddot",tag:"mover",output:"..",tex:null,ttype:A,acc:true},{input:"overarc",tag:"mover",output:"\u23DC",tex:"overparen",ttype:A,acc:true},{input:"ul",tag:"munder",output:"\u0332",tex:"underline",ttype:A,acc:true},{input:"ubrace",tag:"munder",output:"\u23DF",tex:"underbrace",ttype:K,acc:true},{input:"obrace",tag:"mover",output:"\u23DE",tex:"overbrace",ttype:K,acc:true},{input:"text",tag:"mtext",output:"text",tex:null,ttype:Y},{input:"mbox",tag:"mtext",output:"mbox",tex:null,ttype:Y},{input:"color",tag:"mstyle",ttype:U},{input:"id",tag:"mrow",ttype:U},{input:"class",tag:"mrow",ttype:U},{input:"cancel",tag:"menclose",output:"cancel",tex:null,ttype:A},k,{input:"bb",tag:"mstyle",atname:"mathvariant",atval:"bold",output:"bb",tex:null,ttype:A},{input:"mathbf",tag:"mstyle",atname:"mathvariant",atval:"bold",output:"mathbf",tex:null,ttype:A},{input:"sf",tag:"mstyle",atname:"mathvariant",atval:"sans-serif",output:"sf",tex:null,ttype:A},{input:"mathsf",tag:"mstyle",atname:"mathvariant",atval:"sans-serif",output:"mathsf",tex:null,ttype:A},{input:"bbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",output:"bbb",tex:null,ttype:A,codes:w},{input:"mathbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",output:"mathbb",tex:null,ttype:A,codes:w},{input:"cc",tag:"mstyle",atname:"mathvariant",atval:"script",output:"cc",tex:null,ttype:A,codes:D},{input:"mathcal",tag:"mstyle",atname:"mathvariant",atval:"script",output:"mathcal",tex:null,ttype:A,codes:D},{input:"tt",tag:"mstyle",atname:"mathvariant",atval:"monospace",output:"tt",tex:null,ttype:A},{input:"mathtt",tag:"mstyle",atname:"mathvariant",atval:"monospace",output:"mathtt",tex:null,ttype:A},{input:"fr",tag:"mstyle",atname:"mathvariant",atval:"fraktur",output:"fr",tex:null,ttype:A,codes:H},{input:"mathfrak",tag:"mstyle",atname:"mathvariant",atval:"fraktur",output:"mathfrak",tex:null,ttype:A,codes:H}];function T(ac,ab){if(ac.input>ab.input){return 1}else{return -1}}var S=[];function n(){var ac;var ab=z.length;for(ac=0;ac>1;if(ac[ab]=S[ab]}s=y;if(af!=""){y=z[ae].ttype;return z[ae]}y=c;ab=1;ak=ah.slice(0,1);var ai=true;while("0"<=ak&&ak<="9"&&ab<=ah.length){ak=ah.slice(ab,ab+1);ab++}if(ak==d){ak=ah.slice(ab,ab+1);if("0"<=ak&&ak<="9"){ai=false;ab++;while("0"<=ak&&ak<="9"&&ab<=ah.length){ak=ah.slice(ab,ab+1);ab++}}}if((ai&&ab>1)||ab>2){ak=ah.slice(0,ab-1);aj="mn"}else{ab=2;ak=ah.slice(0,1);aj=(("A">ak||ak>"Z")&&("a">ak||ak>"z")?"mo":"mi")}if(ak=="-"&&s==i){y=i;return{input:ak,tag:aj,output:ak,ttype:A,func:true}}return{input:ak,tag:aj,output:ak,ttype:c}}function R(ac){var ab;if(!ac.hasChildNodes()){return}if(ac.firstChild.hasChildNodes()&&(ac.nodeName=="mrow"||ac.nodeName=="M:MROW")){ab=ac.firstChild.firstChild.nodeValue;if(ab=="("||ab=="["||ab=="{"){ac.removeChild(ac.firstChild)}}if(ac.lastChild.hasChildNodes()&&(ac.nodeName=="mrow"||ac.nodeName=="M:MROW")){ab=ac.lastChild.firstChild.nodeValue;if(ab==")"||ab=="]"||ab=="}"){ac.removeChild(ac.lastChild)}}}var F,s,y;function G(ai){var ad,ac,al,af,ak,ag=e.createDocumentFragment();ai=p(ai,0);ad=j(ai);if(ad==null||ad.ttype==h&&F>0){return[null,ai]}if(ad.ttype==V){ai=ad.output+p(ai,ad.input.length);ad=j(ai)}switch(ad.ttype){case L:case c:ai=p(ai,ad.input.length);return[O(ad.tag,e.createTextNode(ad.output)),ai];case b:F++;ai=p(ai,ad.input.length);al=q(ai,true);F--;if(typeof ad.invisible=="boolean"&&ad.invisible){ac=O("mrow",al[0])}else{ac=O("mo",e.createTextNode(ad.output));ac=O("mrow",ac);ac.appendChild(al[0])}return[ac,al[1]];case Y:if(ad!=k){ai=p(ai,ad.input.length)}if(ai.charAt(0)=="{"){af=ai.indexOf("}")}else{if(ai.charAt(0)=="("){af=ai.indexOf(")")}else{if(ai.charAt(0)=="["){af=ai.indexOf("]")}else{if(ad==k){af=ai.slice(1).indexOf('"')+1}else{af=0}}}}if(af==-1){af=ai.length}ak=ai.slice(1,af);if(ak.charAt(0)==" "){ac=O("mspace");ac.setAttribute("width","1ex");ag.appendChild(ac)}ag.appendChild(O(ad.tag,e.createTextNode(ak)));if(ak.charAt(ak.length-1)==" "){ac=O("mspace");ac.setAttribute("width","1ex");ag.appendChild(ac)}ai=p(ai,af+1);return[O("mrow",ag),ai];case K:case A:ai=p(ai,ad.input.length);al=G(ai);if(al[0]==null){return[O(ad.tag,e.createTextNode(ad.output)),ai]}if(typeof ad.func=="boolean"&&ad.func){ak=ai.charAt(0);if(ak=="^"||ak=="_"||ak=="/"||ak=="|"||ak==","||(ad.input.length==1&&ad.input.match(/\w/)&&ak!="(")){return[O(ad.tag,e.createTextNode(ad.output)),ai]}else{ac=O("mrow",O(ad.tag,e.createTextNode(ad.output)));ac.appendChild(al[0]);return[ac,al[1]]}}R(al[0]);if(ad.input=="sqrt"){return[O(ad.tag,al[0]),al[1]]}else{if(typeof ad.rewriteleftright!="undefined"){ac=O("mrow",O("mo",e.createTextNode(ad.rewriteleftright[0])));ac.appendChild(al[0]);ac.appendChild(O("mo",e.createTextNode(ad.rewriteleftright[1])));return[ac,al[1]]}else{if(ad.input=="cancel"){ac=O(ad.tag,al[0]);ac.setAttribute("notation","updiagonalstrike");return[ac,al[1]]}else{if(typeof ad.acc=="boolean"&&ad.acc){ac=O(ad.tag,al[0]);var ah=O("mo",e.createTextNode(ad.output));if(ad.input=="vec"&&((al[0].nodeName=="mrow"&&al[0].childNodes.length==1&&al[0].firstChild.firstChild.nodeValue!==null&&al[0].firstChild.firstChild.nodeValue.length==1)||(al[0].firstChild.nodeValue!==null&&al[0].firstChild.nodeValue.length==1))){ah.setAttribute("stretchy",false)}ac.appendChild(ah);return[ac,al[1]]}else{if(!l&&typeof ad.codes!="undefined"){for(af=0;af64&&ak.charCodeAt(ae)<91){aj=aj+ad.codes[ak.charCodeAt(ae)-65]}else{if(ak.charCodeAt(ae)>96&&ak.charCodeAt(ae)<123){aj=aj+ad.codes[ak.charCodeAt(ae)-71]}else{aj=aj+ak.charAt(ae)}}}if(al[0].nodeName=="mi"){al[0]=O("mo").appendChild(e.createTextNode(aj))}else{al[0].replaceChild(O("mo").appendChild(e.createTextNode(aj)),al[0].childNodes[af])}}}}ac=O(ad.tag,al[0]);ac.setAttribute(ad.atname,ad.atval);return[ac,al[1]]}}}}case U:ai=p(ai,ad.input.length);al=G(ai);if(al[0]==null){return[O("mo",e.createTextNode(ad.input)),ai]}R(al[0]);var ab=G(al[1]);if(ab[0]==null){return[O("mo",e.createTextNode(ad.input)),ai]}R(ab[0]);if(["color","class","id"].indexOf(ad.input)>=0){if(ai.charAt(0)=="{"){af=ai.indexOf("}")}else{if(ai.charAt(0)=="("){af=ai.indexOf(")")}else{if(ai.charAt(0)=="["){af=ai.indexOf("]")}}}ak=ai.slice(1,af);ac=O(ad.tag,ab[0]);if(ad.input==="color"){ac.setAttribute("mathcolor",ak)}else{if(ad.input==="class"){ac.setAttribute("class",ak)}else{if(ad.input==="id"){ac.setAttribute("id",ak)}}}return[ac,ab[1]]}if(ad.input=="root"||ad.output=="stackrel"){ag.appendChild(ab[0])}ag.appendChild(al[0]);if(ad.input=="frac"){ag.appendChild(ab[0])}return[O(ad.tag,ag),ab[1]];case i:ai=p(ai,ad.input.length);return[O("mo",e.createTextNode(ad.output)),ai];case a:ai=p(ai,ad.input.length);ac=O("mspace");ac.setAttribute("width","1ex");ag.appendChild(ac);ag.appendChild(O(ad.tag,e.createTextNode(ad.output)));ac=O("mspace");ac.setAttribute("width","1ex");ag.appendChild(ac);return[O("mrow",ag),ai];case m:F++;ai=p(ai,ad.input.length);al=q(ai,false);F--;ak="";if(al[0].lastChild!=null){ak=al[0].lastChild.firstChild.nodeValue}if(ak=="|"&&ai.charAt(0)!==","){ac=O("mo",e.createTextNode(ad.output));ac=O("mrow",ac);ac.appendChild(al[0]);return[ac,al[1]]}else{ac=O("mo",e.createTextNode("\u2223"));ac=O("mrow",ac);return[ac,ai]}default:ai=p(ai,ad.input.length);return[O(ad.tag,e.createTextNode(ad.output)),ai]}}function t(ah){var af,ai,ag,ae,ab,ad;ah=p(ah,0);ai=j(ah);ab=G(ah);ae=ab[0];ah=ab[1];af=j(ah);if(af.ttype==i&&af.input!="/"){ah=p(ah,af.input.length);ab=G(ah);if(ab[0]==null){ab[0]=O("mo",e.createTextNode("\u25A1"))}else{R(ab[0])}ah=ab[1];ad=(ai.ttype==L||ai.ttype==K);if(af.input=="_"){ag=j(ah);if(ag.input=="^"){ah=p(ah,ag.input.length);var ac=G(ah);R(ac[0]);ah=ac[1];ae=O((ad?"munderover":"msubsup"),ae);ae.appendChild(ab[0]);ae.appendChild(ac[0]);ae=O("mrow",ae)}else{ae=O((ad?"munder":"msub"),ae);ae.appendChild(ab[0])}}else{if(af.input=="^"&&ad){ae=O("mover",ae);ae.appendChild(ab[0])}else{ae=O(af.tag,ae);ae.appendChild(ab[0])}}if(typeof ai.func!="undefined"&&ai.func){ag=j(ah);if(ag.ttype!=i&&ag.ttype!=h&&(ai.input.length>1||ag.ttype==b)){ab=t(ah);ae=O("mrow",ae);ae.appendChild(ab[0]);ah=ab[1]}}}return[ae,ah]}function q(ak,aj){var ao,al,ag,ar,ah=e.createDocumentFragment();do{ak=p(ak,0);ag=t(ak);al=ag[0];ak=ag[1];ao=j(ak);if(ao.ttype==i&&ao.input=="/"){ak=p(ak,ao.input.length);ag=t(ak);if(ag[0]==null){ag[0]=O("mo",e.createTextNode("\u25A1"))}else{R(ag[0])}ak=ag[1];R(al);al=O(ao.tag,al);al.appendChild(ag[0]);ah.appendChild(al);ao=j(ak)}else{if(al!=undefined){ah.appendChild(al)}}}while((ao.ttype!=h&&(ao.ttype!=m||aj)||F==0)&&ao!=null&&ao.output!="");if(ao.ttype==h||ao.ttype==m){var at=ah.childNodes.length;if(at>0&&ah.childNodes[at-1].nodeName=="mrow"&&ah.childNodes[at-1].lastChild&&ah.childNodes[at-1].lastChild.firstChild){var av=ah.childNodes[at-1].lastChild.firstChild.nodeValue;if(av==")"||av=="]"){var ac=ah.childNodes[at-1].firstChild.firstChild.nodeValue;if(ac=="("&&av==")"&&ao.output!="}"||ac=="["&&av=="]"){var ad=[];var ap=true;var am=ah.childNodes.length;for(ar=0;ap&&ar1){ap=ad[ar].length==ad[ar-2].length}}ap=ap&&(ad.length>1||ad[0].length>0);var af=[];if(ap){var ae,ab,ai,an,au=e.createDocumentFragment();for(ar=0;ar2){ah.removeChild(ah.firstChild);ah.removeChild(ah.firstChild)}au.appendChild(O("mtr",ae))}al=O("mtable",au);al.setAttribute("columnlines",af.join(" "));if(typeof ao.invisible=="boolean"&&ao.invisible){al.setAttribute("columnalign","left")}ah.replaceChild(al,ah.firstChild)}}}}ak=p(ak,ao.input.length);if(typeof ao.invisible!="boolean"||!ao.invisible){al=O("mo",e.createTextNode(ao.output));ah.appendChild(al)}}return[ah,ak]}function M(ad,ac){var ae,ab;F=0;ad=ad.replace(/ /g,"");ad=ad.replace(/>/g,">");ad=ad.replace(/</g,"<");ae=q(ad.replace(/^\s+/g,""),false)[0];ab=O("mstyle",ae);if(C!=""){ab.setAttribute("mathcolor",C)}if(mathfontsize!=""){ab.setAttribute("fontsize",mathfontsize);ab.setAttribute("mathsize",mathfontsize)}if(mathfontfamily!=""){ab.setAttribute("fontfamily",mathfontfamily);ab.setAttribute("mathvariant",mathfontfamily)}if(o){ab.setAttribute("displaystyle","true")}ab=O("math",ab);if(v){ab.setAttribute("title",ad.replace(/\s+/g," "))}return ab}v=false;mathfontfamily="";C="";mathfontsize="";(function(){for(var ac=0,ab=z.length;ac *":{display:"table-row!important"},".MJXp-surd":{"vertical-align":"top"},".MJXp-surd > *":{display:"block!important"},".MJXp-script-box > * ":{display:"table!important",height:"50%"},".MJXp-script-box > * > *":{display:"table-cell!important","vertical-align":"top"},".MJXp-script-box > *:last-child > *":{"vertical-align":"bottom"},".MJXp-script-box > * > * > *":{display:"block!important"},".MJXp-mphantom":{visibility:"hidden"},".MJXp-munderover, .MJXp-munder":{display:"inline-table!important"},".MJXp-over":{display:"inline-block!important","text-align":"center"},".MJXp-over > *":{display:"block!important"},".MJXp-munderover > *, .MJXp-munder > *":{display:"table-row!important"},".MJXp-mtable":{"vertical-align":".25em",margin:"0 .125em"},".MJXp-mtable > *":{display:"inline-table!important","vertical-align":"middle"},".MJXp-mtr":{display:"table-row!important"},".MJXp-mtd":{display:"table-cell!important","text-align":"center",padding:".5em 0 0 .5em"},".MJXp-mtr > .MJXp-mtd:first-child":{"padding-left":0},".MJXp-mtr:first-child > .MJXp-mtd":{"padding-top":0},".MJXp-mlabeledtr":{display:"table-row!important"},".MJXp-mlabeledtr > .MJXp-mtd:first-child":{"padding-left":0},".MJXp-mlabeledtr:first-child > .MJXp-mtd":{"padding-top":0},".MJXp-merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"1px 3px","font-style":"normal","font-size":"90%"}};(function(){for(var n=0;n<10;n++){var o="scaleX(."+n+")";m[".MJXp-scale"+n]={"-webkit-transform":o,"-moz-transform":o,"-ms-transform":o,"-o-transform":o,transform:o}}})();var k=1000000;var c="V",l="H";g.Augment({settings:b.config.menuSettings,config:{styles:m},hideProcessedMath:false,maxStretchyParts:1000,Config:function(){if(!this.require){this.require=[]}this.SUPER(arguments).Config.call(this);var n=this.settings;if(n.scale){this.config.scale=n.scale}this.require.push(MathJax.OutputJax.extensionDir+"/MathEvents.js")},Startup:function(){j=MathJax.Extension.MathEvents.Event;a=MathJax.Extension.MathEvents.Touch;d=MathJax.Extension.MathEvents.Hover;this.ContextMenu=j.ContextMenu;this.Mousedown=j.AltContextMenu;this.Mouseover=d.Mouseover;this.Mouseout=d.Mouseout;this.Mousemove=d.Mousemove;var n=e.addElement(document.body,"div",{style:{width:"5in"}});this.pxPerInch=n.offsetWidth/5;n.parentNode.removeChild(n);return i.Styles(this.config.styles,["InitializePHTML",this])},InitializePHTML:function(){},preTranslate:function(p){var s=p.jax[this.id],t,q=s.length,u,r,v,o,n;for(t=0;tthis.PHTML.h){this.PHTML.h=q.PHTML.h}if(q.PHTML.d>this.PHTML.d){this.PHTML.d=q.PHTML.d}if(q.PHTML.t>this.PHTML.t){this.PHTML.t=q.PHTML.t}if(q.PHTML.b>this.PHTML.b){this.PHTML.b=q.PHTML.b}}}else{if(n.forceChild){e.addElement(p,"span")}}},PHTMLstretchChild:function(q,p,s){var r=this.data[q];if(r&&r.PHTMLcanStretch("Vertical",p,s)){var t=this.PHTML,o=r.PHTML,n=o.w;r.PHTMLstretchV(p,s);t.w+=o.w-n;if(o.h>t.h){t.h=o.h}if(o.d>t.d){t.d=o.d}}},PHTMLcreateSpan:function(n){if(!this.PHTML){this.PHTML={}}this.PHTML={w:0,h:0,d:0,l:0,r:0,t:0,b:0};if(this.inferred){return n}if(this.type==="mo"&&this.data.join("")==="\u222B"){g.lastIsInt=true}else{if(this.type!=="mspace"||this.width!=="negativethinmathspace"){g.lastIsInt=false}}if(!this.PHTMLspanID){this.PHTMLspanID=g.GetID()}var o=(this.id||"MJXp-Span-"+this.PHTMLspanID);return e.addElement(n,"span",{className:"MJXp-"+this.type,id:o})},PHTMLspanElement:function(){if(!this.PHTMLspanID){return null}return document.getElementById(this.id||"MJXp-Span-"+this.PHTMLspanID)},PHTMLhandleToken:function(o){var n=this.getValues("mathvariant");if(n.mathvariant!==h.VARIANT.NORMAL){o.className+=" "+g.VARIANT[n.mathvariant]}},PHTMLhandleStyle:function(n){if(this.style){n.style.cssText=this.style}},PHTMLhandleColor:function(n){if(this.mathcolor){n.style.color=this.mathcolor}if(this.mathbackground){n.style.backgroundColor=this.mathbackground}},PHTMLhandleScriptlevel:function(n){var o=this.Get("scriptlevel");if(o){n.className+=" MJXp-script"}},PHTMLhandleText:function(y,A){var v,p;var z=0,o=0,q=0;for(var s=0,r=A.length;s=55296&&p<56319){s++;p=(((p-55296)<<10)+(A.charCodeAt(s)-56320))+65536}var t=0.7,u=0.22,x=0.5;if(p<127){if(v.match(/[A-Za-ehik-or-xz0-9]/)){u=0}if(v.match(/[A-HK-Z]/)){x=0.67}else{if(v.match(/[IJ]/)){x=0.36}}if(v.match(/[acegm-su-z]/)){t=0.45}else{if(v.match(/[ij]/)){t=0.75}}if(v.match(/[ijlt]/)){x=0.28}}if(g.DELIMITERS[v]){x=g.DELIMITERS[v].w||0.4}if(t>z){z=t}if(u>o){o=u}q+=x}if(!this.CHML){this.PHTML={}}this.PHTML={h:0.9,d:0.3,w:q,l:0,r:0,t:z,b:o};e.addText(y,A)},PHTMLbboxFor:function(o){if(this.data[o]&&this.data[o].PHTML){return this.data[o].PHTML}return{w:0,h:0,d:0,l:0,r:0,t:0,b:0}},PHTMLcanStretch:function(q,o,p){if(this.isEmbellished()){var n=this.Core();if(n&&n!==this){return n.PHTMLcanStretch(q,o,p)}}return false},PHTMLstretchV:function(n,o){},PHTMLstretchH:function(n){},CoreParent:function(){var n=this;while(n&&n.isEmbellished()&&n.CoreMO()===this&&!n.isa(h.math)){n=n.Parent()}return n},CoreText:function(n){if(!n){return""}if(n.isEmbellished()){return n.CoreMO().data.join("")}while((n.isa(h.mrow)||n.isa(h.TeXAtom)||n.isa(h.mstyle)||n.isa(h.mphantom))&&n.data.length===1&&n.data[0]){n=n.data[0]}if(!n.isToken){return""}else{return n.data.join("")}}});h.chars.Augment({toPreviewHTML:function(n){var o=this.toString().replace(/[\u2061-\u2064]/g,"");this.PHTMLhandleText(n,o)}});h.entity.Augment({toPreviewHTML:function(n){var o=this.toString().replace(/[\u2061-\u2064]/g,"");this.PHTMLhandleText(n,o)}});h.math.Augment({toPreviewHTML:function(n){n=this.PHTMLdefaultSpan(n);if(this.Get("display")==="block"){n.className+=" MJXp-display"}return n}});h.mo.Augment({toPreviewHTML:function(o){o=this.PHTMLdefaultSpan(o);this.PHTMLadjustAccent(o);var n=this.getValues("lspace","rspace","scriptlevel","displaystyle","largeop");if(n.scriptlevel===0){this.PHTML.l=g.length2em(n.lspace);this.PHTML.r=g.length2em(n.rspace);o.style.marginLeft=g.Em(this.PHTML.l);o.style.marginRight=g.Em(this.PHTML.r)}else{this.PHTML.l=0.15;this.PHTML.r=0.1}if(n.displaystyle&&n.largeop){var p=e.Element("span",{className:"MJXp-largeop"});p.appendChild(o.firstChild);o.appendChild(p);this.PHTML.h*=1.2;this.PHTML.d*=1.2;if(this.data.join("")==="\u222B"){p.className+=" MJXp-int"}}return o},PHTMLadjustAccent:function(p){var o=this.CoreParent();if(o&&o.isa(h.munderover)&&this.CoreText(o.data[o.base]).length===1){var q=o.data[o.over],n=o.data[o.under];var s=this.data.join(""),r;if(q&&this===q.CoreMO()&&o.Get("accent")){r=g.REMAPACCENT[s]}else{if(n&&this===n.CoreMO()&&o.Get("accentunder")){r=g.REMAPACCENTUNDER[s]}}if(r){s=p.innerHTML=r}if(s.match(/[\u02C6-\u02DC\u00A8]/)){this.PHTML.acc=-0.52}else{if(s==="\u2192"){this.PHTML.acc=-0.15;this.PHTML.vec=true}}}},PHTMLcanStretch:function(q,o,p){if(!this.Get("stretchy")){return false}var r=this.data.join("");if(r.length>1){return false}r=g.DELIMITERS[r];var n=(r&&r.dir===q.substr(0,1));if(n){n=(this.PHTML.h!==o||this.PHTML.d!==p||(this.Get("minsize",true)||this.Get("maxsize",true)))}return n},PHTMLstretchV:function(p,u){var o=this.PHTMLspanElement(),t=this.PHTML;var n=this.getValues("symmetric","maxsize","minsize");if(n.symmetric){l=2*Math.max(p-0.25,u+0.25)}else{l=p+u}n.maxsize=g.length2em(n.maxsize,t.h+t.d);n.minsize=g.length2em(n.minsize,t.h+t.d);l=Math.max(n.minsize,Math.min(n.maxsize,l));var s=l/(t.h+t.d-0.3);var q=e.Element("span",{style:{"font-size":g.Em(s)}});if(s>1.25){var r=Math.ceil(1.25/s*10);q.className="MJXp-right MJXp-scale"+r;q.style.marginLeft=g.Em(t.w*(r/10-1)+0.07);t.w*=s*r/10}q.appendChild(o.firstChild);o.appendChild(q);if(n.symmetric){o.style.verticalAlign=g.Em(0.25*(1-s))}}});h.mspace.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q);var o=this.getValues("height","depth","width");var n=g.length2em(o.width),p=g.length2em(o.height),s=g.length2em(o.depth);var r=this.PHTML;r.w=n;r.h=p;r.d=s;if(n<0){if(!g.lastIsInt){q.style.marginLeft=g.Em(n)}n=0}q.style.width=g.Em(n);q.style.height=g.Em(p+s);if(s){q.style.verticalAlign=g.Em(-s)}return q}});h.mpadded.Augment({toPreviewHTML:function(u){u=this.PHTMLdefaultSpan(u,{childSpans:true,className:"MJXp-box",forceChild:true});var o=u.firstChild;var v=this.getValues("width","height","depth","lspace","voffset");var s=this.PHTMLdimen(v.lspace);var q=0,n=0,t=s.len,r=-s.len,p=0;if(v.width!==""){s=this.PHTMLdimen(v.width,"w",0);if(s.pm){r+=s.len}else{u.style.width=g.Em(s.len)}}if(v.height!==""){s=this.PHTMLdimen(v.height,"h",0);if(!s.pm){q+=-this.PHTMLbboxFor(0).h}q+=s.len}if(v.depth!==""){s=this.PHTMLdimen(v.depth,"d",0);if(!s.pm){n+=-this.PHTMLbboxFor(0).d;p+=-s.len}n+=s.len}if(v.voffset!==""){s=this.PHTMLdimen(v.voffset);q-=s.len;n+=s.len;p+=s.len}if(q){o.style.marginTop=g.Em(q)}if(n){o.style.marginBottom=g.Em(n)}if(t){o.style.marginLeft=g.Em(t)}if(r){o.style.marginRight=g.Em(r)}if(p){u.style.verticalAlign=g.Em(p)}return u},PHTMLdimen:function(q,r,n){if(n==null){n=-k}q=String(q);var o=q.match(/width|height|depth/);var p=(o?this.PHTML[o[0].charAt(0)]:(r?this.PHTML[r]:0));return{len:g.length2em(q,p)||0,pm:!!q.match(/^[-+]/)}}});h.munderover.Augment({toPreviewHTML:function(r){var t=this.getValues("displaystyle","accent","accentunder","align");var n=this.data[this.base];if(!t.displaystyle&&n!=null&&(n.movablelimits||n.CoreMO().Get("movablelimits"))){r=h.msubsup.prototype.toPreviewHTML.call(this,r);r.className=r.className.replace(/munderover/,"msubsup");return r}r=this.PHTMLdefaultSpan(r,{childSpans:true,className:"",noBBox:true});var p=this.PHTMLbboxFor(this.over),v=this.PHTMLbboxFor(this.under),u=this.PHTMLbboxFor(this.base),s=this.PHTML,o=p.acc;if(this.data[this.over]){if(r.lastChild.firstChild){r.lastChild.firstChild.style.marginLeft=p.l=r.lastChild.firstChild.style.marginRight=p.r=0}var q=e.Element("span",{},[["span",{className:"MJXp-over"}]]);q.firstChild.appendChild(r.lastChild);if(r.childNodes.length>(this.data[this.under]?1:0)){q.firstChild.appendChild(r.firstChild)}this.data[this.over].PHTMLhandleScriptlevel(q.firstChild.firstChild);if(o!=null){if(p.vec){q.firstChild.firstChild.firstChild.style.fontSize="60%";p.h*=0.6;p.d*=0.6;p.w*=0.6}o=o-p.d+0.1;if(u.t!=null){o+=u.t-u.h}q.firstChild.firstChild.style.marginBottom=g.Em(o)}if(r.firstChild){r.insertBefore(q,r.firstChild)}else{r.appendChild(q)}}if(this.data[this.under]){if(r.lastChild.firstChild){r.lastChild.firstChild.style.marginLeft=v.l=r.lastChild.firstChild.marginRight=v.r=0}this.data[this.under].PHTMLhandleScriptlevel(r.lastChild)}s.w=Math.max(0.8*p.w,0.8*v.w,u.w);s.h=0.8*(p.h+p.d+(o||0))+u.h;s.d=u.d+0.8*(v.h+v.d);return r}});h.msubsup.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q,{noBBox:true});if(!this.data[this.base]){if(q.firstChild){q.insertBefore(e.Element("span"),q.firstChild)}else{q.appendChild(e.Element("span"))}}var s=this.data[this.base],p=this.data[this.sub],n=this.data[this.sup];if(!s){s={bbox:{h:0.8,d:0.2}}}q.firstChild.style.marginRight=".05em";var o=Math.max(0.4,s.PHTML.h-0.4),u=Math.max(0.2,s.PHTML.d+0.1);var t=this.PHTML;if(n&&p){var r=e.Element("span",{className:"MJXp-script-box",style:{height:g.Em(o+n.PHTML.h*0.8+u+p.PHTML.d*0.8),"vertical-align":g.Em(-u-p.PHTML.d*0.8)}},[["span",{},[["span",{},[["span",{style:{"margin-bottom":g.Em(-(n.PHTML.d-0.05))}}]]]]],["span",{},[["span",{},[["span",{style:{"margin-top":g.Em(-(n.PHTML.h-0.05))}}]]]]]]);p.PHTMLhandleScriptlevel(r.firstChild);n.PHTMLhandleScriptlevel(r.lastChild);r.firstChild.firstChild.firstChild.appendChild(q.lastChild);r.lastChild.firstChild.firstChild.appendChild(q.lastChild);q.appendChild(r);t.h=Math.max(s.PHTML.h,n.PHTML.h*0.8+o);t.d=Math.max(s.PHTML.d,p.PHTML.d*0.8+u);t.w=s.PHTML.w+Math.max(n.PHTML.w,p.PHTML.w)+0.07}else{if(n){q.lastChild.style.verticalAlign=g.Em(o);n.PHTMLhandleScriptlevel(q.lastChild);t.h=Math.max(s.PHTML.h,n.PHTML.h*0.8+o);t.d=Math.max(s.PHTML.d,n.PHTML.d*0.8-o);t.w=s.PHTML.w+n.PHTML.w+0.07}else{if(p){q.lastChild.style.verticalAlign=g.Em(-u);p.PHTMLhandleScriptlevel(q.lastChild);t.h=Math.max(s.PHTML.h,p.PHTML.h*0.8-u);t.d=Math.max(s.PHTML.d,p.PHTML.d*0.8+u);t.w=s.PHTML.w+p.PHTML.w+0.07}}}return q}});h.mfrac.Augment({toPreviewHTML:function(r){r=this.PHTMLdefaultSpan(r,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});var o=this.getValues("linethickness","displaystyle");if(!o.displaystyle){if(this.data[0]){this.data[0].PHTMLhandleScriptlevel(r.firstChild)}if(this.data[1]){this.data[1].PHTMLhandleScriptlevel(r.lastChild)}}var n=e.Element("span",{className:"MJXp-box"},[["span",{className:"MJXp-denom"},[["span",{},[["span",{className:"MJXp-rule",style:{height:"1em"}}]]],["span"]]]]);n.firstChild.lastChild.appendChild(r.lastChild);r.appendChild(n);var s=this.PHTMLbboxFor(0),p=this.PHTMLbboxFor(1),v=this.PHTML;v.w=Math.max(s.w,p.w)*0.8;v.h=s.h+s.d+0.1+0.25;v.d=p.h+p.d-0.25;v.l=v.r=0.125;o.linethickness=Math.max(0,g.length2em(o.linethickness||"0",0));if(o.linethickness){var u=n.firstChild.firstChild.firstChild;var q=g.Em(o.linethickness);u.style.borderTop="none";u.style.borderBottom=(o.linethickness<0.15?"1px":q)+" solid";u.style.margin=q+" 0";q=o.linethickness;n.style.marginTop=g.Em(3*q-1.2);r.style.verticalAlign=g.Em(1.5*q+0.1);v.h+=1.5*q-0.1;v.d+=1.5*q}else{n.style.marginTop="-.7em"}return r}});h.msqrt.Augment({toPreviewHTML:function(n){n=this.PHTMLdefaultSpan(n,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});this.PHTMLlayoutRoot(n,n.firstChild);return n},PHTMLlayoutRoot:function(u,n){var v=this.PHTMLbboxFor(0);var q=Math.ceil((v.h+v.d+0.14)*100),w=g.Em(14/q);var r=e.Element("span",{className:"MJXp-surd"},[["span",{style:{"font-size":q+"%","margin-top":w}},["\u221A"]]]);var s=e.Element("span",{className:"MJXp-root"},[["span",{className:"MJXp-rule",style:{"border-top":".08em solid"}}]]);var p=(1.2/2.2)*q/100;if(q>150){var o=Math.ceil(150/q*10);r.firstChild.className="MJXp-right MJXp-scale"+o;r.firstChild.style.marginLeft=g.Em(p*(o/10-1)/q*100);p=p*o/10;s.firstChild.style.borderTopWidth=g.Em(0.08/Math.sqrt(o/10))}s.appendChild(n);u.appendChild(r);u.appendChild(s);this.PHTML.h=v.h+0.18;this.PHTML.d=v.d;this.PHTML.w=v.w+p;return u}});h.mroot.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});var p=this.PHTMLbboxFor(1),n=q.removeChild(q.lastChild);var t=this.PHTMLlayoutRoot(e.Element("span"),q.firstChild);n.className="MJXp-script";var u=parseInt(t.firstChild.firstChild.style.fontSize);var o=0.55*(u/120)+p.d*0.8,s=-0.6*(u/120);if(u>150){s*=0.95*Math.ceil(150/u*10)/10}n.style.marginRight=g.Em(s);n.style.verticalAlign=g.Em(o);if(-s>p.w*0.8){n.style.marginLeft=g.Em(-s-p.w*0.8)}q.appendChild(n);q.appendChild(t);this.PHTML.w+=Math.max(0,p.w*0.8+s);this.PHTML.h=Math.max(this.PHTML.h,p.h*0.8+o);return q},PHTMLlayoutRoot:h.msqrt.prototype.PHTMLlayoutRoot});h.mfenced.Augment({toPreviewHTML:function(q){q=this.PHTMLcreateSpan(q);this.PHTMLhandleStyle(q);this.PHTMLhandleColor(q);this.addFakeNodes();this.PHTMLaddChild(q,"open",{});for(var p=0,n=this.data.length;ps){s=x.w}}}var o=this.PHTML;o.w=s;o.h=y/2+0.25;o.d=y/2-0.25;o.l=o.r=0.125;return E}});h.mlabeledtr.Augment({PHTMLdefaultSpan:function(q,o){if(!o){o={}}q=this.PHTMLcreateSpan(q);this.PHTMLhandleStyle(q);this.PHTMLhandleColor(q);if(this.isToken){this.PHTMLhandleToken(q)}for(var p=1,n=this.data.length;p/g,"")}catch(l){g.copyAttributes.id=true;if(!l.restart){throw l}return MathJax.Callback.After(["HandleMML",this,n],l.restart)}o.setAttribute("data-mathml",j);k=f.addElement(o,"span",{isMathJax:true,unselectable:"on",className:"MJX_Assistive_MathML"+(i.root.Get("display")==="block"?" MJX_Assistive_MathML_Block":"")});try{k.innerHTML=j}catch(l){}o.style.position="relative";o.setAttribute("role","presentation");o.firstChild.setAttribute("aria-hidden","true");k.setAttribute("role","presentation")}n.i++}g.copyAttributes.id=true;n.callback()}};b.Startup.signal.Post("AssistiveMML Ready")})(MathJax.Ajax,MathJax.Callback,MathJax.Hub,MathJax.HTML);MathJax.Callback.Queue(["Require",MathJax.Ajax,"[MathJax]/extensions/toMathML.js"],["loadComplete",MathJax.Ajax,"[MathJax]/extensions/AssistiveMML.js"],function(){MathJax.Hub.Register.StartupHook("End Config",["Config",MathJax.Extension.AssistiveMML])}); +!function(i, e) { + var s, u, a = i.config.menuSettings, t = Function.prototype.bind ? function(e, t) { + return e.bind(t); + } : function(e, t) { + return function() { + e.apply(t, arguments); + }; + }, o = Object.keys || function(e) { + var t = []; + for (var n in e) e.hasOwnProperty(n) && t.push(n); + return t; + }, n = MathJax.Ajax.config.path; + n.a11y || (n.a11y = i.config.root + "/extensions/a11y"); + var l = e["accessibility-menu"] = { + version: "1.6.0", + prefix: "", + defaults: {}, + modules: [], + MakeOption: function(e) { + return l.prefix + e; + }, + GetOption: function(e) { + return a[l.MakeOption(e)]; + }, + AddDefaults: function() { + for (var e, t = o(l.defaults), n = 0; e = t[n]; n++) { + var i = l.MakeOption(e); + void 0 === a[i] && (a[i] = l.defaults[e]); + } + }, + AddMenu: function() { + for (var e, t = Array(this.modules.length), n = 0; e = this.modules[n]; n++) t[n] = e.placeHolder; + var i, a, o = u.FindId("Accessibility"); + o ? (t.unshift(s.RULE()), o.submenu.items.push.apply(o.submenu.items, t)) : ((i = (u.FindId("Settings", "Renderer") || {}).submenu) && (t.unshift(s.RULE()), + t.unshift(i.items.pop()), t.unshift(i.items.pop())), t.unshift("Accessibility"), + o = s.SUBMENU.apply(s.SUBMENU, t), (a = u.IndexOfId("Locale")) ? u.items.splice(a, 0, o) : u.items.push(s.RULE(), o)); + }, + Register: function(e) { + l.defaults[e.option] = !1, l.modules.push(e); + }, + Startup: function() { + s = MathJax.Menu.ITEM, u = MathJax.Menu.menu; + for (var e, t = 0; e = this.modules[t]; t++) e.CreateMenu(); + this.AddMenu(); + }, + LoadExtensions: function() { + for (var e, t = [], n = 0; e = this.modules[n]; n++) a[e.option] && t.push(e.module); + return t.length ? i.Startup.loadArray(t) : null; + } + }, r = MathJax.Extension.ModuleLoader = MathJax.Object.Subclass({ + option: "", + name: [ "", "" ], + module: "", + placeHolder: null, + submenu: !1, + extension: null, + Init: function(e, t, n, i, a) { + this.option = e, this.name = [ t.replace(/ /g, ""), t ], this.module = n, this.extension = i, + this.submenu = a || !1; + }, + CreateMenu: function() { + var e = t(this.Load, this); + this.submenu ? this.placeHolder = s.SUBMENU(this.name, s.CHECKBOX([ "Activate", "Activate" ], l.MakeOption(this.option), { + action: e + }), s.RULE(), s.COMMAND([ "OptionsWhenActive", "(Options when Active)" ], null, { + disabled: !0 + })) : this.placeHolder = s.CHECKBOX(this.name, l.MakeOption(this.option), { + action: e + }); + }, + Load: function() { + i.Queue([ "Require", MathJax.Ajax, this.module, [ "Enable", this ] ]); + }, + Enable: function(e) { + var t = MathJax.Extension[this.extension]; + t && (t.Enable(!0, !0), MathJax.Menu.saveCookie()); + } + }); + l.Register(r("collapsible", "Collapsible Math", "[a11y]/collapsible.js", "collapsible")), + l.Register(r("autocollapse", "Auto Collapse", "[a11y]/auto-collapse.js", "auto-collapse")), + l.Register(r("explorer", "Explorer", "[a11y]/explorer.js", "explorer", !0)), l.AddDefaults(), + i.Register.StartupHook("End Extensions", function() { + i.Register.StartupHook("MathMenu Ready", function() { + l.Startup(), i.Startup.signal.Post("Accessibility Menu Ready"); + }, 5); + }, 5), MathJax.Hub.Register.StartupHook("End Cookie", function() { + MathJax.Callback.Queue([ "LoadExtensions", l ], [ "loadComplete", MathJax.Ajax, "[a11y]/accessibility-menu.js" ]); + }); +}(MathJax.Hub, MathJax.Extension);MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_HTMLorMML.js"); diff --git a/doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff b/doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..736c1311a516bb3d96189cedd80380aa2eb62aff GIT binary patch literal 34164 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 FUN5Rh;=5RjIyrRR6BsHn2czrOze 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 MPXGV_0MYK{Y`FKg?f?J) literal 0 HcmV?d00001 diff --git a/doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff b/doc/ext/mathjax-2.7.9/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..23719065d68a129cb65e5997b79dc60fbfae8bb5 GIT binary patch literal 5792 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 YD5Rt{wXVu+sD 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":c.BIN5,"//":[1,1,b.BIN],"/=":c.BIN4,":=":c.BIN4,"<=":c.BIN5,"<>":[1,1,b.BIN],"==":c.BIN4,">=":c.BIN5,"@":c.ORD11,"||":[2,2,b.BIN,{fence:true,stretchy:true,symmetric:true}],"|||":[2,2,b.ORD,{fence:true,stretchy:true,symmetric:true}]}}});MathJax.Ajax.loadComplete(a.optableDir+"/BasicLatin.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiacritMarks.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiacritMarks.js new file mode 100644 index 0000000..34ae0ba --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiacritMarks.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/CombDiacritMarks.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{postfix:{"\u0311":c.ACCENT}}});MathJax.Ajax.loadComplete(a.optableDir+"/CombDiacritMarks.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiactForSymbols.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiactForSymbols.js new file mode 100644 index 0000000..a5c7237 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/CombDiactForSymbols.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/CombDiactForSymbols.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{postfix:{"\u20DB":c.ACCENT,"\u20DC":c.ACCENT}}});MathJax.Ajax.loadComplete(a.optableDir+"/CombDiactForSymbols.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/Dingbats.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/Dingbats.js new file mode 100644 index 0000000..6b3dff6 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/Dingbats.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/Dingbats.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u2772":c.OPEN},postfix:{"\u2773":c.CLOSE}}});MathJax.Ajax.loadComplete(a.optableDir+"/Dingbats.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeneralPunctuation.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeneralPunctuation.js new file mode 100644 index 0000000..7828726 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeneralPunctuation.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/GeneralPunctuation.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u2016":[0,0,b.ORD,{fence:true,stretchy:true}],"\u2018":[0,0,b.OPEN,{fence:true}],"\u201C":[0,0,b.OPEN,{fence:true}]},postfix:{"\u2016":[0,0,b.ORD,{fence:true,stretchy:true}],"\u2019":[0,0,b.CLOSE,{fence:true}],"\u201D":[0,0,b.CLOSE,{fence:true}]}}});MathJax.Ajax.loadComplete(a.optableDir+"/GeneralPunctuation.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeometricShapes.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeometricShapes.js new file mode 100644 index 0000000..74579dd --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GeometricShapes.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/GeometricShapes.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{infix:{"\u25A0":c.BIN3,"\u25A1":c.BIN3,"\u25AA":c.BIN3,"\u25AB":c.BIN3,"\u25AD":c.BIN3,"\u25AE":c.BIN3,"\u25AF":c.BIN3,"\u25B0":c.BIN3,"\u25B1":c.BIN3,"\u25B2":c.BIN4,"\u25B4":c.BIN4,"\u25B6":c.BIN4,"\u25B7":c.BIN4,"\u25B8":c.BIN4,"\u25BC":c.BIN4,"\u25BE":c.BIN4,"\u25C0":c.BIN4,"\u25C1":c.BIN4,"\u25C2":c.BIN4,"\u25C4":c.BIN4,"\u25C5":c.BIN4,"\u25C6":c.BIN4,"\u25C7":c.BIN4,"\u25C8":c.BIN4,"\u25C9":c.BIN4,"\u25CC":c.BIN4,"\u25CD":c.BIN4,"\u25CE":c.BIN4,"\u25CF":c.BIN4,"\u25D6":c.BIN4,"\u25D7":c.BIN4,"\u25E6":c.BIN4}}});MathJax.Ajax.loadComplete(a.optableDir+"/GeometricShapes.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GreekAndCoptic.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GreekAndCoptic.js new file mode 100644 index 0000000..8d0a8af --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/GreekAndCoptic.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/GreekAndCoptic.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{infix:{"\u03F6":c.REL}}});MathJax.Ajax.loadComplete(a.optableDir+"/GreekAndCoptic.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/Latin1Supplement.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/Latin1Supplement.js new file mode 100644 index 0000000..c7dd17a --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/Latin1Supplement.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/Latin1Supplement.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{postfix:{"\u00B0":c.ORD,"\u00B4":c.ACCENT,"\u00B8":c.ACCENT}}});MathJax.Ajax.loadComplete(a.optableDir+"/Latin1Supplement.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/LetterlikeSymbols.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/LetterlikeSymbols.js new file mode 100644 index 0000000..f754924 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/LetterlikeSymbols.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/LetterlikeSymbols.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u2145":c.ORD21,"\u2146":[2,0,b.ORD]}}});MathJax.Ajax.loadComplete(a.optableDir+"/LetterlikeSymbols.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MathOperators.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MathOperators.js new file mode 100644 index 0000000..87da948 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MathOperators.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/MathOperators.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u2204":c.ORD21,"\u221B":c.ORD11,"\u221C":c.ORD11,"\u2221":c.ORD,"\u2222":c.ORD,"\u222C":c.INTEGRAL,"\u222D":c.INTEGRAL,"\u222F":c.INTEGRAL,"\u2230":c.INTEGRAL,"\u2231":c.INTEGRAL,"\u2232":c.INTEGRAL,"\u2233":c.INTEGRAL},infix:{"\u2201":[1,2,b.ORD],"\u2206":c.BIN3,"\u220A":c.REL,"\u220C":c.REL,"\u220D":c.REL,"\u220E":c.BIN3,"\u2214":c.BIN4,"\u221F":c.REL,"\u2224":c.REL,"\u2226":c.REL,"\u2234":c.REL,"\u2235":c.REL,"\u2236":c.REL,"\u2237":c.REL,"\u2238":c.BIN4,"\u2239":c.REL,"\u223A":c.BIN4,"\u223B":c.REL,"\u223D":c.REL,"\u223D\u0331":c.BIN3,"\u223E":c.REL,"\u223F":c.BIN3,"\u2241":c.REL,"\u2242":c.REL,"\u2242\u0338":c.REL,"\u2244":c.REL,"\u2246":c.REL,"\u2247":c.REL,"\u2249":c.REL,"\u224A":c.REL,"\u224B":c.REL,"\u224C":c.REL,"\u224E":c.REL,"\u224E\u0338":c.REL,"\u224F":c.REL,"\u224F\u0338":c.REL,"\u2251":c.REL,"\u2252":c.REL,"\u2253":c.REL,"\u2254":c.REL,"\u2255":c.REL,"\u2256":c.REL,"\u2257":c.REL,"\u2258":c.REL,"\u2259":c.REL,"\u225A":c.REL,"\u225C":c.REL,"\u225D":c.REL,"\u225E":c.REL,"\u225F":c.REL,"\u2262":c.REL,"\u2263":c.REL,"\u2266":c.REL,"\u2266\u0338":c.REL,"\u2267":c.REL,"\u2268":c.REL,"\u2269":c.REL,"\u226A\u0338":c.REL,"\u226B\u0338":c.REL,"\u226C":c.REL,"\u226D":c.REL,"\u226E":c.REL,"\u226F":c.REL,"\u2270":c.REL,"\u2271":c.REL,"\u2272":c.REL,"\u2273":c.REL,"\u2274":c.REL,"\u2275":c.REL,"\u2276":c.REL,"\u2277":c.REL,"\u2278":c.REL,"\u2279":c.REL,"\u227C":c.REL,"\u227D":c.REL,"\u227E":c.REL,"\u227F":c.REL,"\u227F\u0338":c.REL,"\u2280":c.REL,"\u2281":c.REL,"\u2282\u20D2":c.REL,"\u2283\u20D2":c.REL,"\u2284":c.REL,"\u2285":c.REL,"\u2288":c.REL,"\u2289":c.REL,"\u228A":c.REL,"\u228B":c.REL,"\u228C":c.BIN4,"\u228D":c.BIN4,"\u228F":c.REL,"\u228F\u0338":c.REL,"\u2290":c.REL,"\u2290\u0338":c.REL,"\u229A":c.BIN4,"\u229B":c.BIN4,"\u229C":c.BIN4,"\u229D":c.BIN4,"\u229E":c.BIN4,"\u229F":c.BIN4,"\u22A0":c.BIN4,"\u22A1":c.BIN4,"\u22A6":c.REL,"\u22A7":c.REL,"\u22A9":c.REL,"\u22AA":c.REL,"\u22AB":c.REL,"\u22AC":c.REL,"\u22AD":c.REL,"\u22AE":c.REL,"\u22AF":c.REL,"\u22B0":c.REL,"\u22B1":c.REL,"\u22B2":c.REL,"\u22B3":c.REL,"\u22B4":c.REL,"\u22B5":c.REL,"\u22B6":c.REL,"\u22B7":c.REL,"\u22B8":c.REL,"\u22B9":c.REL,"\u22BA":c.BIN4,"\u22BB":c.BIN4,"\u22BC":c.BIN4,"\u22BD":c.BIN4,"\u22BE":c.BIN3,"\u22BF":c.BIN3,"\u22C7":c.BIN4,"\u22C9":c.BIN4,"\u22CA":c.BIN4,"\u22CB":c.BIN4,"\u22CC":c.BIN4,"\u22CD":c.REL,"\u22CE":c.BIN4,"\u22CF":c.BIN4,"\u22D0":c.REL,"\u22D1":c.REL,"\u22D2":c.BIN4,"\u22D3":c.BIN4,"\u22D4":c.REL,"\u22D5":c.REL,"\u22D6":c.REL,"\u22D7":c.REL,"\u22D8":c.REL,"\u22D9":c.REL,"\u22DA":c.REL,"\u22DB":c.REL,"\u22DC":c.REL,"\u22DD":c.REL,"\u22DE":c.REL,"\u22DF":c.REL,"\u22E0":c.REL,"\u22E1":c.REL,"\u22E2":c.REL,"\u22E3":c.REL,"\u22E4":c.REL,"\u22E5":c.REL,"\u22E6":c.REL,"\u22E7":c.REL,"\u22E8":c.REL,"\u22E9":c.REL,"\u22EA":c.REL,"\u22EB":c.REL,"\u22EC":c.REL,"\u22ED":c.REL,"\u22F0":c.REL,"\u22F2":c.REL,"\u22F3":c.REL,"\u22F4":c.REL,"\u22F5":c.REL,"\u22F6":c.REL,"\u22F7":c.REL,"\u22F8":c.REL,"\u22F9":c.REL,"\u22FA":c.REL,"\u22FB":c.REL,"\u22FC":c.REL,"\u22FD":c.REL,"\u22FE":c.REL,"\u22FF":c.REL}}});MathJax.Ajax.loadComplete(a.optableDir+"/MathOperators.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsA.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsA.js new file mode 100644 index 0000000..697d890 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsA.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/MiscMathSymbolsA.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u27E6":c.OPEN,"\u27EA":c.OPEN,"\u27EC":c.OPEN},postfix:{"\u27E7":c.CLOSE,"\u27EB":c.CLOSE,"\u27ED":c.CLOSE}}});MathJax.Ajax.loadComplete(a.optableDir+"/MiscMathSymbolsA.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsB.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsB.js new file mode 100644 index 0000000..d64e809 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscMathSymbolsB.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/MiscMathSymbolsB.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u2980":[0,0,b.ORD,{fence:true,stretchy:true}],"\u2983":c.OPEN,"\u2985":c.OPEN,"\u2987":c.OPEN,"\u2989":c.OPEN,"\u298B":c.OPEN,"\u298D":c.OPEN,"\u298F":c.OPEN,"\u2991":c.OPEN,"\u2993":c.OPEN,"\u2995":c.OPEN,"\u2997":c.OPEN,"\u29FC":c.OPEN},postfix:{"\u2980":[0,0,b.ORD,{fence:true,stretchy:true}],"\u2984":c.CLOSE,"\u2986":c.CLOSE,"\u2988":c.CLOSE,"\u298A":c.CLOSE,"\u298C":c.CLOSE,"\u298E":c.CLOSE,"\u2990":c.CLOSE,"\u2992":c.CLOSE,"\u2994":c.CLOSE,"\u2996":c.CLOSE,"\u2998":c.CLOSE,"\u29FD":c.CLOSE},infix:{"\u2981":c.BIN3,"\u2982":c.BIN3,"\u2999":c.BIN3,"\u299A":c.BIN3,"\u299B":c.BIN3,"\u299C":c.BIN3,"\u299D":c.BIN3,"\u299E":c.BIN3,"\u299F":c.BIN3,"\u29A0":c.BIN3,"\u29A1":c.BIN3,"\u29A2":c.BIN3,"\u29A3":c.BIN3,"\u29A4":c.BIN3,"\u29A5":c.BIN3,"\u29A6":c.BIN3,"\u29A7":c.BIN3,"\u29A8":c.BIN3,"\u29A9":c.BIN3,"\u29AA":c.BIN3,"\u29AB":c.BIN3,"\u29AC":c.BIN3,"\u29AD":c.BIN3,"\u29AE":c.BIN3,"\u29AF":c.BIN3,"\u29B0":c.BIN3,"\u29B1":c.BIN3,"\u29B2":c.BIN3,"\u29B3":c.BIN3,"\u29B4":c.BIN3,"\u29B5":c.BIN3,"\u29B6":c.BIN4,"\u29B7":c.BIN4,"\u29B8":c.BIN4,"\u29B9":c.BIN4,"\u29BA":c.BIN4,"\u29BB":c.BIN4,"\u29BC":c.BIN4,"\u29BD":c.BIN4,"\u29BE":c.BIN4,"\u29BF":c.BIN4,"\u29C0":c.REL,"\u29C1":c.REL,"\u29C2":c.BIN3,"\u29C3":c.BIN3,"\u29C4":c.BIN4,"\u29C5":c.BIN4,"\u29C6":c.BIN4,"\u29C7":c.BIN4,"\u29C8":c.BIN4,"\u29C9":c.BIN3,"\u29CA":c.BIN3,"\u29CB":c.BIN3,"\u29CC":c.BIN3,"\u29CD":c.BIN3,"\u29CE":c.REL,"\u29CF":c.REL,"\u29CF\u0338":c.REL,"\u29D0":c.REL,"\u29D0\u0338":c.REL,"\u29D1":c.REL,"\u29D2":c.REL,"\u29D3":c.REL,"\u29D4":c.REL,"\u29D5":c.REL,"\u29D6":c.BIN4,"\u29D7":c.BIN4,"\u29D8":c.BIN3,"\u29D9":c.BIN3,"\u29DB":c.BIN3,"\u29DC":c.BIN3,"\u29DD":c.BIN3,"\u29DE":c.REL,"\u29DF":c.BIN3,"\u29E0":c.BIN3,"\u29E1":c.REL,"\u29E2":c.BIN4,"\u29E3":c.REL,"\u29E4":c.REL,"\u29E5":c.REL,"\u29E6":c.REL,"\u29E7":c.BIN3,"\u29E8":c.BIN3,"\u29E9":c.BIN3,"\u29EA":c.BIN3,"\u29EB":c.BIN3,"\u29EC":c.BIN3,"\u29ED":c.BIN3,"\u29EE":c.BIN3,"\u29EF":c.BIN3,"\u29F0":c.BIN3,"\u29F1":c.BIN3,"\u29F2":c.BIN3,"\u29F3":c.BIN3,"\u29F4":c.REL,"\u29F5":c.BIN4,"\u29F6":c.BIN4,"\u29F7":c.BIN4,"\u29F8":c.BIN3,"\u29F9":c.BIN3,"\u29FA":c.BIN3,"\u29FB":c.BIN3,"\u29FE":c.BIN4,"\u29FF":c.BIN4}}});MathJax.Ajax.loadComplete(a.optableDir+"/MiscMathSymbolsB.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscSymbolsAndArrows.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscSymbolsAndArrows.js new file mode 100644 index 0000000..a81d06b --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscSymbolsAndArrows.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/MiscSymbolsAndArrows.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{infix:{"\u2B45":c.RELSTRETCH,"\u2B46":c.RELSTRETCH}}});MathJax.Ajax.loadComplete(a.optableDir+"/MiscSymbolsAndArrows.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscTechnical.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscTechnical.js new file mode 100644 index 0000000..17beef1 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/MiscTechnical.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/MiscTechnical.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{postfix:{"\u23B4":c.WIDEACCENT,"\u23B5":c.WIDEACCENT,"\u23DC":c.WIDEACCENT,"\u23DD":c.WIDEACCENT,"\u23E0":c.WIDEACCENT,"\u23E1":c.WIDEACCENT}}});MathJax.Ajax.loadComplete(a.optableDir+"/MiscTechnical.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SpacingModLetters.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SpacingModLetters.js new file mode 100644 index 0000000..ada071c --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SpacingModLetters.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/SpacingModLetters.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{postfix:{"\u02CD":c.WIDEACCENT,"\u02DA":c.ACCENT,"\u02DD":c.ACCENT,"\u02F7":c.WIDEACCENT}}});MathJax.Ajax.loadComplete(a.optableDir+"/SpacingModLetters.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SuppMathOperators.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SuppMathOperators.js new file mode 100644 index 0000000..52e875e --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SuppMathOperators.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/SuppMathOperators.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{prefix:{"\u2A03":c.OP,"\u2A05":c.OP,"\u2A07":c.OP,"\u2A08":c.OP,"\u2A09":c.OP,"\u2A0A":c.OP,"\u2A0B":c.INTEGRAL2,"\u2A0C":c.INTEGRAL,"\u2A0D":c.INTEGRAL2,"\u2A0E":c.INTEGRAL2,"\u2A0F":c.INTEGRAL2,"\u2A10":c.OP,"\u2A11":c.OP,"\u2A12":c.OP,"\u2A13":c.OP,"\u2A14":c.OP,"\u2A15":c.INTEGRAL2,"\u2A16":c.INTEGRAL2,"\u2A17":c.INTEGRAL2,"\u2A18":c.INTEGRAL2,"\u2A19":c.INTEGRAL2,"\u2A1A":c.INTEGRAL2,"\u2A1B":c.INTEGRAL2,"\u2A1C":c.INTEGRAL2,"\u2AFC":c.OP,"\u2AFF":c.OP},infix:{"\u2A1D":c.BIN3,"\u2A1E":c.BIN3,"\u2A1F":c.BIN3,"\u2A20":c.BIN3,"\u2A21":c.BIN3,"\u2A22":c.BIN4,"\u2A23":c.BIN4,"\u2A24":c.BIN4,"\u2A25":c.BIN4,"\u2A26":c.BIN4,"\u2A27":c.BIN4,"\u2A28":c.BIN4,"\u2A29":c.BIN4,"\u2A2A":c.BIN4,"\u2A2B":c.BIN4,"\u2A2C":c.BIN4,"\u2A2D":c.BIN4,"\u2A2E":c.BIN4,"\u2A30":c.BIN4,"\u2A31":c.BIN4,"\u2A32":c.BIN4,"\u2A33":c.BIN4,"\u2A34":c.BIN4,"\u2A35":c.BIN4,"\u2A36":c.BIN4,"\u2A37":c.BIN4,"\u2A38":c.BIN4,"\u2A39":c.BIN4,"\u2A3A":c.BIN4,"\u2A3B":c.BIN4,"\u2A3C":c.BIN4,"\u2A3D":c.BIN4,"\u2A3E":c.BIN4,"\u2A40":c.BIN4,"\u2A41":c.BIN4,"\u2A42":c.BIN4,"\u2A43":c.BIN4,"\u2A44":c.BIN4,"\u2A45":c.BIN4,"\u2A46":c.BIN4,"\u2A47":c.BIN4,"\u2A48":c.BIN4,"\u2A49":c.BIN4,"\u2A4A":c.BIN4,"\u2A4B":c.BIN4,"\u2A4C":c.BIN4,"\u2A4D":c.BIN4,"\u2A4E":c.BIN4,"\u2A4F":c.BIN4,"\u2A50":c.BIN4,"\u2A51":c.BIN4,"\u2A52":c.BIN4,"\u2A53":c.BIN4,"\u2A54":c.BIN4,"\u2A55":c.BIN4,"\u2A56":c.BIN4,"\u2A57":c.BIN4,"\u2A58":c.BIN4,"\u2A59":c.REL,"\u2A5A":c.BIN4,"\u2A5B":c.BIN4,"\u2A5C":c.BIN4,"\u2A5D":c.BIN4,"\u2A5E":c.BIN4,"\u2A5F":c.BIN4,"\u2A60":c.BIN4,"\u2A61":c.BIN4,"\u2A62":c.BIN4,"\u2A63":c.BIN4,"\u2A64":c.BIN4,"\u2A65":c.BIN4,"\u2A66":c.REL,"\u2A67":c.REL,"\u2A68":c.REL,"\u2A69":c.REL,"\u2A6A":c.REL,"\u2A6B":c.REL,"\u2A6C":c.REL,"\u2A6D":c.REL,"\u2A6E":c.REL,"\u2A6F":c.REL,"\u2A70":c.REL,"\u2A71":c.BIN4,"\u2A72":c.BIN4,"\u2A73":c.REL,"\u2A74":c.REL,"\u2A75":c.REL,"\u2A76":c.REL,"\u2A77":c.REL,"\u2A78":c.REL,"\u2A79":c.REL,"\u2A7A":c.REL,"\u2A7B":c.REL,"\u2A7C":c.REL,"\u2A7D":c.REL,"\u2A7D\u0338":c.REL,"\u2A7E":c.REL,"\u2A7E\u0338":c.REL,"\u2A7F":c.REL,"\u2A80":c.REL,"\u2A81":c.REL,"\u2A82":c.REL,"\u2A83":c.REL,"\u2A84":c.REL,"\u2A85":c.REL,"\u2A86":c.REL,"\u2A87":c.REL,"\u2A88":c.REL,"\u2A89":c.REL,"\u2A8A":c.REL,"\u2A8B":c.REL,"\u2A8C":c.REL,"\u2A8D":c.REL,"\u2A8E":c.REL,"\u2A8F":c.REL,"\u2A90":c.REL,"\u2A91":c.REL,"\u2A92":c.REL,"\u2A93":c.REL,"\u2A94":c.REL,"\u2A95":c.REL,"\u2A96":c.REL,"\u2A97":c.REL,"\u2A98":c.REL,"\u2A99":c.REL,"\u2A9A":c.REL,"\u2A9B":c.REL,"\u2A9C":c.REL,"\u2A9D":c.REL,"\u2A9E":c.REL,"\u2A9F":c.REL,"\u2AA0":c.REL,"\u2AA1":c.REL,"\u2AA1\u0338":c.REL,"\u2AA2":c.REL,"\u2AA2\u0338":c.REL,"\u2AA3":c.REL,"\u2AA4":c.REL,"\u2AA5":c.REL,"\u2AA6":c.REL,"\u2AA7":c.REL,"\u2AA8":c.REL,"\u2AA9":c.REL,"\u2AAA":c.REL,"\u2AAB":c.REL,"\u2AAC":c.REL,"\u2AAD":c.REL,"\u2AAE":c.REL,"\u2AAF\u0338":c.REL,"\u2AB0\u0338":c.REL,"\u2AB1":c.REL,"\u2AB2":c.REL,"\u2AB3":c.REL,"\u2AB4":c.REL,"\u2AB5":c.REL,"\u2AB6":c.REL,"\u2AB7":c.REL,"\u2AB8":c.REL,"\u2AB9":c.REL,"\u2ABA":c.REL,"\u2ABB":c.REL,"\u2ABC":c.REL,"\u2ABD":c.REL,"\u2ABE":c.REL,"\u2ABF":c.REL,"\u2AC0":c.REL,"\u2AC1":c.REL,"\u2AC2":c.REL,"\u2AC3":c.REL,"\u2AC4":c.REL,"\u2AC5":c.REL,"\u2AC6":c.REL,"\u2AC7":c.REL,"\u2AC8":c.REL,"\u2AC9":c.REL,"\u2ACA":c.REL,"\u2ACB":c.REL,"\u2ACC":c.REL,"\u2ACD":c.REL,"\u2ACE":c.REL,"\u2ACF":c.REL,"\u2AD0":c.REL,"\u2AD1":c.REL,"\u2AD2":c.REL,"\u2AD3":c.REL,"\u2AD4":c.REL,"\u2AD5":c.REL,"\u2AD6":c.REL,"\u2AD7":c.REL,"\u2AD8":c.REL,"\u2AD9":c.REL,"\u2ADA":c.REL,"\u2ADB":c.REL,"\u2ADC":c.REL,"\u2ADD":c.REL,"\u2ADE":c.REL,"\u2ADF":c.REL,"\u2AE0":c.REL,"\u2AE1":c.REL,"\u2AE2":c.REL,"\u2AE3":c.REL,"\u2AE4":c.REL,"\u2AE5":c.REL,"\u2AE6":c.REL,"\u2AE7":c.REL,"\u2AE8":c.REL,"\u2AE9":c.REL,"\u2AEA":c.REL,"\u2AEB":c.REL,"\u2AEC":c.REL,"\u2AED":c.REL,"\u2AEE":c.REL,"\u2AEF":c.REL,"\u2AF0":c.REL,"\u2AF1":c.REL,"\u2AF2":c.REL,"\u2AF3":c.REL,"\u2AF4":c.BIN4,"\u2AF5":c.BIN4,"\u2AF6":c.BIN4,"\u2AF7":c.REL,"\u2AF8":c.REL,"\u2AF9":c.REL,"\u2AFA":c.REL,"\u2AFB":c.BIN4,"\u2AFD":c.BIN4,"\u2AFE":c.BIN3}}});MathJax.Ajax.loadComplete(a.optableDir+"/SuppMathOperators.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsA.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsA.js new file mode 100644 index 0000000..a1b79d2 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsA.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/SupplementalArrowsA.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{infix:{"\u27F0":c.RELSTRETCH,"\u27F1":c.RELSTRETCH,"\u27FB":c.WIDEREL,"\u27FD":c.WIDEREL,"\u27FE":c.WIDEREL,"\u27FF":c.WIDEREL}}});MathJax.Ajax.loadComplete(a.optableDir+"/SupplementalArrowsA.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsB.js b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsB.js new file mode 100644 index 0000000..92e0610 --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/element/mml/optable/SupplementalArrowsB.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/element/mml/optable/SupplementalArrowsB.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a){var c=a.mo.OPTYPES;var b=a.TEXCLASS;MathJax.Hub.Insert(a.mo.prototype,{OPTABLE:{infix:{"\u2900":c.RELACCENT,"\u2901":c.RELACCENT,"\u2902":c.RELACCENT,"\u2903":c.RELACCENT,"\u2904":c.RELACCENT,"\u2905":c.RELACCENT,"\u2906":c.RELACCENT,"\u2907":c.RELACCENT,"\u2908":c.REL,"\u2909":c.REL,"\u290A":c.RELSTRETCH,"\u290B":c.RELSTRETCH,"\u290C":c.WIDEREL,"\u290D":c.WIDEREL,"\u290E":c.WIDEREL,"\u290F":c.WIDEREL,"\u2910":c.WIDEREL,"\u2911":c.RELACCENT,"\u2912":c.RELSTRETCH,"\u2913":c.RELSTRETCH,"\u2914":c.RELACCENT,"\u2915":c.RELACCENT,"\u2916":c.RELACCENT,"\u2917":c.RELACCENT,"\u2918":c.RELACCENT,"\u2919":c.RELACCENT,"\u291A":c.RELACCENT,"\u291B":c.RELACCENT,"\u291C":c.RELACCENT,"\u291D":c.RELACCENT,"\u291E":c.RELACCENT,"\u291F":c.RELACCENT,"\u2920":c.RELACCENT,"\u2921":c.RELSTRETCH,"\u2922":c.RELSTRETCH,"\u2923":c.REL,"\u2924":c.REL,"\u2925":c.REL,"\u2926":c.REL,"\u2927":c.REL,"\u2928":c.REL,"\u2929":c.REL,"\u292A":c.REL,"\u292B":c.REL,"\u292C":c.REL,"\u292D":c.REL,"\u292E":c.REL,"\u292F":c.REL,"\u2930":c.REL,"\u2931":c.REL,"\u2932":c.REL,"\u2933":c.RELACCENT,"\u2934":c.REL,"\u2935":c.REL,"\u2936":c.REL,"\u2937":c.REL,"\u2938":c.REL,"\u2939":c.REL,"\u293A":c.RELACCENT,"\u293B":c.RELACCENT,"\u293C":c.RELACCENT,"\u293D":c.RELACCENT,"\u293E":c.REL,"\u293F":c.REL,"\u2940":c.REL,"\u2941":c.REL,"\u2942":c.RELACCENT,"\u2943":c.RELACCENT,"\u2944":c.RELACCENT,"\u2945":c.RELACCENT,"\u2946":c.RELACCENT,"\u2947":c.RELACCENT,"\u2948":c.RELACCENT,"\u2949":c.REL,"\u294A":c.RELACCENT,"\u294B":c.RELACCENT,"\u294C":c.REL,"\u294D":c.REL,"\u294E":c.WIDEREL,"\u294F":c.RELSTRETCH,"\u2950":c.WIDEREL,"\u2951":c.RELSTRETCH,"\u2952":c.WIDEREL,"\u2953":c.WIDEREL,"\u2954":c.RELSTRETCH,"\u2955":c.RELSTRETCH,"\u2956":c.RELSTRETCH,"\u2957":c.RELSTRETCH,"\u2958":c.RELSTRETCH,"\u2959":c.RELSTRETCH,"\u295A":c.WIDEREL,"\u295B":c.WIDEREL,"\u295C":c.RELSTRETCH,"\u295D":c.RELSTRETCH,"\u295E":c.WIDEREL,"\u295F":c.WIDEREL,"\u2960":c.RELSTRETCH,"\u2961":c.RELSTRETCH,"\u2962":c.RELACCENT,"\u2963":c.REL,"\u2964":c.RELACCENT,"\u2965":c.REL,"\u2966":c.RELACCENT,"\u2967":c.RELACCENT,"\u2968":c.RELACCENT,"\u2969":c.RELACCENT,"\u296A":c.RELACCENT,"\u296B":c.RELACCENT,"\u296C":c.RELACCENT,"\u296D":c.RELACCENT,"\u296E":c.RELSTRETCH,"\u296F":c.RELSTRETCH,"\u2970":c.RELACCENT,"\u2971":c.RELACCENT,"\u2972":c.RELACCENT,"\u2973":c.RELACCENT,"\u2974":c.RELACCENT,"\u2975":c.RELACCENT,"\u2976":c.RELACCENT,"\u2977":c.RELACCENT,"\u2978":c.RELACCENT,"\u2979":c.RELACCENT,"\u297A":c.RELACCENT,"\u297B":c.RELACCENT,"\u297C":c.RELACCENT,"\u297D":c.RELACCENT,"\u297E":c.REL,"\u297F":c.REL}}});MathJax.Ajax.loadComplete(a.optableDir+"/SupplementalArrowsB.js")})(MathJax.ElementJax.mml); diff --git a/doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/fonts/TeX/fontdata.js b/doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/fonts/TeX/fontdata.js new file mode 100644 index 0000000..087c51f --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/fonts/TeX/fontdata.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/output/HTML-CSS/fonts/TeX/fontdata.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(i,b,q){var p="2.7.9";var m="MathJax_Main",r="MathJax_Main-bold",o="MathJax_Math-italic",h="MathJax_AMS",g="MathJax_Size1",f="MathJax_Size2",e="MathJax_Size3",c="MathJax_Size4";var j="H",a="V",l={load:"extra",dir:j},d={load:"extra",dir:a};var k=[8722,m,0,0,0,-0.31,-0.31];var n=[61,m,0,0,0,0,0.1];i.Augment({FONTDATA:{version:p,TeX_factor:1,baselineskip:1.2,lineH:0.8,lineD:0.2,hasStyleChar:true,FONTS:{MathJax_Main:"Main/Regular/Main.js","MathJax_Main-bold":"Main/Bold/Main.js","MathJax_Main-italic":"Main/Italic/Main.js","MathJax_Math-italic":"Math/Italic/Main.js","MathJax_Math-bold-italic":"Math/BoldItalic/Main.js",MathJax_Caligraphic:"Caligraphic/Regular/Main.js",MathJax_Size1:"Size1/Regular/Main.js",MathJax_Size2:"Size2/Regular/Main.js",MathJax_Size3:"Size3/Regular/Main.js",MathJax_Size4:"Size4/Regular/Main.js",MathJax_AMS:"AMS/Regular/Main.js",MathJax_Fraktur:"Fraktur/Regular/Main.js","MathJax_Fraktur-bold":"Fraktur/Bold/Main.js",MathJax_SansSerif:"SansSerif/Regular/Main.js","MathJax_SansSerif-bold":"SansSerif/Bold/Main.js","MathJax_SansSerif-italic":"SansSerif/Italic/Main.js",MathJax_Script:"Script/Regular/Main.js",MathJax_Typewriter:"Typewriter/Regular/Main.js","MathJax_Caligraphic-bold":"Caligraphic/Bold/Main.js"},VARIANT:{normal:{fonts:[m,g,h],offsetG:945,variantG:"italic",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88,8214:8741,8726:[8726,"-TeX-variant"],8463:[8463,"-TeX-variant"],8242:[39,"sans-serif-italic"],10744:[47,b.VARIANT.ITALIC]}},bold:{fonts:[r,g,h],bold:true,offsetG:945,variantG:"bold-italic",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88,10744:[47,"bold-italic"],8214:8741,8602:"\u2190\u0338",8603:"\u2192\u0338",8622:"\u2194\u0338",8653:"\u21D0\u0338",8654:"\u21D4\u0338",8655:"\u21D2\u0338",8708:"\u2203\u0338",8740:"\u2223\u0338",8742:"\u2225\u0338",8769:"\u223C\u0338",8775:"\u2245\u0338",8814:"<\u0338",8815:">\u0338",8816:"\u2264\u0338",8817:"\u2265\u0338",8832:"\u227A\u0338",8833:"\u227B\u0338",8840:"\u2286\u0338",8841:"\u2287\u0338",8876:"\u22A2\u0338",8877:"\u22A8\u0338",8928:"\u227C\u0338",8929:"\u227D\u0338"}},italic:{fonts:[o,"MathJax_Main-italic",m,g,h],italic:true,remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88}},"bold-italic":{fonts:["MathJax_Math-bold-italic",r,g,h],bold:true,italic:true,remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88}},"double-struck":{fonts:[h,m]},fraktur:{fonts:["MathJax_Fraktur",m,g,h]},"bold-fraktur":{fonts:["MathJax_Fraktur-bold",r,g,h],bold:true},script:{fonts:["MathJax_Script",m,g,h]},"bold-script":{fonts:["MathJax_Script",r,g,h],bold:true},"sans-serif":{fonts:["MathJax_SansSerif",m,g,h]},"bold-sans-serif":{fonts:["MathJax_SansSerif-bold",r,g,h],bold:true},"sans-serif-italic":{fonts:["MathJax_SansSerif-italic","MathJax_Main-italic",g,h],italic:true},"sans-serif-bold-italic":{fonts:["MathJax_SansSerif-italic","MathJax_Main-italic",g,h],bold:true,italic:true},monospace:{fonts:["MathJax_Typewriter",m,g,h]},"-tex-caligraphic":{fonts:["MathJax_Caligraphic",m],offsetA:65,variantA:"italic"},"-tex-oldstyle":{fonts:["MathJax_Caligraphic",m]},"-tex-mathit":{fonts:["MathJax_Main-italic",o,m,g,h],italic:true,noIC:true,remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88}},"-TeX-variant":{fonts:[h,m,g],remap:{8808:57356,8809:57357,8816:57361,8817:57358,10887:57360,10888:57359,8740:57350,8742:57351,8840:57366,8841:57368,8842:57370,8843:57371,10955:57367,10956:57369,988:57352,1008:57353,8726:[8726,b.VARIANT.NORMAL],8463:[8463,b.VARIANT.NORMAL]}},"-largeOp":{fonts:[f,g,m]},"-smallOp":{fonts:[g,m]},"-tex-caligraphic-bold":{fonts:["MathJax_Caligraphic-bold","MathJax_Main-bold","MathJax_Main","MathJax_Math","MathJax_Size1"],bold:true,offsetA:65,variantA:"bold-italic"},"-tex-oldstyle-bold":{fonts:["MathJax_Caligraphic-bold","MathJax_Main-bold","MathJax_Main","MathJax_Math","MathJax_Size1"],bold:true}},RANGES:[{name:"alpha",low:97,high:122,offset:"A",add:32},{name:"number",low:48,high:57,offset:"N"},{name:"greek",low:945,high:1014,offset:"G"}],RULECHAR:8722,REMAP:{10:32,8254:713,8400:8636,8401:8640,8406:8592,8417:8596,8428:8641,8429:8637,8430:8592,8431:8594,8432:42,65079:9182,65080:9183,183:8901,697:8242,978:933,8710:916,8213:8212,8215:95,8226:8729,8260:47,8965:8892,8966:10846,9642:9632,9652:9650,9653:9651,9656:9654,9662:9660,9663:9661,9666:9664,9001:10216,9002:10217,12296:10216,12297:10217,10072:8739,10799:215,9723:9633,9724:9632,8450:[67,b.VARIANT.DOUBLESTRUCK],8459:[72,b.VARIANT.SCRIPT],8460:[72,b.VARIANT.FRAKTUR],8461:[72,b.VARIANT.DOUBLESTRUCK],8462:[104,b.VARIANT.ITALIC],8464:[74,b.VARIANT.SCRIPT],8465:[73,b.VARIANT.FRAKTUR],8466:[76,b.VARIANT.SCRIPT],8469:[78,b.VARIANT.DOUBLESTRUCK],8473:[80,b.VARIANT.DOUBLESTRUCK],8474:[81,b.VARIANT.DOUBLESTRUCK],8475:[82,b.VARIANT.SCRIPT],8476:[82,b.VARIANT.FRAKTUR],8477:[82,b.VARIANT.DOUBLESTRUCK],8484:[90,b.VARIANT.DOUBLESTRUCK],8486:[937,b.VARIANT.NORMAL],8488:[90,b.VARIANT.FRAKTUR],8492:[66,b.VARIANT.SCRIPT],8493:[67,b.VARIANT.FRAKTUR],8496:[69,b.VARIANT.SCRIPT],8497:[70,b.VARIANT.SCRIPT],8499:[77,b.VARIANT.SCRIPT],8775:8774,8988:9484,8989:9488,8990:9492,8991:9496,8708:"\u2203\u0338",8716:"\u220B\u0338",8772:"\u2243\u0338",8777:"\u2248\u0338",8802:"\u2261\u0338",8813:"\u224D\u0338",8820:"\u2272\u0338",8821:"\u2273\u0338",8824:"\u2276\u0338",8825:"\u2277\u0338",8836:"\u2282\u0338",8837:"\u2283\u0338",8930:"\u2291\u0338",8931:"\u2292\u0338",10764:"\u222C\u222C",8243:"\u2032\u2032",8244:"\u2032\u2032\u2032",8246:"\u2035\u2035",8247:"\u2035\u2035\u2035",8279:"\u2032\u2032\u2032\u2032",8411:"...",8412:"...."},REMAPACCENT:{"\u2192":"\u20D7","\u2032":"'","\u2035":"`"},REMAPACCENTUNDER:{},PLANE1MAP:[[119808,119833,65,b.VARIANT.BOLD],[119834,119859,97,b.VARIANT.BOLD],[119860,119885,65,b.VARIANT.ITALIC],[119886,119911,97,b.VARIANT.ITALIC],[119912,119937,65,b.VARIANT.BOLDITALIC],[119938,119963,97,b.VARIANT.BOLDITALIC],[119964,119989,65,b.VARIANT.SCRIPT],[120068,120093,65,b.VARIANT.FRAKTUR],[120094,120119,97,b.VARIANT.FRAKTUR],[120120,120145,65,b.VARIANT.DOUBLESTRUCK],[120172,120197,65,b.VARIANT.BOLDFRAKTUR],[120198,120223,97,b.VARIANT.BOLDFRAKTUR],[120224,120249,65,b.VARIANT.SANSSERIF],[120250,120275,97,b.VARIANT.SANSSERIF],[120276,120301,65,b.VARIANT.BOLDSANSSERIF],[120302,120327,97,b.VARIANT.BOLDSANSSERIF],[120328,120353,65,b.VARIANT.SANSSERIFITALIC],[120354,120379,97,b.VARIANT.SANSSERIFITALIC],[120432,120457,65,b.VARIANT.MONOSPACE],[120458,120483,97,b.VARIANT.MONOSPACE],[120488,120513,913,b.VARIANT.BOLD],[120546,120570,913,b.VARIANT.ITALIC],[120572,120603,945,b.VARIANT.ITALIC],[120604,120628,913,b.VARIANT.BOLDITALIC],[120630,120661,945,b.VARIANT.BOLDITALIC],[120662,120686,913,b.VARIANT.BOLDSANSSERIF],[120720,120744,913,b.VARIANT.SANSSERIFBOLDITALIC],[120782,120791,48,b.VARIANT.BOLD],[120802,120811,48,b.VARIANT.SANSSERIF],[120812,120821,48,b.VARIANT.BOLDSANSSERIF],[120822,120831,48,b.VARIANT.MONOSPACE]],REMAPGREEK:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,930:920,932:84,935:88,938:8711,970:8706,971:1013,972:977,973:1008,974:981,975:1009,976:982},RemapPlane1:function(v,u){for(var t=0,s=this.PLANE1MAP.length;t T d \u23A6 \u2A00",skew:{84:0.0278,58096:0.0319},32:[0,0,250,0,0],62:[540,40,778,83,694],84:[717,68,545,34,833],100:[694,11,511,101,567],160:[0,0,250,0,0],8899:[750,249,833,55,777],9126:[1155,644,667,0,347],10752:[949,449,1511,56,1454],58096:[720,69,644,38,947],58097:[587,85,894,96,797]}}}})}(function(){var v=i.FONTDATA.FONTS,u=i.config.availableFonts;var t,s=[];if(i.allowWebFonts){for(t in v){if(v[t].family){if(u&&u.length&&i.Font.testFont(v[t])){v[t].available=true;i.Font.loadComplete(v[t])}else{v[t].isWebFont=true;if(i.FontFaceBug){v[t].family=t}s.push(i.Font.fontFace(t))}}}if(!i.config.preloadWebFonts){i.config.preloadWebFonts=[]}i.config.preloadWebFonts.push(m,o,g);if(s.length){i.config.styles["@font-face"]=s}}else{if(u&&u.length){for(t in v){if(v[t].family&&i.Font.testFont(v[t])){v[t].available=true;i.Font.loadComplete(v[t])}}}}})();q.loadComplete(i.fontDir+"/fontdata.js")})(MathJax.OutputJax["HTML-CSS"],MathJax.ElementJax.mml,MathJax.Ajax); diff --git a/doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/jax.js b/doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/jax.js new file mode 100644 index 0000000..19a895b --- /dev/null +++ b/doc/ext/mathjax-2.7.9/jax/output/HTML-CSS/jax.js @@ -0,0 +1,19 @@ +/* + * /MathJax-v2/jax/output/HTML-CSS/jax.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(j,b,d){var i,k=b.Browser.isMobile;var h=MathJax.Object.isArray;var e=function(){var m=[].slice.call(arguments,0);m[0][0]=["HTML-CSS",m[0][0]];return MathJax.Message.Set.apply(MathJax.Message,m)};var f=MathJax.Object.Subclass({timeout:(k?15:8)*1000,comparisonFont:["sans-serif","monospace","script","Times","Courier","Arial","Helvetica"],testSize:["40px","50px","60px","30px","20px"],FedoraSTIXcheck:{family:"STIXSizeOneSym",testString:"abcABC",noStyleChar:true},Init:function(){this.div=MathJax.HTML.addElement(document.body,"div",{style:{position:"absolute",width:0,height:0,overflow:"hidden",padding:0,border:0,margin:0}},[["div",{id:"MathJax_Font_Test",style:{position:"absolute",visibility:"hidden",top:0,left:0,width:"auto","min-width":0,"max-width":"none",padding:0,border:0,margin:0,whiteSpace:"nowrap",textAlign:"left",textIndent:0,textTransform:"none",lineHeight:"normal",letterSpacing:"normal",wordSpacing:"normal",fontSize:this.testSize[0],fontWeight:"normal",fontStyle:"normal",fontSizeAdjust:"none"}},[""]]]).firstChild;this.text=this.div.firstChild},findFont:function(r,o){var q=null;if(o&&this.testCollection(o)){q=o}else{for(var p=0,n=r.length;p=r.HTMLCSSlast+r.HTMLCSSchunk){this.postTranslate(r,true);r.HTMLCSSchunk=Math.floor(r.HTMLCSSchunk*this.config.EqnChunkFactor);r.HTMLCSSdelay=true}return false},savePreview:function(m){var n=m.MathJax.preview;if(n){m.MathJax.tmpPreview=document.createElement("span");n.parentNode.replaceChild(m.MathJax.tmpPreview,n)}},restorePreview:function(m){var n=m.MathJax.tmpPreview;if(n){n.parentNode.replaceChild(m.MathJax.preview,n);delete m.MathJax.tmpPreview}},getMetrics:function(m){var n=m.HTMLCSS;this.em=i.mbase.prototype.em=n.em*n.scale;this.outerEm=n.em;this.scale=n.scale;this.cwidth=n.cwidth;this.linebreakWidth=n.lineWidth},postTranslate:function(o,u){var r=o.jax[this.id],v,p,s,q;for(s=o.HTMLCSSlast,q=o.HTMLCSSeqn;sm){y.style.width=(u+100)+"px"}}}r=y.firstChild.firstChild.style;if(z.H!=null&&z.H>z.h){r.marginTop=d.Em(z.H-Math.max(z.h,d.FONTDATA.lineH))}if(z.D!=null&&z.D>z.d){r.marginBottom=d.Em(z.D-Math.max(z.d,d.FONTDATA.lineD))}if(z.lw<0){r.paddingLeft=d.Em(-z.lw)}if(z.rw>z.w){r.marginRight=d.Em(z.rw-z.w)}y.style.position="absolute";if(!p){x.style.position="absolute"}var w=y.offsetWidth,t=y.offsetHeight,A=x.offsetHeight,s=x.offsetWidth;y.style.position=x.style.position="";return{Y:-l.getBBox(y).h,mW:s,mH:A,zW:w,zH:t}},initImg:function(m){},initHTML:function(n,m){},initFont:function(m){var o=d.FONTDATA.FONTS,n=d.config.availableFonts;if(n&&n.length&&d.Font.testFont(o[m])){o[m].available=true;if(o[m].familyFixed){o[m].family=o[m].familyFixed;delete o[m].familyFixed}return null}if(!this.allowWebFonts){return null}o[m].isWebFont=true;if(d.FontFaceBug){o[m].family=m;if(d.msieFontCSSBug){o[m].family+="-Web"}}return j.Styles({"@font-face":this.Font.fontFace(m)})},Remove:function(m){var n=document.getElementById(m.inputID+"-Frame");if(n){if(m.HTMLCSS.display){n=n.parentNode}n.parentNode.removeChild(n)}delete m.HTMLCSS},getHD:function(n,o){if(n.bbox&&this.config.noReflows&&!o){return{h:n.bbox.h,d:n.bbox.d}}var m=n.style.position;n.style.position="absolute";this.HDimg.style.height="0px";n.appendChild(this.HDspan);var p={h:n.offsetHeight};this.HDimg.style.height=p.h+"px";p.d=n.offsetHeight-p.h;p.h-=p.d;p.h/=this.em;p.d/=this.em;n.removeChild(this.HDspan);n.style.position=m;return p},getW:function(q){var n,p,o=(q.bbox||{}).w,r=q;if(q.bbox&&this.config.noReflows&&q.bbox.exactW!==false){if(!q.bbox.exactW){if(q.style.paddingLeft){o+=this.unEm(q.style.paddingLeft)*(q.scale||1)}if(q.style.paddingRight){o+=this.unEm(q.style.paddingRight)*(q.scale||1)}}return o}if(q.bbox&&q.bbox.exactW){return o}if((q.bbox&&o>=0&&!this.initialSkipBug&&!this.msieItalicWidthBug)||this.negativeBBoxes||!q.firstChild){n=q.offsetWidth;p=q.parentNode.offsetHeight}else{if(q.bbox&&o<0&&this.msieNegativeBBoxBug){n=-q.offsetWidth,p=q.parentNode.offsetHeight}else{var m=q.style.position;q.style.position="absolute";r=this.startMarker;q.insertBefore(r,q.firstChild);q.appendChild(this.endMarker);n=this.endMarker.offsetLeft-r.offsetLeft;q.removeChild(this.endMarker);q.removeChild(r);q.style.position=m}}if(p!=null){q.parentNode.HH=p/this.em}return n/this.em},Measured:function(o,n){var p=o.bbox;if(p.width==null&&p.w&&!p.isMultiline){var m=this.getW(o);p.rw+=m-p.w;p.w=m;p.exactW=true}if(!n){n=o.parentNode}if(!n.bbox){n.bbox=p}return o},Remeasured:function(n,m){m.bbox=this.Measured(n,m).bbox},MeasureSpans:function(q){var t=[],v,s,p,w,n,r,o,u;for(s=0,p=q.length;s=0&&!this.initialSkipBug)||(w.w<0&&this.msieNegativeBBoxBug)){t.push([v])}else{if(this.initialSkipBug){n=this.startMarker.cloneNode(true);r=this.endMarker.cloneNode(true);v.insertBefore(n,v.firstChild);v.appendChild(r);t.push([v,n,r,v.style.position]);v.style.position="absolute"}else{r=this.endMarker.cloneNode(true);v.appendChild(r);t.push([v,null,r])}}}for(s=0,p=t.length;s=0&&!this.initialSkipBug)||this.negativeBBoxes||!v.firstChild){o=v.offsetWidth;u.HH=u.offsetHeight/this.em}else{if(w.w<0&&this.msieNegativeBBoxBug){o=-v.offsetWidth,u.HH=u.offsetHeight/this.em}else{o=t[s][2].offsetLeft-((t[s][1]||{}).offsetLeft||0)}}o/=this.em;w.rw+=o-w.w;w.w=o;w.exactW=true;if(!u.bbox){u.bbox=w}}for(s=0,p=t.length;s=0){r.style.width=this.Em(s);r.style.display="inline-block";r.style.overflow="hidden"}else{if(this.msieNegativeSpaceBug){r.style.height=""}r.style.marginLeft=this.Em(s);if(d.safariNegativeSpaceBug&&r.parentNode.firstChild==r){this.createBlank(r,0,true)}}if(o&&o!==i.COLOR.TRANSPARENT){r.style.backgroundColor=o;r.style.position="relative"}return r},createRule:function(t,p,r,u,n){if(p<-r){r=-p}var o=d.TeX.min_rule_thickness,q=1;if(u>0&&u*this.em0&&(p+r)*this.emp+r){m.borderTop=this.Px(p+r)+" "+n;m.width=this.Em(u);m.height=(this.msieRuleBug&&p+r>0?this.Em(p+r):0)}else{m.borderLeft=this.Px(u)+" "+n;m.width=(this.msieRuleBug&&u>0?this.Em(u):0);m.height=this.Em(p+r)}var s=this.addElement(t,"span",{style:m,noAdjust:true,HH:p+r,isMathJax:true,bbox:{h:p,d:r,w:u,rw:u,lw:0,exactW:true}});if(t.isBox||t.className=="mspace"){t.bbox=s.bbox,t.HH=p+r}return s},createFrame:function(v,s,u,x,z,n){if(s<-u){u=-s}var r=2*z;if(this.msieFrameSizeBug){if(xF.w){d.createBlank(w,F.rw-F.w+0.1)}}if(!this.msieClipRectBug&&!F.noclip&&!q){var E=3/this.em;var C=(F.H==null?F.h:F.H),n=(F.D==null?F.d:F.D);var G=A-C-E,s=A+n+E,p=-1000,m=F.rw+1000;w.style.clip="rect("+this.Em(G)+" "+this.Em(m)+" "+this.Em(s)+" "+this.Em(p)+")"}}w.style.top=this.Em(-u-A);w.style.left=this.Em(v+I);if(F&&B){if(F.H!=null&&(B.H==null||F.H+u>B.H)){B.H=F.H+u}if(F.D!=null&&(B.D==null||F.D-u>B.D)){B.D=F.D-u}if(F.h+u>B.h){B.h=F.h+u}if(F.d-u>B.d){B.d=F.d-u}if(B.H!=null&&B.H<=B.h){delete B.H}if(B.D!=null&&B.D<=B.d){delete B.D}if(F.w+v>B.w){B.w=F.w+v;if(B.width==null){z.style.width=this.Em(B.w)}}if(F.rw+v>B.rw){B.rw=F.rw+v}if(F.lw+v=p-0.01||(u==r-1&&!o.stretch)){if(o.HW[u][2]){s*=o.HW[u][2]}if(o.HW[u][3]){n=o.HW[u][3]}var t=this.addElement(w,"span");this.createChar(t,[n,o.HW[u][1]],s,q);w.bbox=t.bbox;w.offset=0.65*w.bbox.w;w.scale=s;return}}if(o.stretch){this["extendDelimiter"+o.dir](w,v,o.stretch,s,q)}},extendDelimiterV:function(B,u,F,G,x){var p=this.createStack(B,true);var w=this.createBox(p),v=this.createBox(p);this.createChar(w,(F.top||F.ext),G,x);this.createChar(v,(F.bot||F.ext),G,x);var o={bbox:{w:0,lw:0,rw:0}},E=o,q;var C=w.bbox.h+w.bbox.d+v.bbox.h+v.bbox.d;var s=-w.bbox.h;this.placeBox(w,0,s,true);s-=w.bbox.d;if(F.mid){E=this.createBox(p);this.createChar(E,F.mid,G,x);C+=E.bbox.h+E.bbox.d}if(F.min&&uC){o=this.Element("span");this.createChar(o,F.ext,G,x);var D=o.bbox.h+o.bbox.d,m=D-0.05,z,r,A=(F.mid?2:1);r=z=Math.min(Math.ceil((u-C)/(A*m)),this.maxStretchyParts);if(!F.fullExtenders){m=(u-C)/(A*z)}var t=(z/(z+1))*(D-m);m=D-t;s+=t+m-o.bbox.h;while(A-->0){while(z-->0){if(!this.msieCloneNodeBug){q=o.cloneNode(true)}else{q=this.Element("span");this.createChar(q,F.ext,G,x)}q.bbox=o.bbox;s-=m;this.placeBox(this.addBox(p,q),0,s,true)}s+=t-o.bbox.d;if(F.mid&&A){this.placeBox(E,0,s-E.bbox.h,true);z=r;s+=-(E.bbox.h+E.bbox.d)+t+m-o.bbox.h}}}else{s+=(C-u)/2;if(F.mid){this.placeBox(E,0,s-E.bbox.h,true);s+=-(E.bbox.h+E.bbox.d)}s+=(C-u)/2}this.placeBox(v,0,s-v.bbox.h,true);s-=v.bbox.h+v.bbox.d;B.bbox={w:Math.max(w.bbox.w,o.bbox.w,v.bbox.w,E.bbox.w),lw:Math.min(w.bbox.lw,o.bbox.lw,v.bbox.lw,E.bbox.lw),rw:Math.max(w.bbox.rw,o.bbox.rw,v.bbox.rw,E.bbox.rw),h:0,d:-s,exactW:true};B.scale=G;B.offset=0.55*B.bbox.w;B.isMultiChar=true;this.setStackWidth(p,B.bbox.w)},extendDelimiterH:function(C,p,F,H,z){var s=this.createStack(C,true);var q=this.createBox(s),D=this.createBox(s);this.createChar(q,(F.left||F.rep),H,z);this.createChar(D,(F.right||F.rep),H,z);var m=this.Element("span");this.createChar(m,F.rep,H,z);var E={bbox:{h:-this.BIGDIMEN,d:-this.BIGDIMEN}},o;this.placeBox(q,-q.bbox.lw,0,true);var v=(q.bbox.rw-q.bbox.lw)+(D.bbox.rw-D.bbox.lw)-0.05,u=q.bbox.rw-q.bbox.lw-0.025,y;if(F.mid){E=this.createBox(s);this.createChar(E,F.mid,H,z);v+=E.bbox.w}if(F.min&&pv){var G=m.bbox.rw-m.bbox.lw,r=G-0.05,A,t,B=(F.mid?2:1);t=A=Math.min(Math.ceil((p-v)/(B*r)),this.maxStretchyParts);if(!F.fillExtenders){r=(p-v)/(B*A)}y=(A/(A+1))*(G-r);r=G-y;u-=m.bbox.lw+y;while(B-->0){while(A-->0){if(!this.cloneNodeBug){o=m.cloneNode(true)}else{o=this.Element("span");this.createChar(o,F.rep,H,z)}o.bbox=m.bbox;this.placeBox(this.addBox(s,o),u,0,true);u+=r}if(F.mid&&B){this.placeBox(E,u,0,true);u+=E.bbox.w-y;A=t}}}else{u-=(v-p)/2;if(F.mid){this.placeBox(E,u,0,true);u+=E.bbox.w}u-=(v-p)/2}u-=D.bbox.lw;this.placeBox(D,u,0,true);C.bbox={w:u+D.bbox.rw,lw:0,rw:u+D.bbox.rw,h:Math.max(q.bbox.h,m.bbox.h,D.bbox.h,E.bbox.h),d:Math.max(q.bbox.d,m.bbox.d,D.bbox.d,E.bbox.d),exactW:true};C.scale=H;C.isMultiChar=true;this.setStackWidth(s,C.bbox.w)},createChar:function(u,r,p,n){u.isMathJax=true;var t=u,v="",q={fonts:[r[1]],noRemap:true};if(n&&n===i.VARIANT.BOLD){q.fonts=[r[1]+"-bold",r[1]]}if(typeof(r[1])!=="string"){q=r[1]}if(r[0] instanceof Array){for(var s=0,o=r[0].length;s=55296&&y<56319){C++;y=(((y-55296)<<10)+(t.charCodeAt(C)-56320))+65536;if(this.FONTDATA.RemapPlane1){var F=this.FONTDATA.RemapPlane1(y,q);y=F.n;q=F.variant}}else{var v,s,w=this.FONTDATA.RANGES;for(v=0,s=w.length;v=w[v].low&&y<=w[v].high){if(w[v].remap&&w[v].remap[y]){y=r+w[v].remap[y]}else{if(w[v].remapOnly){break}y=y-w[v].low+r;if(w[v].add){y+=w[v].add}}if(q["variant"+w[v].offset]){q=this.FONTDATA.VARIANT[q["variant"+w[v].offset]]}break}}}if(q.remap&&q.remap[y]){y=q.remap[y];if(q.remap.variant){q=this.FONTDATA.VARIANT[q.remap.variant]}}else{if(this.FONTDATA.REMAP[y]&&!q.noRemap){y=this.FONTDATA.REMAP[y]}}if(h(y)){q=this.FONTDATA.VARIANT[y[1]];y=y[0]}if(typeof(y)==="string"){t=y+t.substr(C+1);z=t.length;C=-1;continue}u=this.lookupChar(q,y);D=u[y];if(p||(!this.checkFont(u,o.style)&&!D[5].img)){if(A.length){this.addText(o,A);A=""}var x=!!o.style.fontFamily||!!B.style.fontStyle||!!B.style.fontWeight||!u.directory||p;p=false;if(o!==B){x=!this.checkFont(u,B.style);o=B}if(x){o=this.addElement(B,"span",{isMathJax:true,subSpan:true})}this.handleFont(o,u,o!==B)}A=this.handleChar(o,u,D,y,A);if(!(D[5]||{}).space){if(D[0]/1000>B.bbox.h){B.bbox.h=D[0]/1000}if(D[1]/1000>B.bbox.d){B.bbox.d=D[1]/1000}}if(B.bbox.w+D[3]/1000B.bbox.rw){B.bbox.rw=B.bbox.w+D[4]/1000}B.bbox.w+=D[2]/1000;if((D[5]||{}).isUnknown){B.bbox.exactW=false}}if(A.length){this.addText(o,A)}if(B.scale&&B.scale!==1){B.bbox.h*=B.scale;B.bbox.d*=B.scale;B.bbox.w*=B.scale;B.bbox.lw*=B.scale;B.bbox.rw*=B.scale}if(d.isChar(t)&&u.skew&&u.skew[y]){B.bbox.skew=u.skew[y]}},checkFont:function(m,n){var o=(n.fontWeight||"normal");if(o.match(/^\d+$/)){o=(parseInt(o)>=600?"bold":"normal")}return(m.family.replace(/'/g,"")===n.fontFamily.replace(/'/g,"")&&(((m.style||"normal")===(n.fontStyle||"normal")&&(m.weight||"normal")===o)||(this.FontFaceBug&&n.fontFamily!=="")))},handleFont:function(o,m,q){o.style.fontFamily=m.family;if(!m.directory){o.style.fontSize=Math.floor(d.config.scale/d.scale+0.5)+"%"}if(!(d.FontFaceBug&&m.isWebFont)){var n=m.style||"normal",p=m.weight||"normal";if(n!=="normal"||q){o.style.fontStyle=n}if(p!=="normal"||q){o.style.fontWeight=p}}},handleChar:function(o,m,u,t,s){var r=u[5];if(r.space){if(s.length){this.addText(o,s)}d.createShift(o,u[2]/1000);return""}if(r.img){return this.handleImg(o,m,u,t,s)}if(r.isUnknown&&this.FONTDATA.DELIMITERS[t]){if(s.length){this.addText(o,s)}var q=o.scale;d.createDelimiter(o,t,0,1,m);if(this.FONTDATA.DELIMITERS[t].dir==="V"){o.style.verticalAlign=this.Em(o.bbox.d);o.bbox.h+=o.bbox.d;o.bbox.d=0}o.scale=q;u[0]=o.bbox.h*1000;u[1]=o.bbox.d*1000;u[2]=o.bbox.w*1000;u[3]=o.bbox.lw*1000;u[4]=o.bbox.rw*1000;return""}if(r.c==null){if(t<=65535){r.c=String.fromCharCode(t)}else{var p=t-65536;r.c=String.fromCharCode((p>>10)+55296)+String.fromCharCode((p&1023)+56320)}}if(d.ffFontOptimizationBug&&u[4]-u[2]>125){o.style.textRendering="optimizeLegibility"}if(r.rfix){this.addText(o,s+r.c);d.createShift(o,r.rfix/1000);return""}if(u[2]||(!this.msieAccentBug&&!this.combiningCharBug)||s.length){return s+r.c}if(this.combiningCharBug){d.addElement(o,"span",{style:{marginLeft:d.Em(u[3]/1000)}},[r.c]);return""}d.createShift(o,u[3]/1000);d.createShift(o,(u[4]-u[3])/1000);this.addText(o,r.c);d.createShift(o,-u[4]/1000);return""},handleImg:function(o,m,r,q,p){return p},lookupChar:function(r,u){var q,o;if(!r.FONTS){var t=this.FONTDATA.FONTS;var s=(r.fonts||this.FONTDATA.VARIANT.normal.fonts);if(!(s instanceof Array)){s=[s]}if(r.fonts!=s){r.fonts=s}r.FONTS=[];for(q=0,o=s.length;q=55296&&o<56319)},findBlock:function(o,s){if(o.Ranges){for(var r=0,n=o.Ranges.length;r=0;p--){if(o.Ranges[p][2]==q){o.Ranges.splice(p,1)}}this.loadFont(o.directory+"/"+q+".js")}}}},loadFont:function(n){var m=MathJax.Callback.Queue();m.Push(["Require",j,this.fontDir+"/"+n]);if(this.imgFonts){if(!MathJax.isPacked){n=n.replace(/\/([^\/]*)$/,d.imgPacked+"/$1")}m.Push(["Require",j,this.webfontDir+"/png/"+n])}b.RestartAfter(m.Push({}))},loadWebFont:function(m){m.available=m.isWebFont=true;if(d.FontFaceBug){m.family=m.name;if(d.msieFontCSSBug){m.family+="-Web"}}b.RestartAfter(this.Font.loadWebFont(m))},loadWebFontError:function(n,m){b.Startup.signal.Post("HTML-CSS Jax - disable web fonts");n.isWebFont=false;if(this.config.imageFont&&this.config.imageFont===this.fontInUse){this.imgFonts=true;b.Startup.signal.Post("HTML-CSS Jax - switch to image fonts");b.Startup.signal.Post("HTML-CSS Jax - using image fonts");e(["WebFontNotAvailable","Web-Fonts not available -- using image fonts instead"],null,3000);j.Require(this.directory+"/imageFonts.js",m)}else{this.allowWebFonts=false;m()}},Element:MathJax.HTML.Element,addElement:MathJax.HTML.addElement,TextNode:MathJax.HTML.TextNode,addText:MathJax.HTML.addText,ucMatch:MathJax.HTML.ucMatch,BIGDIMEN:10000000,ID:0,idPostfix:"",GetID:function(){this.ID++;return this.ID},MATHSPACE:{veryverythinmathspace:1/18,verythinmathspace:2/18,thinmathspace:3/18,mediummathspace:4/18,thickmathspace:5/18,verythickmathspace:6/18,veryverythickmathspace:7/18,negativeveryverythinmathspace:-1/18,negativeverythinmathspace:-2/18,negativethinmathspace:-3/18,negativemediummathspace:-4/18,negativethickmathspace:-5/18,negativeverythickmathspace:-6/18,negativeveryverythickmathspace:-7/18},TeX:{x_height:0.430554,quad:1,num1:0.676508,num2:0.393732,num3:0.44373,denom1:0.685951,denom2:0.344841,sup1:0.412892,sup2:0.362892,sup3:0.288888,sub1:0.15,sub2:0.247217,sup_drop:0.386108,sub_drop:0.05,delim1:2.39,delim2:1,axis_height:0.25,rule_thickness:0.06,big_op_spacing1:0.111111,big_op_spacing2:0.166666,big_op_spacing3:0.2,big_op_spacing4:0.6,big_op_spacing5:0.1,scriptspace:0.1,nulldelimiterspace:0.12,delimiterfactor:901,delimitershortfall:0.3,min_rule_thickness:1.25},NBSP:"\u00A0",rfuzz:0});MathJax.Hub.Register.StartupHook("mml Jax Ready",function(){i=MathJax.ElementJax.mml;i.mbase.Augment({toHTML:function(q){q=this.HTMLcreateSpan(q);if(this.type!="mrow"){q=this.HTMLhandleSize(q)}for(var o=0,n=this.data.length;on.d){n.d=o.d}if(o.h>n.h){n.h=o.h}if(o.D!=null&&o.D>n.D){n.D=o.D}if(o.H!=null&&o.H>n.H){n.H=o.H}if(p.style.paddingLeft){n.w+=d.unEm(p.style.paddingLeft)*(p.scale||1)}if(n.w+o.lwn.rw){n.rw=n.w+o.rw}n.w+=o.w;if(p.style.paddingRight){n.w+=d.unEm(p.style.paddingRight)*(p.scale||1)}if(o.width){n.width=o.width;n.minWidth=o.minWidth}if(o.tw){n.tw=o.tw}if(o.ic){n.ic=o.ic}else{delete n.ic}if(n.exactW&&!o.exactW){n.exactW=o.exactW}},HTMLemptyBBox:function(m){m.h=m.d=m.H=m.D=m.rw=-d.BIGDIMEN;m.w=0;m.lw=d.BIGDIMEN;return m},HTMLcleanBBox:function(m){if(m.h===this.BIGDIMEN){m.h=m.d=m.H=m.D=m.w=m.rw=m.lw=0}if(m.D<=m.d){delete m.D}if(m.H<=m.h){delete m.H}},HTMLzeroBBox:function(){return{h:0,d:0,w:0,lw:0,rw:0}},HTMLcanStretch:function(n){if(this.isEmbellished()){var m=this.Core();if(m&&m!==this){return m.HTMLcanStretch(n)}}return false},HTMLstretchH:function(n,m){return this.HTMLspanElement()},HTMLstretchV:function(n,m,o){return this.HTMLspanElement()},HTMLnotEmpty:function(m){while(m){if((m.type!=="mrow"&&m.type!=="texatom")||m.data.length>1){return true}m=m.data[0]}return false},HTMLmeasureChild:function(o,m){if(this.data[o]){d.Measured(this.data[o].toHTML(m),m)}else{m.bbox=this.HTMLzeroBBox()}},HTMLboxChild:function(o,m){if(!this.data[o]){this.SetData(o,i.mrow())}return this.data[o].toHTML(m)},HTMLcreateSpan:function(m){if(this.spanID){var n=this.HTMLspanElement();if(n&&(n.parentNode===m||(n.parentNode||{}).parentNode===m)){while(n.firstChild){n.removeChild(n.firstChild)}n.bbox=this.HTMLzeroBBox();n.scale=1;n.isMultChar=n.HH=null;n.style.cssText="";return n}}if(this.href){m=d.addElement(m,"a",{href:this.href,isMathJax:true})}m=d.addElement(m,"span",{className:this.type,isMathJax:true});if(d.imgHeightBug){m.style.display="inline-block"}if(this["class"]){m.className+=" "+this["class"]}if(!this.spanID){this.spanID=d.GetID()}m.id=(this.id||"MathJax-Span-"+this.spanID)+d.idPostfix;m.bbox=this.HTMLzeroBBox();this.styles={};if(this.style){m.style.cssText=this.style;if(m.style.fontSize){this.mathsize=m.style.fontSize;m.style.fontSize=""}this.styles={border:d.getBorders(m),padding:d.getPadding(m)};if(this.styles.border){m.style.border=""}if(this.styles.padding){m.style.padding=""}}if(this.href){m.parentNode.bbox=m.bbox}this.HTMLaddAttributes(m);return m},HTMLaddAttributes:function(p){if(this.attrNames){var u=this.attrNames,q=i.nocopyAttributes,t=b.config.ignoreMMLattributes;var r=(this.type==="mstyle"?i.math.prototype.defaults:this.defaults);for(var o=0,n=u.length;o0){q+=2*B;w-=B}if(z>0){z+=2*B;m-=B}u=-q-w;if(v){u-=v.right;m-=v.bottom;t+=v.left;r+=v.right;C.h+=v.top;C.d+=v.bottom;C.w+=v.left+v.right;C.lw-=v.left;C.rw+=v.right}if(x){z+=x.top+x.bottom;q+=x.left+x.right;u-=x.right;m-=x.bottom;t+=x.left;r+=x.right;C.h+=x.top;C.d+=x.bottom;C.w+=x.left+x.right;C.lw-=x.left;C.rw+=x.right}if(r){y.style.paddingRight=d.Em(r)}var p=d.Element("span",{id:"MathJax-Color-"+this.spanID+d.idPostfix,isMathJax:true,style:{display:"inline-block",backgroundColor:A.mathbackground,width:d.Em(q),height:d.Em(z),verticalAlign:d.Em(m),marginLeft:d.Em(w),marginRight:d.Em(u)}});d.setBorders(p,v);if(C.width){p.style.width=C.width;p.style.marginRight="-"+C.width}if(d.msieInlineBlockAlignBug){p.style.position="relative";p.style.width=p.style.height=0;p.style.verticalAlign=p.style.marginLeft=p.style.marginRight="";p.style.border=p.style.padding="";if(v&&d.msieBorderWidthBug){z+=v.top+v.bottom;q+=v.left+v.right}p.style.width=d.Em(t+B);d.placeBox(d.addElement(p,"span",{noAdjust:true,isMathJax:true,style:{display:"inline-block",position:"absolute",overflow:"hidden",background:(A.mathbackground||"transparent"),width:d.Em(q),height:d.Em(z)}}),w,C.h+B);d.setBorders(p.firstChild,v)}y.parentNode.insertBefore(p,y);if(d.msieColorPositionBug){y.style.position="relative"}return p}return null},HTMLremoveColor:function(){var m=document.getElementById("MathJax-Color-"+this.spanID+d.idPostfix);if(m){m.parentNode.removeChild(m)}},HTMLhandleSpace:function(q){if(this.hasMMLspacing()){if(this.type!=="mo"){return}var o=this.getValues("scriptlevel","lspace","rspace");if(o.scriptlevel<=0||this.hasValue("lspace")||this.hasValue("rspace")){var n=this.HTMLgetMu(q);o.lspace=Math.max(0,d.length2em(o.lspace,n));o.rspace=Math.max(0,d.length2em(o.rspace,n));var m=this,p=this.Parent();while(p&&p.isEmbellished()&&p.Core()===m){m=p;p=p.Parent();q=m.HTMLspanElement()}if(o.lspace){q.style.paddingLeft=d.Em(o.lspace)}if(o.rspace){q.style.paddingRight=d.Em(o.rspace)}}}else{var r=this.texSpacing();if(r!==""){this.HTMLgetScale();r=d.length2em(r,this.scale)/(q.scale||1)*this.mscale;if(q.style.paddingLeft){r+=d.unEm(q.style.paddingLeft)}q.style.paddingLeft=d.Em(r)}}},HTMLgetScale:function(){if(this.scale){return this.scale*this.mscale}var o=1,m=this.getValues("scriptlevel","fontsize");m.mathsize=(this.isToken?this:this.Parent()).Get("mathsize");if(this.style){var n=this.HTMLspanElement();if(n.style.fontSize!=""){m.fontsize=n.style.fontSize}}if(m.fontsize&&!this.mathsize){m.mathsize=m.fontsize}if(m.scriptlevel!==0){if(m.scriptlevel>2){m.scriptlevel=2}o=Math.pow(this.Get("scriptsizemultiplier"),m.scriptlevel);m.scriptminsize=d.length2em(this.Get("scriptminsize"));if(o2){n.scriptlevel=2}m=Math.sqrt(Math.pow(n.scriptsizemultiplier,n.scriptlevel))}return m},HTMLgetVariant:function(){var m=this.getValues("mathvariant","fontfamily","fontweight","fontstyle");m.hasVariant=this.Get("mathvariant",true);if(!m.hasVariant){m.family=m.fontfamily;m.weight=m.fontweight;m.style=m.fontstyle}if(this.style){var o=this.HTMLspanElement();if(!m.family&&o.style.fontFamily){m.family=o.style.fontFamily}if(!m.weight&&o.style.fontWeight){m.weight=o.style.fontWeight}if(!m.style&&o.style.fontStyle){m.style=o.style.fontStyle}}if(m.weight&&m.weight.match(/^\d+$/)){m.weight=(parseInt(m.weight)>600?"bold":"normal")}var n=m.mathvariant;if(this.variantForm){n="-"+d.fontInUse+"-variant"}if(m.family&&!m.hasVariant){if(!m.weight&&m.mathvariant.match(/bold/)){m.weight="bold"}if(!m.style&&m.mathvariant.match(/italic/)){m.style="italic"}return{FONTS:[],fonts:[],noRemap:true,defaultFont:{family:m.family,style:m.style,weight:m.weight}}}if(m.weight==="bold"){n={normal:i.VARIANT.BOLD,italic:i.VARIANT.BOLDITALIC,fraktur:i.VARIANT.BOLDFRAKTUR,script:i.VARIANT.BOLDSCRIPT,"sans-serif":i.VARIANT.BOLDSANSSERIF,"sans-serif-italic":i.VARIANT.SANSSERIFBOLDITALIC}[n]||n}else{if(m.weight==="normal"){n={bold:i.VARIANT.normal,"bold-italic":i.VARIANT.ITALIC,"bold-fraktur":i.VARIANT.FRAKTUR,"bold-script":i.VARIANT.SCRIPT,"bold-sans-serif":i.VARIANT.SANSSERIF,"sans-serif-bold-italic":i.VARIANT.SANSSERIFITALIC}[n]||n}}if(m.style==="italic"){n={normal:i.VARIANT.ITALIC,bold:i.VARIANT.BOLDITALIC,"sans-serif":i.VARIANT.SANSSERIFITALIC,"bold-sans-serif":i.VARIANT.SANSSERIFBOLDITALIC}[n]||n}else{if(m.style==="normal"){n={italic:i.VARIANT.NORMAL,"bold-italic":i.VARIANT.BOLD,"sans-serif-italic":i.VARIANT.SANSSERIF,"sans-serif-bold-italic":i.VARIANT.BOLDSANSSERIF}[n]||n}}if(!(n in d.FONTDATA.VARIANT)){n="normal"}return d.FONTDATA.VARIANT[n]},HTMLdrawBBox:function(m){var o=m.bbox;var n=d.Element("span",{style:{"font-size":m.style.fontSize,display:"inline-block",opacity:0.25,"margin-left":d.Em(-o.w)}},[["span",{style:{height:d.Em(o.h),width:d.Em(o.w),"background-color":"red",display:"inline-block"}}],["span",{style:{height:d.Em(o.d),width:d.Em(o.w),"margin-left":d.Em(-o.w),"vertical-align":d.Em(-o.d),"background-color":"green",display:"inline-block"}}]]);if(m.nextSibling){m.parentNode.insertBefore(n,m.nextSibling)}else{m.parentNode.appendChild(n)}}},{HTMLautoload:function(){this.constructor.Augment({toHTML:i.mbase.HTMLautoloadFail});var m=d.autoloadDir+"/"+this.type+".js";b.RestartAfter(j.Require(m))},HTMLautoloadFail:function(){throw Error("HTML-CSS can't autoload '"+this.type+"'")},HTMLautoloadList:{},HTMLautoloadFile:function(m){if(i.mbase.HTMLautoloadList.hasOwnProperty(m)){throw Error("HTML-CSS can't autoload file '"+m+"'")}i.mbase.HTMLautoloadList[m]=true;var n=d.autoloadDir+"/"+m+".js";b.RestartAfter(j.Require(n))},HTMLstretchH:function(n,m){this.HTMLremoveColor();return this.toHTML(n,m)},HTMLstretchV:function(n,m,o){this.HTMLremoveColor();return this.toHTML(n,m,o)}});i.chars.Augment({toHTML:function(p,o,n,q){var t=this.data.join("").replace(/[\u2061-\u2064]/g,"");if(n){t=n(t,q)}if(o.fontInherit){var s=Math.floor(d.config.scale/d.scale+0.5)+"%";d.addElement(p,"span",{style:{"font-size":s}},[t]);if(o.bold){p.lastChild.style.fontWeight="bold"}if(o.italic){p.lastChild.style.fontStyle="italic"}p.bbox=null;var r=d.getHD(p),m=d.getW(p);p.bbox={h:r.h,d:r.d,w:m,lw:0,rw:m,exactW:true}}else{this.HTMLhandleVariant(p,o,t)}}});i.entity.Augment({toHTML:function(p,o,n,q){var t=this.toString().replace(/[\u2061-\u2064]/g,"");if(n){t=n(t,q)}if(o.fontInherit){var s=Math.floor(d.config.scale/d.scale+0.5)+"%";d.addElement(p,"span",{style:{"font-size":s}},[t]);if(o.bold){p.lastChild.style.fontWeight="bold"}if(o.italic){p.lastChild.style.fontStyle="italic"}delete p.bbox;var r=d.getHD(p),m=d.getW(p);p.bbox={h:r.h,d:r.d,w:m,lw:0,rw:m,exactW:true}}else{this.HTMLhandleVariant(p,o,t)}}});i.mi.Augment({toHTML:function(q){q=this.HTMLhandleSize(this.HTMLcreateSpan(q));q.bbox=null;var p=this.HTMLgetVariant();for(var o=0,n=this.data.length;or.w&&d.isChar(s)&&!p.noIC){r.ic=r.rw-r.w;d.createBlank(q,r.ic/this.mscale);r.w=r.rw}this.HTMLhandleSpace(q);this.HTMLhandleColor(q);this.HTMLhandleDir(q);return q}});i.mn.Augment({HTMLremapMinus:function(m){return m.replace(/^-/,"\u2212")},toHTML:function(r){r=this.HTMLhandleSize(this.HTMLcreateSpan(r));r.bbox=null;var q=this.HTMLgetVariant();var p=this.HTMLremapMinus;for(var o=0,n=this.data.length;ox.bbox.w){x.bbox.ic=x.bbox.rw-x.bbox.w;d.createBlank(x,x.bbox.ic/this.mscale);x.bbox.w=x.bbox.rw}}this.HTMLhandleSpace(x);this.HTMLhandleColor(x);this.HTMLhandleDir(x);return x},HTMLcanStretch:function(q){if(!this.Get("stretchy")){return false}var r=this.data.join("");if(r.length>1){return false}var o=this.CoreParent();if(o&&o.isa(i.munderover)&&d.isChar(this.CoreText(o.data[o.base]))){var p=o.data[o.over],n=o.data[o.under];if(p&&this===p.CoreMO()&&o.Get("accent")){r=d.FONTDATA.REMAPACCENT[r]||r}else{if(n&&this===n.CoreMO()&&o.Get("accentunder")){r=d.FONTDATA.REMAPACCENTUNDER[r]||r}}}r=d.FONTDATA.DELIMITERS[r.charCodeAt(0)];var m=(r&&r.dir===q.substr(0,1));this.forceStretch=(m&&(this.Get("minsize",true)||this.Get("maxsize",true)));return m},HTMLstretchV:function(o,p,q){this.HTMLremoveColor();var t=this.getValues("symmetric","maxsize","minsize");var r=this.HTMLspanElement(),u=this.HTMLgetMu(r),s;var n=this.HTMLgetScale(),m=d.TeX.axis_height*n;if(t.symmetric){s=2*Math.max(p-m,q+m)}else{s=p+q}t.maxsize=d.length2em(t.maxsize,u,r.bbox.h+r.bbox.d);t.minsize=d.length2em(t.minsize,u,r.bbox.h+r.bbox.d);s=Math.max(t.minsize,Math.min(t.maxsize,s));if(s!=t.minsize){s=[Math.max(s*d.TeX.delimiterfactor/1000,s-d.TeX.delimitershortfall),s]}r=this.HTMLcreateSpan(o);d.createDelimiter(r,this.data.join("").charCodeAt(0),s,n);if(t.symmetric){s=(r.bbox.h+r.bbox.d)/2+m}else{s=(r.bbox.h+r.bbox.d)*p/(p+q)}d.positionDelimiter(r,s);this.HTMLhandleSpace(r);this.HTMLhandleColor(r);return r},HTMLstretchH:function(q,m){this.HTMLremoveColor();var o=this.getValues("maxsize","minsize","mathvariant","fontweight");if((o.fontweight==="bold"||parseInt(o.fontweight)>=600)&&!this.Get("mathvariant",true)){o.mathvariant=i.VARIANT.BOLD}var p=this.HTMLspanElement(),n=this.HTMLgetMu(p),r=p.scale;o.maxsize=d.length2em(o.maxsize,n,p.bbox.w);o.minsize=d.length2em(o.minsize,n,p.bbox.w);m=Math.max(o.minsize,Math.min(o.maxsize,m));p=this.HTMLcreateSpan(q);d.createDelimiter(p,this.data.join("").charCodeAt(0),m,r,o.mathvariant);this.HTMLhandleSpace(p);this.HTMLhandleColor(p);return p}});i.mtext.Augment({toHTML:function(q){q=this.HTMLhandleSize(this.HTMLcreateSpan(q));var p=this.HTMLgetVariant();if(d.config.mtextFontInherit||this.Parent().type==="merror"){var r=this.Get("mathvariant");if(r==="monospace"){q.className+=" MJX-monospace"}else{if(r.match(/sans-serif/)){q.className+=" MJX-sans-serif"}}p={bold:p.bold,italic:p.italic,fontInherit:true}}for(var o=0,n=this.data.length;od.linebreakWidth)||this.hasNewline()},HTMLstretchH:function(o,m){this.HTMLremoveColor();var n=this.HTMLspanElement();this.data[this.core].HTMLstretchH(n,m);this.HTMLcomputeBBox(n,true);this.HTMLhandleColor(n);return n},HTMLstretchV:function(o,n,p){this.HTMLremoveColor();var m=this.HTMLspanElement();this.data[this.core].HTMLstretchV(m,n,p);this.HTMLcomputeBBox(m,true);this.HTMLhandleColor(m);return m}});i.mstyle.Augment({toHTML:function(n,m,o){n=this.HTMLcreateSpan(n);if(this.data[0]!=null){var p=this.data[0].toHTML(n);if(o!=null){this.data[0].HTMLstretchV(n,m,o)}else{if(m!=null){this.data[0].HTMLstretchH(n,m)}}n.bbox=p.bbox}this.HTMLhandleSpace(n);this.HTMLhandleColor(n);return n},HTMLstretchH:i.mbase.HTMLstretchH,HTMLstretchV:i.mbase.HTMLstretchV});i.mfrac.Augment({toHTML:function(F){F=this.HTMLcreateSpan(F);var o=d.createStack(F);var w=d.createBox(o),s=d.createBox(o);d.MeasureSpans([this.HTMLboxChild(0,w),this.HTMLboxChild(1,s)]);var m=this.getValues("displaystyle","linethickness","numalign","denomalign","bevelled");var K=this.HTMLgetScale(),E=m.displaystyle;var J=d.TeX.axis_height*K;if(m.bevelled){var I=(E?0.4:0.15);var x=Math.max(w.bbox.h+w.bbox.d,s.bbox.h+s.bbox.d)+2*I;var G=d.createBox(o);d.createDelimiter(G,47,x);d.placeBox(w,0,(w.bbox.d-w.bbox.h)/2+J+I);d.placeBox(G,w.bbox.w-I/2,(G.bbox.d-G.bbox.h)/2+J);d.placeBox(s,w.bbox.w+G.bbox.w-I,(s.bbox.d-s.bbox.h)/2+J-I)}else{var n=Math.max(w.bbox.w,s.bbox.w);var A=d.thickness2em(m.linethickness,this.scale)*this.mscale,C,B,z,y;var D=d.TeX.min_rule_thickness/this.em;if(E){z=d.TeX.num1;y=d.TeX.denom1}else{z=(A===0?d.TeX.num3:d.TeX.num2);y=d.TeX.denom2}z*=K;y*=K;if(A===0){C=Math.max((E?7:3)*d.TeX.rule_thickness,2*D);B=(z-w.bbox.d)-(s.bbox.h-y);if(BA){n=((v.bbox.h+v.bbox.d)-(A-C))/2}var D=d.FONTDATA.DELIMITERS[d.FONTDATA.RULECHAR];if(!D||s<(D.HW[0]||[0])[0]*u||u<0.75){d.createRule(w,0,C,s);w.bbox.h=-C}else{d.createDelimiter(w,d.FONTDATA.RULECHAR,s,u)}A=m.bbox.h+n+C;n=A*d.rfuzz;if(v.isMultiChar){n=d.rfuzz}y=this.HTMLaddRoot(B,v,y,v.bbox.h+v.bbox.d-A,u);d.placeBox(v,y,A-v.bbox.h);d.placeBox(w,y+v.bbox.w,A-w.bbox.h+n);d.placeBox(r,y+v.bbox.w,0);this.HTMLhandleSpace(z);this.HTMLhandleColor(z);return z},HTMLaddRoot:function(o,n,m,q,p){return m}});i.mroot.Augment({toHTML:i.msqrt.prototype.toHTML,HTMLaddRoot:function(u,n,s,q,m){var o=d.createBox(u);if(this.data[1]){var r=this.data[1].toHTML(o);r.style.paddingRight=r.style.paddingLeft="";d.Measured(r,o)}else{o.bbox=this.HTMLzeroBBox()}var p=this.HTMLrootHeight(n.bbox.h+n.bbox.d,m,o)-q;var t=Math.min(o.bbox.w,o.bbox.rw);s=Math.max(t,n.offset);d.placeBox(o,s-t,p);return s-n.offset},HTMLrootHeight:function(o,n,m){return 0.45*(o-0.9*n)+0.6*n+Math.max(0,m.bbox.d-0.075)}});i.mfenced.Augment({toHTML:function(q){q=this.HTMLcreateSpan(q);if(this.data.open){this.data.open.toHTML(q)}if(this.data[0]!=null){this.data[0].toHTML(q)}for(var o=1,n=this.data.length;oL){L=s[N].bbox.w}if(!O[N]&&L>o){o=L}}}if(G==null&&I!=null){o=I}else{if(o==-d.BIGDIMEN){o=L}}for(N=L=0,J=this.data.length;NL){L=z.bbox.w}}}var F=d.TeX.rule_thickness*this.mscale,H=d.FONTDATA.TeX_factor;var w,u,B,A,v,E,K,P=0;q=s[this.base]||{bbox:this.HTMLzeroBBox()};if(q.bbox.ic){P=1.3*q.bbox.ic+0.05}for(N=0,J=this.data.length;NL){M.bbox.skew+=(L-z.bbox.w-w)/2}}}else{B=d.TeX.big_op_spacing1*Q*H;A=d.TeX.big_op_spacing3*Q*H;K=Math.max(B,A-Math.max(0,z.bbox.d))}K=Math.max(K,1.5/this.em);w+=P/2;u=q.bbox.h+z.bbox.d+K;z.bbox.h+=v}else{if(N==this.under){if(C){K=3*F*Q*H;v=0}else{B=d.TeX.big_op_spacing2*Q*H;A=d.TeX.big_op_spacing4*Q*H;K=Math.max(B,A-z.bbox.h)}K=Math.max(K,1.5/this.em);w-=P/2;u=-(q.bbox.d+z.bbox.h+K);z.bbox.d+=v}}d.placeBox(z,w,u)}}this.HTMLhandleSpace(M);this.HTMLhandleColor(M);return M},HTMLstretchH:i.mbase.HTMLstretchH,HTMLstretchV:i.mbase.HTMLstretchV});i.msubsup.Augment({toHTML:function(M,K,F){M=this.HTMLcreateSpan(M);var P=this.HTMLgetScale(),J=this.HTMLgetMu(M);var y=d.createStack(M),n,w=[];var x=d.createBox(y);if(this.data[this.base]){w.push(this.data[this.base].toHTML(x));if(F!=null){this.data[this.base].HTMLstretchV(x,K,F)}else{if(K!=null){this.data[this.base].HTMLstretchH(x,K)}}}else{x.bbox=this.HTMLzeroBBox()}var N=d.TeX.x_height*P,E=d.TeX.scriptspace*P*0.75;var m,z;if(this.HTMLnotEmpty(this.data[this.sup])){m=d.createBox(y);w.push(this.data[this.sup].toHTML(m))}if(this.HTMLnotEmpty(this.data[this.sub])){z=d.createBox(y);w.push(this.data[this.sub].toHTML(z))}d.MeasureSpans(w);if(m){m.bbox.w+=E;m.bbox.rw=Math.max(m.bbox.w,m.bbox.rw)}if(z){z.bbox.w+=E;z.bbox.rw=Math.max(z.bbox.w,z.bbox.rw)}d.placeBox(x,0,0);var o=P;if(m){o=this.data[this.sup].HTMLgetScale()}else{if(z){o=this.data[this.sub].HTMLgetScale()}}var H=d.TeX.sup_drop*o,G=d.TeX.sub_drop*o;var B=x.bbox.h-H,A=x.bbox.d+G,O=0,I;if(x.bbox.ic){x.bbox.w-=x.bbox.ic;O=1.3*x.bbox.ic+0.05}if(this.data[this.base]&&K==null&&F==null&&(this.data[this.base].type==="mi"||this.data[this.base].type==="mo")){if(d.isChar(this.data[this.base].data.join(""))&&w[0].scale===1&&!this.data[this.base].Get("largeop")){B=A=0}}var L=this.getValues("subscriptshift","superscriptshift");L.subscriptshift=(L.subscriptshift===""?0:d.length2em(L.subscriptshift,J));L.superscriptshift=(L.superscriptshift===""?0:d.length2em(L.superscriptshift,J));if(!m){if(z){A=Math.max(A,d.TeX.sub1*P,z.bbox.h-(4/5)*N,L.subscriptshift);d.placeBox(z,x.bbox.w,-A,z.bbox)}}else{if(!z){n=this.getValues("displaystyle","texprimestyle");I=d.TeX[(n.displaystyle?"sup1":(n.texprimestyle?"sup3":"sup2"))];B=Math.max(B,I*P,m.bbox.d+(1/4)*N,L.superscriptshift);d.placeBox(m,x.bbox.w+O,B,m.bbox)}else{A=Math.max(A,d.TeX.sub2*P);var C=d.TeX.rule_thickness*P;if((B-m.bbox.d)-(z.bbox.h-A)<3*C){A=3*C-B+m.bbox.d+z.bbox.h;H=(4/5)*N-(B-m.bbox.d);if(H>0){B+=H;A-=H}}d.placeBox(m,x.bbox.w+O,Math.max(B,L.superscriptshift));d.placeBox(z,x.bbox.w,-Math.max(A,L.subscriptshift))}}this.HTMLhandleSpace(M);this.HTMLhandleColor(M);return M},HTMLstretchH:i.mbase.HTMLstretchH,HTMLstretchV:i.mbase.HTMLstretchV});i.mmultiscripts.Augment({toHTML:i.mbase.HTMLautoload});i.mtable.Augment({toHTML:i.mbase.HTMLautoload});i["annotation-xml"].Augment({toHTML:i.mbase.HTMLautoload});i.annotation.Augment({toHTML:function(m){return this.HTMLcreateSpan(m)}});i.math.Augment({toHTML:function(E,B,t){var u,w,x,r,m=E;if(!t||t===d.PHASE.I){var C=d.addElement(E,"nobr",{isMathJax:true});E=this.HTMLcreateSpan(C);var n=this.Get("alttext");if(n&&!E.getAttribute("aria-label")){E.setAttribute("aria-label",n)}u=d.createStack(E);w=d.createBox(u);u.style.fontSize=C.parentNode.style.fontSize;C.parentNode.style.fontSize="";if(this.data[0]!=null){i.mbase.prototype.displayAlign=b.config.displayAlign;i.mbase.prototype.displayIndent=b.config.displayIndent;if(String(b.config.displayIndent).match(/^0($|[a-z%])/i)){i.mbase.prototype.displayIndent="0"}x=this.data[0].toHTML(w);x.bbox.exactW=false}}else{E=E.firstChild.firstChild;if(this.href){E=E.firstChild}u=E.firstChild;if(u.style.position!=="relative"){u=u.nextSibling}w=u.firstChild;x=w.firstChild}r=((!t||t===d.PHASE.II)?d.Measured(x,w):x);if(!t||t===d.PHASE.III){d.placeBox(w,0,0);var q=r.bbox.w;q=Math.abs(q)<0.006?0:Math.max(0,Math.round(q*this.em)+0.25);E.style.width=d.EmRounded(q/d.outerEm);E.style.display="inline-block";var A=1/d.em,G=d.em/d.outerEm;d.em/=G;E.bbox.h*=G;E.bbox.d*=G;E.bbox.w*=G;E.bbox.lw*=G;E.bbox.rw*=G;if(E.bbox.H){E.bbox.H*=G}if(E.bbox.D){E.bbox.D*=G}if(r&&r.bbox.width!=null){E.style.minWidth=(r.bbox.minWidth||E.style.width);E.style.width=r.bbox.width;w.style.width=u.style.width="100%";m.className+=" MathJax_FullWidth"}var D=this.HTMLhandleColor(E);if(r){d.createRule(E,(r.bbox.h+A)*G,(r.bbox.d+A)*G,0)}if(!this.isMultiline&&this.Get("display")==="block"&&E.bbox.width==null){var o=this.getValues("indentalignfirst","indentshiftfirst","indentalign","indentshift");if(o.indentalignfirst!==i.INDENTALIGN.INDENTALIGN){o.indentalign=o.indentalignfirst}if(o.indentalign===i.INDENTALIGN.AUTO){o.indentalign=this.displayAlign}if(o.indentshiftfirst!==i.INDENTSHIFT.INDENTSHIFT){o.indentshift=o.indentshiftfirst}if(o.indentshift==="auto"){o.indentshift="0"}var F=d.length2em(o.indentshift,1,d.scale*d.cwidth);if(this.displayIndent!=="0"){var y=d.length2em(this.displayIndent,1,d.scale*d.cwidth);F+=(o.indentalign===i.INDENTALIGN.RIGHT?-y:y)}m.style.textAlign=B.style.textAlign=o.indentalign;if(F){b.Insert(E.style,({left:{marginLeft:d.Em(F)},right:{marginRight:d.Em(-F)},center:{marginLeft:d.Em(F),marginRight:d.Em(-F)}})[o.indentalign]);if(D){var v=parseFloat(D.style.marginLeft||"0")+F,s=parseFloat(D.style.marginRight||"0")-F;D.style.marginLeft=d.Em(v);D.style.marginRight=d.Em(s+(o.indentalign==="right"?E.bbox.w+F-E.bbox.w:0));if(d.msieColorBug&&o.indentalign==="right"){if(parseFloat(D.style.marginLeft)>0){var z=MathJax.HTML.addElement(D.parentNode,"span");z.style.marginLeft=d.Em(s+Math.min(0,E.bbox.w+F));D.nextSibling.style.marginRight="0em"}D.nextSibling.style.marginLeft="0em";D.style.marginRight=D.style.marginLeft="0em"}}}}}return E},HTMLspanElement:i.mbase.prototype.HTMLspanElement});i.TeXAtom.Augment({toHTML:function(q,o,s){q=this.HTMLcreateSpan(q);if(this.data[0]!=null){if(this.texClass===i.TEXCLASS.VCENTER){var m=d.createStack(q);var r=d.createBox(m);var t=this.data[0].toHTML(r);if(s!=null){d.Remeasured(this.data[0].HTMLstretchV(r,o,s),r)}else{if(o!=null){d.Remeasured(this.data[0].HTMLstretchH(r,o),r)}else{d.Measured(t,r)}}var n=d.TeX.axis_height*this.HTMLgetScale();d.placeBox(r,0,n-(r.bbox.h+r.bbox.d)/2+r.bbox.d)}else{var p=this.data[0].toHTML(q,o,s);if(s!=null){p=this.data[0].HTMLstretchV(r,o,s)}else{if(o!=null){p=this.data[0].HTMLstretchH(r,o)}}q.bbox=p.bbox}}this.HTMLhandleSpace(q);this.HTMLhandleColor(q);return q},HTMLstretchH:i.mbase.HTMLstretchH,HTMLstretchV:i.mbase.HTMLstretchV});b.Register.StartupHook("onLoad",function(){setTimeout(MathJax.Callback(["loadComplete",d,"jax.js"]),0)})});b.Register.StartupHook("End Config",function(){b.Browser.Select({MSIE:function(m){var q=(document.documentMode||0);var p=m.versionAtLeast("7.0");var o=m.versionAtLeast("8.0")&&q>7;var n=(document.compatMode==="BackCompat");if(q<9){d.config.styles[".MathJax .MathJax_HitBox"]["background-color"]="white";d.config.styles[".MathJax .MathJax_HitBox"].opacity=0;d.config.styles[".MathJax .MathJax_HitBox"].filter="alpha(opacity=0)"}d.Augment({PaddingWidthBug:true,msieAccentBug:true,msieColorBug:(q<8),msieColorPositionBug:true,msieRelativeWidthBug:n,msieDisappearingBug:(q>=8),msieMarginScaleBug:(q<8),msiePaddingWidthBug:true,msieBorderWidthBug:n,msieFrameSizeBug:(q<=8),msieInlineBlockAlignBug:(!o||n),msiePlaceBoxBug:(o&&!n),msieClipRectBug:!o,msieNegativeSpaceBug:n,msieRuleBug:(q<7),cloneNodeBug:(o&&m.version==="8.0"),msieItalicWidthBug:true,initialSkipBug:(q<8),msieNegativeBBoxBug:(q>=8),msieIE6:!p,msieItalicWidthBug:true,FontFaceBug:(q<9),msieFontCSSBug:m.isIE9,allowWebFonts:(q>=9?"woff":"eot")})},Firefox:function(n){var o=false;if(n.versionAtLeast("3.5")){var m=String(document.location).replace(/[^\/]*$/,"");if(document.location.protocol!=="file:"||b.config.root.match(/^https?:\/\//)||(b.config.root+"/").substr(0,m.length)===m){o="otf"}}d.Augment({ffVerticalAlignBug:!n.versionAtLeast("20.0"),AccentBug:true,allowWebFonts:o,ffFontOptimizationBug:true})},Safari:function(r){var p=r.versionAtLeast("3.0");var o=r.versionAtLeast("3.1");var m=navigator.appVersion.match(/ Safari\/\d/)&&navigator.appVersion.match(/ Version\/\d/)&&navigator.vendor.match(/Apple/);var n=(navigator.appVersion.match(/ Android (\d+)\.(\d+)/));var s=(o&&r.isMobile&&((navigator.platform.match(/iPad|iPod|iPhone/)&&!r.versionAtLeast("5.0"))||(n!=null&&(n[1]<2||(n[1]==2&&n[2]<2)))));d.Augment({config:{styles:{".MathJax img, .MathJax nobr, .MathJax a":{"max-width":"5000em","max-height":"5000em"}}},Em:((r.webkit||0)>=538?d.EmRounded:d.Em),rfuzz:0.011,AccentBug:true,AdjustSurd:true,negativeBBoxes:true,safariNegativeSpaceBug:true,safariVerticalAlignBug:!o,safariTextNodeBug:!p,forceReflow:true,FontFaceBug:true,combiningCharBug:parseInt(r.webkit)>=602,allowWebFonts:(o&&!s?"otf":false)});if(m){d.Augment({webFontDefault:(r.isMobile?"sans-serif":"serif")})}if(r.isPC){d.Augment({adjustAvailableFonts:d.removeSTIXfonts,checkWebFontsTwice:true})}if(s){var q=b.config["HTML-CSS"];if(q){q.availableFonts=[];q.preferredFont=null}else{b.config["HTML-CSS"]={availableFonts:[],preferredFont:null}}}},Chrome:function(m){d.Augment({Em:d.EmRounded,cloneNodeBug:true,rfuzz:-0.02,AccentBug:true,AdjustSurd:true,FontFaceBug:m.versionAtLeast("32.0"),negativeBBoxes:true,safariNegativeSpaceBug:true,safariWebFontSerif:[""],forceReflow:true,allowWebFonts:(m.versionAtLeast("4.0")?"otf":"svg")})},Opera:function(m){m.isMini=(navigator.appVersion.match("Opera Mini")!=null);d.config.styles[".MathJax .merror"]["vertical-align"]=null;d.config.styles[".MathJax span"]["z-index"]=0;d.Augment({operaHeightBug:true,operaVerticalAlignBug:true,operaFontSizeBug:m.versionAtLeast("10.61"),initialSkipBug:true,FontFaceBug:true,PaddingWidthBug:true,allowWebFonts:(m.versionAtLeast("10.0")&&!m.isMini?"otf":false),adjustAvailableFonts:d.removeSTIXfonts})},Konqueror:function(m){d.Augment({konquerorVerticalAlignBug:true})}})});MathJax.Hub.Register.StartupHook("End Cookie",function(){if(b.config.menuSettings.zoom!=="None"){j.Require("[MathJax]/extensions/MathZoom.js")}})})(MathJax.Ajax,MathJax.Hub,MathJax.OutputJax["HTML-CSS"]); diff --git a/doc/hamnet70.adoc b/doc/hamnet70.adoc index 23631c4..21189d3 100644 --- a/doc/hamnet70.adoc +++ b/doc/hamnet70.adoc @@ -3,6 +3,7 @@ Thomas Kolb DL5TKL 0.1, 2024-04-25 :toc: :stem: +:webfonts!: // SPDX-License-Identifier: CC-BY-SA-4.0 // List of contributors is at the end of the document. -- 2.44.2 From c61a7a7cf75f8315f0b1a1dd8b3519a5d8f82383 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Fri, 30 Aug 2024 23:46:47 +0200 Subject: [PATCH 11/14] doc: start documenting the Layer 2 packets (WIP) --- doc/hamnet70.adoc | 153 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-) diff --git a/doc/hamnet70.adoc b/doc/hamnet70.adoc index 21189d3..031bd3f 100644 --- a/doc/hamnet70.adoc +++ b/doc/hamnet70.adoc @@ -254,6 +254,157 @@ They therefore do not have a _TX sequence number_; this field is reserved and mu The _RX sequence number_ and all other header fields are used as usual. +==== Connection Management + +Connection Management Frames control the Layer 2 connection between a client and the digipeater. +They are especially important for connect and disconnect procedures. + +Connection Management Frames have at least one byte in the data field: the type of the management packet. +The following types are defined: + +[cols="1,2,5", options="header"] +.Connection Management Types +|=== +|Type Indicator +|Sent by +|Description + +|`0x00` +|Digipeater +|Beacon + +|`0x01` +|Client +|Connection Request + +|`0x02` +|Digipeater +|Connection Parameters + +|`0x03` +|Digipeater +|Connection Reset + +|`0x04` +|Digipeater +|Disconnect Request + +|`0x05` +|Client +|Disconnect +|=== + +===== Beacons + +Beacons are sent periodically by the digipeater to show it’s presence to potential new clients. + +The layer 2 header is filled as follows: + +- Message Type: `001` (Connection Management) +- TX Request: `1` +- Source Address: the digipeater’s HAM-64 address +- Destination Address: the HAM-64 broadcast address +- TX sequence number: reserved, always 0 +- RX sequence number: reserved, always 0 + +The message contains exactly 1 data byte: `0x00` to indicate that this is a Beacon packet. + +A Beacon packet shall always be sent as the last or only packet in a burst. +After a Beacon is sent by the digipeater it listens for a short time for Connection Requests from new clients. +A new client that intends to connect shall send the Connection Request as soon as possible after the beacon transmission ends. + +===== Connection Request + +A Connection Request is sent by a client that intends to connect to a digipeater. + +The layer 2 header is filled as follows: + +- Message Type: `001` (Connection Management) +- TX Request: `1` +- Source Address: the new client’s HAM-64 address +- Destination Address: the digipeater’s HAM-64 address +- TX sequence number: reserved, always 0 +- RX sequence number: reserved, always 0 + +The message contains exactly 1 data byte: `0x01` to indicate that this is a Connection Request packet. + +A Connection Request is always a response to a Beacon packet. +It shall be the only packet in a burst. + +When the digipeater receives a Connection Request it has two options for a response: + +. Accept the connection by sending a Connection Parameters packet to the client in the next burst. +. Reject the connection by sending a Connection Reset packet to the client in the next burst. + +===== Connection Parameters + +The Connection Parameters packet has two functions: it indicates to a client that its Connection Request was accepted and tells it how to configure its network stack. +This is the first packet in the regular Go-back-N data flow. + +The layer 2 header is filled as follows: + +- Message Type: `001` (Connection Management) +- TX Request: `1` +- Source Address: the digipeater’s HAM-64 address +- Destination Address: the new client’s HAM-64 address +- TX sequence number: 0 (the first packet) +- RX sequence number: 0 (no packets received yet) + +The type indicator is `0x02`. + +After the type indicator follow one or more configuration blocks. +Each block consists of three data fields: + +. Configuration Type: 1 byte +. Configuration Data Length: 1 byte +. Configuration data: variable number of bytes as indicated by Configuration Data Length + +The following Configuration Types are defined: + +[cols="1,1,5", options="header"] +.Configuration Types +|=== +|Type Indicator +|Length +|Description + +|`0x00` +|16 Byte +|IPv6 address + +|`0x01` +|16 Byte +|IPv6 gateway + +|`0x02` +|16 Byte +|IPv6 DNS server (may appear multiple times) + +|`0x03` - `0x07` +|- +|_reserved_ + +|`0x08` +|4 Byte +|IPv4 address + +|`0x09` +|4 Byte +|IPv4 gateway + +|`0x0A` +|4 Byte +|IPv4 DNS server (may appear multiple times) + +|`0x0B` - `0xFF` +|- +|_reserved_ + +|=== + +If the client receives an unknown Configuration Type the corresponding block shall be skipped. +The remaining blocks shall be parsed as usual. + === Ideas To be defined: @@ -290,7 +441,7 @@ msc { digi box client [label="Connection established"]; --- [label="Alternative 2: Connection is rejected"]; - digi -> client [label="Connection Refusal"]; + digi -> client [label="Connection Reset"]; } .... -- 2.44.2 From eb802629a1e3fc22d68fda8b68ef2d665d48004d Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sat, 7 Sep 2024 00:48:11 +0200 Subject: [PATCH 12/14] layer1/rx: calculate EVM during header and data reception --- impl/src/layer1/rx.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/impl/src/layer1/rx.c b/impl/src/layer1/rx.c index bc1e71d..5ce770b 100644 --- a/impl/src/layer1/rx.c +++ b/impl/src/layer1/rx.c @@ -265,6 +265,8 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t static float complex samples2dump_s[8192]; static size_t nsamples2dump_s = 0; + static float evm; + // cache configuration flags bool is_central_node = options_is_flag_set(OPTIONS_FLAG_IS_CENTRAL_NODE); @@ -344,6 +346,7 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t // go on with decoding the header rx->state = RX_STATE_HEADER; symbol_counter = 0; + evm = 0.0f; } break; @@ -361,6 +364,7 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t LOG(LVL_DUMP, "@%zu: Sym: %d; Phase error: %f %s", rx->sample_index, sym_demod, phase_error, (fabs(phase_error) > 0.3) ? "!!!" : ""); + evm += modem_get_demodulator_evm(rx->hdr_demod); update_nco_pll(rx->carrier_fine_nco, phase_error, PLL_BW_HEADER); @@ -378,7 +382,7 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t // store debug info about the header rx->packet_debug_info.noise_floor_level = rx->noise_floor_level; rx->packet_debug_info.header_rssi = agc_crcf_get_rssi(rx->agc); - rx->packet_debug_info.header_evm = -1e38f; // FIXME + rx->packet_debug_info.header_evm = evm / symbol_counter; ERR_CHECK_LIQUID(liquid_repack_bytes( symbols_int, modem_get_bps(rx->hdr_demod), rx->hdr_len_symbols, @@ -433,6 +437,7 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t rx->state = RX_STATE_DATA; symbol_counter = 0; + evm = 0.0f; } break; @@ -453,6 +458,8 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t float phase_error = modem_get_demodulator_phase_error(rx->payload_demod); //LOG(LVL_DEBUG, "@%zu: Sym: %d; Phase error: %f", rx->sample_index, sym_demod, phase_error); + evm += modem_get_demodulator_evm(rx->payload_demod); + update_nco_pll(rx->carrier_fine_nco, phase_error, PLL_BW_DATA); symbols_int[symbol_counter] = sym_demod; @@ -471,7 +478,7 @@ result_t layer1_rx_process(layer1_rx_t *rx, const float complex *samples, size_t // store debug info about the data rx->packet_debug_info.data_rssi = agc_crcf_get_rssi(rx->agc); - rx->packet_debug_info.data_evm = -1e38f; // FIXME + rx->packet_debug_info.data_evm = evm / symbol_counter; // deinterleave the message symbols uint8_t symbols_int_deinterleaved[rx->payload_len_symbols]; -- 2.44.2 From 706a1eb43744344046761966100d3d6553c30971 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Thu, 12 Sep 2024 23:49:57 +0200 Subject: [PATCH 13/14] freq_est: make ramp-up delta phase check more strict This should help with occasional jumps in the estimated carrier frequency on receivers running frequency tracking. --- impl/src/layer1/freq_est.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/impl/src/layer1/freq_est.c b/impl/src/layer1/freq_est.c index 0bc402d..c6732e1 100644 --- a/impl/src/layer1/freq_est.c +++ b/impl/src/layer1/freq_est.c @@ -143,7 +143,7 @@ float freq_est_in_rampup(const float complex *recv, size_t n, float *final_phase // rotate every second symbol by 180°. As a plausibility check that we are // in fact inside the ramp-up, we verify that there is no phase rotation by - // more than 90° between the symbols. + // more than 60° between the symbols. for(size_t i = 0; i < n; i++) { if((i % 2) == 0) { rotated[i] = recv[i]; @@ -154,7 +154,7 @@ float freq_est_in_rampup(const float complex *recv, size_t n, float *final_phase float phase = cargf(rotated[i]); if(i > 0) { float phase_delta = phase - prev_phase; - if(fabsf(phase_delta) > 3.14159f/2.0f) { + if(fabsf(phase_delta) > 3.14159f/3.0f) { // abort because we either have the wrong signal or too much noise. if(final_phase) { *final_phase = 0.0f; -- 2.44.2 From 4dc2c60c8b5093971b8cd18fdbf98dcc8fc70e11 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Thu, 12 Sep 2024 23:52:33 +0200 Subject: [PATCH 14/14] rx: reduce squelch threshold from 10 to 6 dB During tests it was determined that this is much more reliable. The theory is that the first packet of a burst was frequently not detected because the squelch opened too late if the channel was very noisy. Unfortunately, the squelch now opens very often even if no signal is present. This will be improved in the future. --- impl/src/layer1/rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/impl/src/layer1/rx.c b/impl/src/layer1/rx.c index 5ce770b..9118987 100644 --- a/impl/src/layer1/rx.c +++ b/impl/src/layer1/rx.c @@ -206,7 +206,7 @@ static enum squelch_state_t update_and_check_squelch(layer1_rx_t *rx, unsigned i // Adjustment value is in dB. rx->noise_floor_level += 1e-4f; } - agc_crcf_squelch_set_threshold(rx->agc, rx->noise_floor_level + 10.0f); // in dB + agc_crcf_squelch_set_threshold(rx->agc, rx->noise_floor_level + 6.0f); // in dB } switch(agc_crcf_squelch_get_status(rx->agc)) { -- 2.44.2